项目 | 内容 |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
这个作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/12521474.html |
我的课程学习目标 | 熟悉结对编程的过程 |
这个作业在哪些方面帮助我实现学习目标 | 在开发过程中始终都是两个人一起讨论一起实现,提高了效率 |
结对方学号-姓名 | 201771030123-王爽 |
结对方本次博客作业链接 | https://www.cnblogs.com/JZYWS/p/12571927.html |
本项目Github的仓库链接地址 | https://github.com/Gu19901212/Partner |
任务1:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念
1、代码风格规范:代码风格规范主要是文字上的规定,看似表面文章,实际上非常重要。原则是:简明、易读、无二义性。主要包括缩进、行宽、括号、注释等在文字上的规定。
2、代码设计规范代码设计规范牵涉到程序设计、模块之间的关系、设计模式等方方面面的通用原则。包括函数、goto、错误处理、断言等。
3、代码复审代码复审要解决的是项目早期的问题,看代码是否在代码规范的框架内正取地解决了问题。有自我复审、同伴复审、团队复审三种形式。目的是找出代码的错误、发现逻辑错误、发现算法错误、发现可能需要改进的地方等。
4、结对编程:在结对编程模式下,一对程序员肩并肩、平等地,互补地进行开发工作。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起做单元测试,一起做集成测试,一起写文档。有两个角色:驾驶员和领航员。如果运用得当,结对编程可以取得更高的投入产出比。
任务2:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价
结对方博客链接https://www.cnblogs.com/JZYWS/p/12511836.html
结对方Github项目仓库链接https://github.com/JzyWs/wangS.git
一、对结对方项目博文作业进行阅读并进行评论
二、隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记。
完成后就可以看到结对方的代码已经克隆到了本地机器
代码复审核查表
1. 概要部分
(1)代码符合需求和规格说明么?
代码基本符合需求,需求要求支持查询某人在某一天的疫情情况, 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。实际实现的是能够按学号查询某个学生的100天的疫情情况,并用柱状图表示。能够查询某天的2000个学生的疫情情况,并用柱状图显示。符合规格说明。
(2)代码设计是否考虑周全?
考虑的比较周全。
(3)代码可读性如何?
代码读起来容易,注释加的容易理解。就是缩进和排版可以再优化一下。
(4)代码容易维护么?
容易维护。
(5)代码的每一行都执行并检查过了吗?
已经检查过,没有出错。
2.设计规范部分
(1)设计是否遵从已知的设计模式或项目中常用的模式?
是。
(2)有没有硬编码或字符串/数字等存在?
存在硬编码和字符串/数字。
(3)代码有没有依赖于某一平台,是否会影响将来的移植( 如Win32到Win64) ?
不依赖于某一平台不会影响移植。
(4)开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
能。我认为柱状图显示可以重复使用,不用重新实现。但是由于两个功能是分开实现的,所以需要重新实现。
(5)有没有无用的代码可以清除? 没有可以清除的无用代码。
3. 代码规范部分
(1)修改的部分符合代码标准和风格么(详细条文略)?
结对方没有提供代码规范。
4.具体代码部分
(1)有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
进行了错误处理,检查了返回值或处理了异常。
(2)参数传递有无错误?
参数传递无错误。
(3)边界条件是如何处理的?循环有没有可能出现死循环?
边界条件从1开始,到(记录数-1)结束。不会出现死循环。
(4)有没有使用断言( Assert)来保证我们认为不变的条件真的得到满足?
没有使用断言。
(5)对资源的利用,是在哪里申请,在哪里释放的?有无可能存在资源泄漏(内存、文件、各种GUI资源、数据库访问的连接,等等) ?有没有优化的空间?
申请的是excel文件,没有释放。可能存在资源泄露。有优化的空间。
(6)数据结构中有没有用不到的元素?
没有。
5.效能
(1)代码的效能( Performance )如何?最坏的情况是怎样的?
因为数据量较小,效能比较好。最坏的情况是数据量特别大的时候。因为统计是用循环实现的。
(2)代码中,特别是循环中是否有明显可优化的部分(C++中反复创建类,C#中string的操作是否能用StringBuilder来优化) ?
循环没有明显可优化的部分。
结对方项目仓库中的Fork、Clone、Push、Pull request、Merge pull request日志数据
任务3:采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统,使之具有以下功能:
(1)可采集全校各类师生员工疫情信息;
(2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
(3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;
(4)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(5)附加分功能:定时填报提醒.
一、需求分析
1、背景
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
2、功能需求
由于实际实现情况与预期有差别,所以功能需求为实际实现的功能:
(1)全校师生都可以填报疫情情况;
(2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总;
(3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单;
(4)在网页上更新数据库之后就再从数据库中读出来进行可视化和导出处理(此功能是单独的一个项目yiqingtoExcel);
(5)人机交互使用Web页面。
二、软件设计说明
1、软件采用Servlet+JSP+Jdbc+dbutils+EasyUI+jQuery+Ajax+面向接口编程等技术实现。通过Servlet将前台与后台连接起来。
2、数据库采用MySQL,设计了如图所示的六张表
collegeadmin:存储各二级部门疫情防控工作负责人的信息;
schooloffice:存储学校防疫办负责人的信息;
student:存储学生信息;
teacher:存储老师信息;
yiqing:存储学生疫情信息;
yiqing_teacher:存储老师疫情信息。
3、系统功能图
三、软件实现及核心功能代码展示
1、项目yiqing主要的类包括:
(1)BaseDao.java:数据库操作基础类,利用泛型和反射机制来抽象数据库基本的增删该查操作;
(2)yiqingDao.java:各二级部门疫情防控工作负责人提交本学院师生疫情信息后对数据库进行修改;
(3)CollegeadminServlet.java:各二级部门疫情防控工作负责人查看本学院学生信息;
(4)LoginServlet.java:控制不同身份的人登录;
(5)SchoolOfficeServlet.java:学校防疫办获取各学院已经提交的学生和老师的疫情信息并导出为Excel文件;
(6)StudentServlet.java:各二级部门疫情防控工作负责人查看本学院老师和学生的疫情信息并提交给学校防疫办;
(7)yiqingServlet.java:学生填报疫情信息以及控制条件;
isEffectiveDate(Date nowTime, Date startTime, Date endTime)函数:控制学生在每天十点以前填报疫情情况,如果在十点以前返回true,否则返回false。
(8)yiqingTeacherServlet.java:老师填报疫情信息以及控制条件;
2、项目yiqingtoExcel主要的类包括:
(1)DBhelper.java:连接MySQL数据库的工具类;
(2)Yiq.java:数据库中yiqing表的实体类;
(3)YiqService.java:读取数据库中的表的服务类;
(4)FromDbToExcel.java:将数据库中的数据导出Excel。
核心代码
/*判断时间是否在每天十点以前*/
//从系统获取当前时间
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String now =df.format(new Date());
//从系统获取是哪一天
SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd ");
String start =df2.format(new Date());
//从系统获取是哪一天
SimpleDateFormat df3 = new SimpleDateFormat("yyyy-MM-dd ");
String end =df3.format(new Date());
String format = "yyyy-MM-dd HH:mm";
Date nowTime = new SimpleDateFormat(format).parse(now);
Date startTime = new SimpleDateFormat(format).parse(start+"00:00");
Date endTime = new SimpleDateFormat(format).parse(end+"10:00");
System.out.println(isEffectiveDate(nowTime, startTime, endTime));
if(isEffectiveDate(nowTime, startTime, endTime)){
if(studentDao.add(student)){
msg = "提交成功";
}
}
else {
msg="请于每天十点填写!";
}
studentDao.closeConnection();
resp.getWriter().write(msg);
}
/**
* 判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
* @param nowTime 当前时间
* @param startTime 开始时间
* @param endTime 结束时间
* @return
*/
public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
if (nowTime.getTime() == startTime.getTime()
|| nowTime.getTime() == endTime.getTime()) {
return true;
}
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar begin = Calendar.getInstance();
begin.setTime(startTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
if (date.after(begin) && date.before(end)) {
return true;
} else {
return false;
}
}
}
四、程序运行
1、系统在eclipse中的运行图:
如果登录身份错误的话会拒绝该用户登录系统并给出相应提示,同样的密码等错误也会给出相应提示。
2、学生填报疫情情况(老师的操作的学生相同,不做重复展示):
填写完成提交后会提示:
当同一个人在同一天重复提交时:
当填报时间超过当天10点时:
3、各二级部门负责人登录系统
查看本院学生填报情况:
查看本院老师填写情况
查看学生和老师疫情信息的界面都有提交按钮,用于提交给学校防疫办,提交成功会提示:
查看本院学生信息:
4、学校防控办负责人登录系统
查看全校各学院已提交的师生疫情信息
5、导出的Excel
6、可视化统计
五、将项目上传到github仓库中
六、结对的过程
七、PSP展示
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 30 | 25 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 30 | 30 |
Development | 开发 | 1745 | 1925 |
Analysis | 需求分析(包括学习新技术) | 90 | 120 |
Design Spec | 生成设计文档 | 30 | 40 |
Design Review | 设计复审(和同事审核设计文档) | 90 | 70 |
Coding Standard | 代码规范(为目前的开发制定合适的规范) | 20 | 20 |
Design | 具体设计 | 40 | 50 |
Coding | 具体编码 | 1080 | 1200 |
Code Review | 代码复审 | 60 | 90 |
Test | 测试(自我测试,修改代码,提交修改) | 60 | 90 |
Reporting | 报告 | 180 | 165 |
Test Report | 测试报告 | 30 | 25 |
Size Measurement | 计算工作量 | 5 | 5 |
Postmortem&Process Improvement Plan | 事后总结并提出过程改进计划 | 60 | 50 |
八、小结感受:两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会。
我认为两人合作真的能够带来1+1>2的效果。通过这次与同学合作,对她的代码进行复审并且修改我学到了很多。比如github的一些操作还有怎样对别人的代码进行复审。上次的项目是一个人独立完成的,就会感觉很吃力。两个人就会有各自的想法,想法多了办法也就多了,所以明显感觉轻松了许多。每个人都有自己需要做的部分,另一个人也会及时指出不足以便于及时进行修改。大大提高了开发的效率。