项目 内容
课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12521474.html
课程学习目标 (1)体验软件项目开发中的两人合作,练习结对编程(Pair programming);(2)掌握Github协作开发程序的操作方法;
这个作业在哪些方面帮助我实现学习目标 (2)在githup的使用上;(2)在软件开发的实践上
结对方学号-姓名 李瑞红 —— 201771010111
结对方本次博客作业链接 https://www.cnblogs.com/LRHLRH123—-/p/12580801.html
项目githup的仓库地址链接 https://github.com/980303/xiaochen1

实验内容和步骤

任务1:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念;

代码规范可以两个部分,包括代码风格规范和代码设计规范。
  • 代码风格规范:主要是文字上的规定,原则是简明、易读、无二义性。缩进限定为100字符;复杂的条件表达式中,用括号表示逻辑优先级;有清晰的断行和分行;命名应该遵循规则,简洁易懂;用下划线来分隔变量名字中的作用域和变量的语义;所有的类型/类/函数名都用Pascal(所有单词第一个字母都大写)形式,所有的变量都用Camel形式(第一个单词全部小写,随后单词随Pascal形式,函数则用动词或动宾合词来表示;复杂的的注释放在函数头,注释随着程序修改而不断修改。
  • 代码设计规范:程序的绝大多数功能,都在程序中实现,函数的原则是只做好一件事;使用goto语句使得程序有单一的出口;错误处理的时间更甚于程序功能的实现;所有的参数都要验证其正确性,验证正确性使用断言;
代码复审指看代码是否在代码规范的框架内正确的解决了问题。
  • 自我复审:自己 VS 自己,用同伴复审的标准来要求自己。不一定最有效,因为开发者对自己总是过于自信,如果能持之以恒,则对个人有很大好处。
  • 同伴复审:复审者 VS 开发者,简便易行,最基本的复审手段。
  • 团队复审:团队 VS 开发者,有比较严格的规定和流程,适用于关键的代码,以及复审后不再更新的代码,覆盖率高——有很多双眼睛盯着程序,但效率可能不高(全体人员都要到会)
代码复审的目的在于:
  • 找出代码的错误,比如编码错误和不符合团队代码规范的地方。
  • 发现逻辑错误,程序可以编译通过,但是代码的逻辑是错误的。
  • 发现算法错误,比如使用的算法不够优化,边界没有处理好等。
  • 发现潜在的错误和回归性错误——当前的修改导致以前修复的缺陷又重新出现。
  • 发现可能需要改进的地方。
  • 教育(互相教育)开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识。
结对编程:在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。程序的初始质量会高很多,这样会省下很多以后修改、测试的时间,结对编程有以下好处:
  • 在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作解决问题的能力更强。两人合作,还有相互激励的作用,工程师看到别人的思路和技能,得到实时的讲解,受到激励,从而努力提高自己的水平。
  • 对开发人员自身来讲,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
  • 在企业管理层次上,结对能更有效地交流、相互学习和传递经验,分享知识,能够更好地应对人员流动。
结对编程分为两个角色:
  • 驾驶员:控制键盘输入。
  • 领航员:起到领航、提醒的作用。
结对编程让两个人所写的代码不断地处于“复审”的过程,程序员们能够不断地审核、提高设计质量和编码质量,可以及时发现并解决问题,避免吧问题拖到后面的阶段去。
如何结对编程:
  • 驾驶员:写设计文档,进行编码和单元测试等XP开发流程。
  • 领航员:审阅驾驶员的文档;监督驾驶员对开发流程的执行;考虑单元测试的覆盖率;思考是否需要如何重构;帮助驾驶员解决问题具体的技术问题。领航员也可以设计TDD中的测试用例。
  • 驾驶员和领航员不断轮换角色,不要连续工作超过一小时,每工作一小时休息15分钟,领航员要控制时间。
  • 主动参与。任何一个任务都首先是两个人的责任,也是所有人的责任。
  • 只有水平上的差距,没有级别上的差异。两人结对,尽管可能大家的级别资历不同,但不管在分析、设计、编码上,双方都拥有平等的决策权利。
  • 设置好结对编程的环境、座位、显示器、等都要允许两个人舒适地讨论和工作。如果是远程结对编程,那么网络、语音通讯和屏幕共享程序要设置好。

任务2:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价,具体要求如下:

结对方博客链接:https://www.cnblogs.com/LRHLRH123—-/p/12485614.html
结对方Github项目仓库链接:https://github.com/lrh258/xhh.git
对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究,将以上评论内容发布到博客评论区。

博文评论

克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。

概要部分

  • 代码能符合需求和规格说明:采用了java进行编程,代码书写基本规范,函数和变量的命名也符合命名习惯。
  • 代码设计是否周全:代码在设计上面完成了项目要求的各个功能,在设计上还是比较严谨的;但是代码周全与否也不是绝对的,也会因为我们考虑不到的问题存在一些未知漏洞。
  • 代码可读性如何:代码考虑到了可读性的问题,在各个函数前加上了简单地注释,使得代码的可读性比较强。
  • 代码是否容易维护:代码的封装良好,模块清晰,比较容易维护。
  • 代码是否逐行执行和检查:是

设计规范部分

  • 设计是否遵从已知的设计模式或项目中常用的模式:代码采用了java编程,连接mysql数据库的常见模式。没有采用GUI页面,而是选择控制台输出。
  • 有没有硬编码或字符串/数字等存在:有一部分,例如:
  • 代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64):代码不依赖于平台,不影响可移植性,但是对jar包的版本有要求。过高或过低都不适合。
  • 开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现;在本项目中是否存在类似的功能可以调用而不用全部重新实现:可以实现,代码中涉及了一部分查询、添加函数,若要实现类似功能,可以进行调用。
  • 有没有无用的代码可以清除:对方在开发过程中已经尽可能的删除了无用的可注释代码,并未留下过多无用代码。

