《构建之法》第二章主要讲了个人技术和流程,因为团队需要一定的流程来管理开发活动,每个工程师在软件生命周期所做的工作也应该有一个流程,这一章中着重介绍PSP,即个人软件开发流程。卡内基梅隆大学的能力成熟度模型(CMM和CMMI),是用来衡量一个团队能力的一套模型。CMU的专家们针对软件工程师也有一套模型,叫 Personal Software Process(PSP),PSP和任何其他方法论一样,也不是一蹴而就的
PSP的个人项目耗时表:
计划 |
6% |
|
Estimate |
估计这个任务需要多少时间 |
6 |
Development |
开发 |
88% |
Analysis |
需求分析 |
10 |
Design Spec |
生成设计文档 |
6 |
Design Review |
设计复审(和同事审核设计文档) |
6 |
Coding Standard |
代码规范(为目前的开发制定合适的规范) |
3 |
Design |
具体设计 |
12 |
Coding |
具体编码 |
21 |
Code Review |
代码复审 |
9 |
Test |
测试(自测,修改代码,提交修改) |
21 |
Reporting |
报告 |
6% |
Test Report |
测试报告 |
2 |
Size Measurement |
计算工作量 |
1 |
Postmortem & Process Improvement Plan |
事后总结,并提出过程改进计划 |
3 |
PSP有如下的特点:
1.不局限于某一种软件技术(如编程语言),而是着眼于软件开发的流程,这样,开发不同应用的软件工程师可以互相比较。
2.不依赖于考试,而主要靠工程师自己收集数据,然后分析,提高。
3.在小型、初创的团队中,很难找到高质量的项目需求,这意味着给程序员的输入质量不高。在这种情况下,程序员的输出(程序/软件)往往质量也不高,然而这并不能全部由程序员负责
4.PSP依赖于数据,需要工程师输入数据,记录工程师的各项活动,这本身就需要不小的时间代价
5.PSP的目的是记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度
疑问:
1.如果数据不准确或有遗失,怎么办?让工程师编造一些?
2.如果一些数据不利于工程师本人(例如:花很多时间修改缺陷),我们怎么能保证工程师愿意如实地记录这些数据呢?