《个体软件过程》读书笔记

书名《个人软件过程》(introduction to the personal software process)
阅读方式:谷歌图书馆在线阅读(books.google.com)
作者:Watts S.Humphrey
第一章:软件工程师的工作
1.1什么是软件工程?
软件工程师的工作就是在合适的费用和时间内交付高质量的软件产品。这涉及了三个方面的内容:生产高质量的产品,按预算完成工作,按时完成工作。为了达到此目的,需要:
1.计划工作
2.按计划工作
3.努力生产最优质的产品
1.3 个人软件过程
个人软件过程(psp)是一个改善软件工程师的工作的模式。它告诉他们怎样运用高级工程方法来管理其日常工作任务。它提供详细的估计和计划方法,展示怎样追踪执行和计划的差异,阐述怎样定义过程以指导他们的工作。
1.4高质量工作的纪律(the discipline of high-quality work)
纪律的定义是一个发展或者改善技术的行为或者练习。与流行将纪律当作一个负有法律责任的约束的观点相反的是,它是一个用于学习和个人改进的框架。psp的纪律提供了一个供软件工程师发展个人技术和方法的结构框架。
1.7过程改进的步骤
定义质量目标-->>测量产品质量-->>了解产品过程-->>循环体(循环和持续改进)【对过程进行调整-->>应用调整后的过程-->>测量结果-->>将结果与目标进行比较】
一个较复杂的过程,通常需要进行几个循环的过程改进。
第二章 时间管理
时间管理的逻辑原理:人们很可能像上星期那样安排这个星期的时间。为了制定切实可行的计划,必须对所用的时间进行跟踪。为了检查时间估计和计划的准确性,必须把它们写成文档并在今后与实际情况进行比较。为了制订出更准确的计划,需要知道以前的计划中存在那些错误,那些地方可以进行改进。为了管理好时间,首先制订时间分配计划,然后按照计划去做。
按计划工作有三个好处:第一,了解计划中还存在那些错误,有助于更好地计划下一个项目。第二,按照计划好的方式完成工作。可以减少软件设计的错误。第三,有了计划,就不用浪费时间去考虑下一步要干什么,它会帮助你把精力集中在所做的事情上,很少分心,从而提高了工作效率。
2.2了解时间的使用情况
进行时间管理的实践,第一步要了解现在是如何利用时间的,为此需要遵循以下步骤:
1)将主要活动分类。当分配时间时,你会发现大部分时间都用在相对很少的几个活动上。
2)记录每项主要活动所花费的时间。坚持记录时间需要很强的自我约束能力。
3)用标准的方式记录时间。必需使用标准的时间日志。因为需要采集的时间数据的数量增长得很快,如果不认真记录和储存这些数据,它们很可能丢失或者变得混乱。
4)将时间数据保存在合适的地方。把时间记录日志放好,便于以后查阅。
第三章 时间跟踪
3.1为什么要跟踪时间
要想改进工作质量,首先要搞清楚你当前要做的事情。这意味着必须了解要完成那些任务、如何完成以及将要得到怎样的结果。这个过程的第一步,就是要明确定义这些任务并估计出完成每一项所要花费的时间。为了做到这一点,必须对时间进行实际的测量。
3.2记录时间数据
当记录时间数据时,要记住,目的是要获得实际工作情况的数据,只要数据准确、完整,收集数据的格式和规程并不重要。
3.3跟踪时间
通常当人们谈论所做的事情时,常常以小时作为测量单位。事实表明以小时为单位没有多大用处。原因就是你几乎不会在完整的一个小时内一直做某件事情。工程师在完成任务中不间断工作的时间一般都少于1小时。因此,以小时为单位对工作时间进行测量不能提供用以计划和管理工作所需要的详细数据。另一方面,用分钟要比用带小数的小时跟踪时间数据容易得多。
3.4使用标准的时间记录日志
时间记录日志表的格式:
在表格的顶部是表头信息,表头记录填表人姓名,填写表头信息时的日期,项目名称。
表格中的列用来记录时间数据。按照下面的格式在表格的每一行录入每个活动使用时间的情况:
1)日期。进行某个活动的日期,例如编程序的日期。
2)开始时间。开始这个活动的时间。
3)结束时间。结束这个活动的时间。
4)中断时间。由于中断而占用的时间。
5)净时间。以分钟计算这项活动从开始到结束用的时间,不包含中断所占用的时间。
6)活动。任务的描述性名称。
7)备注。有关所做事情的更加完整的注释、中断的类型以及任何对于以后分析时间数据有用的内容。
8)C(完成):当完成一项任务后,在这一栏做个标记
9)U(单元):完成一项任务所用的工作单元
3.5处理中断
在跟踪时间时,一个常见的问题就是中断。在执行一个任务的过程中,我们常被各种干扰信息打断工作。由于中断的时间不是有效的工作时间,所以必须记录中断所占用的时间。
3.6跟踪已经完成的任务
为了对时间的使用情况进行跟踪,还需要对产生的结果进行跟踪。在开发程序中,就必须知道有多少工作已经完成了,这样才能计算出工作效率。
时间记录日志右侧的C和U栏是Completed(已完成)和Unit(单元)的缩写。这两栏有助于快速地确定不同任务所花费的时间和已经完成的任务。
一个单元就是一个工作单元。例如编写完一个程序就是完成一个工作单元。为了进行准确的时间记录,每次完成具有可测量结果的任务时都要填写C栏和U栏。
时间记录日志使用说明
目的  用来记录时间在某项目中的使用情况
一般性说明 记录花费在某项目中的所有时间,以分钟为单位进行记录,尽可能做到准确
表头  填表人的姓名
  填表日期
  项目名称