代码规范部分

  • 修改的部分符合代码标准和风格:修改代码尽量与开发者靠近,基本符合代码的标准和风格。

具体代码部分

  • 有没有对错误进行处理;对于调用的外部函数,是否检查了返回值或处理了异常:代码有一定的容错能力,也检查值和进行了异常处理
  • 参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度,是以0开始计数还是以1开始计数:参数传递没有错误,字符串的长度是字节的长度,以0开始计数
  • 边界条件是如何处理的?Switch语句的Default是如何处理的?循环有没有可能出现死循环?
  • 通过百度查询和书上的知识,或者问同学解决的,循环不会出现死循环
  • 有没有使用断言(Assert)来保证我们认为不变的条件真的满足:没有使用
  • 对资源的利用,是在哪里申请,在哪里释放的?有没有可能导致资源泄露(内存、文件、各种GUI资源、数据库访问的连接,等等)?有没有可能优化?在网上找到的,不会导致资源泄漏
  • 数据结构中是否有无用的元素?检查过后没有

效能

  • 代码的效能(Performance)如何?最坏的情况是怎样的:代码正确,程序运行正常,用户输入有误时,程序会输出标志性语句。
  • 代码中,特别是循环中是否有明显可优化的部分(C++中反复创建类,C#中 string 的操作是否能用StringBuilder 来优化):有可优化部分,但是代码正确所以没有修改
  • 代码可读性如何;有没有足够的注释:对方在开发过程中添加量相当一部分的注释,程序的可读性很高。

可测试性

  • 代码是否需要更新或创建新的单元测试:项目相对来说是一个小型的个人项目,没有必要做单元测试。
依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。

将对方的代码远程克隆到本地

使用fork将对方的代码分流到个人仓库

可以看到我向队友发起了Pull request等待对方响应

任务3:采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统,使之具有以下功能:

需求分析:
  • 2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在有关部门指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
  • 日前国内疫情形势见好,但是仍然不能盲目乐观,还需要从各个渠道获取信息,各大学校开学时间也成了社会热点问题,想要对何时复工复学有及时的把握,就需要及时掌握相关的信息,做出稳妥的判断。因此开发一个共学校师生使用的疫情填报系统可以帮助学校做出正确的决定。
  • 综上所述,在目前这样的背景之下,开发一个疫情上报系统,可以获取到最直观的数据,这不仅有利于我们对当下社会疫情的分析和判断,帮助我们做出相关的决策,同时获取到的这些数据页能用在医学研究团队对病毒的分析和疫苗的研制上面。所以这个项目的进行时可以且有必要进行的。
软件设计说明:
  • 用户类,实现用户的登录,检查状态,查询疫情数据,导出到excel,分页等功能。
  • 学生类,实现信息采集,保存,检查,查询等功能
  • 类与类之间完全分离,拥有对数据的增改查等功能。函数之间存在比较固定的调用关系。
程序功能评测:

数据库建立:



成员信息:

添加成员信息:

添加疫情信息:

查询疫情信息:

查询确诊信息:

导出数据:

描述结对的过程:

作业的PSP:
PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间
Planning 计划 30 25
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 30 30
Development 开发 1140 1300
Analysis 需求分析(包括学习新技术) 98 120
Design Spec 生成设计文档 34 20
Design Review 设计复审(和同事审核设计文档) 2 0
Coding Standard 代码规范(为目前的开发制定合适的规范) 33 32
Design 具体设计 34 25
Coding 具体编码 1100 1100
Code Review 代码复审 30 24
Test 测试(自我测试,修改代码,提交修改) 60 88
Reporting 报告 180 165
Test Report 测试报告 40 35
Size Measurement 计算工作量 7 6

小结:两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会。

  • 结对编程有利有弊,但是总的来说是利大于弊的,1+1的效果>2。
  • 在结对的过程中,我们可以互相帮助,分享学习资源,出现问题也可以一起讨论解决,总之,结对编程也是一次互相学习的过程。但是由于两个人是远程结对,且GitHub网络状况有时候特别差,登不进去,也有对于使用GitHub使用还不熟悉的缘故,在GitHub的操作上面遇到了很多问题,以至于很长时间我们都通过QQ发送压缩包来交流。
  • 项目初期的时候,大家思考问题的方向不同,意见不一致,且彼此的电脑配置环境不相同,编程过程中出现不同的问题,解决起来不太容易。
  • 最后,在结对过程我也看到了自己能力上的缺陷,以前学习的时候重视理论课而疏于实践课,导致和别人在动手实践上面的差距,需要及时的弥补自己。

版权声明:本文为980303CYR原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/980303CYR/p/12554361.html