首页 > 技术文章 > 201771010131-王之泰 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

hackerZT-7 原文

项目 内容
课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12521474.html
课程学习目标 体验软件项目开发中的两人合作,练习结对编程、掌握Github协作开发程序的操作方法。
本作业在哪些方面帮助我实现学习目标 通过结对项目,进一步领会软件工程的意义和流程,再次体会合作分工小团队效率。
结对方学号-姓名 201771010108-韩腊梅
结对方本次博客作业链接 https://www.cnblogs.com/hanlamei/p/12574378.html
项目Github的仓库链接地址 https://github.com/YHwzt/Query-system-web

一.对结对方《实验二 软件工程个人项目》的项目成果进行评价

1.1 对项目博文作业进行阅读并进行评论

       (1)结对方博客链接

       (2)评论截图如下

1.2 克隆结对方项目源码,阅读并测试运行代码,复审同伴项目代码并记录。

       (1)结对方Github项目仓库链接

       (2)代码核查表如下。

概要部分
(1)代码符合需求和规格说明么?
       答:部分符合需求与规格。
(2)代码设计是否有周全考虑?
       答:不太周全,修改了很多次。
(3)代码可读性如何?
       答:简单易懂。
(4)代码容易维护么?
       答:较难。
(5)代码的每一行都执行并检查过了吗?
       答:是的,检查过。
设计规范部分
(1)设计是否遵从已知的设计模式或项目中常用的模式?
       答:否
(2)有没有硬编码或字符串/数字等存在?
       答:有一部分。
(3)代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64)
       答:没有依赖,不会影响。
(4)开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
       答:可以实现,不存在。
(5)有没有无用的代码可以清除?(很多人想保留尽可能多的代码,因为以后可能会用上,这样导致程序文件中有很多注释掉的代码,这些代码都可以删除,因为源代码控制已经保存了原来的老代码。)
       答:有,已清除。
代码规范部分
(1)修改的部分符合代码标准和风格么(详细条文略)?
       答:部分代码符合,不符合的已修改。
具体代码部分
(1)有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
       答:查阅资料并讨论以后处理完成,检查并处理了。
(2)参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度,是以0开始计数还是以1开始计数?
       答:有错误已改正,字符串的长度是字节的长度,是以0开始计数。
(3)边界条件是如何处理的?Switch语句的Default是如何处理的?循环有没有可能出现死循环?
       答:页面设计的边界较适宜,结对同伴只完成了页面设计,所以未涉及循环,部分功能未实现。
(4)有没有使用断言(Assert)来保证我们认为不变的条件真的满足?
       答:没有使用。
(5)对资源的利用,是在哪里申请,在哪里释放的?有没有可能导致资源泄露(内存、文件、各种GUI资源、数据库访问的连接,等等)?有没有可能优化?
       答:是在网上找到的,不会导致资源泄漏。
(6)数据结构中是否有无用的元素?
       答:检查过后有些许,已经删除或修改。
效能
(1)代码的效能(Performance)如何?最坏的情况是怎样的?
       答:代码正确,程序运行正常。
(2)代码中,特别是循环中是否有明显可优化的部分(C++中反复创建类,C#中 string 的操作是否能用StringBuilder 来优化)?
       答:有可优化部分,但修改后效果无明显提升,所以保持原样。
(3)对于系统和网络调用是否会超时?如何处理?
       答:不会超时,已解决。
可读性
代码可读性如何?有没有足够的注释?
       答:代码不是很复杂,有些许注释,之后又补充了些关键注释。
可测试性
代码是否需要更新或创建新的单元测试?还可以有针对特定领域开发(如数据库、网页、多线程等)的核查表。
       答:不需要。

-- 核查表模板引用自《构建之法-现代软件工程》

1.3 依据复审结果利用github的Fork、Clone等操作对同伴个人项目源码合作修改。

       (1)结对方的项目仓库原本Fork、Clone、Push、Pull request、Merge pull request日志数据如下。

       (2)使用git命令clone结对方仓库到本地便于查看修改。

       (3)使用fork功能将结对方仓库分流到我的个人仓库中。

       (4)使用Pull request请求原作者检查合并

       (5)原作者使用Merge pull request合并了我提交的代码。

       (6)原作者合并之后的日志数据。

二.西北师范大学疫情防控信息统计系统开发

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<List<String>> 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<String> 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的效果吗?对于这个问题通过本次合作我觉得两个人合作做出的同一件事,比起分别单独做那效果肯定是要好得多的。通过此次结对,我觉得还是利大于弊的,有个队友的存在,相当于多了一双眼睛和一个不同的思维,解决问题的角度和方法就可以多样化,多角度化,比如我和队友之间对于附加功能的设计方面就有一些争执和讨论。对于自己的不足之处也有个很好的对比体现,方便自己在以后提升补足。而且开发出来的项目也应该是比一个人做要严谨的,有些工作还可以分工合作,极大的减少了个人负担。而弊端就是意见的不统一,和行事的风格化,时间的分配不一致等等。

推荐阅读