实验三 软件工程结对项目
项目 | 内容 |
课程班级博客 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
作业要求 | https://www.cnblogs.com/nwnu-daizh/p/12521474.html |
课程学习目标 | 掌握软件项目个人开发流程及Github发布软件项目的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | 体验软件项目开发中的两人合作,练习结对编程,掌握Github协作开发程序的操作方法。 |
结对方学号-姓名 | 201771010135-杨蓉庆 |
结对方本次博客链接 | https://www.cnblogs.com/YRQY/p/12573484.html |
项目的Github仓库链接 | https://github.com/wait1234-111/cherubi |
实验内容和步骤:
任务一:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念;
- 代码风格规范:就是代码格式的一些要求,原则是简明、易读、无二异性。。主要有以下几个方面:
缩进、行宽、括号、断行与空白的{}行、分行、命名、下划线、大小写、注释 - 代码设计规范:不光是程序书写的格式问题,而且牵涉到程序设计、模块之间的关系、设计模式等方方面面。主要体现在以下几个方面:
函数、goto、错误处理、如何处理C++中的类 - 代码复审:查看代码是否符合代码规范,找出软件开发过程中的错误,降低软件开发后期维护的难度,提高软件的质量和可靠性。
- 结对编程:在结对编程时,可以互换角色,在开始写代码之前,规定两个人都认可的一套代码规范,并且不间断地进行复审,以减少软件中存在的问题,修复bug,提高软件质量。
任务二:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价:
(1)对项目博文作业进行阅读并进行评论,将评论内容发布到博客评论区。
(2)克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。
概要部分
- 代码能符合需求和规格说明么?
答:符合需求与规格 - 代码设计是否有周全考虑?
答:考虑地较为全面,但还是存在问题 - 代码可读性如何?
答:符合规范,可读性高 - 代码容易维护么?
答:较难 - 代码的每一行都执行并检查过了吗?
答:已检查
设计规范部分
- 设计是否遵从已知的设计模式或项目中常用的模式?
答:否 - 有没有硬编码或字符串/数字等存在?
答:无 - 代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64)
答:不会影响。 - 开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
答:可以实现,不存在。 - 有没有无用的代码可以清除?
答:已将无用代码清除
代码规范部分
- 修改的部分符合代码标准和风格么(详细条文略)?
答:符合
具体代码部分
- 有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
答:有对错误进行处理,并对调用的外部函数,检查了返回值且处理了异常 - 参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度,是以0开始计数还是以1开始计数?
答:基本无错误,字符串的长度是字节的长度,以0开始计数。 - 边界条件是如何处理的?Switch语句的Default是如何处理的?循环有没有可能出现死循环?
答:通过反复测试,不会出现死循环 - 有没有使用断言(Assert)来保证我们认为不变的条件真的满足?
答:没有 - 对资源的利用,是在哪里申请,在哪里释放的?有没有可能导致资源泄露(内存、文件、各种GUI资源、数据库访问的连接,等等)?有没有可能优化?
答:在网上找到的,,不会导致资源泄漏,有可能优化。 - 数据结构中是否有无用的元素?
答:经过检查已将无用的元素修改。
效能
- 代码的效能(Performance)如何?最坏的情况是怎样的?
答:程序运行正常 - 代码中,特别是循环中是否有明显可优化的部分(C++中反复创建类,C#中 string 的操作是否能用StringBuilder 来优化)?
答:有可优化的部分,能力范围之内的尽量修改了,修改不合适的就没再优化。 - 对于系统和网络调用是否会超时?如何处理?
答:不会超时。
可读性
- 代码可读性如何?有没有足够的注释?
答:代码可读性较高,基本的注释都有。
可测试性
- 代码是否需要更新或创建新的单元测试?还可以有针对特定领域开发(如数据库、网页、多线程等)的核查表。
答:不需要。
依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。我要做的事情主要有以下几步,如图所示(简明的描述了整个过程):
1.Fork操作:这个操作会复制对方的仓库(包括文件,提交历史,issues,和其余一些东西)。复制后的仓库在我自己的github账号下,且在目前,我的本地计算机对这个仓库没有任何操作。如下图可看到派生项目版本库出现在版本库列表中
2.clone操作:将仓库克隆到本地,如下图:
3.push操作:将我的更改push到我的github仓库
4.Pull request操作:询问对方是否是否愿意接受我的pull request
任务三:采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统,使之具有以下功能
(1)可采集全校各类师生员工疫情信息;
(2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
(3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;
(4)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(5)附加分功能:定时填报提醒
1.需求分析:
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
基于以上背景,学生疫情每日上报系统的设计开发显得格外重要,既要实现学生疫情有效信息的在线使用及采集,又要能够让学院指定负责人有效地查看查找学生提交的相关信息。
2.功能设计
- 基本功能
- 系统可采集学生疫情有效信息;
- 学生在前端提交信息到管理员端;
- 各学院指定负责人登录系统,可查看学生填报的所有汇总数据
- 负责人可根据学生的姓名,学院,地址查找相关信息
- 负责人可直接添加学生的信息
- 负责人也可将填写有误的学生信息进行修改及删除
- 扩展功能
- 每日十点之后停止填报
- 负责人通过【导出】可获取疫情数据的EXCEL文件
- 负责人可通过图形化方式查看各学院已填报和未填报学生统计情况和关键疫情数据统计情况
- 填报提醒功能通过邮件的方式每天在九点半定时向学生及教职工发送疫情填报提醒
3.设计实现
①.数据库(mysql)
②eclipse工程目录及类的设计与分析
共分为五个包,这些包按功能分可划分为如下几部分,如下所示:
(1)实用程序包(java.util) ,因为在系统做了个小日历,所以用日期(Data)类和日历(Calendar)类来产生和获取日期及时间,以及异常类;
(2)语言包(java.lang),该包提供了此次编程的基础类,主要含有与语言相关的类,有math类、system类(有标准输出/输入);
(3)图形用户接口包(java.swing),由于本次系统是人机交互界面GUI界面,所以包含了各种swing组件的类;
(4)mapper,mapper是对象持久化映射层,一般会继承ibatis或者mybatis,开发dao及其实现类;
(5)controller,controller是控制层,service服务类,定义学生类和管理员类;
(6)GetConnection类用于连接数据库,login类用于登录界面,权限设置等
4.测试运行
-
登录界面
- 学生登录
- 管理员登录
- 登录界面的验证码设计
- 密码修改设置(可更改个人密码)
-
用户填报界面
-
用户填报界面(学生及教职工疫情情况每日上报表):
-
超时无法填报(每日超过10点无法填报提交)
-
-
管理员界面(疫情信息查询及信息修改)
- 管理界面
- 可查看所有填报的疫情信息
- 疫情查询
- 添加学生信息
- 删除学生信息
- 以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况
- 获取疫情数据的EXCEL文件
-
附加功能
- 系统日历
- 系统通知栏
- 以邮件的方式发送填报提醒
5.描述结对的过程,提供两人在讨论、细化和编程时的微信或QQ截图(截图要完整,能够显示结对双方姓名)
因为在实验二的疫情上报系统中,我们两个人设计的都是基于java的可视化界面,但相应的功能都有不够完善的地方,所以这次我们首先运行调试了对方的系统,和自己的做了相应的比较,分析出自己和对方系统上的优缺点。再经过讨论之后,设定基本的步骤和流程,先做出了基本的系统功能实现和页面设计之后,再分别在上面实现了许多附加功能,如小日历的设计,填报提醒的设计等。整个交流过程无问题,由于我们两人之前多次合作过课程设计,所以协作交流起来很顺畅,很快地实现了系统的设计。以下是QQ的相应讨论截图:
5.PSP展示
PSP | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间 |
Planning | 估计这个任务需要多少时间,并规划大致工作步骤 | 15 | 15 |
Deveploment | 开发 | 900 | 1000 |
Analysis | 需求分析 (包括学习新技术) | 30 | 30 |
Design Spec | 生成设计文档 | 0 | 0 |
Design Review | 设计复审 (和同事审核设计文档) | 120 | 120 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 150 | 210 |
Coding | 具体编码 | 400 | 550 |
Code Review | 代码复审 | 60 | 60 |
Test | 测试(自我测试,修改代码,提交修改) | 120 | 120 |
Reporting | 报告 | 100 | 120 |
Test Report | 测试报告 | 15 | 15 |
Size Measurement | 计算工作量 | 15 | 20 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 30 | 30 |
6.小结感受
这次实验可以明显感受到和上次相比有所进步,尤其是在计划制定的方面,从PSP中就可以看出计划完成的时间和实际完成的时间与上次相比,时间差更小,在项目实施之前可以制定出更为合理的计划,不会出现计划和实际相差太大的问题。而且在上次实验的基础上,对这次的需求和功能把握更加准确,上次只想着怎么能够完成老师给的功能要求,这次更多的是不仅想要完成老师的要求,还尝试着去创新一些之前没有做过的设计。
最后最重要的就是关于两人合作是否能够带来1+1>2的效果,就我本次的感受来说,我深刻感受到了结对编程的优点。不仅可以互相借鉴学习,发现对方没有意识到的错误,还可以将双方的优势最大化,共同努力协作出更好的设计。