日期  录入记录的时间
示例  2008/02/15
开始时间 录入开始一项任务的时间
示例  9:15
结束时间 录入结束上述任务的时间
示例  11:59
中断时间 录入任何类型的中断所用的时间和中断的原因。
净时间  录入花费在上述任务上的总时间,不包括中断时间
示例  134分钟
活动  录入任务的名字或者其标志的名字,或者所做工作的活动
示例  数据库表结构分析
备注  录入相关的注释信息,以便将来可以了解关于该活动的任何意外的情况
示例  会员表结构设计
C(完成) 当一项任务已经完成时,在这一栏中作个标记
示例  C
U(单元) 录入所完成的工作的单元数
示例  2

第四章 阶段计划与产品计划
4.1阶段计划和产品计划
阶段计划是关于在某一时间段(如一天、一周、一个月)内对时间的安排。
产品计划是关于制作产品活动期间的时间安排。
4.2周活动总结表
由于时间日志中的数据过于详细,不适合直接用于制订计划,因而需要用一种更有用表格(周活动总结表,月活动总结表)来总结这些数据。
4.4计算阶段时间和工作效率
周活动总结表使用指南
(1)周活动总结表
目的  本表用来跟踪和分析一个项目的时间使用情况。这些数据应该从时间记录日志中总结而得
一般性说明 在每周末从时间记录日志中总结数据。如果任务分类不合适,请变更。
表头  录入:名字和今天的日期
任务  录入本项目使用了时间的各项主要任务的名字
示例  会员管理系统。文章管理系统
日期  录入星期日的日期
示例  9/8
日总结  从时间记录日志中得到该周每一天花费在每个任务上的总时间
示例  96分钟
周总结  录入整个星期每个任务的时间总数
示例  346分钟
总计  录入每天花费在各项任务上的时间之和
示例  226分钟

(2)阶段时间段和效率总结
目的  本表用来跟踪和分析某项目的时间使用情况。这些数据应该从时间记录日志中总结而得
一般性说明 此表为上一个周活动总结表使用指南(1)的续表。表头及其他信息见上表
周数(第10行) 本表总结的数据,所包含的总周数。参阅上一次周活动总结表的周数,然后加1
累计时间 从上一次周总结表中的17-20行复制来每行的数据。
当前时间值 分别把第9行和第12行的数据加在一起
当前时间值 将本表第17行中的各列之总计值除以第10行中给出的周数

