软件工程网络15结对编程作业
Deadline:##
2018-3-25 10:00PM,以提交至班级博客时间为准。
请在两周时间内完成结对编程练习,注意时间的合理安排。
参考来自http://www.cnblogs.com/xinz/p/7417960.html
题目要求:##
1.改进现有代码###
- 分析网络14部分现有程序代码(请选择其中一个)
- 个人博客地址1:http://www.cnblogs.com/weihui-01 ,源代码:https://coding.net/u/weh/p/software-testing/git
- 个人博客地址2:http://www.cnblogs.com/belong033 ,源代码:https://coding.net/u/Belong033/p/java-third/git
- 个人博客地址3:http://www.cnblogs.com/zenglijun ,源代码:https://coding.net/u/wjunren/p/TEST/git
- 个人博客地址4:http://www.cnblogs.com/shizhuangde ,源代码:https://coding.net/u/lhl1212/p/work2/git
- 个人博客地址5:http://www.cnblogs.com/NianQiFeng ,源代码:https://git.coding.net/qwx_hh/java-szys.git
- 原题目要求
- 重构
- clone项目,在开发环境中运行该应用程序,修改完毕最后上传至码云,并在博客中给出链接
- 检查大部分主要类之间的关系,画出类图
- 浏览所有代码考虑代码质量和测试覆盖率
- 确定当前设计的一个弱点,通过重构,确保在这个地方已有测试覆盖并保证重构没有改变已有的功能
- 好的测试是重构的根本。检查已有代码的测试,看测试用例是否足够覆盖原代码,如果不足,请添加测试用例
- 降低代码重复量,找出代码逻辑泥球
- 当前程序是否支持多个操作符运算,如果不支持,请在源代码基础上进行改进,算法参考:https://www.cnblogs.com/dragondove/p/6445850.html
- 修改代码后,检查代码覆盖,看单元测试是否需要修改?测试用例是否需要增加?
- 参考
- 重构-靠谱程序员的必备技能:https://mp.weixin.qq.com/s/23a8BY_fP168GWLrGLJzrw
- JUnit单元测试:http://www.cnblogs.com/happyzm/p/6482886.html
- Java覆盖率统计:http://www.cnblogs.com/happyzm/p/6530384.html
2.功能改进与扩展###
增加一个运算符,程序应该有怎样的改变?不得不扔掉全部重写么,还是可以只改部分模块?基于模块化设计的思想,考虑在现有程序中做什么样的修改,才能让程序更好地实现新的需求
- 增加括号操作符
- 减少重复题目
- 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。
- 【附加题】增加一个运算符(乘方)
- 用符号表示乘方,例如:42=16
- 回归测试
- 在开发新功能时避免损坏旧的功能,以确保新的功能不与原有功能冲突
- 在确认修改的功能正确之后再签入代码。
- 效能分析
- 效能分析工具:http://www.oschina.net/p/jprofiler ,使用方法: http://www.cnblogs.com/bjlhx/p/6668888.html
- 参考教材P29-34
- 参照“效能测试,分析,改进,再效能测试”的流程,找出关键模块消耗最大的函数,是否存在改进?
3.在两人合作的过程中, 请看下面的内容###
- 满足代码风格规范和代码设计规范(参考书第4章4.1-4.3内容)http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html
- 请重视这点,在开发时两个人要有口头上的沟通:“好的,我们一起在开发中遵守一起认可的编码规范”,按照编码标准和规范进行分模块编码。
- 工具:
- checkstyle http://blog.csdn.net/maritimesun/article/details/7668718
- Findbugs
- PMD
- 当然,你也可以修改这份代码规范,前提是你要知道该规范的内容意义。关于这个,Google 也提供有一份在线文档,可供参考:https://google.github.io/styleguide/javaguide.html
- 请根据构建之法书上编码规范里提到的那些要点整理一份你们在结对编程时使用的代码规范,把你们约定的编码规范文档也提交到git
- 参考:http://drysaltery.com/2015/06/15/Rainy-Days/
- 给人提意见的方式——送一个汉堡包http://www.cnblogs.com/xinz/archive/2011/08/22/2148776.html
- 理解领航员和驾驶员两种角色关系,并在结对编程中两个人轮流做对方的角色。两人都必须参与本次作业的编码工作,并在git提交日志上体现这点。
博客要求:##
-
提交的博客(两个同学都要写)必须完整包含下面内容:
- 需求分析:针对现有代码的改进分析,新开发功能的分析。
- 程序设计:针对新开发功能做设计,建议使用思维导图。
- 代码展示:展示每个功能的核心代码。
- 程序运行:程序运行及每个功能的使用截图。
- 小结感受:结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。
-
在随笔开头,备注两个同学的学号。
-
提供项目开发的码云地址。
-
描述结对的过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。
-
提供此次结对作业的PSP
- 在开始实现程序之前,请使用以下PSP表格,在第3列填上自己对每个环节的估计时间(单位:分钟).
- 在做每个环节的过程中,请在第4列填上对应环节的实际消耗时间(单位:分钟).
-
在软件开发中,掌握估计时间是一项重要的技能,请通过PSP表格做到
a.厘清开发的完整环节,争取在每个环节都有实际的工作,一开始边界不清楚是正常的,但请尝试按自己的理解去努力在对应环节做实际的工作。
b.预估每个环节的时间,并真实统计这些环节的耗时,在完成后输出完整的PSP耗时估计表。
c.注意:该表格是给自己看的,不要伪造数据!
d.PSP模版表格如下,第3列和第4列分别对应第2列条目的估计时间和真实时间,模版表格里的时间只是示意。
PSP2.1 | 个人开发流程 | 预估耗费时间(分钟) | 实际耗费时间(分钟) |
Planning | 计划 | 8 | 6 |
· Estimate | 明确需求和其他相关因素,估计每个阶段的时间成本 | 8 | 6 |
Development | 开发 | 82 | 88 |
· Analysis | 需求分析 (包括学习新技术) | 6 | 10 |
· Design Spec | 生成设计文档 | 5 | 6 |
· Design Review | 设计复审 | 4 | 6 |
· Coding Standard | 代码规范 | 3 | 3 |
· Design | 具体设计 | 10 | 12 |
· Coding | 具体编码 | 36 | 21 |
· Code Review | 代码复审 | 7 | 9 |
· Test | 测试(自我测试,修改代码,提交修改) | 13 | 21 |
Reporting | 报告 | 9 | 6 |
· | 测试报告 | 3 | 2 |
· | 计算工作量 | 2 | 1 |
· | 并提出过程改进计划 | 3 | 3 |
代码要求##
要求必须增量式开发-提交到码云地址,码云上要能看到多次commit的记录,同时必须有两个人各自的commit记录。
评分基准##
- 按时交 - 有分(详细评分准则见下表)
- 晚交 - 0分
- 迟交两周以上 - 倒扣本次作业分数
- 抄袭 - 倒扣本次作业分数
- 如对分数有意见,只给一次向助教申诉的机会
评分项 | 评分细则 | 分数 | 备注 |
现有代码改进部分 | clone 所选项目,并在博客中给出结对项目码云链接 | 1 | |
检查所选项目的类之间的关系,博客中给出类图 | 1 | 在博客中给出 | |
找出原项目中的逻辑泥球 | 1 | 需要解释为何这部分是逻辑泥球 | |
给出原项目中测试用例覆盖不到位的地方,然后补充相应的测试用例 | 1 | 如果覆盖都到位请指出测试用例所测的功能或逻辑 | |
保证所选项目支持多操作符的运算 | 2 | 如果原项目没有的话需要自行添加此功能 | |
完整给出该项目的测试用例 | 1 | 重点给出添加功能的测试用例,如多运算符的运算实例 | |
功能改进与拓展 | 需求分析 | 1 | 针对现有代码的改进分析,新开发功能的分析 |
设计分析 | 1 | 博客中给出针对新功能的思维导图 | |
支持括号优先级运算 | 2 | ||
程序生成的算式不重复 | 4 | ||
给出回归测试的用例 | 1 | 原项目测试用例+新功能测试用例都保证能过 | |
给出效能分析工具的分析结果 | 2 | 博客上给出截图 | |
找出关键模块消耗最大的函数,是否存在改进 | 2 | 根据分析结果给出消耗最大的函数,并给出改进建议,各1分 | |
附加题 | 支持乘方运算 | 3 | |
其他要求 | 博客开头给出两人的学号 | 0.5 | |
展示每个功能的核心代码 | 1 | 给出代码截图 | |
程序运行及每个功能的使用截图 | 1 | ||
结对编程两个人的感受和体会 | 2 | ||
非摆拍的两人在讨论、细化和编程时的结对照片 | 1 | ||
完成PSP表格 | 2 | ||
码云上的代码迁入记录中有两个人的迁入记录 | 1 | ||
码云上的代码迁入记录中有多次迁入的记录 | 1 | ||
码云上有两个人的编码规范文档 | 1 | 需要以文档的形式上传到码云上 |
说明##
上述表格中的所有的评分项都要在博客或者是码云上有体现