本学期跟随孟宁老师学完了《高级软件工程》这门课,感觉自己收获颇丰,其中,令我印象最为深刻的是个人软件过程PSP(Personal Software Process)和团队软件过程TSP(Team Software Process)这一部分,尤其是个人软件过程,真可谓是个人开发过程的真实写照,读这一部分内容时,之前自己写项目的历程仿佛又浮现在眼前,所以本文重点围绕PSP和TSP进行展开。
个人软件过程PSP
一个软件工程师如何成长,如何证明自己的成长?PSP提供了一个不断成长进阶的参考路径,即个人软件过程PSP框架。
个体度量过程PSP0
1、计划阶段
2、开发阶段
- 设计
- 编码
- 测试
3、开发完成后进行总结分析
一般来说,做任何事情最基本的思路就是计划、执行和总结。PSP0就是这个最基本的思路,但是在PSP0阶段必须理解和学会采集软件过程中的数据。
个体度量过程PSP0.1
1、计划阶段
2、开发阶段
- 编码标准规范
- 设计
- 编码
- 测试
3、程序规模度量
4、开发完成后进行总结分析
5、过程改进计划
PSP0.1 增加了编码标准规范、程序规模度量、以及过程改进计划。显然PSP0.1融入了标准规范,而且将最后的总结分析更加明确充实。过程改进计划用于随时记录过程中存在的问题、解决问题的措施以及改进过程的方法,以提高软件开发人员的质量意识和过程意识。
PSP0和PSP0.1重点是个体度量过程,也就是通过采集过程数据、度量程序的规模等,通过量化的度量数据为软件过程改进提供基准。
个体计划过程PSP1
1、计划阶段
- 项目评估
2、开发阶段
- 编码标准规范
- 设计
- 编码
- 测试
3、项目测试报告
4、程序规模度量
5、开发完成后进行总结分析
6、过程改进计划
PSP1在计划阶段增加了项目评估,引入了基于估计的计划方法,用自己的历史数据来预测新程序的大小和需要的开发时间,开发阶段之后首先完成项目测试报告。
在PSP1阶段应该学会编制项目开发计划,这不仅对承担大型软件的开发十分重要,即使是开发小型软件也必不可少。因为,只有对自己的能力有客观的评价,才能作出更加准确的计划,才能实事求是地接受和完成客户委托的任务。
个体计划过程PSP1.1
1、计划阶段
- 项目评估
2、开发阶段
- 编码标准规范
- 设计
- 编码
- 测试
3、统计记录各项工作用了多少时间
4、项目测试报告
5、程序规模度量
6、开发完成后进行总结分析
7、过程改进计划
PSP1.1在PSP1增加项目评估的基础上,开发阶段之后首先统计记录各项工作用了多少时间,前后呼应进行量化管理,为过程改进提供数据支撑。
PSP1和PSP1.1的重点是个体计划过程,基于历史数据来评估项目,进而提高项目计划的准确性。
个体质量管理PSP2
1、计划阶段
- 项目评估
2、开发阶段
- 编码标准规范
- 设计
- 设计评审
- 编码
- 代码评审
- 测试
3、统计记录各项工作用了多少时间
4、项目测试报告
5、程序规模度量
6、开发完成后进行总结分析
7、过程改进计划
PSP2的重点是个体质量管理,引入了设计评审(Design Review)和代码评审(Code Review),以便及早发现缺陷,使修复缺陷的代价最小。
个体质量管理PSP2.1
1、计划阶段
• 项目评估
2、开发阶段
- 分析
- 设计规格
- 编码标准规范
- 设计
- 设计评审
- 编码
- 代码评审
- 测试
3、统计记录各项工作用了多少时间
4、项目测试报告
5、程序规模度量
6、开发完成后进行总结分析
7、过程改进计划
PSP2.1引入了分析和设计规格,介绍了分析方法,并提供了设计规格。
PSP2和PSP2.1的重点是个体质量管理,学会在开发软件的早期,发现由于疏忽所造成的程序缺陷问题。人们都期盼获得高质量的软件,但是只有高素质的软件开发人员并遵循合适的软件过程,才能开发出高质量的软件,PSP2引入并着重强调设计评审和代码评审技术,一个合格的软件开发人员必须掌握这两项基本技术。
个体循环过程PSP3
PSP3的重点是个体循环过程,目标是把个体开发小规模程序所能达到的生产效率和生产质量,扩展到大型程序中。主要是采用螺旋式上升的方法,即增量和迭代开发方法,首先把大型程序分解成小的模块,然后对每个模块按照PSP2.1所描述的过程进行开发,最后把这些模块逐步集成为完整的软件产品。
应用PSP3开发大型软件系统,必须采用增量式开发方法,并要求每一个增量都是高质量的。在这样的前提下,在新一轮个体循环过程中,可以采用回归测试的方法,重点考察新的增量是否符合要求。因此,要求在PSP2中进行严格的设计评审和代码评审,并在PSP2.1中努力遵循设计规格。
个体软件过程PSP总结
从个软件过程PSP框架的概要描述中,可以清楚地看到,如何作好项目规划和如何保证产品质量,是任何软件开发过程中最基本的问题。
PSP可以帮助软件工程师在运用软件过程的方法和原则,借助于一些度量和分析工具,了解自己的技能水平,控制和管理自己的工作方式,使自己日常工作中的评估、计划和预测更加准确、更加有效,进而改进个人的工作表现,提高个人的工作质量和产量,积极而有效地参与高级管理人员和过程人员推动的团队范围的软件工程过程改进。
个体软件过程PSP为软件工程师提供了发展个人技能的结构化框架和必须掌握的方法。在软件行业,开发人员如果不经过PSP训练,就只能靠在开发中通过实践逐步摸索掌握这些技能和方法,这不仅周期很长,而且要付出很大的代价。
TSP概述
大多数商业软件都是由团队开发的,因此,要想成为一个优秀的软件工程师,你就必须具有在团队中工作的能力。如果你有与人合作的意识并且愿意付诸实践,你就具备了成为一个优秀的团队成员的基本素质。但是,团队协作的涵义远比融洽相处要丰富。
团队必须计划项目、跟踪进展、协调工作,还必须有一致的工作目标,共同的工作过程,并且经常自由沟通。
TSP是一个为多达20人的团队开发或升级大型软件系统而设计的工业化软件过程,而且通常是需要几年时间才能完成的大型项目。我们学习TSP无法完整地模拟实际大型项目的情况,但是可以学习到最基本的概念和方法,以便将来在实际大型项目中能够快速上手TSP。
单纯把一项工作任务交给一群工程师并不能自动产生一个团队。建设团队的步骤并不显而易见,新的团队经常要花费大量时间去建立团队的运行机制。他们必须明确如何作为一个团队一起工作,如何定义要做的工作,以及如何设计工作方案。他们必须在团队成员间分配任务、协调任务,并且跟踪和汇报工作进展。虽然这些团队建设工作很重要,但是并不难,而且已有很多完成这些工作的方法,你和你的团队成员并不需要自己去重新发明这些方法。
TSP的基本工作方法
- 如何开始一个团队项目?
- 团队项目的基本策略
- 开发计划
- 定义需求
- 与团队一起设计
- 产品实现
- 集成与系统测试
- 结项总结
1、如何开始一个团队项目?
• 设定团队目标
• 设定团队成员目标,包括各个角色的目标
◦ 团队领导角色
◦ 开发经理角色
◦ 计划经理角色
◦ 质量和过程经理角色
◦ 支持经理角色
• 项目筹备及第一次项目会议
2、团队项目的基本策略
• 计划先行,也就是做出承诺之前先计划
• 完成概念设计
• 选择开发策略
• 完成初步规模估算
• 完成初步时间估算
• 评估风险
• 建立策略文档
• 制定配置管理计划
3、开发计划
• 制定计划
• 实现计划
• 对照计划跟踪进展
• 质量管理
4、定义需求
• 软件需求规格说明书
• 需求任务分配
• 系统测试计划
• 需求变更和追溯管理
5、与团队一起设计
• 利用所有团队成员的才智
• 产生精确的设计
• 复用性设计
• 易用性设计
• 可测试性设计
• 设计规格说明书
• 设计评审和审查
6、产品实现
• 编码标准
• 缺陷预防
• 详细设计与设计评审
• 编码及代码评审
• 单元测试
7、集成与系统测试
• 构建和集成策略
• 测试计划
• 跟踪缺陷
• 系统测试
• 回归测试
8、结项总结
过程改进建议
最后,感谢孟老师在《高级软件工程》课程上的精心教导。在老师的课堂上,我不仅理解了软件工程的复杂概念,也学习到了如何有效地应用这些知识来解决实际问题。老师的课程内容深入浅出,教学方法富有启发性,使得这个学科变得既有趣又实用。老师的热情和投入让我对软件工程有了更深入的理解,并激发了我对此领域的热爱。我特别赞赏老师对实际工程实践的强调,以及对我们批判性思考和问题解决能力的培养。同时,我也非常期待将在老师课堂上学到的知识应用到今后实际的软件开发工作中去。
参考资料:《代码中的软件工程》 孟宁 编著
代码中的软件工程: 《代码中的软件工程》一书的配套ppt和源代码