第5章 产品计划
5.3什么是产品计划
制订产品计划的第一步就是要有一份待开发产品的清晰定义
一份合适的产品计划包括以下三个方面:
1)待开发产品的规模及其重要的特性
2)完成工作所需要、时间的估计
3)项目进度计划
5.6术语定义
一个产品是开发者为合作者、雇主或者客户生产的物品
一个项目通常生产一种产品
一个任务是已定义的一部分工作
一个过程定义了完成项目的方法
计划描述完成一个特定项目的方法,包括如何完成、何时能完成以及费用是多少?
一个作业是你所做的事情,一个项目或者一项任务。

5.7作业编号日志
作业编号日志使用说明
目的  跟踪每个项目作业的数量。记录每个项目的关键信息。
一般性说明 当开始一个项目时,在这个表格中录入新作业的编号。从1开始顺序编号
表头  录入名字,日期
作业号  录入所选择的作业号
日期  录入开始这项作业的日期
过程  录入任务的类型。
估计时间 录入进行这项作业估计花费的总时间。
估计单元 录入估计使用的作业单元数
实际时间 录入完成这项作业实际所用的总时间
实际单元 录入完成这项作业的实际单元数。
实际平均值 实际时间/实际单元
累计时间 找到最近开发的上一个同类型的作业,把他的累计时间值加上当前作业的实际时间值,就得到当前作业的累计时间值
累计单元 找到最近开发的上一个同类型的作业,把他的累计单元值加上当前作业的实际单元值,就得到当前作业的累计单元值
累计平均值 用累计时间除以累计单元就得到累计平均值,累计平均值代表到目前为止完成该类作业的平均值
最大值  录入已经完成的同类作业的最大时间
最小值  录入已经完成的同类作业的最小时间
描述  录入要完成的作业描述,描述应足够清楚,以便易于说明当前作业的内容,在第一次记录作业类型的数据时,应写明测量单位
第7章 管理好时间
7.1时间管理的要素
管理时间的步骤:
1.决定如何使用时间
2.制订时间安排表
3.对照制订的安排表跟踪使用时间的方式
4.决定应该改变什么以使自己的行动达到所作安排的要求

