项目 | 内容 |
班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
这个作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/12521474.html |
我的课程学习目标 | (1)体验结队一起完成项目过程;(2)更加的熟悉团队成员的分工协作。 |
这个作业在哪些方面帮助我实现学习目标 | 和结队小伙伴在交流,探讨遇到的难题的过程中。 |
结对方学号-姓名 | 201771010122-王斌龙 |
结对方本次博客作业链接 | https://www.cnblogs.com/1171849616a/p/12587209.html |
本项目Github的仓库链接地址 | https://github.com/1171849616/test3/network/members |
1、实验目的与要求
(1)体验软件项目开发中的两人合作,练习结对编程(Pair programming)。
(2)掌握Github协作开发程序的操作方法。
2、实验内容和步骤
任务1:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念;
代码风格规范:是对代码格式的一种规定和约束,也是为了更好的阅读和美观。
代码风格的原则是:简明、易读、无二义性,包括对于缩进、行宽、括号、分行、命名、下划线、注释、大小写
代码设计规范:编码规范、 命名规范、共性规范、 个性规范、 注释规范、 排版规范、 空行、代码行、代码行内的空格.
代码设计规范原则是:只做一件事,并且要做好。可以使用goto实现单一的出口。还有错误处理方面的一些内容,比如断言的正确使用等规范。
代码复审:看代码是否在代码规范的框架内正确地解决了问题。代码复审的三种形式:自我复审、同伴复审、团队复审。
进行代码复审的目的:
1、 所有的代码是否简单易懂
2、代码符合你所遵循的编程规范么这通常包括大括号的位置,变量名和函数名,行的长度,缩进,格式和注释。
3、 是否存在多余的或是重复的代码。
4、是否有被注释掉的代码。
5、代码能够工作么不。
6、它有没有实现预期的功能,逻辑是否正确等。
7、锻炼自己的读码能力。
结对编程:无非就是两个人或者一个小组共同解决某些编程问题,然后实现一个项目的过程。这样其实比一个人刷题会好很多。首先,你和你的队友会一起思考,一起
进步,但由于想法差异会揪出你们之间存在的问题,这是一个人编程比较难以实现的。其次,结对编程可以营造较好的学习气氛,使得双方自觉学习,互相进步,相比
一个人的进步速度会快很多。
任务2:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价,具体要求如下:
(1)对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究,将以上评论内容发布到博客评论区。
(2)克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。
可以正常运行,代码符合需求与规格,设计符合基本要求,代码设计规范不好,应该多建一些类来调用会更加清晰规范。代码不是很复杂,有注释。
(3)依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。
fork操作:
clone操作:
Merge Pull request操作:
邮件通知
成功
下载
任务3:采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统,使之具有以下功能:
(1)可采集全校各类师生员工疫情信息;
(2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
(3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;
(4)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(5)附加分功能:定时填报提醒
1.需求分析陈述。
2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施: 2020年1月23日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。
通过对(1)-(5)的功能分析,可以得出该项目有三类人的需求,第一类只具有填报功能,第二类可以对自己部门的情况进行查看,而第三类人则可以查看全部数据并拥有新的权限。
2.软件设计说明。
1)本项目主要由5个模块构成,其中包括登录模块,功能入口模块,信息采集模块,二级部门模块,防控办模块。
2)二级部门的成员,学生和教职工只能进行疫情上报。
3)二级部门的负责人,可以查看自己部门的疫情上报情况,并进行查找等操作。
4)防控办的负责人,可以查看所有人的上报情况,并进行相应操作。
3.软件实现及核心功能代码展示
有Demo类,主方法为main,在run中有登录,信息采集,查找,导出Excel等功能,在test中有生成柱状图功能。
在进行Excel相关操作时遇到报错问题,经查询资料找到了解决办法,通过导入jar包得以解决,以下是导入的jar包(当然其中包含了生成柱状图等其他包)。
软件实现及核心功能代码展示:
有Demo类,主方法为main,在run中有登录,信息采集,查找,导出Excel等功能,在test中有生成柱状图功能。
在进行Excel相关操作时遇到报错问题,经查询资料找到了解决办法,通过导入jar包得以解决,以下是导入的jar包(当然其中包含了生成柱状图等其他包)。
// TODO 自动生成的方法存根
try {
FileInputStream fs = new FileInputStream("E://test.xls");// 获取e://test.xls,此为填报信息表
POIFSFileSystem ps = new POIFSFileSystem(fs);// 使用POI提供的方法得到excel的信息
HSSFWorkbook wb = new HSSFWorkbook(ps);
HSSFSheet sheet = wb.getSheetAt(0); // 获取到工作表,因为一个excel可能有多个工作表
HSSFRow row = sheet.getRow(0); // 获取第一行(excel中的行默认从0开始,所以这就是为什么,一个excel必须有字段列头),即,字段列头,便于赋值
FileOutputStream out = new FileOutputStream("E://test.xls");// 向e://test.xls中写数据
row = sheet.createRow((short) (sheet.getLastRowNum() + 1)); // 在现有行号后追加数据
row.createCell(0).setCellValue(j1.getText()); // 设置第一个(从0开始)单元格的数据
row.createCell(1).setCellValue(j2.getText()); // 设置第二个(从0开始)单元格的数据
row.createCell(2).setCellValue(j3.getText());
row.createCell(3).setCellValue(j4.getText());
if (jr1.isSelected()) {
row.createCell(4).setCellValue("是");
}
if (jr2.isSelected()) {
row.createCell(4).setCellValue("否");
}
if (jr3.isSelected()) {
row.createCell(5).setCellValue("是");
}
if (jr4.isSelected()) {
row.createCell(5).setCellValue("否");
}
if (jr5.isSelected()) {
row.createCell(6).setCellValue("是");
}
if (jr6.isSelected()) {
row.createCell(6).setCellValue("否");
}
row.createCell(7).setCellValue(j5.getText());
out.flush();
wb.write(out);
out.close();
} catch (FileNotFoundException e2) {
// TODO 自动生成的 catch 块
System.out.println("信息文件找不到");
e2.printStackTrace();
} catch (IOException e1) {
// TODO 自动生成的 catch 块
System.out.println("信息文件读取错误");
e1.printStackTrace();
}
}
});
程序运行:程序运行时每个功能界面截图。
登录界面:
1)登录界面
分为4种情况:学生/老师;二级部门;防控办;输入错误
2)功能入口界面
有3种登录方式
输入学生/老师时信息上报界面
当输入二级部门时出现二级部门负责人入口按钮,
当输入防控办时出现防控办负责人入口按钮,
3)信息采集界面
当填写完信息,点击提交后,界面消失,数据将会保存在Excel表中;当然点击清空按钮可迅速清理全部信息。
当一次提交后,再次点击功能入口界面时,会提示错误。
4)二级部门界面
点击"二级部门负责人入口"按钮,出现填写学院的窗口。
输入相应的相应,点击ok后,出现二级部门负责人查看界面。
有列出全部信息的功能。
是/否...的按钮功能可显示对应“是”的信息并生成柱状图,当再次按下按钮时显示“否”的信息。
输入相应信息(学号、所在地、姓名、日期)查看对应的数据。
其中当同时输入姓名和日期时,可查看某人在某天的记录。
5)防控办界面
点击"防控办负责人入口"按钮,出现防控办负责人查看界面。
大致原理类似于二级负责人查看界面的功能设计,查找学院的原理同上,新添了“某日是/否填报”按钮及其对应的日期输入框,以及导出Excel文件。
列出全部信息:
是/否发热:
输入日期,按下“某日是/否填报”按钮,可查看当日填写情况。此原理是通过对比“人员信息.xls”和“test.xls”中的某日的对应姓名,来确定填写人员和未填写人员。
按下“导出exl文件”按钮时可导出填写信息。
描述结对的过程,提供两人在讨论、细化和编程时的微信或QQ截图(截图要完整,能够显示结对双方姓名)
提供此次结对作业的PSP。
PSP | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
Planning | 估计这个任务需要多少时间,并规划大致工作步骤 | 10 | 6 |
Development | 开发 | 1760 | 2350 |
· Analysis | 需求分析 (包括学习新技术) | 30 | 60 |
· Design Spec | · 生成设计文档 | 5 | 5 |
· Design Review | · 设计复审 (和同事审核设计文档) | 10 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 5 | 5 |
· Design | · 具体设计 | 30 | 30 |
· Coding | · 具体编码 | 1500 | 2000 |
· Code Review | · 代码复审 | 140 | 200 |
· Test | · 测试(自我测试,修改代码,提交修改) | 70 | 80 |
Reporting | 报告 60 | 120 | |
· Test Report | · 测试报告 | 5 | 5 |
· Size Measurement | · 计算工作量 | 5 | 5 |
·Postmortem & Process Improvement Plan | · 事后总结,并提出过程改进计划 | 15 | 20 |
小结感受:两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会。
我感觉是的,但首先是必须两个人协作好,有共同向一个方向努力的想法,俗话说众人拾柴火焰高,如果有一个偷懒不干那另一个就要受苦了。结队能使想法和知识面很大程度上拓宽,然后将各自精华的部分采用,最后得到最优解的过程,也是项目更加完美,并能在结队的过程中收获更多的知识和快乐