项目 | 内容 |
---|---|
课程班级博客链接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
作业要求 | https://www.cnblogs.com/nwnu-daizh/p/12521474.html |
课程学习目标 | 1、熟练博客操作 2、掌握软件项目个人开发流程 3、掌握Github的操作方法 |
这个作业在哪些方面帮助我实现学习目标 | 1、锻炼了我的动手能力,规范了我书写的代码 2、让我对软件项目个人开发流程有了简单的了解 3、熟悉了用Github发布软件项目的基本操作 |
结对方学号-姓名 | 201771010121-唐月晨 |
结对方本次博客作业链接 | https://www.cnblogs.com/tangyuechen/p/12586094.html |
项目的Github仓库链接 | https://github.com/Melody596/doub-le |
任务一:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念
- 代码的风格规范。代码风格的原则是:简明,易读,无二义性。主要表现在以下几个方面:
缩进,行宽,括号,断行与空白的{}行,分行,命名,下划线,大小写,注释 - 代码设计规范。函数,goto,错误处理,如何处理C++类
- 代码复审。是软件开发过程中,非常重要的环节
- 结对编程。分为驾驶员和领航员的角色,如果运用得当,结对编程可以取得更高的投入产出比
任务二:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价,本次跟我结对的同伴是2017级网络班唐月晨同学。博客链接https://home.cnblogs.com/u/tangyuechen/GitHub项目仓库为https://github.com/Tycmoon/test1
(1)对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究,将以上评论内容发布到博客评论区。
(2)克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。
- 概要部分
- 代码能符合需求和规格说明么? 答:能符合需求与规格
- 代码设计是否有周全的考虑? 答:考虑周全
- 代码可读性如何? 答:简单易懂
- 代码容易维护么? 答:比较容易维护
- 代码的每一行都执行并检查过了吗? 答:是的,检查过
- 设计规范部分
- 设计是否遵从已知的设计模式或项目中常用的模式? 答:是
- 有没有硬编码或字符串/数字等存在? 答:有一部分
- 代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64) 答:没有依赖,不会影响
- 开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现? 答:可以实现,不存在
- 有没有无用的代码可以清除?(很多人想保留尽可能多的代码,因为以后可能会用上,这样导致程序文件中有很多注释掉的代码,这些代码都可以删除,因为源代码控制已经保存了原来的老代码。) 答:有,已清除
- 代码规范部分
- 修改的部分符合代码标准和风格么(详细条文略)? 答:符合,都是按照代码标准修改的
- 具体代码部分
- 有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常? 答:检查以后没有发现异常
- 参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度,是以0开始计数还是以1开始计数? 答:基本无错误,字符串的长度是字节的长度,以0开始计数
- 边界条件是如何处理的?Switch语句的Default是如何处理的?循环有没有可能出现死循环? 答:经过检查循环不会出现死循环
- 有没有使用断言(Assert)来保证我们认为不变的条件真的满足? 答:没有使用
- 对资源的利用,是在哪里申请,在哪里释放的?有没有可能导致资源泄露(内存、文件、各种GUI资源、数据库访问的连接,等等)?有没有可能优化? 答:因为都是本机使用,基本不会导致资源泄露,没有优化
- 数据结构中是否有无用的元素? 答:没有
- 效能
- 代码的效能(Performance)如何?最坏的情况是怎样的? 答:代码正确,程序运行正常,没有很大的数据量可以测试,可能会慢一点
- 代码中,特别是循环中是否有明显可优化的部分(C++中反复创建类,C#中 string 的操作是否能用StringBuilder 来优化)? 答:可以正常运行,自己能力不足,所以我也不知道能不能优化
- 对于系统和网络调用是否会超时?如何处理? 答:不会超时,数据过大可能有一点延迟
- 可读性
- 代码可读性如何?有没有足够的注释? 答:代码不是很复杂,在重要部分加了注释
- 可测试性
- 代码是否需要更新或创建新的单元测试? 还可以有针对特定领域开发(如数据库、网页、多线程等)的核查表。 答:没有,后期如果需要可以加上去
(3)依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。(我认为此次实验三的内容比实验二更值得提出issue,进行pull requests等操作,所以我只在同伴的实验二中进行了fork以及clone的操作,其余操作在实验三中实现)
实验二:
实验三:
采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统,使之具有以下功能:
(1)可采集全校各类师生员工疫情信息;
(2)各二级部门疫情防控工作负责人可查看本部门人员疫情汇总,并提供高级查询功能进行多属性组合查询和可视化统计功能;
(3)学校防控办指定负责人登录《西北师范大学疫情防控信息统计》子系统,可浏览所有人员填报汇总数据清单,利用【高级查询】可进行数据组合筛选,系统以图形化方式展示各学院已填报和未填报学生统计情况和关键疫情数据统计情况,可【导出】查询列表的EXCEL文件;
(4)人机交互界面要求GUI界面(WEB页面、APP页面都可);
(5)附加分功能:定时填报提醒
需求分析
2019年12月以来,湖北省武汉市持续开展流感及相关疾病监测,发现多起病毒性肺炎病例,均诊断为病毒性肺炎/肺部感染,并造成了大规模的疫情。后经研究发现,这次的病毒性肺炎疫情是由2019新型冠状病毒(2019-nCoV)引起的。为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采取了一系列防控措施:2020年1月23日10时起对武汉“封城”,全国31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工作;在全国范围内调配口罩、防护服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其他省份调集物资保障武汉市民日常生活。
此次疫情中,许多互联网企业相继投入到了疫情的防控工作当中,开发了很多与防疫相关的软件,为政府的防疫工作减少了许多的麻烦,有效地降低了疫情在某些生活方面的传播可能。这也放映出了软件产品对于遏制疫情发展起到了重要的作用。同时,虽然已经有很多的软件产品已经投入到了疫情的遏制工作当中,但是这个量还是远远不够的,需求仍然很大,并且仍然有很多领域未涉及到,需要我们不断地探索。
软件设计说明
- 分为学生,管理员登录界面
- 普通学生界面功能
- 可以填报自己的疫情信息
- 每天只能填报一次信息
- 管理人员界面功能
- 可以查看显示全部信息
- 可以对信息进行增删改查功能
- 可以进行数据组合筛选查询
- 生成统计图
- 生成excel文件
软件实现及核心功能代码展示
代码结构:
Login类:初始登录身份选择界面
ManagerLogin和StudentLogin:管理人员和学生各自的功能显示界面
show_stuall:管理人员显示全部人员信息时的界面
showones:完成管理人员按条件筛选查讯后显示查询信息
student_information:填报信息时构造的函数
Function:对各种增删改查功能操作的设定函数
核心代码:
按条件实现查询功能
ArrayList arry=new ArrayList();
student_information stu=new student_information();
JTable table = null;
DefaultTableModel model = null;
//显示全部学生信息
public showones() {
JFrame jf = new JFrame("显示符合条件的学生信息(点击表头可以按照升序降序排序");
//jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// 创建内容面板
JPanel panel = new JPanel();
// 表头(列名)
// String[] columnNames ={"序号","学号","姓名","性别","年龄","电话号码","家庭住址","身份证号码" };
Vector columnNames=createColumnNames();
//需要查询的符合条件的,用字符串数组f记录
String [] f = new String [8];
try{
FileReader f1 = new FileReader("C:\\Users\\Administrator\\Desktop\\查询时暂时存放的文件.txt");
BufferedReader br=new BufferedReader(f1);
//arry.clear();// 清除原数组列表中的数据
String t=null;
while ((t= br.readLine())!= null)
{
f=t.split("\\s+"); //要查询的学生信息
}
f1.close();
br.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
//记得清空,否则下次查询没有筛选条件时,查询的是上一次的条件
File file =new File("C:\\Users\\Administrator\\Desktop\\查询时暂时存放的文件.txt");
try {
if(!file.exists()) {
file.createNewFile();
}
FileWriter fileWriter =new FileWriter(file);
fileWriter.write("");
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
//判断需要查询的是那些条件
ArrayList List = new ArrayList();
for(int i=0;i<7;i++) {
if(!f[i].equals("--")) //需要满足的条件
List.add(i);
}
//将满足查询条件的学生信息录入系统
for(int i=0;i
录入信息功能
录入.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String sID = 学工号.getText(); //获取文本框中内容
if(fun.find(sID)!=-1)
{
JOptionPane.showMessageDialog(null, "该学/工号对应的学生已经存在!!!\n\n请重新输入或者修改已经录入的信息");
//清空文本框
学工号.setText("");
姓名.setText("");
学院.setText("");
个人联系方式.setText("");
现居住地.setText("");
登记日期.setText("");
return;
}
String sname = 姓名.getText();
//先判断学号和姓名是否为空,如果为空,直接退出
if(sID.equals("")||sname.equals(""))
{
JOptionPane.showMessageDialog(null, "录入的学生学号或姓名为空!!!\n\n请重新输入");
return;
}
String scollege = 学院.getText();
if(scollege.equals(""))//年龄为空,没有输入
scollege="--";
String scall = 个人联系方式.getText();
if(scall.equals(""))
scall="--";
String shome = 现居住地.getText();
if(shome.equals(""))
shome="--";
String stime = 登记日期.getText();
if(stime.equals(""))
stime="--";
String sinfo1=null;
if(是.isSelected()){//选择是否与患者有接触
sinfo1=是.getText();
}
else{
sinfo1=否.getText();
}
测试运行
(1)身份选择登录
(2)学生信息填报界面
(3)管理人员功能界面
(4)查询全部人员
(5)按条件筛选实现高级查询
(6)生成柱状图
(7)生成excel文件
此次结对作业的PSP
PSP2.1 | 内容 | 计划完成需要的时间(h) | 实际完成需要的时间(h) |
Planning | 计划 | 30 | 20 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 30 | 45 |
Development | 开发 | 25 | 40 |
Analysis | 需求分析 (包括学习新技术) | 3 | 5 |
Design Spec | 生成设计文档 | 2 | 2 |
Design Review | 设计复审 (和同学审核设计文档) | 1 | 1 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 1 | 0.5 |
Design | 具体设计 | 5 | 5 |
Coding | 具体编码 | 20 | 35 |
Code Review | 代码复审 | 1 | 5 |
Test | 测试(自我测试,修改代码,提交修改) | 1 | 3 |
Reporting | 报告 | 1 | 2 |
Test Report | 测试报告 | 1 | 1 |
Size Measurement | 计算工作量 | 2 | 1 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 1 | 1 |
小结感受:两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会
通过此次结对合作,让我对软件工程的各个步骤有了更深刻的了解。在两人的合作完成中,确实可以提高软件的开发效率,两个人可以弥补对方的不足,在过程中也可以在理解、思想方面多交流,使成果更加完善。但是这种非面对面的共同开发在编程过程中,在沟通交流方面有很不方便。同时在编程方面都还需要提升自身的能力。