第9章 进度管理
9.2Gantt图
进度是按时间顺序计划活动的一个列表。
Gannt图的构成:
1)横跨图顶部排列的是日历表。根据所需要的详细程度,每列的时间单位可以是日、周、月或者年。如果需要的话,也可以是小时。
2)最左边的一列包含了每项任务的标识号(id)
3)在图标当中,任务条指示各项任务计划的开始和结束时间
4)在表的左下方是项目名称、进度表的作者和制订此进度表的原始日期
5)图中的小椭圆是不同的检查点
9.3制订项目进度表、
对于任何规模的项目,制订进度表的第一步,是把作业分析到足够详细来确定它由哪几项任务组成。在gantt图中列出每一项任务并用任务条说明各项任务开始和结束的时间。
如果为有若干人参与的作业制订进度表,还需要几个附加的步骤:
1.确保每个人都知道要完成的任务
2.获取每项任务承诺的完成时间
3.确定各任务之间的相互以来关系。每个人开始处理工作之前他们必须得到什么样的输入,以及他们从谁那里得到这些输入
4.把每一个相互依赖的关系都文档化
5.与所有设计到的人一起复查计划的进度表和各任务之间的依赖关系,以确保没有冲突、分歧和误解。
6.复查进度表,以确保它包含了完成整个作业所需要的全部任务
9.4检查点
检查点是一个项目中能够客观地标识的点,例如完成某些特殊的项目活动或者某一重要的行动。检查点必须清晰明确,没有歧义。
第10章 项目计划
10.1项目计划的必要性
项目计划定义要完成的工作和如何做这项工作。它对每项主要任务作出定义,对所需要的时间和资源进行估计,还为管理部门的评审和控制提供框架。项目计划也是一个强大的学习工具。当把这个计划严格地写成文档时,它就是一个与实际性能比较的基准。这样的比较,可以使作计划的人看到估计中的错误,从而改善做计划的准确性。
第11章 软件开发过程
11.1为什么使用过程
个人软件过程(psp)有两个目标:
1)帮助软件工程师开发程序
2)告诉你如何利用过程来改善工作方式
11.2一些定义
一个产品是指为合作者、雇主或者客户所生产的物品
一个项目通常生产一种产品
一个任务是已定义的一部分工作
一个过程定义完成项目的方法
过程有许多阶段或者步骤,如计划、开发和测试
一个过程阶段可以由许多任务或者活动组成,像集成测试、产品测试和系统测试
一个过程可以包括一个或者多个阶段,一个阶段可以包括一个或者多个任务或者活动
计划描述一个特定的项目的完成方式,包括如何做、什么时候做以及花多少费用。
一个作业是你为一个项目或者一个任务所做的事情
一个有完整描述的过程成为已定义的过程。已定义的过程一般由一些脚本、表格、模板和标准组成。
一个过程脚本是一组书面的、过程的用户或者代理在使用过程时应该遵守的步骤。
各种表格(如一些日志和总结表)是用来记录和保存项目数据的。
11.3过程脚本
psp过程的各个阶段:
计划阶段。获得项目需求,完成计划,将计划所花费的时间记录在时间记录日志上
设计阶段。设计这个程序。将设计时间记录在时间记录日志中。
编码阶段。利用具体程序语言实现该设计。完成编码时,在时间记录日志上记录编码所花费的时间
编译阶段。编译程序并改进所有发现的缺陷。在编译阶段结束时,在时间记录日志上记录编译时间。
测试阶段。进行充分的测试以保证程序满足所有的需求。在测试阶段结束时,在时间记录日志中记录测试时间
第12章 缺陷
12.3什么是缺陷
缺陷是指程序中存在的错误,它影响程序的完整性或者有效性。它是一个客观的事物,是可以标识、描述和统计的。
12.5缺陷类型
缺陷类型标准
类型编号 类型名称 描述
10  文档  注释,消息
20  语法  拼写,标点符号,打字,指令格式
30  联编打包 变更管理,库,版本控制
40  赋值  说明,崇明,作用域,限制
50  接口  过程调用和引用,输入/输出,用户格式
60  检查  出错信息,不合适的检查
70  数据  结构,内容
80  函数  逻辑,指针,喜欢,递归,计算,函数缺陷
90  系统  配置,记时,内存
100  环境  设计,编译,其它支持系统问题
12.6了解缺陷
缺陷管理的第一步是了解缺陷。为此,必须首先收集缺陷数据
请按照以下步骤收集程序中关于缺陷的数据:
1)为程序中发现的每一个缺陷做一个记录
2)对于每个缺陷要记录足够详细的信息,以便以后更更好地了解这个缺陷
3)分析这些数据以找出哪些缺陷类型引起大部分的问题
4)设计出发现和修复这些缺陷的方法。
12.7缺陷记录日志
使用缺陷记录日志手机你所编写的每个程序的缺陷数据。尽可能详细地描述每个缺陷,以便以后仍可理解它。
完成每个程序后,分析有关数据,看一看程序那些地方引入和排除了缺陷,是哪种缺陷导致主要的问题。
缺陷记录日志使用说明
目的  记录所发现和修复的每益而高缺陷的详细数据。
一般性说明 记录所有在复查、编译和测试阶段发现的缺陷
  每个缺陷要分别记录,而且信息应该完整
