实验二 软件工程个人项目
实验时间(师范):2021-3-18
实验时间(卓越工程师班):2021-3-19
Deadline:2020-3-31 10:00,以博客发表日期为准
评分标准:按时交 ,满分100分,代码50分,博客50分。检查项目包括:
- 未提交项目源码到Github上,代码部分不得分;未提交博客到班级博客上,博客部分不得分;
- 根据项目完成质量累计加分,完成基本功能原则上不超过满分100分,完成软件的附加功能,给予加分
- 代码提交(有代码规范说明,否则倒扣分)
- 博文规范(行文清晰流畅,如果行文中涉及代码,请使用博客园代码控件,或使用MarkDown语法块)
- 抄袭 - 倒扣本次作业分数
1、实验目的与要求
(1)掌握软件项目个人开发流程。
(2)掌握Github发布软件项目的操作方法。
2、实验内容和步骤
任务1:阅读教师博客“常用源代码管理工具与开发工具”内容要求,点评班级博客中已提交相关至少3份作业。
任务2:详细阅读《构建之法》第1章、第2章,掌握PSP流程,
任务3:项目开发背景:背包问题(Knapsack Problem,KP)是NP Complete问题,也是一个经典的组合优化问题,有着广泛而重要的应用背景。{0-1}背包问题({0-1 }Knapsack Problem,{0-1}KP)是最基本的KP问题形式,它的一般描述为:从若干具有价值系数与重量系数的物品(或项)中,选择若干个装入一个具有载重限制的背包,如何选择才能使装入物品的重量系数之和在不超过背包载重前提下价值系数之和达到最大?
D{0-1} KP 是经典{ 0-1}背包问题的一个拓展形式,用以对实际商业活动中折扣销售、捆绑销售等现象进行最优化求解,达到获利最大化。D{0-1}KP数据集由一组项集组成,每个项集有3项物品可供背包装入选择,其中第三项价值是前两项之和,第三项的重量小于其他两项之和,算法求解过程中,如果选择了某个项集,则需要确定选择项集的哪个物品,每个项集的三个项中至多有一个可以被选择装入背包,D{0-1} KP问题要求计算在不超过背包载重量 的条件下,从给定的一组项集中选择满足要求装入背包的项,使得装入背包所有项的价值系数之和达到最大;D{0-1}KP instances数据集是研究D{0-1}背包问题时,用于评测和观察设计算法性能的标准数据集;动态规划算法、回溯算法是求解D{0-1}背包问题的经典算法。查阅相关资料,设计一个采用动态规划算法、回溯算法求解D{0-1}背包问题的程序,程序基本功能要求如下:
1.可正确读入实验数据文件的有效D{0-1}KP数据;
2.能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;
3. 能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;
4.用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);
5.任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。
任务4:完成任务3的程序开发,将项目源码的完整工程文件提交到你注册Github账号的项目仓库中。(50分)
开发须知:
- 项目必须包含src文件夹;
- 为了同行轻松阅读你的项目代码,请参照《码出高效_阿里巴巴Java开发手册》/《腾讯c++代码规范》,从以下几个方面制定你的编程规范,并在此次作业中严格执行:
缩进
变量命名
每行最多字符数
函数最大行数
函数、类命名
常量
空行规则
注释规则
操作符前后空格
其他规则
代码部分评分细则:
- 项目代码规范说明(5分)
- 项目代码符合代码规范(10分)
- github使用 :commit 多于10次、使用release、issues、pr等操作(10分)
- 程序功能评测 25分
任务4:完成个人项目报告博文作业(50分,以下给出评分细目)
博文作业格式符合以下要求:
博文名称:学号-姓名 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告(1分)
博文开头格式:(1分)
项目 |
内容 |
课程班级博客链接 |
<填写课程班级博客链接> |
这个作业要求链接 |
<填写作业要求链接> |
我的课程学习目标 |
<填写目标> |
这个作业在哪些方面帮助我实现学习目标 |
<填写相关内容> |
项目Github的仓库链接地址 |
<填写地址> |
博文正文
任务1的作业点评链接(3分)
作为任务3的项目实施过程文字资料,请完整包含下面7个部分:
1. 需求分析,即使老师已经给出了题目,也要对题目的需求做分析。(5分)
2. 功能设计,获得题目需求后,要对项目做功能设计,但题目需求是项目的基本功能要求,自己思考和调研会有超出题目要求的需求,甚至你的奇思妙想会设计出特色的功能。因此,功能会有:
- 基本功能(5分)
- 扩展功能(若代码实现,附加10分)
3. 设计实现,设计包括你会有哪些类,这些类分别负责什么功能,他们之间的关系怎样?你会设计哪些重要的函数,关键的函数是否需要画出流程图?函数之间的逻辑关系如何?(10分)
4. 测试运行,你的项目必须是可运行的,请展示项目代码的运行截图,包括题目要求实现功能对应的运行截图。这些截图说明你确实完成了项目需求,如果实现了扩展需求,也请大方秀出来。(5分)
5. 粘贴自己觉得比较独特的或满意的代码片段,用博客园的代码控件来显示。(提示:要有必要的注释说明,提示:不要贴所有代码!不符合规定的要倒扣分)(5分)
6. 总结:你设计的程序如何实现软件设计的“模块化”原则。(5分)
7. 展示PSP,这个环节重要的是让自己看到自己的估计和实际消耗时间,哪个环节耗时最多,哪个环节估计和实践相差巨大?为什么?(5分)
PSP参考:http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
8 |
6 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
8 |
6 |
Development |
开发 |
82 |
88 |
·· Analysis |
需求分析 (包括学习新技术) |
6 |
10 |
· Design Spec |
· 生成设计文档 |
5 |
6 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
4 |
6 |
· Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
3 |
3 |
· Design |
具体设计 |
10 |
12 |
· Coding |
具体编码 |
36 |
21 |
· Code Review |
· 代码复审 |
7 |
9 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
13 |
21 |
Reporting |
报告 |
9 |
6 |
·· Test Report |
· 测试报告 |
3 |
2 |
· Size Measurement |
计算工作量 |
2 |
1 |
· Postmortem & Process Improvement Plan |
· 事后总结 ,并提出过程改进计划 |
3 |
3 |
如果所有的环节你都认真做了,那么,此处你应该会有很多经验愿意与大家分享。(5分)