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

项目

内容

课程班级博客链接

https://www.cnblogs.com/nwnu-daizh/

这个作业要求链接

https://www.cnblogs.com/nwnu-daizh/p/12521474.html

我的课程学习目标

(1)学习并掌握关于软件工程的基本理论知识

(2)增强个人独立实践能力

(3)提升自己的专业能力

这个作业在哪些方面帮助我实现学习目标

(1)学会如何编写并发布博客

(2)通过博客园发现更多学习知识和提升自我能力的好方法

(3)通过博客园可以与志同道合的朋友进行专业上的知识和技术交流

(4)学会如何使用Github

结对方学号-姓名

  201771010115—刘志梅

结对方本次博客作业链接

 https://www.cnblogs.com/LZM7343/p/12584530.html

结对方Github项目仓库链接

 https://github.com/LZM-1/shiyaner

本项目Github的仓库链接地址

 https://github.com/lingxiaoyanga/two

1、实验目的与要求

(1)体验软件项目开发中的两人合作,练习结对编程(Pair programming)。

(2)掌握Github协作开发程序的操作方法。

2、实验内容和步骤

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

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

(1)对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究,将以上评论内容发布到博客评论区。

(2)克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。  

  1.概要部分

    1)代码符合需求和规格说明么?

      代码较为符合需求和规格说明。

    2)代码设计是否考虑周全?

      代码设计考虑的较为周全。

    3)代码可读性如何?

      代码可读性较高,重要代码几乎都有较为清晰的注释。

    4)代码容易维护么?

      代码目前维护起来较为容易,因为代码健壮性较高。

    5)代码的每一行都执行并检查过了吗?

      我首先将结对伙伴的源代码克隆到了我的本地机器上,在详细阅读代码后,并对代码进行了运行。

  2.设计规范部分

    1)设计是否遵从已知的设计模式或项目中常用的模式?

      结对方的设计整体上遵从常用的模式。

    2)有没有硬编码或字符串/数字等存在?

      整体代码中存在的硬代码和字符串、数字较少。

    3)代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64 ) ?

      代码对于平台的依赖性较小,可移植性较强。

    4)开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?

      开发者新写的代码能用已有的SDK的功能实现,在本项目中未找到类似的功能可以调用。

    5)有没有无用的代码可以清除? 

      有一些无用的代码存在,开发者将这段代码注释起来并对其做了详细的功能注释。

  3.代码规范部分

    修改的部分符合代码标准和风格么?

      修改的部分较为符合代码标准。

  4.具体代码部分

    1)有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?

      有对部分错误进行了处理,对于调用的外部函数,检查了返回值并对部分异常进行了处理。

    2)参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单1双字节)的长度,是以0开始计数还是以1开始计数?

      参数传递无明显错误,字符串的长度是字符的长度,是以1开始计数的。

    3)边界条件是如何处理的?switch语句的default分支是如何处理的?循环有没有可能出现死循环?

      对于循环做了校验,不可能出现死循环。

    4)有没有使用断言( Assert)来保证我们认为不变的条件真的得到满足?

      部分有使用断言来保证我们认为不变的条件真的得到满足。

    5)对资源的利用,是在哪里申请,在哪里释放的?有无可能存在资源泄漏(内存、文件、各种GUI资源、数据库访问的连接,等等) ?有没有优化的空间?

      在数据库访问连接上存在一点儿问题,目前还没有完全的解决,暂时没有做到空间的优化。

    6)数据结构中有没有用不到的元素?

      数据结构中没有用不到的元素。

  5. 效能   

    1)代码的效能( Performance )如何?最坏的情况是怎样的?

      代码的效能还不错,最坏的情况可能会出现数据库连接异常的情况。

    2)代码中,特别是循环中是否有明显可优化的部分(C++中反复创建类,C#中string的操作是否能用StringBuilder来优化) ?

      循环部分存在可优化的部分。

    3)对于系统和网络的调用是否会超时?如何处理?

      暂时未出现系统和网络的调用超时的情况。

  6.可读性

    代码可读性如何?有没有足够的注释?

      代码可读性很好,注释足够充分清晰。

  7.可测试性

    代码是否需要更新或创建新的单元测试?

      代码需要更新、补充完善。

查询学生基本信息功能实现:

注册功能实现:

查询学生信息功能实现:

      

(3)依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。

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

(1)可采集全校各类师生员工疫情信息;

