项目 | 内容 |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
这个作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/12521474.html |
我的课程学习目标 | 通过两人合作,体验软件项目中的结对编程,掌握Github协作开发程序的操作方法 |
这个作业在哪些方面帮助我实现学习目标 | 通过两人合作实现一个软件项目的开发以及使用GitHub协作开发程序 |
结对方学号-姓名 | 201771010107-冯志霞 |
结对方本次博客作业链接 | https://www.cnblogs.com/fzx201626/p/12587656.html |
项目GitHub的仓库链接地址 | https://github.com/ajingya/managesystem |
任务1:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念
- 代码风格规范:主要是文字上的规定。代码风格的原则是:简明,易读,无二义性,即“保持简明,让代码更容易读”的原则。比如缩进、行宽、括号(清楚的表示逻辑优先级)、断行(可以通过断点来调试程序)与空白的{}行(为使代码结构清晰,选择将“{”与“}”都独占一行)、分行(不要将多个变量定义在一行中)、命名、下划线、大小写、注释(解释程序做什么、怎么做以及需要特别注意的地方)等。
- 代码设计规范:牵涉到程序设计,模块之间的关系,设计模式等诸多方面的通用原则。比如函数(最重要的原则是:只做一件事,并且要做好)、goto(函数最好有单一的出口,为有助于程序逻辑的清晰体现,可以使用任何方法包括goto)、参数处理、断言、类等。
- 代码复审:阅读代码看代码是否在代码规范的框架内正确地解决了问题。代码复审的形式有三种:自我复审、同伴复审、团队复审。软件工程中最基本的复审手段就是同伴复审。
- 结对编程:在结对编程模式下,一对程序员肩并肩、平等的、互补地进行开发工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起做测试等等。在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那位,这样程序中的错误就会少得多,程序的初始质量就会高很多,这样会省下很多以后修改,测试的时间。两人在一起合作怎么给别人提供容易接受的反馈呢?书中提到一个较好的“三明治”法。先做好铺垫,强调双方的共同点,从团队愿景讲起,让对方觉得心安,然后提出建设性的意见,最后互相鼓励,以后会做的更好。
任务2:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价
1.阅读结对方博文作业并进行评论
(1)结对方实验二博客连接
(2)评论截图如下:
2.克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。
(1)结对方Github项目仓库链接
(2)克隆结对方的项目源码到本地机器,阅读并测试代码:
- 克隆结对方代码到本地机器:
- 阅读测试结对方代码:
(3)代码复审核查表
- 概要设计:
- 代码符合需求和规格说明
- 代码设计基本考虑周全
- 代码中注释不多,可读性还行
- 代码分块写的维护容易
- 代码的每一行都检查过了
- 设计规范部分:
- 设计遵从已知的设计模式
- 有数字和字符串的存在
- 代码不影响将来的移植
- 开发者新写的代码可以用library中的功能实现
- 没有无用的代码可以清除
- 代码规范部分:
- 修改的部分符合代码标准和风格
- 具体代码部分:
- 基本的函数调用都检查了返回值并且抛出了异常
- 参数传递没有错误,字符串的长度是字符的长度,以0开始计数
- 边界条件用了if语句实现,循环有可能出现死循环
- 没有使用断言
- 有数据库的连接申请,没有释放过程。还有优化的空间
- 数据结构中没有用不到的元素
- 效能:
- 代码的效能还不错,最坏是将数据库中的数据乱码
- 代码中有可以优化的类,为避免SQL注入可以使用安全的函数
- 对于系统的调用有时会超时,导致出现404错误,通过优化网络来改善
- 可读性:
- 代码的可读性还可以,注释部分还需再添加一点
- 可测试性
- 代码不需要更新,可以直接运行
3.依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。
- 结对方项目仓库中的日志数据:
- fork对方的项目源码:
- clone对方的项目源码到本地机器
- 通过pull request向结对方的源码提出建议
- 对方通过merge pull request 回复提出的建议
- 我通过merge pull request 回复提出的建议并将其合并到我的项目中
任务3:采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统
1.需求分析
(1)可采集全校各类师生员工疫情信息;
(2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
(3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用高级查询进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可导出查询列表的EXCEL文件;
(4)采用方便的人机交互界面(如web)。
2.软件设计说明
- 此次项目的软件首先设计将人员分为三类。每一类可以对该软件进行不同的操作。师生只可以进行填报没有其它权限,学院级管理员可以对本院信息进行查询及删改操作,而指定负责人可以查看所有人员的填报数据,并生成统计表,以及导出Excel表格。其次,在设计中,在设计出软件的基础上考虑使用安全的软件生命周期进行项目开发。最后,考虑该项目具有的实际意义,并分析它的可维护性以及性能优化。
3.软件实现
(1)实现软件采用的工具:
- 软件实现采用了javaee语言。
创建了jsp生成表单,用于web界面:
- left.jsp 主页面之功能菜单子页面
- index.jsp 系统主页面,展现功能菜单
创建了包,用于对数据库中的数据进行操作:
- DatabaseConnection.java 负责数据库的连接和关闭操作
- Pager.java 完成分页操作
- LoginServlet.java 接收请求参数,进行参数验证,调用DAO完成具体的登录验证,并根据 DAO 的验证结果返回登录信息
- LoginOutServlet.java 接收请求,完整注销操作并跳转到登录表单页面
- 对于数据存储采用了mysql数据库。在其中创建了两张表,一张users表(列名分别为id、userid、name、password)存储人员的权限级别、账号、身份、密码。另一张person表(包括pid、name、note、touch、infect、fanxiao、symptom)存储人员填写的信息,学工号、姓名、学院、是否与患者接触、是否已感染、是否今日返校、是否疑似症状、有疑似症状请说明。
(2)核心代码展示:
//mysql数据库连接部分代码
<Resource
name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/demo?serverTimezone=UTC"
username="root"
password="mysql1234"
maxActive="100"
maxIdle="30"
maxWait="1000"/>
//登录界面与数据库中的users表进行比较
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String path = "index.jsp" ;//与jsp进行连接
String userid = request.getParameter("username") ;//用户名
String userpass = request.getParameter("password") ;//密码
User user = new User() ;
user.setUserid(userid) ;
user.setPassword(userpass) ;
//与数据库中的已存入数据进行对比
try{
if(DAOFactory.getIUserDAOInstance().findLogin(user)){
//将用户信息放入到session中
request.getSession().setAttribute("info",user.getName());
request.getRequestDispatcher(path).forward(request,response) ;
} else {
request.setAttribute("info", "用户名或密码错误!");
request.getRequestDispatcher("login.jsp").forward(request,response) ;
}
}catch(Exception e){//抛出异常
e.printStackTrace() ;
}
}
4.程序运行
- 登录界面
(若登录者的用户名或者密码错误则提示)
- 学生登入界面
- 学生填写界面
- 二级管理者(各个学院负责人登入)
- 二级管理者可对本学院数据进行操作
若查询其他学院则检索不到任何信息
- 二级管理者可对本学院学生信息做修改
修改成功界面
-删除学生信息
- 统计分析图
- 防控负责人登入界面
可进行模糊查询
(防控负责人也可对学生信息进行修改删除操作) - 统计分析图表
- 导出Excel表
导出成功显示
5.程序功能评测
(1)由于没有实现存储大量的数据,所以对于程序遇到较多数据时的反应速度还未检测;(2)对于生成的图表还不具体仍需改进;在登录时对于身份鉴别时,由于数据库中存储的管理人员信息不多,所以对于各学院负责人的登录不是很完善;(3)在学生进行填报时也需要进行登录虽然密码都一样,但是这一步并没有进行筛选,所以这是一个软件使用的麻烦之处。但是在两人合作下算是完成了基本的功能。
6.交流截屏(显示结对双方姓名)
7.PSP展示
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间() |
---|---|---|---|
Planning | 计划 | 15 | 20 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 30 | 25 |
Development | 开发 | 1000 | 700 |
Analysis | 需求分析 (包括学习新技术) | 60 | 80 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 (和同事审核设计文档) | 0 | 0 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 300 | 360 |
Coding | 具体编码 | 600 | 650 |
Code Review | 代码复审 | 60 | 180 |
Test | 测试(自我测试,修改代码,提交修改) | 60 | 180 |
Reporting | 报告 | 60 | 100 |
Test Report | 测试报告 | 50 | 40 |
Size Measurement | 计算工作量 | 5 | 5 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 8 | 20 |
8.向GitHub提交源码
代码规范说明
小结感受
两人合作真的能够带来1+1>2的效果吗?对于这个问题通过此次的结对编程体验,我认为两人合作能够带来1+1>2的效果。首先在结对编程中,因为有随时的沟通和交流,程序各方面的质量都取决于各方面水平较高的那位,这样,程序中的错误就会少得多,程序的质量就会高很多,这样写出来的软件比一个写出来的质量更加完善。其次,其中一位会的某个技术另一位会学习到,这样双方就同时拥有了一个新的知识,而且结对会激发双方的很多新的理念,提出更多的创意。最后,两人合作是坐在一起,交流方便,相互学习,共同进步,也更加懂得交流的技巧,虽然现在的电子科技很发达,但是这样的云交流实在是有一点一点的不方便。