项目 | 内容 |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
这个作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/12521474.html |
我的课程学习目标 | 体验软件项目开发中的两人合作,练习结对编程、掌握Github协作开发程序的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | 通过结对项目,进一步领会软件工程的意义和流程,再次体会合作分工小团队效率。 |
结对方学号-姓名 | 201771030126-王元宗 |
结对方本次博客作业链接 | https://www.cnblogs.com/Wyuanzong/p/12581548.html |
本项目Github的仓库链接地址 | https://github.com/Fan-bozhen/--3 |
任务二:
(1)对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究,将以上评论内容发布到博客评论区。
(2)克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。
(3)依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。
符合符合(1)要求的博客评论:
符合(2)要求的代码核查表:
1.概要部分
(1)代码能符合需求和规格说明么?
答:能符合需求与规格
(2)代码设计是否有周全的考虑?
答:不太周全,修改了很多次
(3)代码可读性如何?
答:简单易懂
(4)代码容易维护么?
答:比较容易
(5)代码的每一行都执行并检查过了吗?
答:是的,检查过
2.设计规范部分
(1)设计是否遵从已知的设计模式或项目中常用的模式?
答:是
(2)有没有硬编码或字符串/数字等存在?
答:有一部分
(3)代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64)
答:mysql和eclipse为64位,如果移植到32位系统可能会出现一些问题。
(4)开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
答:可以实现,不存在
(5)有没有无用的代码可以清除?(很多人想保留尽可能多的代码,因为以后可能会用上,这样导致程序文件中有很多注释掉的代码,这些代码都可以删除,因为源代码控制已经保存了原来的老代码。)
答:有,已清除
3.代码规范部分
(1)修改的部分符合代码标准和风格么(详细条文略)?
答:符合代码标准
4.具体代码部分
(1)有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
答:查阅资料并讨论以后处理完成,检查并处理了
(2)参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度,是以0开始计数还是以1开始计数?
答:有错误已改正,字符串的长度是字节的长度,以0开始计数
(3)边界条件是如何处理的?Switch语句的Default是如何处理的?循环有没有可能出现死循环?
答:通过百度查询和书上的知识,或者问同学解决的,循环不会出现死循环
(4)有没有使用断言(Assert)来保证我们认为不变的条件真的满足?
答:没有使用
(5)对资源的利用,是在哪里申请,在哪里释放的?有没有可能导致资源泄露(内存、文件、各种GUI资源、数据库访问的连接,等等)?有没有可能优化?
答:在网上找到的,不会导致资源泄漏
(6)数据结构中是否有无用的元素?
答:检查过后没有
5.效能
(1)代码的效能(Performance)如何?最坏的情况是怎样的?
答:代码正确,程序运行正常。
(2)代码中,特别是循环中是否有明显可优化的部分?
答:有可优化部分,但是代码正确就没有修改
(3)对于系统和网络调用是否会超时?如何处理?
答:不会超时,已通过百度解决
6.可读性
代码可读性如何?有没有足够的注释?
答:代码不是很复杂,注释足够
7.可测试性
代码是否需要更新或创建新的单元测试?
还可以有针对特定领域开发(如数据库、网页、多线程等)的核查表。
答:不需要
结对方项目仓库中的Fork、Clone、Push、Pull request、Merge pull request日志数据
Fork :功能将结对方仓库分流到我的个人仓库中
Clone:clone结对方仓库到本地便于查看修改
Pull request:使用Pull request请求原作者检查合并
Merge pull request:原作者使用Merge pull request合并了我提交的代码
结对方博客链接为:https://www.cnblogs.com/Wyuanzong/p/12510138.html
结对方Github链接为:https://github.com/Wang-yuanz/-2
任务3:
采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统,使之具有以下功能:
(1)可采集全校各类师生员工疫情信息;
(2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
(3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;
(4)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(5)附加分功能:定时填报提醒
3.1需求分析
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。在此基础上提供了高级查询,相对的可视化功能,定时功能以及导出到excel表中的功能。
我们小组内对于需求分析进行了研究,主要可以展示为以下几点:
1.疫情信息的收集则为疫情的上传,教职工和学生为一类用户,可以使用该系统进行疫情上传。
2.二级部门工作人员作为类似于管理员的角色,可以查看、汇总各类信息。
3.采用JSP进行页面设计
3.2软件设计说明
系统功能
主要的类
设计说明
1.为了使得学生和工作人员功能分为两个不同的子系统,在数据库建库时,使用属性值将权限分开。
2.工作人员可以查看学生信息,增删改查学生信息。查看疫情信息,增删查疫情信息。按照学院信息查看,并绘制饼状图。
3.学生登陆系统进行疫情上报。未注册学生登陆疫情统计系统则需要注册,首先申请疫情登陆权限,默认为学生,初始密码为111111进行注册,学生登录后可自行修改密码
数据存储
(1)用户信息表
![](https://img2020.cnblogs.com/blog/1946398/202003/1946398-20200328130633489-1666058563.png)
(2)疫情统计表
![](https://img2020.cnblogs.com/blog/1946398/202003/1946398-20200328130741033-1964254422.png)
部分代码展示:主要展示登陆页面部分的后台操作设计
/**
* 后台管理员类的方法
*
*/
@Controller
@RequestMapping("/login")
public class AdminController {
@Autowired
AdminService adminService;
@Autowired
AdminMapper adminMapper;
private Logger log = Logger.getLogger(AdminController.class);
/**
* 用户后台登录页面跳转
* @return
*/
@RequestMapping(value = "")
public String loginindex(){
log.info("进入首界面");
return "login";
}
/**
* 登录验证方法
* @param request
* @param session
* @return
*/
@RequestMapping(value = "/tologin")
@ResponseBody
public void tologin(HttpServletRequest request,HttpServletResponse response, String username,String password) throws IOException{
log.info("开始登陆了");
// 新建返回值对象
@SuppressWarnings("unused")
ModelAndView mv = new ModelAndView();
response.setContentType("text/text;charset=utf-8");
response.setCharacterEncoding("UTF-8");
PrintWriter pw = response.getWriter();
HttpSession session=request.getSession(true);
// 组装对象
Admin admin = new Admin();
admin.setAdminuname(username);
admin.setAdminpwd(password);
// 查询
Admin returnAdmin = adminService.getModelByUsernameAndPassword(admin);
// 判断
if(returnAdmin==null){
pw.write("0");
}else{
session.setAttribute("admin",returnAdmin);
session.setAttribute("adminName", returnAdmin.getAdminuname());
pw.write(JSONUtil.bean2json(returnAdmin));
}
pw.close();
}
/**
* 登陆成功后跳转
* @return
*/
@RequestMapping(value = "/main", method = RequestMethod.GET)
@ResponseBody
public ModelAndView loginMain(HttpServletRequest request){
ModelAndView mv = new ModelAndView();
Admin admin = SessionUtil.getAdmin();
Integer adminrole = admin.getAdminrole();
// 新建返回值对象
mv.addObject("adminrole", adminrole);
// mv.addObject("userId", userId);
mv.addObject("userName", admin.getAdminuname());
mv.setViewName("index");
return mv;
}
3.页面设计运行图
1.登陆注册
2.用户注册
3.管理员登陆
4.学生登陆
5.根据疫情信息学院查找
6.疫情上报
7.excel导出
8.柱状图绘制
4.实验商讨截图
5.上传github
![](https://img2020.cnblogs.com/blog/1946324/202003/1946324-20200328190102861-1974586988.png)
6.PSP展示
PSP2.1 | 任务内容 | 计划需要完成的时间(hour) | 实际需要完成的时间(hour) |
---|---|---|---|
Planning | 计划 | 0.5 | 0.5 |
·Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 0.5 | 0.5 |
Development | 开发 | 24.6 | 24.5 |
·Analysis | 需求分析 (包括学习新技术) | 0.8 | 0.5 |
·Design Spec | 生成设计文档 | 0.5 | 1 |
·Design Review | 设计复审 (和同事审核设计文档) | 0.5 | 0.8 |
·Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 0.3 | 0.3 |
·Design | 具体设计 | 1 | 0.7 |
·Coding | 具体编码 | 20 | 20 |
·Code Review | 代码复审 | 1 | 0.7 |
·Test | 测试(自我测试,修改代码,提交修改) | 0.5 | 0.5 |
Reporting | 报告 | 2 | 2 |
·Test Report | 测试报告 | 1 | 0.8 |
·Size Measurement | 计算工作量 | 0.5 | 0.6 |
· Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 0.5 | 0.6 |
实验总结:
两人结对合作的确可以带来1+1>2的效果。两个人在一起可以商量实验的细节,这与一个人单独写实验是完全不同的体验。自己写肯定会有考虑不周全的地方,但是两个人可以把实验的每个方面都尽可能的想到,处理到。对于实验环节中出现的问题,两个人商量着一起解决也比一个人苦苦思考的效率更高。分工明确是合作达到一个好效果的最基本的问题。只有明确了每个人在实验中的责任,实验开展之后才会顺利的按计划进行。这次实验之后查看PSP,我发现具体编码环节的时间用了很多,这是语言基础薄弱的原因。但是两人合作可以互相纠错,互相解决变成方面的问题,这是很好的。