20177110117-马兴德 实验三 个人项目—软件工程结对项目

项目 内容
课程班级博客链接 https://www.cnblogs.com/nwnu-daizh/
这个作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12521474.html
我的课程学习目标 (1)体验软件项目开发中的两人合作,练习结对编程;
(2)掌握Github协作开发程序的操作方法。
作业在哪些方面帮助我实现学习目标
(1)能够锻炼两人结对掌握团队合作;
(2)学会用多种形式解决一种问题;
(3)能够帮助我将所学的理论知识运用到实践当中
结对方学号—姓名 201771010120—苏浪浪
结对方本次作业博客链接 https://www.cnblogs.com/xiaolangoxiaolang/p/12590223.html
项目Github的仓库链接地址 https://github.com/mxd791683057/student_system

实验内容和步骤:

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

  • 代码风格规范
      代码风格规范就是规范化的程序内部文档、数据结构的详细说明、清晰的语句结构、遵守某一编程规范,内容包括:命名规范、界面规范、提示及帮助信息规范、热键定义等,而代码风格规范的原则就是简明、易读、无二义性,所有代码规范的这些就是为了让自己和同伴以及团队在审查的时候更方便。
  • 代码设计规范
      代码设计规范就是要规范的书写程序,而且这里面还包括一些程序的设计、各个模块之间的联系,设计模式等方面的问题。而它的原则就是使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑、选用的控制结构只准许有一个入口和一个出口、程序语句组成容易识别的块,每块只有一个入口和一个出口、复杂结构应该用基本控制结构进行组合嵌套来实现。
  • 代码复审
      代码复审就是指是否在代码规范的框架内正确的解决问题,让同伴以及自己在复审的过程当中能够查找出问题的所在,尽量避免在程序编码过程中出现的错误。代码复审有三种形式分别是自我复审、同伴复审和团队复审,每一种复审形式都有其不同的特点,但最终都是要做到一个审查代码规范的要求。
  • 结对编程
      结对编程就是指两个人合作开发一个项目,在开发项目的过程中两个人可以共同解决遇到的困难问题而且可以分工合作完成项目的开发。不仅是这样的效果,而且结对编程的过程当中两个程序员在结对编程的过程当中做一些测试,每个人都有不同的角色,以不同的角色去做一个项目会有不同的效果。最重要的一点就是两个人结对编程,可以做到不间断的代码复审,提高设计和编码的质量,并且及时的解决问题。

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

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

  • 此项工作已经完成

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

(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)对于系统和网络调用是否会超时?如何处理?
答:不会出现超时情况,已经解决

可读性

代码可读性如何?有没有足够的注释?
答:代码简单易懂,而且在一些方面有了注释,所以不会影响阅读

可测试性

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

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

(1)首先对下载的Github进行配置


