项目 | 内容 |
---|---|
课程班级博客链接 | 班级博客 |
作业要求链接 | 作业要求 |
我的课程学习目标 | 1、希望能够很好地掌握软件项目的个人开发流程; 2、能够熟悉Github并且掌握发布软件项目的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | 1、项目练习; 2、在完成作业的过程中不断地探索,上网查询 |
一、实验目的与要求
(1)掌握软件项目个人开发流程。
(2)掌握Github发布软件项目的操作方法。
二、实验内容和步骤
任务1:阅读教师博客“常用源代码管理工具与开发工具”内容要求,点评班级博客中已提交相关至少3份作业。
任务2:详细阅读《构建之法》第1章、第2章,掌握PSP流程。
第一章 概论
看了第1章的内容,了解到软件工程是把系统的、有序的、可量化的方法应 用到软件的开发、运营和维护上的过程。这一章主要讲解了软件工程的基本内涵。我比较认同文中程序(算法、数据结构)是基本功,软件工程决定了软件的质量这个观点。在1.1节中提到用二叉树的遍历算法,二叉树是数据结构,遍历的实现是算法,但是单独的这个程序在实际中的用处似乎并不大,而软件工程就可以使这个程序合理的应用在特定的场景。
软件开发应用到软件工程的思想,通过合理规划软件开发的流程,就能使软件开发的成本大大减少,书中提到工程师的宗旨时:我构建,故我在,我有点不太理解,希望老师能够为我解惑。
第二章 个人技术和流程
看了第2章的内容,了解到单元测试、回归测试、效能分析、个人软件开发流程(PSP)的一些基本概念和技术。
①单元测试:单元测试是为了让各个模块的质量能得到稳定的,量化的保证的一种有效解决方案。
②好的单元测试的标准:1.单元测试应该在最基本的功能/参数上验证程序的正确性
2.单元测试必须由最熟悉代码的人(程序的作者)来写
3.单元测试过后,机器状态保持不变
4.单元测试要快
5.单元测试应该产生可重复,一致的结果。
6.独立性——单元测试的运行/通过/失败不依赖于别的测试,可以人为构造数据,以保持单元测试的独立性。
7.单元测试应该覆盖所有代码路径。
8.单元测试应该集成到自动测试的框架中。
9.单元测试必须和产品代码一起保存和维护。
③回归测试的目的:1.验证新的代码的确改正了缺陷
2.同时要验证新的代码有没有破坏模块的现有功能,有没有Regression。
④效能分析工具:1.抽样:程序运行时,VISUAL STUDIO时不时看一看这个程序运行在哪一个函数内,记录下来,最终得到一个关于程序运行时间分布的大致印象。
2.代码注入:将检测的代码加入到每一个函数中,这样程序的一举一动都被记录在案,程序的各个效能数据都可以被精确地测量。
一般的做法是先用抽样的方法找到效能瓶颈所在,然后对特定的模块用代码注入的方法进行详细分析。
⑤个人开发流程(PSP):PSP有以下特点:
1.不局限于某一种软件技术,而是着眼于软件开发的流程。
2.不依赖于考试,而是靠工程师自己收集数据,然后分析,提高。
3.PSP依赖于数据。
4.PSP的目的是记录工程书如何实现需求的效率,而不是记录顾客对产品的满意度。
·总结:个人开发流程要着眼的是整个软件开发的流程,输出高质量的产品,需要从个人开发流程上去找bug,然后不断修正,工程师才会成长,产品质量才会不断提高。
PSP流程
PSP 各个阶段 | 自己预估的时间(小时) | 实际的记录(小时) |
---|---|---|
计划: 明确需求和其他因素,估计以下的各个任务需要多少时间 | 1 | 2 |
开发 | 4 | 6 |
需求分析 | 2 | 3 |
生成设计文档 | 1 | 2 |
设计复审 | 2 | 4 |
代码规范 | 5 | 6 |
具体设计 | 4 | 4 |
具体编码 | 8 | 14 |
代码复审 | 2 | 5 |
测试 | 1 | 2 |
报告 | 2 | 2 |
测试报告(发现了多少bug,修复了多少) | 1 | 3 |
计算工作量 (多少行代码,多少次签入,多少测试用例,其他工作量) | 2 | 2 |
事后总结, 并提出改进计划 (包括写文档、博客的时间) | 1 | 3 |
任务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文件。
任务3的项目实施过程文字资料,请完整包含下面7个部分:
1. 需求分析,即使老师已经给出了题目,也要对题目的需求做分析。(5分)
2. 功能设计,获得题目需求后,要对项目做功能设计,但题目需求是项目的基本功能要求,自己思考和调研会有超出题目要求的需求,甚至你的奇思妙想会设计出特色的功能。因此,功能会有:
•基本功能(5分)
•扩展功能(若代码实现,附加10分)
3. 设计实现,设计包括你会有哪些类,这些类分别负责什么功能,他们之间的关系怎样?你会设计哪些重要的函数,关键的函数是否需要画出流程图?函数之间的逻辑关系如何?(10分
4. 测试运行,你的项目必须是可运行的,请展示项目代码的运行截图,包括题目要求实现功能对应的运行截图。这些截图说明你确实完成了项目需求,如果实现了扩展需求,也请大方秀出来。(5分)
5. 粘贴自己觉得比较独特的或满意的代码片段,用博客园的代码控件来显示。(提示:要有必要的注释说明,提示:不要贴所有代码!不符合规定的要倒扣分)(5分)
6. 总结:你设计的程序如何实现软件设计的“模块化”原则。(5分)
7. 展示PSP,这个环节重要的是让自己看到自己的估计和实际消耗时间,哪个环节耗时最多,哪个环节估计和实践相差巨大?为什么?(5分)
任务4:完成任务3的程序开发,将项目源码的完整工程文件提交到你注册Github账号的项目仓库中。
三、实验总结
这次的实验内容多并且复杂,老师留的时间也较长。在完成作业的过程中,我遇到了很多的困难,首先是对PSP的了解和学习,在这个过程中,我查阅了很多的资料以及询问了同学,收获颇多。任务一和任务二没有什么技术上的难度,但是任务三确实不会做。因为涉及到编程的问题,还有就是算法没有系统的学习过,所以就没有按时完成,后续我会继续学习并完善。