201871010113-刘兴瑞 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 | 内容 |
---|---|
课程班级博客链接 | 班级链接 |
这个作业要求链接 | 作业要求链接 |
我的课程学习目标 | 1.体验软件项目开发结对编程 2.练习结对编程 3.掌握Github协作开发程序的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | 通过结对编程与伙伴做项目,熟悉结对编程过程,熟悉了通过Github协作开发程序的操作方法 |
结对方学号-姓名 | 张潇潇-201871010132 |
结对方本次博客作业链接 | 张潇潇 |
任务一
阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念;
- 第三章总结
代码风格的原则是:简明,易读,无二义性。
代码复审的定义:看代码是否在“代码规范”的框架内正确地解决了问题
- 代码复审的形式:
名称 | 形式 | 目的 |
---|---|---|
自我复审 | 自己vs.自己 | 用同伴复审的标准来要求自己。不一定最有效, 因为开发者对自己总是过于自信。如果能持之以恒,则对个人有很大好处。 |
同伴复审 | 复审者vs.开发者 | 简便易行 |
团队复审 | 队vs.开发者 | 有比较严格的规定和流程,适用于关键的代码,以及复审后不再更新的代码。覆盖率高——有很多双眼睛盯着程序,但效率可能不高(全体人员都要到会) |
- 结对编程的好处:
(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
(2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
(3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
(4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
总之,如果运用得当,结对编程能得到更高的投入产出比(Return of Investment)。
- 正确地给予反馈:“三明治”方法
(1) 先放一片面包:做好铺垫:强调双方的共同点,从团队共同的愿景讲起,让对方觉得处于一个安全的环境。
(2) 然后再把肉放上:这时就可以把建设性的意见( Constructive Feedback )加工好,加上生菜、佐料等。
(3) 然后再来一片面包:呼应开头,鼓励对方把工作做好。
任务二
两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价
- 对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究,将以上评论内容发布到博客评论区。
点评方面 | 点评内容 |
---|---|
博文结构 | 博文结构清晰,版式整洁,具有段落感。 |
博文内容 | 对于每个点评给出了超链接,且定位到了该评论的位置,极为方便;缺点是最好能在超链接前标注一下点评对象的姓名等信息。将《 构建之法》PSP那两章进行提炼概括。在需求分析上,对0-1背包给出了自己的解释 |
博文结构与PSP中“任务内容”列的关系 | 撰写流程是按照PSP的主要流程,整体构思清晰完整。 |
“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析 | 博主没有实际完成时间 |
差异原因探究 | 可能编程能力有欠缺 |
点评截图:
- 克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录
1、概要部分
(1)代码符合需求和规格说明么?
答:部分符合需求与规格。
(2)代码设计是否有周全考虑?
答:基本周全,改动的地方很少。
(3)代码可读性如何?
答:可读性好。
(4)代码容易维护么?
答:较易。
(5)代码的每一行都执行并检查过了吗?
答:是的,检查过。
2、设计规范部分
(1)设计是否遵从已知的设计模式或项目中常用的模式?
答:部分遵从。
(2)有没有硬编码或字符串/数字等存在?
答:有一部分。
(3)代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64)
答:没有依赖,不会影响移植。
(4)开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
答:可以实现,存在,调用了一部分。
(5)有没有无用的代码可以清除?(很多人想保留尽可能多的代码,因为以后可能会用上,这样导致程序文件中有很多注释掉的代码,这些代码都可以删除,因为源代码控制已经保存了原来的老代码。)
答:有,基本清除完毕。
3、代码规范部分
(1)修改的部分符合代码标准和风格么(详细条文略)?
答:大部分代码符合,不符合的已修改。
4、具体代码部分
(1)有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
答:对错误进行了处理,检查了返回值,并处理了异常。
(2)参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度,是以0开始计数还是以1开始计数?
答:无错误,字符串的长度是字节的长度,是以0开始计数。
(3)边界条件是如何处理的?Switch语句的Default是如何处理的?循环有没有可能出现死循环?
答:结对伙伴未用到Switch语句,没有出现死循环,循环语句正确。
(4)有没有使用断言(Assert)来保证我们认为不变的条件真的满足?
答:没有使用。
(5)对资源的利用,是在哪里申请,在哪里释放的?有没有可能导致资源泄露(内存、文件、各种GUI资源、数据库访问的连接,等等)?有没有可能优化?
答:是随机生成的,不会导致资源泄漏,有可能优化。
(6)数据结构中是否有无用的元素?
答:没有。
5、效能
(1)代码的效能(Performance)如何?最坏的情况是怎样的?
答:代码正确,程序运行正常。
(2)代码中,特别是循环中是否有明显可优化的部分(C++中反复创建类,C#中 string 的操作是否能用StringBuilder 来优化)?
答:没有可优化地方,比较优化。
(3)对于系统和网络调用是否会超时?如何处理?
答:不会超时。
6、可读性
代码可读性如何?有没有足够的注释?
答:代码不是很复杂,有足够的注释。
7、可测试性
代码是否需要更新或创建新的单元测试?还可以有针对特定领域开发(如数据库、网页、多线程等)的核查表。
答:不需要。 - 依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。
任务三
采用两人结对编程方式,设计开发一款D{0-1}KP 实例数据集算法实验平台:
-
需求分析陈述。
(1) 平台基础功能:实验二 任务3;
(2) D{0-1}KP 实例数据集需存储在数据库;
(3) 平台可动态嵌入任何一个有效的D{0-1}KP 实例求解算法,并保存算法实验日志数据;
(4) 人机交互界面要求为GUI界面;
(5) 遗传算法求解D{0-1}KP; -
软件设计说明。
(1) D{0-1}KP数据保存到数据库
(2) 绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图
(3) 对任意一组D{0-1}KP数据用重量和价值比进行排序;
(4) 用户能够选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位)
(5) 最优解、求解时间和解向量可保存至EXCEL文件
(6) 可使用遗传算法求解D{0-1}KP -
软件实现及核心功能代码展示:软件包括哪些类,这些类分别负责什么功能,他们之间的关系怎样?类内有哪些重要的方法,关键的方法是否需要画出流程图?
-
描述结对的过程,提供两人在讨论、细化和编程时的结对照片(非摆拍)。(3分)
-
提供此次结对作业的PSP。
PSP2.1 | 任务内容 | 划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 14 | 10 |
· · Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 10 | 10 |
development | 开发 | 800 | 880 |
· · Analysis | · 需求分析 (包括学习新技术) | 60 | 70 |
· · Design Spec | · 生成设计文档 | 25 | 20 |
· · Design Review | · 设计复审 (和同事审核设计文档) | 20 | 20 |
· · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 27 |
· · Design | 具体设计 | 20 | 12 |
· · Coding | · 具体编码 | 120 | 80 |
· · Code Review | · 代码复审 | 60 | |
· · Test | · 测试(自我测试,修改代码,提交修改) | 30 | |
Reporting | 报告 | 80 | |
· · Test Report | · 测试报告 | 10 | |
· · Size Measurement | · 计算工作量 | 500 | 5 |
· · Postmortem & Process Improvement Plan | · 事后总结 ,并提出过程改进计划 | 5 | 8 |
- 小结感受:两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会。
我认为两人合作能够带来1+1>2的效果。首先在结对编程中,随时的沟通和交流,使程序中的错误,质量提高。而且,结对编程是一个分享和交流的过程,使得我们可以避免一些自己思想上的误区,同时拥有了一个新的知识,有新的创意。
posted on 2021-04-14 09:58 201871010113-刘兴瑞 阅读(81) 评论(0) 编辑 收藏 举报