项目 | 内容 |
---|---|
课程班级博客连接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
做业要求连接 | http://www.javashuo.com/article/p-zkvgqdwq-mk.html |
课程学习目标 | 体验软件项目开发中的两人合做,练习结对编程、掌握Github协做开发程序的操做方法。 |
本做业在哪些方面帮助我实现学习目标 | 经过结对项目,进一步领会软件工程的意义和流程,再次体会合做分工小团队效率。 |
结对方学号-姓名 | 201771010108-韩腊梅 |
结对方本次博客做业连接 | http://www.javashuo.com/article/p-rpvmwiux-ns.html |
项目Github的仓库连接地址 | https://github.com/YHwzt/Query-system-web |
概要部分
(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)对于系统和网络调用是否会超时?如何处理?
答:不会超时,已解决。
可读性
代码可读性如何?有没有足够的注释?
答:代码不是很复杂,有些许注释,以后又补充了些关键注释。
可测试性
代码是否须要更新或建立新的单元测试?还能够有针对特定领域开发(如数据库、网页、多线程等)的核查表。
答:不须要。html
-- 核查表模板引用自《构建之法-现代软件工程》git
(1)结对方的项目仓库本来Fork、Clone、Push、Pull request、Merge pull request日志数据以下。github
(2)使用git命令clone结对方仓库到本地便于查看修改。web
(3)使用fork功能将结对方仓库分流到个人我的仓库中。数据库
(4)使用Pull request请求原做者检查合并编程
(5)原做者使用Merge pull request合并了我提交的代码。windows
(6)原做者合并以后的日志数据。设计模式
要求设计开发一款符合我校疫情防控工做需求的信息系统,使之具备如下功能:微信
(1)可采集全校各种师生员工疫情信息;网络
(2)各二级部门疫情防控工做负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
(3)学校防控办指定负责人登陆《西北师范大学疫情防控信息统计》子系统,可浏览全部人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展现各学院已填报和未填报学生统计状况和关键疫情数据统计状况,可【导出】查询列表的EXCEL文件;
(4)人机交互界面要求GUI界面(WEB页面、APP页面均可);
(5)附加功能:定时填报提醒。
就咱们团队的理解来看,需求分析就是剖析客户棱模两可的需求,将其细致化,可实行化。据整体需求来看,咱们发现该项目要求有三类人,第一类人只具备填报功能,第二类人可以进行各自范围的查看汇总,而第三类人则至关因而一个“全能”的人。因此在数据库中咱们将各种角色设计为一张表,将疫情信息设计为一张表,也就是两张表。
就第一个功能,要求能采集全校学生/教职工的疫情信息。咱们将其抽象为第一类人,具体应该为设计能填写包含一些我的疫情相关信息的表单并将其提交给后台。除此以外应该不具备查看修改(除了本身填写的以外)等功能。
就第二个功能,要求各二级部门疫情防控工做负责人可查看本部门人员疫情汇总,并可以进行多属性组合查询和可视化统计功能。这个需求的角色也就是咱们抽象化的第二类人,该类角色不可以进行增删改等功能,即,只能查看汇总和数据可视化,就现实生活来看该类角色至关于一个汇总人员,考虑到包庇等现象,该角色没有删除增长的权限。
就第三个功能,要求学校负责人登陆子系统,可浏览全部人员填报汇总数据清单,可进行数据组合筛选查询,以图形化方式展现各学院已填报和未填报学生统计状况和关键疫情数据统计状况,可【导出】查询列表的EXCEL文件。这个角色也就是第三个角色,该角色除了可以进行增删查改等功能外,还能导出表格和数据可视化。
就第四个功能,人机交互界面要求采用GUI,这个不难实现,可采用app和web等多种多样的页面实现。
就附加功能,这个功能,我和同伴讨论了好些时间,由于形式多种多样,我以为这个功能没有必要,从个人角度看来,若是足够重视某件事的话,忘记的可能性实际上是很小的,并且基本每一个人都有手机,手机上最基础的一个功能就是闹铃,本身设置个闹钟,方便了开发者也提醒了本身。而个人队友则是认为人无完人,仍是选择一种形式提醒一下填报人员。因此咱们构思了不少种方法,例如,微信已经成为一个大众通信软件,用微信公众号作天天定时提醒填报等等。最后咱们选择的是采用邮件提醒的方式,定时给用户发送一个填报提醒。
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采起了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工做;在全国范围内调配口罩、防御服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其余省份调集物资保障武汉市民平常生活。
值得一提的是,中国互联网企业在这次疫情防控中发挥了社会治理方面的重要做用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减小发热病人之间的相互交叉感染具备重要的做用,患者在家经过互联网向在线医生问诊,减小了病毒传播或感染的风险;谣言粉碎对于公众采起理性态度看待疫情的发展具备重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具备重要做用。此外,还有新型肺炎确诊患者同行程查询工具,用户只须要输入本身所乘坐交通工具的时间和班次,就能够确认是否与被确诊感染者同行,提早作好自我隔离和就诊工做。在疫情防控中,中国互联网企业不只发展壮大,在承担社会责任方面也愈来愈成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各种人员基本状况、所在区域及活动轨迹及健康情况的信息收集。师生经过我校企业微信服务大厅访问该系统进行远程信息填报。
(1)设计三级注册登陆功能,并对每一个级别用户作出功能使用的限制。
(2)系统主要有注册模块,登陆模块,填报模块,查询模块,导出模块,提醒模块六大块构成。
(3)接口设计
1)外部接口
用户界面: 在界面设计上,采用简单明了,易于操做的原则,突出的显示重要信息。
软件与硬件接口: 本系统设有GUI界面,考虑到操做简单, 易于管理方面,主要硬件接口设备为 PC,鼠标,键盘。而软件接口主要以 windows 平台为基本平台。
2)内部各模块之间相互独立又彼此关联,主要经过方法调用实现各部分的链接。
(4)数据结构设计
设计两张结构表:用户信息表和疫情信息表。
(1)可采集疫情信息;
(2)各二级角色可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
(3)三级角色,可浏览全部人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展现各学院已填报和未填报学生统计状况和关键疫情数据统计状况,可【导出】查询列表的EXCEL文件;
(4)人机交互界面要求GUI界面(WEB页面、APP页面均可);
(5)定时填报提醒功能。
定义用户类(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服务类,每类只负责一项职责,每一个方法完成一个计算,程序逻辑简单,对类有较高的可读性。设计接口时,给每个接口按必定比例设计分配方法,减小代码冗余。且高层模块不依赖低层模块。
/** * 将数据写入到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(); } }
基本功能
(4)人机交互界面要求GUI界面
WEB页面
附加功能
本次经过合做项目,和队友进行了一段很好的合做时期,分工明确,有条不紊,虽然中途出了些争执,但最后仍是很好的达成一致。
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 |
两人合做真的可以带来1+1>2的效果吗?对于这个问题经过本次合做我以为两我的合做作出的同一件事,比起分别单独作那效果确定是要好得多的。经过这次结对,我以为仍是利大于弊的,有个队友的存在,至关于多了一双眼睛和一个不一样的思惟,解决问题的角度和方法就能够多样化,多角度化,好比我和队友之间对于附加功能的设计方面就有一些争执和讨论。对于本身的不足之处也有个很好的对比体现,方便本身在之后提高补足。并且开发出来的项目也应该是比一我的作要严谨的,有些工做还能够分工合做,极大的减小了我的负担。而弊端就是意见的不统一,和行事的风格化,时间的分配不一致等等。