• 201771030109-李佩杉 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告


    实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

    项目 内容
    课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
    作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12521474.html
    我的课程学习目标 (1)体验软件项目开发中的两人合作,练习结对编程;
    (2)掌握Github协作开发程序的操作方法。
    这个作业在哪些方面帮助我实现学习目标 (1)在程序设计方面提高了自己的编程能力;
    (2)让我了解了团队协作、分工的重要性
    结对方学号-姓名 201771030130-张芹
    结对方本次博客作业链接 https://www.cnblogs.com/zhangqin1/p/12580394.html
    项目Github的仓库链接地址 https://github.com/lipeishan82/EPS

    实验内容

    任务一:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念;

    代码风格规范:主要是文字上的规定。代码风格的原则是:简明、易读、无二义性,包括对于缩进、行宽、括号、分行、命名、下划线、注释、大小写以及断行与空白的{}行的处理;
    代码设计规范:牵扯到程序设计、模块之间的关系、设计模式等。比如针对函数,他的最重要的原则就是:只做一件事,并且要做好。可以使用goto实现单一的出口。还有错误处理方面的一些内容,比如断言的正确使用等规范。
    代码复审:看代码是否在代码规范的框架内正确地解决了问题。代码复审的三种形式:自我复审、同伴复审、团队复审。

    进行代码复审的目的:

    • 找出代码的错误,例如:
      • 编码错误
      • 不符合团队代码规范、
    • 发现逻辑错误,程序可以编译通过,但代码逻辑是错的
    • 发现算法错误
    • 发现潜在的错误和回归性的错误——当前的修改导致以前修复的缺陷又重新出现
    • 发现可能需要改进的地方
    • 教育(互相教育)开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用相关领域相关的实际知识。

    结对编程:是指一起分析,一起设计,一起写测试用例,一起做单元测试,一起做集成测试,一起写文档等等。

    任务二:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价

    对方博客链接:https://www.cnblogs.com/zhangqin1/p/12494691.html
    结对方Github项目仓库链接:https://github.com/zhangqin1013/anti-process

    博客评论:

    代码核查表:

    将对方的仓库fork并clone仓库,修改完成提交



    1.概要部分
    (1)代码能符合需求和规格说明么?
     答:基本符合需求,命名还是建议使用更加直白的命名方式代替sy0等
    (2)代码设计是否有周全的考虑?
     答:针对安全退出可以进行一定的考虑
    (3)代码可读性如何?
     答:可读性较好,建议还是多添加一些关于类的注释
    (4)代码容易维护么?
     答:比较容易
    (5)代码的每一行都执行并检查过了吗?
     答:是的,检查过

    2.设计规范部分
    (1)设计是否遵从已知的设计模式或项目中常用的模式?
     答:是
    (2)有没有硬编码或字符串/数字等存在?
     答:有一部分
    (3)代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64)
     答:没有依赖,不会影响
    (4)开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
     答:可以实现,不存在
    (5)有没有无用的代码可以清除?(很多人想保留尽可能多的代码,因为以后可能会用上,这样导致程序文件中有很多注释掉的代码,这些代码都可以删除,因为源代码控制已经保存了原来的老代码。)
     答:无

    3.代码规范部分
    (1)修改的部分符合代码标准和风格么(详细条文略)?
     答:符合代码标准

    4.具体代码部分
    (1)有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
     答:检查并处理了
    (2)参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度,是以0开始计数还是以1开始计数?
     答:无错误,字符串的长度是字节的长度,以0开始计数
    (3)边界条件是如何处理的?Switch语句的Default是如何处理的?循环有没有可能出现死循环?
     答:针对需要的操作进行Switch,Default用来针对输入错误,重新输入,循环不会出现死循环
    (4)有没有使用断言(Assert)来保证我们认为不变的条件真的满足?
     答:没有使用
    (5)对资源的利用,是在哪里申请,在哪里释放的?有没有可能导致资源泄露(内存、文件、各种GUI资源、数据库访问的连接,等等)?有没有可能优化?
     答:在类内部对接的数据库申请并释放,没有可能导致资源泄漏。
    (6)数据结构中是否有无用的元素?
     答:无

    5.效能
    (1)代码的效能(Performance)如何?最坏的情况是怎样的?
     答:代码正确,程序运行正常。
    (2)代码中,特别是循环中是否有明显可优化的部分(C++中反复创建类,C#中 string 的操作是否能用StringBuilder 来优化)?
     答:有可优化部分,但是代码正确就没有修改
    (3)对于系统和网络调用是否会超时?如何处理?
     答:不会超时

    6.可读性
    代码可读性如何?有没有足够的注释?
     答:代码对于方法以及变量的注释较多,但对于类的注释较少

    7.可测试性
    代码是否需要更新或创建新的单元测试?还可以有针对特定领域开发(如数据库、网页、多线程等)的核查表。
     答:不需要,数据库建议属性名进行更直观的更改

    任务三:采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统,使之具有以下功能:

    (1)可采集全校各类师生员工疫情信息;
    (2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
    (3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;
    (4)人机交互界面要求GUI界面(WEB页面、APP页面都可);
    (5)附加分功能:定时填报提醒


    编码规范在github仓库下的regular中

    任务四:完成结对项目报告博文作业

    PSP:
    PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min)
    Planning 计划 80 120
    ·Estimate 估计这个任务需要多少时间,并规划大致工作步骤 80 120
    Development 开发 1330 1920
    ·Analysis 需求分析 (包括学习新技术) 150 200
    ·Design Spec 生成设计文档 90 130
    ·Design Review 设计复审 (和同事审核设计文档) 100 160
    ·Coding Standard 代码规范 (为目前的开发制定合适的规范) 100 120
    ·Design 具体设计 120 150
    ·Coding 具体编码 500 700
    ·Code Review 代码复审 150 210
    ·Test 测试(自我测试,修改代码,提交修改) 120 250
    Reporting 报告 100 160
    ·Test Report 测试报告 50 90
    ·Size Measurement 计算工作量 30 40
    · Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 20 30
    需求分析

      2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。

      值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。

      为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。在此基础上提供了高级查询,相对的可视化功能,定时功能以及导出到excel表中的功能。

    软件设计说明
    功能设计:
    • 基本功能:
      • 可以对全校员工的信息进行采集
      • 二级部门可对所属人员信息进行查看,并支持高级查询,显示防疫关键信息的柱状图
      • 学校防控办指定负责人登录系统,浏览所有人员信息,利用高级查询可进行数据组合筛选,以扇形图的方式展示各学院已填报和未填报学生统计情况,以柱状图的形式显示关键疫情数据统计情况,根据搜索结果可导出查询列表的EXCEL文件
    • 扩展功能:
      • 可以实现定时(9:55)提醒
    软件实现及核心功能代码展示

    我们根据实际的情况组成了如下的四张表:
    (1)学生/教师信息表(由于填写内容一样,因此将其设计为了同一张表)

    (2)学生/教师登录表(用于存放学生教师的账号以及密码)

    (3)二级防控办登录表(我们设计由各个学院担任二级防控办,根据学院进行显示,登录时自动获取学院)

    (4)防控办登录表(存放防控办人员的信息供登录)

    在我们设计的系统中设计了如下类:
    (1)定义了一个用来进行数据库连接的类连接:DbUtil;
    (2)定义了用来判断实型、整形以及字符型内容是否为空的类:FloatUtil、IntUtil、StringUtil;
    (3)定义了针对数据库中各个表实例化的类:Admin对应防控办登录时的账号和密码,college除了账号、密码外添加了学院名称,用来判定具体登陆的是哪个二级防控办,User对应学生和教师的账号和密码,UserMes则申明了私有变量userId(用户账号),userName(用户姓名),userSex(用户性别),userCollege(所属二级防控办)等与数据库对应的信息,除此之外还申明了num变量用来获取人数以及status获取填报的状态;
    (4)进行数据库操作的类:LogOnDao(登录时针对不同的人员进行识别进入不同界面),UserDao(实现人员查询,显示,信息添加)
    (5)具体功能实现的类:扇形图的实现PieChart,导出到Excel的DBtoExcel,柱状图实现的ChartTest以及定时的TimeTrigger
    (6)界面相关的类:登录界面LogOn,师生填写界面Main_user,二级防控办界面Main_college和防控办的Main_admin


      登录界面根据人员身份不同,调用LogOnDao中相对应的方法,根据登录身份进入不同的界面中,利用TimeTrigger实现时间的提醒,如果9:55会进行时间提醒,超过十点则用户无法进入填写界面;Main_user填写当日的防疫信息,调用UserDao中userAdd实体化到个人信息获取填写数据,存入数据库中;Main_college则获取登录账号所对应的二级防控办的名称,调用UserDao中的SelectedList方法显示本二级防控办的防疫信息,高级查询调用UserDao中的Select方法实现,图表则利用柱状图显示的ChartTest类实现,根据UserDao中的ChartSex和ChartCheck方法实现数据的处理;最后,Main_user调用UserDao中的StudentList方法显示所有人员的防疫信息以及高级查询,通过DBtoExcel将结果存入指定的Excel表中,根据学院的填写情况用UserDao中的PieChart获得显示数据集,调用PieChart可实现饼状图的显示,在UserDao中的Chart以及ChartCheckAll方法可以实现对高级查询进行柱状图的数据集,再利用ChartTest即可显示对应柱状图。

    重要的方法:
    (1)数据库连接:用来连接数据库进行一系列操作的方法
    (2)用来对数据库进行数据处理的一系列方法,尤其是对于图像进行数据集处理的方法,如UserDao中的ChartCheck,Chart,PieChart等方法以及进行数据高级查询和显示的方法
    (3)具体功能实现的方法,导出Excel的方法以及各种图表显示的方法
    (4)从界面部分获取输入并传输到后台进行数据处理的方法

    关键代码:

    	/**
    	 * 柱状图显示
    	 * 
    	 * @param evt 相应事件
    	 * @throws Exception
    	 */
    	protected void jb_graphActionPerformed(ActionEvent evt) throws Exception {
    		// TODO Auto-generated method stub
    		String userID = this.idTxt.getText();
    		String userName = this.nameTxt.getText();
    		String userSex = this.sexTxt.getText();
    		String userPro = this.proTxt.getText();
    		String userCity = this.cityTxt.getText();
    		String userArrive = this.arriveTxt.getText();
    		String userCheck = this.checkTxt.getText();
    		String date = this.dateTxt.getText();
    		if (StringUtil.isEmpty(userID)) {
    			userID = "-1";
    		}
    		if (StringUtil.isEmpty(date)) {
    			date = "-1";
    		}
    
    		if (StringUtil.isEmpty(userSex)) {
    			if (StringUtil.isEmpty(userCheck)) {
    				userCheck = "是";
    			}
    			UserMes user = new UserMes(Integer.parseInt(userID), userName, userSex, userPro, userCity, userArrive,
    					userCheck, Integer.parseInt(date));
    			Connection con = null;
    			con = dbUtil.getCon();
    			ResultSet rs = userDao.ChartSex(con, user);
    			ChartTest chart = new ChartTest();
    			chart.getChart1(rs);
    		} else {
    			UserMes user = new UserMes(Integer.parseInt(userID), userName, userSex, userPro, userCity, userArrive,
    					userCheck, Integer.parseInt(date));
    			// userMes user = getUser();
    			Connection con = null;
    			con = dbUtil.getCon();
    			ResultSet rs = userDao.ChartCheck(con, user);
    			ChartTest chart = new ChartTest();
    			chart.getChart2(rs);
    		}
    	}
    	/**
    	 * 饼状图使用查询数据库的数据
    	 * 
    	 * @return 数据集
    	 * @throws Exception
    	 */
    	private static DefaultPieDataset getDataSet(String college) throws SQLException, Exception {
    		DefaultPieDataset dataset = new DefaultPieDataset();
    		java.util.List<UserMes> list = Check(college);
    		// 装成JFreeChart需要的数据集
    		for (UserMes usermes : list) {
    			dataset.setValue(usermes.getStatus(), usermes.getNum());
    		}
    		return dataset;
    	}
    
    程序运行

    (1)登录界面:可根据不同身份进行选择,如果是用户登录超过10点则无法进入并显示错过打卡时间

    (2)用户界面
    在该界面进行用户防疫信息的填写,成功则会提示添加成功

    如果在9:55则会进行提醒还没有进行打卡

    (3)学院界面:以登录物理学院为例


    查询性别为女的信息,图中显示的为本学院女生确诊情况


    查询其他信息如确诊情况则显示男女在搜索条件下的确诊情况,以患病情况为例

    (4)防控办界面,显示所有信息并进行查询

    若根据省份查询,并将查询结果导出

    导出成功

    根据学员进行人员填写情况进行统计,将搜索的学院填入,此处以计算机为例

    也可以针对其他关键信息进行查询(如果进行学号,姓名查询则不会出现柱状图),同在二级防控办中的

    结对过程



























    实验总结:

      因为不能面对面交流,可能对于结对编程的效率有一定的影响,但是,结对编程我认为还是对项目的有效进行有了非常大的帮助,首先,有明确的分工,代码设计规范等,不断沟通,完善,当存在问题时,不再是一个人闷头苦想,可以进行有效的沟通、交流共同解决问题;两人共同协作,可以更有效的发现已经撰写好的项目中存在的bug,进行修改。
      通过本次实验我对于github的使用有了更深入的了解,也对于结对编程不再是停留在表面上的理解,让我感受到了团队的力量,也能够一定程度上提高编程的效率。

  • 相关阅读:
    机器学习笔记-基本概念
    Java I/O工作机制
    Web请求过程
    Oracle创建表空间和增加表空间
    Oracle大数据表的分表处理
    Oracle通过PLSQL进行数据表之间的同步
    Ngnix学习笔记
    MySql基础学习-数据操作
    Image Segmentation的定义
    机器学习算法的分类
  • 原文地址:https://www.cnblogs.com/lipeishan/p/12551997.html
Copyright © 2020-2023  润新知