(2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;

(3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;

(4)人机交互界面要求GUI界面(WEB页面、APP页面都可);

(5)附加分功能:定时填报提醒

 1. 需求分析

  在新型冠状病毒(2019-nCoV) 感染的肺炎疫情之下,为了有效配合防控机构有关疫情信息的采集、统计与排查,结合我校师生疫情每日上报系统的使用体验,我们决定设计开发一款符合我校疫情防控工作需求的教职工/学生疫情上报系统,来实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。

   2. 功能设计

  • 基本功能

   学生可以登录系统来进行疫情期间个人健康状况的填写与提交,有一个数据文件,可以保存学生每日的防疫状态信息,管理员可以登录管理员界面,来查看每位同学当日的基本情况、所在区域及健康状况,还可以查询某种学生所在不同地区的人数和学生当日健康与非健康人数的统计,并用柱状图显示统计结果。学生第一次可以自行注册个人账号,以此来减轻后台工作人员的工作量度,在注册个人账号时会对学生所填写的部分关键信息进行校验(如学号、电话号码、登录密码),在学生提交表单时,可将前一天所提交的数据回显,还可以自动获取当地时间并进行保存。管理员在查看学生信息时还可以对信息进行修改、删除,当某个学生错过提交时间时还可以将该生的信息添加在数据库中。

  • 附加功能

   定时填报提醒。由于定时提醒功能在实现上还存在一点儿问题,用户在登录后才可以看到定时填报提醒,所以可能会存在填报时间迟于规定时间的情况,所以我又用了另一种方法,使系统可以获取当地实时日期和时间,并在填报提交时一起上传并保存,这样管理人员可以在查看填报信息的时候对填报时间进行查看。

  填报时间提醒:

  填报提交时间记录:

   3. 设计实现

  如下图是我所建的所有类,Discnum主要负责学生所处地区的统计,Discshop主要负责学生当日健康状况的统计,LoginDialog主要负责登录,UserAddDialog主要负责学生的注册,ShowEditor主要负责学生登录后的主页,UserAddDialog主要负责学生当日疫情填报和提交,UserQurryEditor主要负责管理员对学生当日健康状况的查看。

 

   数据库的构建

    管理员表keeper

    学生信息表user

   

4. 测试运行

  (1)注册界面

  (2)登录界面

  (3)主页

   (4)填表

 

 

    (5)管理员查看学生信息

  (6)统计

5. 粘贴自己觉得比较独特的或满意的代码片段,用博客园代码控件来显示。

复制代码
 1 获取系统时间:
import java.util.*;
import java.text.*;
public class TestDate {
public static void main(String[] args) {
Calendar ca = Calendar.getInstance();
int year = ca.get(Calendar.YEAR);//获取年份
int month=ca.get(Calendar.MONTH);//获取月份
int day=ca.get(Calendar.DATE);//获取日
int minute=ca.get(Calendar.MINUTE);//分
int hour=ca.get(Calendar.HOUR);//小时
int second=ca.get(Calendar.SECOND);//秒
int WeekOfYear = ca.get(Calendar.DAY_OF_WEEK);
}
复制代码

  系统可以获取当地实时日期和时间,并在填报提交时一起上传并保存,具体实现代码如下:

1、获取本地时间
Date date=new Date();
String d=date.toLocaleString();
System.out.println(d);
//2、执行保存sql,将提交时间与信息同时保存上传
String sql="update user set u_num= ?,u_city= ?,u_ys= ?,u_sure= ?,u_date= ? where u_id = ?";
int res=db.update(sql, phone,city,ys,sure,date,id);
if(res > 0){
    MsgUtil.showMsgOK("提交成功!");
}else{
    MsgUtil.showMsgError("提交失败!");
}

6.结对过程描述

  由于我与刘志梅同学之间有在其他学科的团队协作学习中有过组队经历,并且合作、相处非常融洽,所以在这次团队协作学习时我们又再次选择了彼此作为合作伙伴。在本次设计正式开展前,我们对本次任务做了大概的分析并合理的分配了任务,随后便正式开展了这次学习任务,在学习合作过程中我们可以做到及时交流和遇到问题时及时反馈,并一起努力解决了遇到的很多问题,下面是我们合作交流过程记录:

7.总结

  通过这次结对项目的合作开发,我体会到了团队协作的重要性,以及自己在编程能力方面的欠缺,最重要的是体会到了两人合作真的能够带来1+1>2的效果,我是一个拖延症很严重的人,这次结对合作学习让我改变了之前不好的习惯,及时对学习任务进行开展,同时也体会到了个人能力提升的重要性,以及从刚开始两个人的摸索、交流,到后面遇到问题时两人的努力合作解决,再到最后的得出成果,我体会到了努力以及结对合作的快乐和成就感,再此我要特别感谢我的合作伙伴刘志梅同学在这次结对合作中对我的耐心帮助以及对我的无限包容,但今后会继续努力,争取下次做得更好。

8.展示PSP

PSP任务内容计划共完成需要的时间(min)实际完成共需要的时间(min)
Planning 计划 20 15
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 10 15
Development 开发 168 270
Analysis 需求分析(包括学习新技术) 10 70
Design Spec 生成设计文档 0 30
Design Review 设计复审(和同事审核设计文档) 0 0
Codeing Standard 代码规范(为目前的开发制定合适的规范) 5 25
Design 具体设计 20 23
Coding 具体编码 200 259
Code Review 代码复审 30 50
Test 测试(自我测试,修改代码,提交修改) 20 30
Reporting 报告 40 35
Test Report 测试报告 20 30
Size Measurement 计算工作量 5 8
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 15 13

 

 

posted on 2020-03-28 23:54  羚小羊啊  阅读(313)  评论(2编辑  收藏  举报