项目 | 内容 |
---|---|
这个班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
这个作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/12521474.html |
我的课程学习目标 | (1)实现两人合作以及体验结对编程(2)掌握github协作开发程序的操作方法 |
这个作业在哪些方面帮助我实现目标 | 通过此次项目合作体验结对编程 |
结对方学号-姓名 | 201771030127-杨雪雪 |
结对方本次作业博客链接 | https://www.cnblogs.com/rmxx/p/12583978.html |
本项目Github的仓库链接地址 | https://github.com/wyx-candy/report.git |
一、实验目的与要求
(1)体验软件项目开发中的两人合作,练习结对编程(Pair programming)。
(2)掌握Github协作开发程序的操作方法。
二、实验内容和步骤
任务1:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念;
代码复审:看代码是否在代码规范的框架内正确地解决了问题。
结对编程:是指两个人合作共同去完成一个项目,使得代码质量更高。
任务2:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价
结对方博客链接:https://www.cnblogs.com/rmxx/p/12440986.html
结对方项目仓库链接:https://github.com/RM-xx/ReportingSystem
要求:
(1)对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究,将以上评论内容发布到博客评论区。
(2)克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。
克隆结对方项目Reporting System:
在本地机器上查看(结对方项目ReportingSystem已在本地机器上):
代码复审核查表:
-
概要部分:
-
(1)代码能符合需求和规格说明么?
-
答:能,各查询功能都已实现
-
(2)代码设计是否有周全的考虑?
-
答:否 ,会继续完善的
-
(3)代码容易维护么?
-
答:相对容易
-
-
设计规范:
-
(1)设计是否遵从已知的设计模式或项目中常用的模式?
-
答:是的,因为相对熟悉一点
-
(2)代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64)?
-
答:这个还没有核实因为都使用Win64的系统
-
(3)开发者新写的代码能否用已有的SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
-
答:可以,有些代码是可以调用的
-
(4)有没有无用的代码可以清除?
-
答:没有,都是必要的代码
-
-
代码规范:
- (1)修改的部分符合代码标准和风格么?
- 答:相对符合
-
具体代码:
-
(1)有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
-
答:有,但不是很全有待进一步完善
-
(2)参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度?
-
答:是字节的长度
-
(3)数据结构中有没有用不到的元素?
-
答:没有
-
-
效能:
-
(1)代码的效能(Performance)如何?
-
答:达到了具体任务要求的程度
-
(2)对于系统和网络调用是否会超时?
-
答:目前没有出现超时的现象
-
-
可读性:
-
代码可读性如何?
-
答:注释清晰,可读性比较好
-
-
可测试性:
-
代码是否需要更新或创建新的单元测试?
-
答:暂时不需要
-
(3)依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。
push实现:
(1)使用git push -u origin master命令实现push操作
(2)在github仓库检查是否将项目导入
Merge pull request实现:
结对方合并请求:
任务3:采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统
1.需求分析陈述:
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集,以及学校防控办指定负责人可登录《西北师范大学疫情防控信息统计》子系统,浏览所有人员填报汇总数据清单,并且利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件。
2.软件设计说明:
(1)可采集全校各类师生员工疫情信息;
(2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
(3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;
3.软件实现及核心功能代码展示:
项目列表展示:
新建report数据库,在数据库中建立三张表:
以下三张表t_user、illness、person分别对应实体类user.java、ill.java、person.java
user登录用户表:
person存储所有上报信息的人员基本信息:
填报用户信息的代码展示:
public class SubmitServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
/**
* 提交用户信息
*/
int id=req.getIntHeader("id");
String name=req.getParameter("name");
String zhiye=req.getParameter("zhiye");
String sex=req.getParameter("sex");
String college=req.getParameter("college");
String hubei=req.getParameter("hubei");
String wuhan=req.getParameter("wuhan");
person person=new person(id,name,zhiye,sex,college,hubei,wuhan);
String contact=req.getParameter("contact");
String confirm=req.getParameter("confirm");
String date1=req.getParameter("date");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
ill ill=null;
try {
date = simpleDateFormat.parse(date1);
ill=new ill(id,contact,confirm,date);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
DbUtil db= new DbUtil();
Dao dao=new Dao();
try{
//数据库链接
Connection con=db.getCon();
if(dao.submit(con,ill)){
resp.sendRedirect("login.jsp");
}else{
resp.sendRedirect("register.jsp");
}
}catch (Exception e){
e.printStackTrace();
}
}
}
4.程序运行结果:
5.结对过程:
6.psp展示:
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际共完成需要的时间(min) |
---|---|---|---|
Planing | 计划 | 60 | 55 |
Estimate | 估计这个任务需要多长时间,并规划大致工作步骤 | 60 | 75 |
Development | 开发 | 1700 | 2500 |
Analysis | 需求分析(包括学习新技术) | 60 | 70 |
Design Spec | 生成设计文档 | 30 | 35 |
Design Review | 设计复审(和同事审核设计文档) | 30 | 35 |
Coding Standard | 代码规范(为目前的开发制定合适的规范 | 20 | 25 |
Design | 具体设计 | 100 | 130 |
Coding | 具体编码 | 1200 | 1500 |
Code Review | 代码复审 | 60 | 60 |
Test | 测试 | 60 | 80 |
Reporting | 报告 | 200 | 240 |
Test Report | 测试报告 | 40 | 60 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem & process Improvement Plan | 事后总结并提出过程改进计划 | 60 | 80 |
7.小结:
通过此次项目我和队友对结对编程有了进一步的体验,以这样一种方式合作实现一个项目的确可以使项目质量有较好的提升,在相互学习的同时我们会产生争议但最终都能得到合理的解决,这个项目对我们小组来说有一定的难度,图形用户界面设计一直是我们的短板,我们的设计总是在界面跳转中出现问题,设计缺乏健壮性所以总是碰到各种问题,我们通过语音,视频以及远程操作的方式尽自己最大的努力去完成,但仍然有许多不足的地方有待进一步完善。