201771030107-廖堃焱 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告
实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告
项目 | 内容 |
课程班级博客链接 | 课程班级博客链接 |
作业要求 | 作业要求 |
学习目标 | 1.学习和掌握软件项目开发的相关知识。2.掌握GitHub的操作方法 |
这个作业在哪些方面帮助我实现学习目标 | 学习和巩固软件开发相关知识 |
结对方学号-姓名 | 201771030124-温腾虎 |
结对方本次作业博客链接 | https://www.cnblogs.com/Vereda-Tropical/p/12589035.html |
项目Github的仓库链接地址 | 项目Github的仓库链接地址 |
任务一
代码风格规范
代码风格的原则是:简明,易读,无二义性。
其中包括:
1.缩进 4个空格
2.行宽 100字符
3.括号 用括号清楚地表示逻辑优先级
4.断行与空白的{}行 每个{ }独占一行,清晰地表示程序结构。
5.分行 一条语句占一行
6.命名 精简,会意
7.下划线 下划线用来分隔变量名字中的作用域标注和变量的语义
8.大小写 用大小写区分由多个单词组成的变量名。9.注释
其中注释要包括以下要点:
复杂的注释应该放在函数头,
注释也要随着程序的修改而不断更新
注释(包括所有源代码)应该只用ASCII字符,不要用中文或其他特殊字符
代码设计规范
代码设计规范不光是程序书写的格式问题,而且牵涉到程序设计、模块之间的关系、设计模式等方方面面,要遵守下面的规定:
1.函数
2.goto 函数最好有单一的出口,为了达到这一目的,可以使用goto。
3.错误处理 当程序的主要功能实现后,给代码加一些错误处理。
4.参数处理
5.断言
代码复审
- 找出代码的错误 1)编码错误 2)不符合团队代码规范的地方
2.发现逻辑错误 - 发现算法错误
4.发现潜在的错误和回归性错误 - 发现可能需要改进的地方
6.教育(互相教育)开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识
结对编程
1.在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作解决问题的能力更强。
2.对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
3.在企业管理层次上,结对能更有效地交流,相互学习和传递经验,分享知识,能更好地应对人员流动。
总之,结对编程是一个相互学习、相互磨合的渐进过程。
任务二
-
结对方博客链接:https://www.cnblogs.com/Vereda-Tropical/p/12501191.html
-
结对方Github项目仓库链接:https://github.com/Vereda-Tropical/test1
-
符合要求的博客评论:见下。
-
结对方项目仓库中的日志数据:
fork:2 clone:2 push:1 pull request:1 -
复审核查表
1.概要部分
1)代码符合需求和规格说明么? .
答:符合需求和规格说明。
2)代码设计是否考虑周全?
答:比较周全。
3)代码可读性如何?
答:可读性很好。
4)代码容易维护么?
答:容易维护
5)代码的每一行都执行并检查过了吗?
答:是
2.设计规范部分
1)设计是否遵从已知的设计模式或项目中常用的模式?
答:是的
2)有没有硬编码或字符串/数字等存在?
答:无
3)代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64) ?
答:不依赖某一平台,不会影响移植。
4)开发者新写的代码能否用已有的Library/SDK/Framework 中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
答:可以实现,存在。
5)有没有无用的代码可以清除?
答:无
- 代码规范部分
修改的部分符合代码标准和风格么?
答:符合 - 具体代码部分
1)有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
答:有错误处理,处理了异常。
2)参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单1双字节)的长度,是以0开始计数还是以1开始计数?
答:无错误,字节长度,是从0开始计数。
3)循环有没有可能出现死循环?
答:没有死循环。
4)有没有使用断言( Assert)来保证我们认为不变的条件真的得到满足?
答:无
5)有无可能存在资源泄漏(内存、文件、各种GUI资源、数据库访问的连接,等等) ?有没有优化的空间?
答:不会存在资源泄露,还有优化空间。
6)数据结构中有没有用不到的元素?
答:无
5.效能
1)代码的效能如何?最坏的情况是怎样的?
答:效能较好,最坏的情况是数据量过大。
2)代码中,特别是循环中是否有明显可优化的部分?
答:没有明显可优化的部分。
3)对于系统和网络的调用是否会超时?如何处理?
答:不会超时。
6.可读性
代码可读性如何?有没有足够的注释?
答:可读性较强,有足够注释。
7.可测试性
代码是否需要更新或创建新的单元测试?
答:不需要。
任务三
采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统,使之具有以下功能:
(1)可采集全校各类师生员工疫情信息;
(2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
(3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;
(4)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(5)附加分功能:定时填报提醒
-
需求分析陈述。
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施
值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
-
软件设计说明。
设计软件的初衷是为了应对新冠疫情,本软件由登陆,查询,信息录入,修改,删除等几大模块组成,用户分为教师,学生和管理员,各自具有不同的功能。
-
软件实现及核心功能代码展示:
//用户登陆
public Admin login(Admin admin){
String sql = "select * from s_admin where name=? and password=?";
Admin adminRst = null;
try {
PreparedStatement prst = con.prepareStatement(sql);//连接数据库
prst.setString(1, admin.getName());
prst.setString(2, admin.getPassword());
ResultSet executeQuery = prst.executeQuery();
if(executeQuery.next()){
adminRst = new Admin();
adminRst.setId(executeQuery.getInt("id"));
adminRst.setName(executeQuery.getString("name"));
adminRst.setPassword(executeQuery.getString("password"));
adminRst.setCreateDate(executeQuery.getString("createDate"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return adminRst;
}
//添加教师信息
public boolean addTeacher(Teacher teacher){
String sql = "insert into s_teacher values(null,?,?,?,?,?)";
try {
java.sql.PreparedStatement preparedStatement = con.prepareStatement(sql);//连数据库
preparedStatement.setString(1, teacher.getName());
preparedStatement.setString(2, teacher.getSex());
preparedStatement.setString(3, teacher.getTitle());
preparedStatement.setInt(4, teacher.getAge());
preparedStatement.setString(5, teacher.getPassword());
if(preparedStatement.executeUpdate() > 0)return true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
//连接数据库
public Connection getCon(){
try {
Class.forName(jdbcName);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection con = null;
try {
con = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
-
程序运行:程序运行时每个功能界面截图。
数据库
登录界面
功能导航
查询界面
柱状图
饼状图
-
描述结对的过程,提供两人在讨论、细化和编程时的微信或QQ截图(截图要完整,能够显示结对双方姓名)
-
提供此次结对作业的PSP。
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
Planning | 计划 | 10 | 7 |
· Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 8 | 5 |
Development | 开发 | 820 | 970 |
·· Analysis | 需求分析 (包括学习新技术) | 20 | 20 |
· Design Spec | · 生成设计文档 | 30 | 30 |
· Design Review | · 设计复审 (和同事审核设计文档) | 20 | 20 |
· Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
· Design | 具体设计 | 150 | 150 |
· Coding | 具体编码 | 420 | 520 |
· Code Review | · 代码复审 | 120 | 150 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | 50 | 60 |
·· Test Report | · 测试报告 | 20 | 30 |
· Size Measurement | 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结 ,并提出过程改进计划 | 20 | 20 |
-
小结感受:两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会。
这次合作的体会是,两人的结对编程并不是一件非常容易的事情,需要双方共同努力,协同作战,才能完成任务。其中,一定要注意的就是双方的沟通以及交流,在编程的过程中需要互相帮助,交换经验以及技巧。在遇到问题和分歧时及时沟通,才能更高效的完成任务。两个人配合的好的话,是可以做到1+1>2的,这其中需要不断地磨合和积累,当然,还要对自身能力不断加以提升,才能发挥更大的作用。