201871030116-李小龙 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 | 内容 |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/2018CST |
这个作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/14604444.html |
我的课程学习目标 | (1)体验软件项目开发中的两人合作,练习结对编程(Pair programming)。(2)掌握Github协作开发程序的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | (1)了解软件项目开发中的两人合作,了解了结对编程(Pair programming)(2)练习了Github协作开发程序的操作方法。 |
结对方学号-姓名 | 王明强-201871030127 |
结对方本次博客作业链接 | https://www.cnblogs.com/wmq123456/p/14655819.html |
本项目Github的仓库链接地址 | https://github.com/lixiaolot/BruseResponse |
任务1
阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念
学习了构建之法的第三、四章,对于如何成为一个合格的软件工程师有了基本的了解;
第三章主要讲述了评价软件工程师的水平的主要方法,技能的反面,TSP对个人的要求;
初级软件工程师应该如何成长:
-
1、积累软件开发相关知识,提升技术技能;
-
2、积累问题领域的知识和经验;
-
3、对通用的软件设计思想和软件工程思想的理解;
-
4、提升职业技能;
-
5、实际成果;
如何衡量软件开发的工作量和质量:
-
a.项目/任务有多大?
-
b.花了多少时间?
-
c.质量如何?
-
d.是否按时交付;
团队对于个人的期望:
- 1.交流
- 2.说到做到
- 3.接受团队赋予的角色并按角色要求工作
- 4.全力投入团队的活动
- 5.按照团队流程的要求工作
- 6.准备
- 7.理性地工作;
软件工程师的职业发展:
1.职业发展——考级之路:如计算机等级考试和全国计算机技术和软件专业技术资格考试以及一些公司自己的认证项目;
2.职业成长——Steve McConnell版本:一个软件工程师需要具备一定的知识和能力,工程师还有职业成长级别;
3.职业成长——大公司版本:大公司对于一个工程师有自己的判断方法;
4.职业成长——自我评估:如何做一个CRUD;
还讲了技能的反面,需要知其然,更要知其所以然。用魔方的例子来进行讲解;
第四章的理论和知识点有:代码规范、极限编程、结对编程、两人合作的不同阶段、影响他人的技巧。了解了结对任务以及结对时应该注意的问题和结对的好处。当我们在编写代码中,代码的规范对我们个人以及团队有很重要的意义,如果我们编写的代码没有一定的格式那么当我们在回过头查看代码的时候就会不知道自己当初写的是什么了,更是会让我们无从下手,而当团队中的成员审查你的代码的时候更是对整个团队造成了影响。讲到代码编写格式,那么我们其中要注意的是每编写一句要尽量的加上注释以便能够很好的读懂每个代码的含义。另外在编写的时候一定要注意我们的命名。
一、代码规范
1、代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。
代码风格的原则是:简明,易读,无二义性。包括了:缩进、行宽、括号、断行与空白的{}行、分行、命名、下划线、大小写、注释。
2、代码设计规范。牵扯到程序设计、模块之间的关系、设计模式等方方面面的通用原则。
包括:函数、goto、错误处理。
二、代码复审
包括:自我复审、同伴复审、团队复审
代码复审的目的:
1、找出代码的错误。
2、发现逻辑错误,程序可以编译通过,但是代码的逻辑是错的
3、发现算法错误,比如使用的算法不够优化,边界条件没有处理好等
4、发现潜在的错误和回归性错误
5、发现可能需要改进的地方
6、教育开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识
为什么要做代码复审?
1.人不可能不犯错误
2.让新员工快速融入
代码复审的步骤
1.代码必须成功地编译,在所有要求的平台上,同时要编译Debug|Retail版本。编译要用团队规定的最严格的编译警告等级(例如C/C++中的W4)
2.程序员必须测试过代码。
3.程序员必须提供新的代码,以及文件差异分析工具。
4.复审者可以选择面对面的复审、独立复审或其他方式。
5.在面对面的复审中,一般是开发者控制流程,讲述修改的前因后果。但是复审者有权在任何时候打断叙述,提出自己的意见。
6.复审者必须逐一提供反馈意见。注意,复审者有权提出很多看似吹毛求疵的问题,复审者不必亲自调查每一件事,开发者有义务给出详尽的回答。
7.开发者必须负责让所有的问题都得到满意的解释或解答,或者在TFS中创建新的工作项以确保这些问题会得到处理。
8.对于复审的结果,双方必须达成一致的意见。
1)打回去——复审发现致命问题,这些问题在解决之前不能签入代码。
2)有条件地同意——发现了一些小问题,在这些问题得到解决或记录之后,代码可以
签入,不需要再次审核。
3)放行——代码可以不加新的改动,签入源码控制服务器。
列举一个简单的代码复审核查表:1、概要部分、2、实际规范部分、3、代码规范部分、4、具体代码部分、5、效能、6、可读性、7、可测试性
三、结对编程
1、结对编程的好处:①在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作解决问题的能力更强。②对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。③在企业管理层次上,结对能更有效地交流,相互学习和传递经验,分享知识,能更好地应对人员流动。总之,如果运用的得当,结对编程可以取得更高的投入产出比。
四、两人合作的不同阶段和技巧
1、萌芽阶段
2、磨合阶段
3、规范阶段
4、创造阶段
5、解体阶段
任务二
两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价,具体要求如下:
(1)对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究,将以上评论内容发布到博客评论区。
评论博文链接:https://www.cnblogs.com/wmq123456/p/14600986.html
(2)克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。
(3)依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。
仓库地址:https://github.com/lixiaolot/BruseResponse
任务3
采用两人结对编程方式,设计开发一款D{0-1}KP 实例数据集算法实验平台,使之具有以下功能:
(1)平台基础功能:实验二 任务3;
(2)D{0-1}KP 实例数据集需存储在数据库;
(3)平台可动态嵌入任何一个有效的D{0-1}KP 实例求解算法,并保存算法实验日志数据;
(4)人机交互界面要求为GUI界面(WEB页面、APP页面都可);
(5)查阅资料,设计遗传算法求解D{0-1}KP,并利用此算法测试要求(3);
(6)附加功能:除(1)-(5)外的任意有效平台功能实现。
任务4
需求分析陈述
任务2需求分析:在日常生活中我们经常会遇到0-1背包问题,像旅行时要带哪些东西,怎样安排车辆的装载可以达到最大载重等等,为此,我们通过编写程序来完成对问题的解决。0-1背包问题简要描述如下:现有n个物品,质量分别是w1,w2,···,wn,价值分别是p1,p2,···,pn,并有一个容量为c的背包,如何选择放入背包中的物品方案,使其满足背包容量限制,并使装入背包中的物品的总价值为最大。
任务3需求分析结对编程的好处:①在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作解决问题的能力更强。②对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。③在企业管理层次上,结对能更有效地交流,相互学习和传递经验,分享知识,能更好地应对人员流动。总之,如果运用的得当,结对编程可以取得更高的投入产出比。
PSP
PSP | 任务内容 | 计划时间(分) | 实际时间(分) |
---|---|---|---|
Planning | 任务计划 | 15 | 12 |
Development | 开发工作 | 800 | 1000+ |
Design Spec | 设计文档 | 520 | 500+ |
test | 代码测试 | 15 | 0 |
report | 总结汇报 | 50 | 45 |
小结感受
两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会。
- 结对编程并不适用于简单的写代码的工作,结对编程更适用于解决一些方向性的问题
- 结对编程中,双方的互动目的在于开启思路,避免单独编程时思维容易阻塞的情况。
- 在我进行编程的过程中,难免会有思维不够清晰的时候,也会有一些不记得的语法规则,此时有一个队友在身旁,可以与你讨论或者一起查阅资料,对你编程中的一些小bug也会指摘出来,这样我个人觉得会提高我编程的效率,也会减少代码的出错率。
- 一个人一天能够高效编程的时间确实是有限的,在写了一段时间代码后也会有累的时候,此时和队友交换角色,也能得到适当的休息,同时也不会影响工作效率。
- 因为每一段代码都是在两个人的目光中敲出来的,因此两个人都不会对这段代码有陌生感,都会觉得就像自己写得一样,这样便于两人之间的交流,对后期代码的调试也有很大的帮助。
- 每个人都有各自的编程风格,写代码时也有各自的一些小技巧,因此结对编程也是一个相互学习的过程,有力于学习别人的长处和了解自己的不足。