项目 | 内容 |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
这个作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/12521474.html |
我的课程学习目标 | (1)体验软件项目开发中的两人合作,练习结对编程(Pair programming); (2)掌握Github协作开发程序的操作方法。 |
这个作业在哪些方面帮助我实现课程目标 | 汉堡包法的沟通方式让我们更准确地了解到对方的观点和理由,让结对编程过程更加有趣。 |
结对方学号-姓名 | 王之泰-201771010131 |
结对方本次博客作业链接 | https://www.cnblogs.com/hackerZT-7/p/12544280.html |
本项目Github的仓库链接地址 | https://github.com/YHwzt/Query-system-web |
一.对结对方《实验二 软件工程个人项目》的项目成果进行评价
1.1 评论结对方《实验二 软件工程个人项目》的博客
- 对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究,将以上评论内容发布到博客评论区。
2.1 复审同伴项目代码
- 克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。
概要部分
(1)代码符合需求和规格说明么?
答:符合需求与规格。
(2)代码设计是否有周全考虑?
答:周全。
(3)代码可读性如何?
答:易读,备注很详细。
(4)代码容易维护么?
答:容易。
(5)代码的每一行都执行并检查过了吗?
答:检查部分。
设计规范部分
(1)设计是否遵从已知的设计模式或项目中常用的模式?
答:是。
(2)有没有硬编码或字符串/数字等存在?
答:有。
(3)代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64)
答:没有依赖,不会影响。
(4)开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
答:可以实现,不存在。
(5)有没有无用的代码可以清除?
答:基本没有。
代码规范部分
(1)修改的部分符合代码标准和风格么?
答:符合。
具体代码部分
(1)有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
答:查阅资料并讨论以后处理完成,检查并处理了。
(2)参数传递有无错误,字符串的长度是字节的长度还是字符的长度,是以0开始计数还是以1开始计数?
答:没有错误,字符串的长度是字节的长度,是以0开始计数。
(3)有没有可能出现死循环?
答:没有出现死循环。
(4)有没有使用断言(Assert)来保证我们认为不变的条件真的满足?
答:没有使用。
(5)对资源的利用,是在哪里申请,在哪里释放的?有没有可能导致资源泄露?
答:资源是在网上找到的,不会导致资源泄漏。
(6)数据结构中是否有无用的元素?
答:没有无用的元素。
效能
(1)代码的效能(Performance)如何?最坏的情况是怎样的?
答:代码简洁易懂,程序运行正常,功能齐全。
(2)代码中,特别是循环中是否有明显可优化的部分?
答:代码在之前基础上已经做过优化处理,目前没有明显可优化部分。
(3)对于系统和网络调用是否会超时?如何处理?
答:不会。
可读性
代码可读性如何?有没有足够的注释?
答:代码注释详细,可读性强。
可测试性
代码是否需要更新或创建新的单元测试?
答:目前不需要。
-- 核查表模板引用自《构建之法-现代软件工程》
3.1 Github协作开发程序的操作
二.西北师范大学疫情防控信息统计系统开发
2.1 需求分析陈述
要求设计开发一款符合我校疫情防控工作需求的信息系统,使之具有以下功能:
-
(1)可采集全校各类师生员工疫情信息;
-
(2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
-
(3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;
-
(4)人机交互界面要求GUI界面(WEB页面、APP页面都可);
-
(5)附加分功能:定时填报提醒。
我们团队认为,需求分析就是剖析客户棱模两可的需求,将其细致化,可实行化。据总体需求来看,我们发现该项目要求有三类人,第一类人只具有填报功能,第二类人能够进行各自范围的查看汇总,而第三类人则相当于是一个“全能”的人。所以在数据库中我们将各类角色设计为一张表,将疫情信息设计为一张表,一共两张表。
第一个功能,要求能采集全校学生/教职工的疫情信息。我们将其抽象为第一类人,具体应该为设计能填写包含一些个人疫情相关信息的表单并将其提交给后台。除此之外应该不具有查看修改(除了自己填写的信息)等功能。
第二个功能,要求各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并能够进行多属性组合查询和可视化统计功能。这个需求的角色也就是我们抽象化的第二类人,该类角色不能够进行增删改等功能,即只能查看汇总和数据可视化,就现实生活来看该类角色相当于一个汇总人员,考虑到数据真实性等因素,该类角色没有删除增加的权限。
第三个功能,要求学校负责人登录子系统,可浏览所有人员填报汇总数据清单,可进行数据组合筛选查询,以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件。这个角色也就是第三类人,该角色除了能够进行增删查改等功能外,还能导出表格,以及对数据进行可视化分析。
第四个功能,人机交互界面要求采用GUI,这个不难实现,可采用app和web等多种多样的页面实现
附加功能,这个功能,我和同伴讨论了好些时间,因为形式多种多样,他觉得这个功能没有必要,因为如果足够重视这件事的话,忘记的可能性其实是很小的,而且基本每个人都有手机,手机上最基础的一个功能就是闹铃,自己设置个闹钟,方便了开发者也可以提醒自己。而我认为这个功能还是有必要的,比如自己没有设置闹钟,在忙其他事情的时候忘记了填写时间,所以我们最终还是决定选择一种形式提醒一下填报人员。我们构思了很多种方法,例如:通过用微信公众号做一个每天的定时提醒填报等等,但最后我们选择的是采用邮件提醒的方式,定时给用户发送一个填报提醒。
2.2 软件设计说明
2.2.1软件背景
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
2.2.2 软件总统结构设计
(1)设计三级注册登录功能,并对每个级别用户做出功能使用的限制。
(2)系统主要有注册模块,登录模块,填报模块,查询模块,导出模块,提醒模块六大块构成。
(3)接口设计
1)外部接口
用户界面: 在界面设计上,采用简单明了,易于操作的原则,突出的显示重要信息。
软件与硬件接口: 本系统设有GUI界面,考虑到操作简单, 易于管理方面,主要硬件接口设备为PC,鼠标,键盘。而软件接口主要以 windows 平台为基本平台。
2)内部各模块之间相互独立又彼此关联,主要通过方法调用实现各部分的连接。
(4)数据结构设计
设计两张结构表:用户信息表和疫情信息表。
2.2.3 软件功能描述
(1)可采集疫情信息;
(2)各二级角色可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
(3)三级角色,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;
(4)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(5)定时填报提醒功能。
2.3 软件实现
定义用户类(User),声明私有变量private的序号(id),姓名(username),密码(Password),用户类型(type),和封装各自属性的方法:set(),get(),因为属性私有,不可直接访问,例如id在外边不可直接设置,可通过setId方法来设置id的值,getId获取id的值。
定义信息类(virus),声明私有变量学院(college),班级(myclass),填报日期(startdate),姓名(username),联系电话(tel),省(province),市(city),区(areas),留学生(ischinesestudent),武汉学生(iswuhanstudent),湖北学生(ishubeistudent),14天接触(is14contact),在武汉(isinwuhan),在湖北(isinhubei),今天返校(istodayformother),疑似(islikevirus),确诊(isconfirmvirus)。
beans类为Javabean类,config配置类,mapper为dao类,service服务类,每类只负责一项职责,每个方法完成一个计算,程序逻辑简单,对类有较高的可读性。设计接口时,给每一个接口按一定比例设计分配方法,减少代码冗余。且高层模块不依赖低层模块。
2.4 核心功能代码展示
/** * 将数据写入到excel中 */
public static void makeExcel(List> result,String[] tittle) {
try {
// 创建一个workbook对应一个excel文件
HSSFWorkbook workbook = new HSSFWorkbook();
// 在workbook中创建一个sheet对应excel中的sheet
HSSFSheet sheet = workbook.createSheet("病例日期表");
// 在sheet表中添加表头第0行,旧版本poi对sheet的行列有限制
HSSFRow row = sheet.createRow(0);
// 创建单元格,设置表头
HSSFCell cell = null;
for (int i = 0; i < tittle.length; i++) {
cell = row.createCell(i);
cell.setCellValue(tittle[i]);
}
// 写入数据
for (int i = 0; i < result.size(); i++) {
List oneData = result.get(i);
HSSFRow row1 = sheet.createRow(i + 1);
//创建单元格设值
for (int j = 0; j < oneData.size(); j++) {
row1.createCell(j).setCellValue(oneData.get(j));
}
}
//将文件保存到指定的位置
FileOutputStream fos = new FileOutputStream("D:\\result.xls");
workbook.write(fos);
System.out.println("写入成功");
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
2.5 程序运行功能界面截图。(部分图为了让功能完整截图,将页面缩放)
基本功能
- 角色注册
- 三级角色登陆
- 学生/教职工填报功能
- 各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,高级查询功能进行多属性组合查询和可视化统计功能;
- 学校负责人登录子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,
- 删除功能
- 添加功能
- 系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,
- 可【导出】查询列表的EXCEL文件;
(4)人机交互界面要求GUI界面
WEB页面
附加功能
- 定时填报提醒
2.6 描述结对的过程,提供两人在讨论、细化和编程时的微信或QQ截图(截图完整,能够显示结对双方姓名)
2.7 PSP模型展示
PSP2.1 | 内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 30 | 40 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 30 | 40 |
Development | 开发 | 1100 | 1330 |
Analysis | 需求分析 (包括学习新技术) | 60 | 180 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 (和同事审核设计文档) | 60 | 50 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 40 |
Design | 具体设计 | 240 | 200 |
Coding | 具体编码 | 500 | 600 |
Code Review | 代码复审 | 60 | 50 |
Test | 测试(自我测试,修改代码,提交修改) | 120 | 180 |
Reporting | 报告 | 120 | 180 |
Test Report | 测试报告 | 40 | 60 |
Size Measurement | 计算工作量 | 40 | 30 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 40 | 90 |
2.8 小结感受
这是我第二次以结对编程的形式来完成项目,相比于第一次结对编程带给我的新鲜感,这次结对编程给我带来了很多收获,不仅学会了如何更好地和同伴去沟通交流,还学会了很多新知识。我自己的编程能力和知识储备都比较差,在结对编程中,我发现我的同伴不仅对基础知识掌握牢固,而且动手能力强,很多时候都是在他的引导下,项目一步步实现,他身上有很多值得我学习的地方。
对于“两人合作是否真的能够带来1+1>2的效果”这个问题,我通过本次的结对编程认为:两个人合作完成一个项目,要比起自己单独去完成效果好很多,不仅会减轻双方的工作量,而且每个人对于同一个事物都会有不同的想法,在沟通和交流之后,往往最后呈现的是两个人好的想法的集合体。并且每个人擅长的地方不一样,在合作中,可以最大化发挥自己的优点,同时也可以从对方身上学到很多自己不擅长的技术。