仓库源地址 : https://git.coding.net/zcy0521/pair_programming.git
一、PSP表格
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
60 |
|
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
30 | |
Development |
开发 |
120 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
60 |
|
· Design Spec |
· 生成设计文档 |
30 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
45 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 |
|
· Design |
· 具体设计 |
180 |
|
· Coding |
· 具体编码 |
300 |
|
· Code Review |
· 代码复审 |
120 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 |
|
Reporting |
报告 |
120 |
|
· Test Report |
· 测试报告 |
60 |
|
· Size Measurement |
· 计算工作量 |
30 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 |
二、接口设计
(一)Informatica Hiding
1、什么是信息隐藏
信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。
信息隐藏,信息封装是结构化与面向对象设计的基础。
信息隐藏(Information hiding)是程序设计过程中的一种隔离原则,可以防止用户接触到一个类的某些部分。一个程序模块可以将它的信息隐藏起来,对外仅仅展现出一种接口。当这个模块的具体实现发生改变时,只要保证它的接口不发生变化,则就算不修改模块外的其他代码,程序依旧可以正确执行。这种接口的设计保证了整个工程的稳定性。
2、为什么要信息隐藏
(1)隐藏复杂度:这样你就不用再去应付它,除非你要特别关注的时候;
(2)隐藏变化源:这样当变化发生时,其影响就能被限制在局部范围内。复杂度的根源包括复杂的数据类型、文件结构、布尔判断以及晦涩的算法等等。
3、信息隐藏体现了面向对象编程中的封装原则,在具体的实现过程中可以用以下方式实现:
(1) 多层设计中的层与层之间加入接口层;
(2) 所有类与类之间都通过接口类访问;
(3)类的所有数据成员都是private,所有访问都是通过访问函数实现的;
4、在我们的代码中
在我们的“四则运算”软件开发中,时时都在使用 Information Hiding原则。我做前端,不需要看后端的工程文件,不需要看后端的代码,只需要鲁后端给我提供一个DLL还有一份接口说明。后端维护计算核心,只需要将接口维护好,前端的设计、布局、用户交互等不需要考虑。我们通过一份“接口协议”结合为一个高效率的团队,这正是信息隐藏原则的意义。所以我们在进行信息隐藏时,认真地研究各个模块的接口的设计,设计得越恰当,当需要修改模块的实现时会显得更加容易。
(二)
(三)
Command.java文件是主要的,首先会有定义一个command()函数来判断符号的优先级计算,接下来是定义一个gcd()函数用来判断求取最大公因数,然后是最重要的函数,定义了一个create()函数,通过调用前两个函数来生成用户所需要的四则运算的运算式。
所花时间:共4小时(查找模块1小时,改进3小时)
常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。
比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出 java.lang.ArithmeticException 的异常。
异常发生的原因有很多,通常包含以下几大类:
- 用户输入了非法数据。
- 要打开的文件不存在。
- 网络通信时连接中断,或者JVM内存溢出。
这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。-
要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:
- 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
- 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
- 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
-
1 try { 2 //n = Integer.parseInt(args[0]);// 命令行输入 3 if (n <= 0) 4 System.out.println("输入的不是正整数,请重新输入!"); 5 } catch (Exception e) { 6 System.out.println("输入的不是正整数,请重新输入!"); 7 } 8 try { 9 PrintStream ps = new PrintStream("../result.txt");// 生成文件 10 System.setOut(ps); 11 } catch (Exception e) { 12 System.out.println("文件生成错误");// 提示 13 } 14 //System.out.println("2016012063");
在我们的这次项目中,我们有两个异常处理,一个是对于用户输入题目数的错误的异常处理,当用户输入的题目数是负数或分数时,这是不符合标注准的,是不会生成相应的题目数的,这就属于异常情况,所以需要进行异常处理。
另一个是对于生成result.txt文件的错误异常处理,当result.txt文件生成错误时,会使答案页面不能生成,导致用户无法对自己进行评估,所以这就属于异常情况,需要进行异常处理。
首先登录界面是一个JSP页面,主要用HTML和CSS代码写在JSP文件当中实现页面的部分,首先是登录的部分,打开网页版的程序,首先会看到 一个登录页面,登录界面的背景是星空的图案,在登录界面中,会有两个白色的文本框,一个为输入用户名的文本框,另一个是输入密码的文本框,用户只需输入自己的用户名和密码即可,再输入完用户名和密码过后,你会看见在文本框下面看见一个蓝色的按钮,上面写着登录,所以输入用户名和密码然后点击登录按钮即可提交表单,处罚ACTION的行动,进入下一个界面。
(二)、欢迎界面
当你在登录界面点击了蓝色的登录按钮过后,触发了ACTION的动作,就进入了欢迎界面,在欢迎界面你会看见背景是白色为主的,上面有数学公式和多彩的运算符的以及一个小人的团,在该界面,你会看到在页面的正中央的上面有加加粗的深蓝色的大字“欢迎来到四则运算小程序!~”,在该界面的标题的正下方,你会看到一个蓝色的“开始答题”的按钮,当你想要开始答题时,只需点击按钮进入下一页面即可。
(三)、主界面
当你在欢迎界面点击了“开始答题~”的蓝色按钮之后,你就会进入下一个页面,主页面,界面包括各个系统功能选择项,包括题目数的选择,运算符个数的选择,题目范围的选择,以及生成题目的按钮。首先题目数的选择输入是以文本框,由用户输入想要生成的题目的数量,接下来是运算符个数的选择,考虑到是小学生的四则运算,所以我们的题目运算符个数不能太多,所以我给用户提供了四个选择,分别为“一个运算符” 、“两个运算符” 、“三个运算符” 、 “四个运算符” ,是以一个下拉框的形式出现在页面上的,最后是生成题目按钮,当你点击按钮,表单内的题目数 、运算符数 、题目范围等参数就会传给后台,后台就会执行生成题目这一动作。
1 <p style="color: #FFFFFF !important ; font-size :30px">题目数</p> 2 </td> 3 <td> 4 <div class="input_outer1"> 5 6 <input name="n1" class="text1" style="color: #FFFFFF !important" type="text" placeholder="请输入题目数"> 7 </div> 8 </td> 9 </tr> 10 11 12 13 <tr> 14 <td> 15 <label style="color: #FFFFFF !important ; font-size :30px">运算符数</label> 16 </td> 17 <td> 18 <select class = "sel" style = " padding-right: 14px;" name = "m1"> 19 <option value = "1">一个运算符</option> 20 <option value = "2" selected = "selected">二个运算符</option> 21 <option value = "3">三个运算符</option> 22 <option value = "4个">四个运算符</option> 23 </select> 24 </td> 25 </tr>
(四)题目页面
当你在主页面内输入了你想要的题目数,运算符数,题目范围等点击了生成题目的按钮,那么这些参数就会通过Request对象传给后台,后台接收到你的请求,生成相应的题目,输出到前端页面,用户可在前端的题目页面上进行答题操作,后台会实时记录你答题的时间,但你答题结束后,你会在页面的右下方看见一个蓝色的提交按钮,点击该按钮,提交你的答案。在按钮的右侧,你会看见,一个计时器,当你进入该页面,计时器就会开始计时,当你答题结束,你就可以点击计时器右侧的stop按钮,在计时器上就记录了你的答题时间。
(五)答案页面
当你在题目页面点击了提交按钮,提交了表单后,你的题目和答案会一起提交到后台,后台的计时器会停止计时,并且后台会对你的题目进行分析判断,最后提交给你一份答案页面,以及你的正确率,以及你答题所用的时间信息。当你检查完题目,觉得要结束这个答题程序了,你可以点击离开按钮,提交表单,AVTION回到登录页面,离开该程序。但如果你对于刚才自己的表现不满意,想要再做一次,可以选择点击右下方的另一个蓝色的按钮,再来一次,选择在一次挑战自己,点击该按钮后,你就会进入主页面,重新选择你想要做的题目的类型的。
1、互相学习编程技巧:在编程中,相互讨论,可以更快更有效地解决问题,互相请教对方,可以得到能力上的互补。可以发散思 维,两个人一个小时能讨论出来的东西,或许一个人一个星期都没法想出来,两个人合作编程,就可以让两个人的智慧和能力共同 发挥出来,来完成一个人难以单独办到的事。
2、可以让编程环境有效地贯彻Design。
3、多双眼睛,少点 bug:增强代码和产品质量,并有效的减少BUG,当一个人写出一段代码的时候,另一个人作为旁观者往往更 容易发现其中的问题。
4、降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。
5、在编程中,相互讨论,可能更快更有效地解决问题。
6、可以培养和训练新人:让资深开发者和新手一起工作,可以让新人更快上手。
7、互相鼓励,不容易沮丧:团队工作能增加成员的工作积极性。因为在面对问题的时候,会有人一起分担,共同尝试新的策略。
8、如果两个人合作,平均每个人的工作量就可以减少一半。而且,由于两个人的思维不同,可以互相取长补短。两个人擅长的方 面不同,所以分工合作就可以同时发挥两个人的优点。
当然,结队编程也会有一些不好的地方:
对于有不同习惯的编程人员,可以在起工作会产生麻烦,甚至矛盾。
2、有时候,程序员们会对一个问题各执己见(代码风格可能会是引发技术人员口水战的地方),争吵不休,反而产生重大内耗。
3、两个人在一起工作可能会出现工作精力不能集中的情况。程序员可能会交谈一些与工作无关的事情,反而分散注意力,导致效 率比单人更为低下。
4、结对编程可能让程序员们相互学习得更快。有些时候,学习对方的长外,可能会和程序员们在起滋生不良气氛一样快。比如, 合伙应付工作,敷衍项目。
5、面对新手,有经验的老手可能会觉得非常的烦躁。不合适的沟通会导到团队的不和谐
6、有经验的人更喜欢单兵作战,找个人来站在他背后看着他可能会让他感到非常的不爽,最终导致编程时受到情绪影响,反而出 现反作用。
7、结对编程的缺点有主观性的也有客观性的。客观性主表现在两个人电脑程序可能存在不兼容现象,导致一个人的程序无法在另 一个人的机器上运行,但这个问题可以通过程序的升级而轻易解决。
8、主观性表现在两个人性格不合,不能友好相处,因此合作的效率也受影响。人际交往的障碍是妨碍合作编程的重大问题,而且 难以在短时间内解决,所以应当引起重视。
对方性格评价:
1、是个友善的人,愿意合作与交流,在与我的合作学习和探究活动中,能选择自己擅长的方式(语言、文字、图表等)表述研究过程和 结果;主动提供自己的资料和想法,与我分享自己智慧,思路,体验合作的愉快。能倾听和尊重我提出的不同观点和评议,能对研究过程 和结果进行评议,并与我交换意见,充分体现结对编程的价值。
2、是个谦逊的人,在与我的合作交流中,我们做到相互尊重,相互信赖,认真倾听对方意见,勇于承认自己的不足,有虚心向对方学习 请教的良好风尚,能在合作交流中正确地评价自己和他人,学会分享他人成功的喜悦。能够在合作交流中明确自己的责任,并履行自己 承担的职责。具有与他人进行合作交流的态度与能力。
3、有集体责任感,善于合作。在合作学习中充分发挥自己的特长,为实现集体目标作出了贡献。积极搜索资料,善于彼此分享交流,有 无私的精神。尊重并理解他人,具有创新精神和动手操作能力,养成了合作交流的习惯。
4、热情乐于助人。在合作过程中表现出非常突出。当我在发言时,认真倾听;在交流时,你能把自己的想法和知道的信息都说出来了; 在工作中能否主动地承担活动项目;当我需要帮助时,能提供热情的帮助;认真倾听意见与观点,活动后参加整理材料,有很好的学习 习惯。
5、在结对合作学习过程中,能创造和谐的气氛,促进小组成员之间和谐的共同的完成各自任务,为养成健全人格奠定了基础。能为研究 活动准备、计划,全面统筹的能力得到了锻炼;能总结“‘共同解决了什么问题、小组还有什么问题没有解决?”“我们小组做得最好的是哪 些人?还有哪方面他们能够做得更好?”
6丶有很强的组织能力。你做事认真,力求完美,在合作中你的适应能力很强,活泼开朗,我们相处融洽,你很有感染力;遇事有你独到 的见解,解决问题时你没有骄傲,失败时你没有气馁,你用坚强的信念和不懈的努力去面对它们。
8、你善于思考问题,渴望得到更多的知识。你能完成好结对编程分配给你的一切任务,是一个勤学、善问的好学生,跟你结对工作体验 到了合作、成功的喜悦。
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
60 |
120 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
30 |
60 |
Development |
开发 |
120 |
700 |
· Analysis |
· 需求分析 (包括学习新技术) |
60 |
145 |
· Design Spec |
· 生成设计文档 |
30 |
60 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
45 |
105 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 |
60 |
· Design |
· 具体设计 |
180 |
540 |
· Coding |
· 具体编码 |
300 |
1800 |
· Code Review |
· 代码复审 |
120 |
240 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 |
145 |
Reporting |
报告 |
120 |
175 |
· Test Report |
· 测试报告 |
60 |
90 |
· Size Measurement |
· 计算工作量 |
30 |
45 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 |
60 |