代码改变世界

PSP(个人软件过程)

2010-11-20 15:22  ※森林小居※  阅读(...)  评论(...编辑  收藏

第一章 软件工程师的任务

第二章 时间管理

第三章 时间跟踪第

四章 阶段计划与产品计划

第五章 产品计划

第六章 产品规模

第七章 管理好时间

第八章 契约的管理

第九章 进度管理

第十章 项目计划

第十一章 软件开发过程

第十二章 缺陷

第十三章 缺陷查找技术

第十四章 代码复查检查表

第十五章 缺陷预测

第十六章 缺陷排除的经济效益

第十七章 设计缺陷

第十八章 产品质量

第十九章 过程质量

第二十章 个人对质量的承诺

 

 

第一章  软件工程师的任务 
        一个软件工程师的任务就是要在预定的时间和进度下交付高质量的软件产品。
   因此,要进行有效的软件工程的工作,要从以下三个方面进行:
       开发出高质量的软件产品;
       在预期的费用内进行工作;
       在预定的进度下完成任务。
   要想使所做的工作富有成效,需要进行下列工作:
        1.  制订工作计划;
        2.  按照此计划进行工作;
        3.  尽最大努力生产出高质量的产品;

   规范是指为掌握或提高某种技能的活动或训练。
   通常有人把规范看成烦琐的限制,但它实际上是一个学习与自我提高的框架。
   PSP的规范提供了软件工程师做需要的改进个人技能的结构化框架和方法。
   问题不在于是否需要某些个人的技能,而在于掌握这些技能需要多长时间以及是否能经常使用它们。
   PSP的规范将会加速你的学习过程。
   在软件行业,没有经过PSP培训的工程师不得不在工作中掌握这种技能。
   这不仅要付出很大的代价和时间,而且具有越来越大的风险。

   软件工程师应该计划要做的工作,然后按照这个计划来工作。
   这就能够在规定的预算和时间内开发出高质量的产品。
   个体软件过程(PSP)就是为使工程师更好地工作而设计的一个框架。
   它指出如何估计和计划工作,如何按照这些计划来跟踪自己的性能,以及如何提高程序的质量。

   提高质量的方法需要花费一定的时间去学习和实践,但这对你的工程生涯是有益的。
   为了不断提高工作的质量,必须树立目标,对产品质量进行测量,了解工作的过程,
   改变并重用这个过程,测量和分析结果,最后要反复地对过程进行持续改进。

第二章  时间管理  
   时间管理的逻辑原理是:
   人们很可能像上星期那样安排这星期的时间
   为了制订切实可行的计划,必须对所用的时间进行跟踪
   为了检查时间估计和计划的准确性,必须把它们写成文档并在今后与实际情况进行比较
   为了制订出更准确的计划,需要知道以前的计划中存在哪些错误,哪些地方可以进行改进
   为了管理好时间,首先制订时间分配计划,然后按照计划去做

   按照预先制订的计划进行工作会有两点好处:
   第一、了解计划中还存在哪些错误,有助于更好地计划下一个项目。
   第二、按照计划好的方式完成工作。这看起来好像不重要,但是事实上软件工程中许多错误都是
   由于考虑不周、精心大意或是不注意细节而造成的。
   在很多情况下,已经知道了合适的方法并且也作了详细的说明,但就是没有得到实施。
   因此,学会制订可行的计划是重要的,但是学会实际执行这些计划内才是最关键的。

   按照计划进行工作的另一个更加微妙的好处就是它实际上在改变你的工作方式。
   有了计划,就不用浪费时间去考虑下一步要干什么,它会帮助你把精力集中在所做的事情上,
   很少分心,从而提高了工作效率。

第三章 时间跟踪

第四章 阶段计划与产品计划

第五章 产品计划
 
    作计划是软件工程师工作的一个重要部分,要想成为一名有才干的工程师,就必须知道如何制订计划。
    关键是实践,为了获得更多的实践机会,从现实开始就制订计划,并在以后的项目中继续这样做下去。
    计划是按期完成承诺的任务的可靠基础,而且计划也可以在工程师合作开发产品过程中协调他们的工作。
    个人的产品计划能使第个人互相约定各自的独立任务的期限,以便完全满足所承诺的各项任务。

第六章 产品规模

    产品计划不是一个准确的过程。
    应该尽自己所能制订最好的计划,但同时也要看到,这些计划可能会不准确。
    作计划是一种技能,可以步地培养和提高。培养的途径就是所做的每一项作业制订计划。
    然后,对于每一项已经完成作业,将它的计划与实际的结果相比较,
    这样可以更清楚了解计划中的差错并且学会制订更好的计划。

    由于各种任务的规模的复杂程度的差异很大,所以掌握一种比较它们规模的方法是很有帮助的。

第七章 管理好时间

    管理时间的步骤:
    1.  决定如何使用时间
    2.  制订时间安排表。
    3.  对照制订的安排表跟踪使用时间的方式。
    4.  决定应该改变什么以使自己的行动达到所作安排的要求。

第八章 契约的管理
 
    许多软件开发的进度和计划中存在的主要问题就是:
    管理人员要把这些进度和计划看成是类似于合同的契约,而软件工程师则并不把它看成是个人的契约。
    对于带有合同性质的契约,在它生效之前,两个或是更多的人必须在预期的行动上达成一致。
    一个真正的契约既是个人的承诺也有合同的效应,并且它需要双方或多方在如下问题上达成明确和自愿的一致:
        要做什么(事情)。
        判断工作是否完成的准则。
        由谁来完成任务。
        何时完成任务。
        作为回报所支付的报酬或其它考虑。
        由谁来提供这些报酬或其它考虑。

第九章 进度管理

第十章 项目计划

第十一章 软件开发过程
    一个过程是为完成某一作业而定义的一系列步骤。
    一个作业的每个步骤或阶段都有明确的入口准则,只有满足这些条件,才可以开始进入这个阶段。
    同样它们也有出口准则,只有满足这些条件,才可以结束这个阶段。
    而过程的步骤定义要完成的任务以及如何完成这些任务。
    因为软件工程师的过程质量在很大程度上决定了他们的工作质量和效率,
    所以过程的设计和管理在软件工程中是非常重要的。

    个体软件过程(PSP)是一个用以帮助软件工程师测量和改进工作方式的框架。
    PSP有两个目标,一个是帮助软件工程师开发程序,另一个是告诉你如何利用过程来改善工作方式。


第十二章 缺陷

    软件质量是要满足用户要求并且要能可靠而稳定地完成用户的工作。
    这就要求你开发的软件完全没有或几乎没有缺陷。
    软件缺陷是软件产品中的不正确的东西。
    缺陷是由人为的错误引起的。
    因为查找和修复缺陷的代价很大,所以,最有效的方法是工程师能及时发现和修复引入的缺陷。

    管理缺陷的第一是了解它们。

第十三章 缺陷查找技术

    在PSP中主要的缺陷排除方法是个人代码复查。
    先打印出程序清单,然后逐行进行复查,尽可能地修复发现的每一个缺陷。
    最有效的方法是,找出以前的程序中在编译和测试阶段引起最大问题的那些缺陷类型。
    因为人们往往容易犯同样的错误,所以缺陷数据有肋于在第一次编译和测试前找到全部或绝大部分程序的缺陷。
    经验表明,当工程师在第一次编译前仔细地复查了他们的代码时,
    就能减少编译时间,大约相当于10%的开发时间,并且可以节省更多的测试时间。

第十四章 代码复查检查表
 
    检查表包括一系列规程式的步骤,并要求你精确地遵循这些步骤去做。
    当人们需要严格地按照说明去做某件重要事情时,经常使用检查表。
    如果想发现和改正程序的每一个缺陷,就必须遵照一个精确的规程。检查表可以帮助确保遵循这个规程。
    检查表也是一个构思的来源。当按照检查表去做时,就知道如何进行代码复查。
    检查表包括了个人的经验。通过不断地使用和改进个人检查表,可以更好地发现在程序中的缺陷。

第十五章  缺陷预测
   
第十六章 缺陷排除的经济效益
   
    在过去的三十年中,计算机领域尽管在技术上取得了很大的进步,但软件工程师的工作却没有一点变化。
    软件工程师仍是把大程序分成几个小部分,然后他们自己在开发其中一个或几个部分。
    在这个过程中,他们要花30%~40%或更多的时间让程序通过一些基本的测试。
    当程序可以运行后,程序员要测试并把他们逐级集成为较大型的系统。
    集成和测试的过程几乎全是为了发现和修复更多的缺陷。
    当产品最终交付后,产品质量往往很差,以至于工程师必须要在花费几个月的时间来修复客户反馈的缺陷。
    这是三十年前软件开发的普遍现象,但今天情况依然如此。

    更好的软件开发方法确实是存在的。
    保证工作质量的原则是在第一次就要开发出合格的产品。
    当你按照这个原则去做之后,就不会在编译和测试阶段需要去排除那么多的缺陷,
    你和你的组织也不需要花费那么多时间来查找和修复缺陷。

第十七章 设计缺陷
   
    完整清晰的设计表达有助于减少引入缺陷的数目。

第十八章 产品质量
   
   
第十九章 过程质量

    程序的质量取决于过程的质量,而过程的质量又取决于人们的工作方式。
    想知道自己当前的过程是好还是不好,就需要测量过程的质量。

第二十章 个人对质量的承诺
   
    作为软件工程师,你所生产的程序的质量对你的雇主和客户都至关重要。
    软件应用在许多有迫切需要的领域,软件缺陷可能引起的经济损失,甚至造成人身伤害。
    当你的软件是飞机飞行、汽车驾驶、空中交通管理、控制工厂运行或控制电厂的系统的一个部分时,
    软件系统中的缺陷可能造成无法计算甚至可能是灾难性的后果。

    每个领域的软件应用都遵循着同样的趋势。
    计算机化的控制系统是如此多种多样、经济和可靠,以致于软件几乎应用在生活的各个方面。
    因此,重要的是所有的软件工程师都要认识到,他们的工作对千百万人的健康、安全和幸福将有至关重要的影响。