(2)使用git命令clone结对方仓库到本地便于查看修改。
![](https://img2020.cnblogs.com/blog/1474686/202003/1474686-20200328150315475-2000589969.png)


(3)完成Clone操作之后接着完成使用Fork操作将结对伙伴的项目分流至我的仓库中


(4)使用Pull Request操作对原作者的项目我进行检查之后并亲求结对伙伴进行合并

(5)然后结对伙伴同意请求与其合并

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

3.1.需求分析称述

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

  • 第一个功能:因为要设计全校师生员工的信息,我们可以在统一设计的情况下让所有人在同一个系统下进行填报,但是对于学生,我们还设计了一个学生专用的界面去填报与自己有关的一些信息,所以只有登录自己相对应的用户名就可以进行一些相关的操作(删除、修改、添加等操作)。
  • 第二个功能:第二个要实现二级部门人员查看本部门人员汇总,所以我们也设计了有专门二级人员的用户户名与密码,只要输入二级人员相应的账号就可以登录进去,然后进行一些查阅所有师生的信息并将其进行统计整理。
  • 第三个功能:考虑到第三个功能要进行所有人员的数据清单,同样的只要登录自己的账号就可以查看,同时在这个功能当中要进行高级查询,所以在方面我们也设计了可以根据自己学院、学号等查询近期所有数据情况,还有就是可以查询某一个学院或者部门的整体信息也可以利用高级查询进行查询,并且查询完这些之后我们可以将这些信息导出EXCEL文件更加方便统计。
  • 第四个功能:在设计人机交互界面上这一部分相对来说是比较简单的,而且是为了方便用户使用,相对来说比较简单。
  • 第五个功能:附加功能的定时填报提醒这是非常重要的,因为大家经常在某一个规定的时间段忘记打卡,所以这一个功能很重要,但是提醒的功能形式多样化,我们可以选择很多种方式对其进行提醒。

3.2软件设计说明

3.2.1 软件设计背景

  2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
  值得一提的是,中国互联网企业在此次疫情防控中发挥了社会治理方面的重要作用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减少发热病人之间的相互交叉感染具有重要的作用,患者在家通过互联网向在线医生问诊,减少了病毒传播或感染的风险;谣言粉碎对于公众采取理性态度看待疫情的发展具有重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具有重要作用。此外,还有新型肺炎确诊患者同行程查询工具,用户只需要输入自己所乘坐交通工具的时间和班次,就可以确认是否与被确诊感染者同行,提前做好自我隔离和就诊工作。在疫情防控中,中国互联网企业不仅发展壮大,在承担社会责任方面也越来越成熟。
  为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行访问。

3.2.2 软件总体架构设计

(1)可以采集全校师生的总体信息,也可以显示签到的时间;
(2)同时支持学生和老师的在线签到,而且学生和老师签到的系统进入的界面是不一样的,每一个界面都有不同的功能;
(3)学校的二级管理员可以查看学生的具体信息,三级管理员可以实现高级查询的功能以及导出EXCEL,这样更加有利于三级管理员统计全校师生的具体信息;
(4)人机交互界面GUI设计为了让全校师生有了更好的体验;
(5)可以实现定时填写的功能;
(6)数据库可以设计学生老师的登录账号以及密码,所有填报的信息都会在数据库记录保存;

3.3软件设计说明

  • admin_listener
      主要就是学生的一些基本信息的添加以及学校管理员的信息统计的设计,这里都会有添加、修改、删除等操作。
  • admin
      这个界面主要是用来设计一个登录成功以及进入的GUI设计界面,主要包括登录窗口,登录成功后的学生的个人信息、地址信息、健康信息以及签到信息等界面的相关操作。
  • connect
      这个就是最重要的也是最基本的一个,就是涉及GUI界面与后台数据库连接的一部分,只有连接成功才可以进行一些相关的操作
  • login
      这是登录窗口与数据库相连接的一部分,如果连接成功会显示连接成功,否则显示用户名或密码输入错误
  • user_listener
      这是登录成功进入管理员界面和师生界面会添加一些信息的操作
  • user
      在这个里面学生可以更加详细的查询到自己信息
  • BiffException
      设计管理员可以导出学生的Excel,方便统计信息。

3.4核心代码展示

package pkh;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class connect {

	Connection conn;
    Statement st;

    private static String driverStr = "com.microsoft.sqlserver.jdbc.SQLServerDriver";//显示加载数据库成功
    private static String connStr = "jdbc:sqlserver://localhost:1433; DatabaseName=人事管理系统";
    private static String dbusername = "sa";//数据库用户名
    private static String dbpassword = "mxd980302";//登录数据库的密码
    
    public connect(){}
	
	/* 获取数据库连接的函数*/
	public static Connection getConnection() {
		Connection con = null;	//创建用于连接数据库的Connection对象
		try {
			Class.forName(driverStr);// 加载sql server数据驱动
		//	System.out.println("ok");
			con = DriverManager.getConnection(
					connStr,dbusername,dbpassword);// 创建数据连接
			
		} catch (Exception e) {
			System.out.println("数据库连接失败" + e.getMessage());
		}
		return con;	//返回所建立的数据库连接
	}

}

3.5程序基本实现的运行功能截图

  • 登录界面
      登录窗口

      如果用户账号与密码都正确则会进入下一个页面,反之显示登录不成功

    学生和老师可以共同用一个登录窗口进行相关信息的填写,但是学生还有一个以及的专用窗口,先展示大家统用的

    在这个界面是可以填写大家的相关信息的
      - 管理员可以查询所有学生信息

      - 同时学生也可以添加自己信息并且可以进行修改

      我们看到信息添加成功,然后去数据库查找也是成功的
  • 同样的学生登录自己的账号可以添加自己的信息,二级管理员登录自己的信息也可以查询自己想要查询的数据,这儿直接给出管理员可以查询的功能
  • 在健康信息栏上学二级管理员、三级管理员都可以进行操作,学生可以添加信息,二级管理员只要登录自己的账号就可以进行可视化查询,当然三级管理员就可以实现高级查询以及查询所有人的相关健康信息


  • 全校师生的签到情况在也是在这个界面可以进行修改以及查询,前提条件是每个人要登录自己相应的账号才可以,下面只是介绍二级管理员和三级管理员进行的查询统计功能和高级查询功能


    不管是学生还是老师如果当天已经签到,如果再次进行签到,那么就会提醒已经签到不能再进行第二次签到
  • 对学生还有一个专用的设计界面
    学生登录自己的专属窗口查询自己的签到信息



    学生在这个界面是可以对自己所填的信息进行修改同时如果在前一天忘记签到也可以进行补签
  • 除此之外三级管理员可以对学生的相关信息导出EXCEL

    3.6描述结对结对过程,QQ截图

    3.7结对作业的PSP

3.8结对编程小结感受:两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会:

  首先我觉得两人合作去完成一个项目肯定比一个人去完成要显得更加容易,而且这样结对带来的利肯定是大于弊的,在此过程中我们可以进行无限次的对项目的讨论一次在完成 项目之后无限次的项目代码审查,我觉得这是一个非常不错的方法,往往一个人的时候就很难实现这些。在合作开发项目的过程,我们能够积极的去讨论项目当中所需要的东西并且有相对明确的分工,这给我们项目带来了极大的好处,往往能够用最少的时间完成效率最高的内容。但这样好处是多,但同时也是有弊端的,有时候可能会有意见不统一的地方,所以会经过协商来解决这些问题。

原文地址:https://www.cnblogs.com/791683057mxd/p/12578037.html