结对项目
写在最开始:
在这里我想特别感谢我的搭档,王玉同学,如果没有同伴,我估计已经进精神病院了。
首先不得不说,两个搞前端的菜鸡结对绝对是个错误。当我们大眼瞪小眼地看着报错信息的时候,我感到了绝望。后端知识的匮乏导致时间不协调,前端都没做好。
而写着博客的我,现在依然是崩溃的,短短两周,学了GUI,学了数据库,但是依然不够,毕竟智商这东西,我发现它是学不来的。
这次作业让我感觉到清明节应有的悲伤。在此祭奠我逝去的头发和脑细胞。
一、 代码地址
1、 coding.net地址:https://git.coding.net/sikiqk/teamworkassis.git
2、 url测试地址:http://localhost:8080/index.jsp
二、psp表格
PSP2.1 |
任务内容 |
估计需要完成的时间 (张慧)(min) |
估计需要完成的时间 (王玉)(min) |
Planning |
计划 |
30 |
30 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
30 |
30 |
Development |
开发 |
300 |
300 |
· Analysis |
· 需求分析 (包括学习新技术) |
120 |
120 |
· Design Spec |
· 生成设计文档 |
20 |
20 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 |
0 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
45 |
45 |
· Design |
· 具体设计 |
90 |
90 |
· Coding |
· 具体编码 |
360 |
360 |
· Code Review |
· 代码复审 |
60 |
60 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
240 |
240 |
Reporting |
报告 |
60 |
60 |
· Test Report |
· 测试报告 |
0 |
0 |
· Size Measurement |
· 计算工作量 |
24*2 |
24*4 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
120 |
120 |
三、Information Hiding, Interface Design, Loose Coupling
对于面向对象的程序设计而言,信息隐藏是一种重要的软件开发手段,它与对象的封装(encapsulation)与模块化(modularity)密切相关。在我看来,信息隐藏使得一个类把复杂的、敏感的、一旦被外界捕获可能会引起不良后果的内容封装在自身内部,这个类以外的代码得不到此类信息(通过反射等手段可能对得到),以提高程序的安全性与健壮性。
interface design与loose coupling
我个人感觉,这两个概念是相辅相成的,后者是前者的目的,前者是后者的实现手段。 面向接口编程是软件工程领域常用的设计手段,这对于一个团队而言,也是非常重要的,在做一个团队项目时,有人可能负责领域模型M(Model),有人负责前台V(View),有人负责业务逻辑C(Controller),在这种MVC的设计模式驱动下,我们首先想到的就是:定义一套公共的接口,方便各个模块之间的通讯。面向接口的程序设计思想是一种有效的手段。比如一个做业务逻辑的Team,他们并不清楚业务数据的CURD实现,但他们只要通过面向于数据组提供的一整套接口进行编程即可,同时,数据组的开发可以并行进行,这样,不需要等待一个模块的完成就可以预先“使用”这个模块,极大的提高了团队的效率
而对于loose coupling(松耦合),它现在几乎已经与interface design等价了,很多项目中,loose coupling就是interface design,虽然向Spring等模块提供了IOC(Inverse of Control)等更高端的方法,但这些还是基于面向接口编程的。
资料链接:https://www.cnblogs.com/magiccode1023/archive/2012/10/23/2736257.html
4)计算模块接口的设计与实现过程。
session变量有:fanwei(出题范围)、tishu(题目数)。
index.jsp从用户获得fanwei、tishu和题目类型,传到xuanze.jsp进行处理,xuanze.jsp将fanwei和tishu设为全局变量,并根据题目类型重定向到ZSAssis.jsp、YSCFAssis.jsp或KHAssis.jsp,三个页面接收题目数和出题范围输出题目并用eval()函数进行计算,并记录页面时间,将正确结果和用户答案储存在数据库中并分别比较,得到正确题目数并设为全局变量,在result.jsp中反馈给用户正确题目数和答题时间。
(1) 介绍求最大公约数与最小公倍数的方法的博客连接:https://blog.csdn.net/tingzhiyi/article/details/52058710
(2) 介绍检测输入的重复数据博客链接:
https://blog.csdn.net/carolcoral/article/details/78745159
6)计算模块部分单元测试展示。展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。只需要测试命令行部分,且该部分覆盖率到90%以上,否则单元测试部分视作无效。(6')
单元测试与覆盖率https://www.cnblogs.com/xiongmaopanda/p/3314660.html
IntelliJ IDEA单元测试入门https://blog.csdn.net/u011138533/article/details/52165577
单元测试流程(使用IntelliJ IDEA)
1、 创建新的项目
2、 创建一个新的类用于测试()
3、 创建测试源根目录
4、 创建一个测试类(IntelliJ IDEA提供了一个快捷操作Cmd + Shift + T作为类和测试之间的导航。同时允许用户在那里创建一个测试类。)
选择JUnit 4作为单元测试库。IntelliJ IDEA将提供到件这个库添加到模块中。
5、 运行测试(可以通过右键菜单在这个类上运行'MyClassTest'来进行测试)
6、 收集覆盖(运行覆盖收集覆盖率,需要通过Run → Run 'MyClassTest' with Coverage或工具栏上的选项运行特定模式的测试。)
7)计算模块部分异常处理说明。在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。(5')
8)界面模块的详细设计过程。在博客中详细介绍界面模块是如何设计的,并写一些必要的代码说明解释实现过程。(5')
界面展示
Login界面
通过连接数据库,验证用户登陆。数据库名:sizeyunsuan
Register界面
注册信息储存于数据库内。
四则运算生成器
输入题目数选择数值范围与题目类型,session成全局变量,有利于后面的开发。选择了题目的类型,分别进入不同的界面。我们分三个界面输出不同的运算类型。
答题界面
将题目和答案储存于数据库中,再进行对比得到正确的题目数,用js的setInterval函数编写计时器,记录用户从页面打开开始到提交题目所用的时间即为答题时间。
成绩界面
从全局变量session中获得答对题目个数和答题时间,反馈给用户。
九、界面模块与计算模块的对接。详细地描述UI模块的设计与两个模块的对接,并在博客中截图实现的功能。(4')
在前端页面中嵌入后端代码,没有模块化,没有对接。
十、结对照片
十一、说明结对的优缺点
优点
(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
(2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
(3)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
(4)结对编程的过程也是一个互相督促的过程,每个人的一举一动都在别人的视线之内,所有的想法都要受到对方的评价。由于这种督促的压力,使得程序员更认真地工作。结对编程“迫使”程序员必须频繁地交流,而且要提高自己的技术能力以免被别人小看。
(5)结对编程让两个人所写的代码不断地处于“复审”的过程。复审是不断地审核,提高设计和编码质量的过程,这样能够及时地发现问题和解决问题,避免把问题拖到后面的阶段。
(6)结对编程中驾驶员和领航员的互换可以让程序员轮流工作,从而避免出现过度思考而导致观察力和判断力下降。
缺点
(1)结对编程是一个相互学习、相互磨合的渐进过程。开发人员需要时间来适应这种新的开发模式。刚开始的结对编程很可能不比单独开发效率更高。
(2)如果团队的人员要在多个项目中工作,不能充分保证足够的结对编程时间,那么成员要经常处于等待的状态,反而影响效率。
(3)当两个人的技术水平或经验不均衡的时候,那么水平较弱或缺乏经验的一方往往会成为旁观者,或者需要对方给予一定的讲解,这无疑拖延了编程的进度。
(4)当其中一人希望独自思考一段时间时,有可能会被认为是一种不合作的表现。
评价
姓名 |
张慧 |
王玉 |
优点 |
学习努力刻苦呕心沥血 |
乐观 |
在崩溃中容易找到希望 |
容易沟通交流,容易合作 |
|
鸡汤本人,在队友几欲想放弃的崩溃边缘用鸡汤解救队友,告诉她,分不重要,学到东西最重要。 |
态度积极热爱学习 |
|
缺点 |
容易崩溃 |
编程经验不足 |
12)在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间。(1')
PSP2.1 |
任务内容 |
实际需要完成的时间 (张慧)(min) |
实际需要完成的时间 (王玉)(min) |
Planning |
计划 |
20 |
20 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
0 |
0 |
Development |
开发 |
1200 |
1200 |
· Analysis |
· 需求分析 (包括学习新技术) |
360 |
660 |
· Design Spec |
· 生成设计文档 |
60 |
60 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 |
0 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
90 |
90 |
· Design |
· 具体设计 |
360 |
360 |
· Coding |
· 具体编码 |
1200 |
1200 |
· Code Review |
· 代码复审 |
600 |
600 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
1200 |
1200 |
Reporting |
报告 |
30 |
90 |
· Test Report |
· 测试报告 |
0 |
0 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
90 |
90 |
如何用eclipse生成jar exe文件
https://blog.csdn.net/luoweifu/artic