表头  姓名,日期,程序号
日期  录入发现缺陷的日期
编号  每个缺陷给一个编号
类型  缺陷类型
引入阶段 根据自己的判断录入缺陷引入的阶段
排除阶段 录入排除缺陷的阶段
修复时间 估计或测量发现和修复这个缺陷所需要的时间。
修复缺陷 一般忽略此项的填写,如果在修复另一个缺陷时引入了此缺陷,记录这不正当的修复缺陷的编号
描述  录入对当前缺陷的简单描述,描述应该足够清楚,以便今后可以看出该缺陷的起因。
12.8统计缺陷个数
对于程序的每一次修正,在缺陷记录日志中只记录一条缺陷。
12.9使用缺陷记录日志
为什么要累计缺陷?
1)提高程序设计水平
2)减少程序中缺陷的个数
3)节省时间。错误可以引起更多的错误。缺陷在程序中的驻留时间越长,就需要更长的时间查找修复。
4)节约开支。缺陷带来的费用是昂贵的,单元测试后,在以后的各个测试和维护阶段,其查找和修复缺陷的费用平均以十倍的速度增长。
第13章 缺陷查找技术
13.2发现缺陷的步骤
发现缺陷的步骤
1.标识缺陷征兆
2.从征兆推断出缺陷的位置
3.确定程序中的错误
4.决定如何修复缺陷
5.修复缺陷
6.验证这个修复是否已经解决了这个问题
13.3发现和修复缺陷的方法
1)利用编译器查错
2)用数据测试程序
3)发行仍然含有缺陷的产品,然后等待用户发现和反馈缺陷信息。
4)个人复查源程序清单
13.4代码复查
代码复查是一种能快速找到缺陷的方法。进行代码复查就是研究源程序,并从中发现错误。代码复查最好是在源代码编码完成后并在编译和测试之前进行。由于大部分软件缺陷源于疏忽或者愚蠢的失误,所以在刚刚完成设计或者编码时是最容易发现缺陷的。
代码复查的方法:打出源程序清单,然后逐行地进行复查。或者在电脑屏幕上复查代码。
尽管代码复查非常费时间,但它比测试更有效率。代码复查更有效的源于是:在代码复查时看到的是问题本身而不是征兆。复查的缺点是非常耗时,而且很难恰当地进行。
代码复查脚本
入口准则 在复查前,检查下列产品是否已经准备好:需求陈述文档,程序设计文档,程序的源代码清单,编码标准
1 复查规程 首先,完成源程序编码;然后,在进行编译和测试之前,打印一份源程序清单;下一步,进行代码复查。
2 修复缺陷 修复所发现的每一个缺陷;确保所作的修复正确无误;将缺陷登入在缺陷记录日志
3 覆盖率复查 验证程序设计覆盖了需求文档中描述的每一个功能;验证程序代码实现了所有设计
4 程序逻辑复查 验证程序设计在逻辑上是正确的;验证程序代码正确地实现了代码中的逻辑
5 命名和类型检查 验证所有的名字和类型已经正确的生命和使用;检查整型、长整型和浮点型是否正确声明
6 变量检查 确保每个变量已初始化;检查上溢、下溢或者越界问题
7 程序语法检查 验证程序代码符合编程语言的规格说明
出口准则 在复查结束时,应该有完整的、修复过的源程序清单;填写完整的时间记录日志;填写完整的缺陷记录日志
第14章 代码复查检查表
进行有效的代码复查的关键是要具有一个高效率的复查规程。制定一个适合自己使用的代码复查检查表有助于快速而有效地发现程序中的缺陷。
14.1 检查表的用途
检查表包括一系列规程式的步骤,并要求你精确地遵循这些步骤去做。当人们需要严格地按照说明去作某件重要事情时,经常使用检查表。
如果想发现和改正程序中的每一个缺陷,就必须遵照一个精确的规程。检查表可以帮助确保遵循这个规程。
第17章 设计缺陷
17.5设计缺陷的起因
设计缺陷的起因
1)设计错误。在对问题深思熟虑之后却作出了错误的设计决策。
2)知道应该做什么样的设计,但犯了一个简单的错误。
3)误解了要做的内容。
第19章 过程质量
19.3缺陷排除策略
缺陷排除策略:
1)尽自己的努力开发高质量的程序模块
2)全面检查所有的模块接口和交互作用
3)检查需求。以确保所有重要的能力都被正确地理解、设计和实现。
4)根据需求检查系统和程序的设计,以确保正确的实现了所有的关键需求
5)代码检查后进行彻底的单元测试
6)进行全面的集成测试
7)进行全面的系统测试

posted @ 2008-02-18 10:23  911  阅读(840)  评论(0编辑  收藏  举报