天天看点

《个体软件过程》目录—导读

《个体软件过程》目录—导读

版权声明

个体软件过程

introduction to the personal software process, first edition by wattss. humphrey

copyright © 1997 by addison wesley longman, inc. all rights reserved.

published by arrangement with the original publisher, addison wesley longman, a pearson education company.

人民邮电出版社经pearson教育集团的addison wesley longman公司授权出版。版权所有,侵权必究。

内容提要

《个体软件过程》(简称“pspi”)是watts s.humphrey于1997年特地为美国大学一年级学生编写的教科书。书中描述了很多资深的软件工程师解决软件工程问题的方法,特别是有关软件项目计划和软件质量控制方面的先进方法,并提供了很多练习来帮助读者掌握这些方法。

美国embry-riddle航空大学计算机科学系以本书初稿为教材,为该系一年级学生讲授了这门课程,经验证明,这对造就学生成为合格的软件专业人员很有帮助。每章之后还附有习题,以帮助读者复习与掌握该章的主要内容。因为本书是在两个学期的计算机科学或软件工程导论课程中使用,所以本书的内容分成两部分,在第一学期中讲授时间管理(前10章),在第二学期中讲授质量问题(后10章)。

本书实用性与可读性较强,可作为高等学校计算机软件工程课程的教材,也可作为工程技术人员自学个体软件过程的教材,是进行软件过程改善和能力成熟度模型sw-cmm评估的重要参考资料。本书同样适用于软件开发项目经理、程序员和一般编程爱好者在开发软件时参考。

给教师的话

我们在embry-riddle航空大学计算机科学系,以本书初稿为教材,为该系一年级学生讲授过程原理课程。本书包含个体软件过程(psp)的元素和活动的主要子集,一年级学生可以像传统的程序设计课程那样来接受这些内容。本书还为引导学生进行规范化的个体实践提供动力和一种结构。我们已经领略了以本书作为教材进行教学的好处,它对造就我们的学生成为合格的软件专业人员很有帮助。

多年来,我们一直在尝试如何对学生提供实际的软件工程经验。我们曾经在低年级课程中引入软件工程理论和实践,在高年级课程中增设小组项目,并取得了一定的成功。但不幸的是,我们发现学生在做这些项目时,他们并不懂得如何进行时间管理、进度安排和质量管理。正如软件工业化生产已经证实的,工程小组高效开发高质量软件产品的能力,在很大程度上取决于个体工程师的能力。对学生在时间管理和质量管理上的问题我们并不感到惊奇,因为我们并未给学生讲授如何计划和如何管理方面的课程。因此,我们尝试着在大学低年级课程中开始介绍过程的概念。

我们感到,大学一年级新生最容易接受时间管理的实践并从中获益。所以我们在计算机科学系的第一门课程(cs1)中介绍本书第1章~第10章的内容。虽然所有选修cs1课程的学生都有一定的程序设计经验,但他们离正式定义的软件开发过程的要求还相距甚远。因此,在他们真正深刻理解软件工程师的角色和实践之前,需要了解现代软件开发工作的各种问题。

在完成了cs1课程和大学第一学期其他课程的学习之后,学生已经能用更加规范化的方法来开发程序,我们采用本书第11章~第20章的内容,在cs2课程中介绍了psp过程。这时,学生已经可以为他们的每一个程序设计项目制订计划。他们遵循所定义的psp实践,使用自己的历史数据来估计项目规模、工作量和质量(缺陷分布情况),并在项目总结报告表中收集和记录每个项目的实际数据。

在进行了一年的实践之后,我们发现给计算机科学系一年级新生介绍过程活动的方法相当有效。这里说有效是指学生学会了如何使用本书所描述的过程。他们最终确实明白了记录工作量、程序规模和质量数据的价值,并且能利用这些数据计划项目和分析他们个人工作的有效性。他们在工作中收集数据,就为估计提供了定量基础。他们定期进行结构化复查,并学会在工作中遵循已定义的开发阶段(例如:计划、设计、编码、编译和后置处理)进行工作。我们也感到,如果把介绍psp的课程推迟到另一个学期(或另一年),只会使不正确、无规范的程序设计实践在学生心目中更加根深蒂固,从而对改变将更加抵触。

psp已经帮助学生认识到规范化方法对开发软件的重要性,也为将来进一步介绍高级个体过程和群组过程奠定了更严谨的基础。学生的大部分数据是准确的,但必须仔细分析并抛弃有怀疑的数据。我们感到遗憾的是,学生的计划工作能力并无提高,很多学生仍然把作业拖到指定的交付日期才交。这是一个新程序员常见的问题。

我们毫不惊奇地发现,psp方法的成功与否,在很大程度上取决于教师激发学生学习和实践这些概念的能力。我们使用本书的概念和论点鼓励学生对过程方法持积极的态度;对课堂数据提供定期的反馈和分析,以激发学生进一步考虑个人数据的兴趣;并邀请工业界专业人员在课堂上讨论他们的过程经验。这些对学生学好这门课程都很有帮助。

在开始讲授这些新课时存在一些困难。例如,我们开始没有将psp与cs1和cs2课程的其他内容紧密地结合起来。因此,学生很难把时间管理活动与他们的程序设计工作相结合。此外,我们也没有对课堂的整体数据提供足够的反馈。

psp的一个有趣且有益的副产物是给教师提供了大量的数据。在cs1课程中,我们获得了学生花费在cs1课程活动上的时间的周报告。在cs2课程中,我们获得了有关每个程序设计项目规模、工作量和缺陷数据的psp总结报告。这些数据经常引起课堂上对所讲授的方法以及它们如何影响程序员的生产率和程序质量进行热烈的讨论。这些数据为这些问题的详细讨论和分析提供了定量的基础。

在我们的计划中,将在大学一年级继续安排讲授psp课程。我们也要求修完cs1和cs2课程的学生在数据结构和算法课程中继续使用psp方法。我们相信,这将为他们在三、四年级遇到复杂的群组项目时作好准备。我们还计划在他们的后续课程中指导学生进一步提高和扩展psp方法。

我们已经看到,本书对学生学习专业人员的软件规范很有帮助。我们希望其他使用本书的学生和教师也能得到同样的收益。

thomas b. hilburn, aboalfazl salimi, massood towhidnejad

embry-riddle 航空大学

给学生的话

当我们完成了一年级的psp课程之后,embry-riddle航空大学的一些教师问我们是否愿意联名为这本书写一篇前言。我们同意了。但由于我们不能肯定如何才能写好一篇前言,他们建议我们仅仅回答一些问题。下面是教师向我们提出的问题以及我们对这些问题的解答:

一、你在psp课程中做了哪些任务?

我们记录了在程序设计作业和项目上花费的所有时间。为了跟踪时间数据,需要做大量的文书工作。我们还记录了程序的规模和缺陷,并用所收集的数据估计今后项目的时间、规模和缺陷数目。

二、本书的内容合适吗? 这个教材与一年级其他课程的教材是怎样相配合的?

它很好地满足了课程的要求。而且有了一个估计之后,可以帮助你对正在进行的工作产生自信。

刚开始时,psp课程似乎对其他课程有干扰。但在课程结束时,我们认识到,这些活动对完成其他课程也确有帮助。在学习这门课程的整个过程中,我们经常问自己:“为什么我要做这些工作?”但是后来认识到,对自己要完成的程序工作有了估计,实际上对自己很有帮助。

非常重要的一点是,千万不要随意填写数据(时间),否则所收集的数据就没有什么用处。

三、你学到了什么?

除了上面已经提到的那些之外,还学习如何才能更有效地利用时间以及在上机之前要做那些准备工作。在上机之前应该完成许多书面准备工作。

通过示例和讨论,还将了解自己和其他人所犯的错误。由于在上机前做了许多书面准备工作,因此在进行程序设计时井井有条。我们还认为,psp不仅可以用于软件开发,只要对表格稍作修改,也可用于其他各种活动。

四、对将来要使用psp的学生有什么建议?

按正确的方法去做,对数据不要随意填写,要遵循指南。要努力理解psp的整体框架和所蕴含的概念。不要对书面工作产生抵触,它最终是有回报的。

ben bishop, andrew henderson, michael patrick

译校者序

本书是watts s. humphrey特地为大学一年级学生编写的教科书。该书描述了很多资深的软件工程师解决软件工程问题的方法,并提供了很多练习来帮助学生掌握这些方法。根据美国carnegie-mellon(卡内基梅隆)大学软件工程研究所humphrey等人的实践数据,在应用了psp之后,软件产品的总的缺陷减少了58.0%,在测试阶段发现的缺陷减少了71.9%,生产效率提高了20.8%。在美国,embry-riddle航空大学计算机科学系首先以本书初稿为教材,为该系一年级学生讲授了这门课程,取得了很好的效果,接着在几十所大学中开设了这门课程。经验证明,这对造就学生成为合格的软件专业人员很有帮助。

为了在企业中推广psp,需要高层经理的大力支持,需要有合格的教员和合适的教材,而且还需要所有有关人员的积极参与。然而,遵循个体软件过程psp开发软件并不是一件轻而易举的事,需要人们改变自己的工作方式。但是,人们通常很难改变自己的工作习惯,他们虽然愿意做些细微的改变,但往往离不开原有的习惯。只有在用他们自己的事实证明新的方法确实有效之后,才愿意真正进行改变。因此,推广个体软件过程需要以认真的实践为基础,并努力总结亲身经历的经验和教训。

个体软件过程可以作为两学期的软件工程课程的一部分,也可作为一门独立的课程。但这是一门实践性很强的学科,需要通过编写程序才能真正掌握psp的精髓。为了精简讲授内容,减少重复实践,可以将psp课程的程序设计练习与其他课程的作业结合起来。在最近与humphrey的一次通信中,他告诉我们如果在讲授个体软件过程psp之前,先讲一些统计过程控制原理,对理解psp的方法和理念非常有利。

诚然,psp方法的成功与否,在很大程度上取决于教师激发学生学习和实践这些概念的能力。这不仅需要教师本人对psp持积极态度,而且需要努力实践,认真积累数据,用自己的经验向学员展示psp方法的威力。可以认为,教员按照psp原理进行认真的实践,是讲授好psp课程的重要前提。

在embry-riddle航空大学计算机科学系的教员和学员分别为本书撰写的“给教师的话”和“给学生的话”以及humphrey本人在本书正文和他为本书撰写的前言中,都特别强调采集数据的重要性,并特别指出千万不要对数据进行粗制滥造,否则所收集的数据不会有什么用处。因此,我们诚恳地期望学员在学习psp课程时,按正确的方法去做,努力理解psp的整体框架和所蕴涵的概念,努力采集真实的数据,在自己的工作中坚持贯彻psp的原则。因此,开展psp培训,不仅需要学员的认真参与,而且需要在后续课程中进一步提高、巩固和扩展psp方法。可以认为,这是掌握psp方法的基本保证。

自从1994年以来,humphrey一直大力倡导这种方法,他在美国很多著名公司推行psp方法,获得了很好的结果。而且还从1996年开始,大力倡导群组软件过程(也称小组软件开发过程)tsp方法。软件能力成熟度模型sw-cmm、个体软件过程psp和群组软件过程tsp三者相互配合,各有侧重,形成了一个不可分割的整体,犹如一张具有三条腿的凳子,缺一不可。在国际上,印度的软件产业界颇为重视sw-cmm、psp和tsp的培训和推广,因而在软件产品质量、软件项目的进度和费用等方面都得到了大幅度的改善。

此外,我们注意到在美国carnegie-mellon大学软件工程研究所对外开设的课程中,对个体软件过程psp给予了特别的重视。其中《introduction to the personal software process》是一门历时两天的课程,讨论了psp的关键概念以及相关的术语和理念,并为软件工程人员参加群组软件过程作好准备。其中为软件工程师开设的psp课程有两门,第一门讨论软件项目规划,第二门讨论软件产品质量,每门课都是五天。在第一门课中,除了讨论个体软件过程引论,还讨论规模测量、规模估计、如何基于历史数据来估计规模和资源以及如何进行过程测量等问题。第二门课主要讨论缺陷管理、设计过程、设计验证、如何将psp应用于大型项目以及如何进行过程开发等问题。这两门课程都是以humphrey所著的另一本书《the discipline for software engineering》为教本。

北京航空航天大学软件工程研究所从1997年开始在硕士研究生中开设《个体软件过程引论》课程,最近两年改在本科生的软件工程课程中讲授psp的内容,今年还对一些公司的软件工程师进行了psp培训,这些都取得了一定的效果。但是由于实践时间不长,数据采集不全,需要进一步坚持改善与总结提高。

从2000年下半年以来,在我国软件企业界掀起了能力成熟度模型cmm评估的热潮。需要着重指出的是,在软件能力成熟度模型sw-cmm的18个关键过程域中,有12个与个体软件过程psp紧密相关,有16个与群组软件过程tsp紧密相关。因此,如果能熟悉个体软件过程psp和群组软件过程tsp,不仅有助于工程师改善工作效率,而且也非常有利于组织的过程改善。可以认为,在大学中讲授psp和tsp课程,对培养合格的软件专业人员和加速我国软件产业的发展将起积极的推动作用。

我们把《introduction to the personal software process》一书的中文译本奉献给读者,希望能对我国软件产业的发展起到推动作用。但由于我们水平的限制,缺点和错误在所难免,敬请读者对本书翻译中的缺点和错误提出批评、指正,并希望对授课方式和练习内容提出积极建议。

吴超英 车向东

2010年4月22日于北京

如果你正在学习成为一个软件工程师,这本书就是为你写的。书中描述了很多资深的工程师解决软件工程问题的方法,并提供了很多练习来帮助你掌握这些方法。每章描述了一个不同的主题,当你做完作业规定的练习之后,你将掌握这个技能。完成每个练习中的例题,对检查自己的学习情况很有帮助。

一、为什么我要写本书?

开发软件产品不仅是将程序设计指令汇集在一起,并使其能在一台计算机上运行,而且要求在商定的费用和进度下满足用户的需求。为此,软件工程师需要始终如一地在计划的费用下、按进度开发出高质量的程序。本书向你展示如何进行这些工作,介绍个体软件过程(psp),这是用规范化的个人实践从事高级软件工程的指南。

psp将向你展示如何制订计划并跟踪你的工作,并指出怎样始终如一地生产高质量的软件产品。使用psp也将向你提供工作有效性的数据并识别出自己的优势和弱点。psp犹如运动场上的秒表和测距器,要对参赛做出明智的判定,需要通过度量来了解自己的擅长以及哪些地方需要改善。就像一个田径队,软件工程也有许多专业,软件工程师需要各种技能和才干。为了事业的成功,需要了解和提高自己的技能和能力,并在工作中充分利用自己独特的才能。psp帮助你实现这一点。

二、使用psp

通过使用psp,你将对专业软件工程师经过多年的试验和失败所开发(研究、探索)出来的各种技能和方法进行实践。在前人经验的基础上前进,将会学得更快,而且可以避免重复前人所犯的错误。作为一个专业人员,关键是要了解别人已经做过什么,并注意吸取他们的经验和教训。

1.学生将如何受益

虽然现在通常在研究生的软件工程课程中介绍psp,但其基本原理也可以在大学本科新生中讲授和实践。本书旨在学生学习其他课程的同时,循序渐进地了解psp方法。当阅读每一章之后,要完成课后的练习。这些内容将向你展示如何管理时间,如何制订计划并跟踪你的工作,以及怎样始终如一地生产高质量的程序。

要掌握有效的技能和习惯需要花费时间,因此在每一个软件作业中都应该用psp方法进行实践。如果你这样做了,在从事软件工程工作需要这些技能之前,你就已经学习、实践和完善了这些技能。

2.工作中工程师将如何利用本书

已经工作的软件工程师也可从本书学习psp的基础。我建议你从头到尾做一遍书中的练习,并将它们作为改善你的日常工作方法的指南。实践每个练习直到熟悉这种方法,然后再阅读下一章,以增添新的方法。然后采取同样的方法,在进行下一步学习之前,既要实践新方法,也要实践以前学过的方法。关键是一定要花时间来掌握某一个方法,然后才学习下一个方法。

只要坚持并遵循一定的规范,自学本书不应该感到困难。但若在一个班级中或几个同事组织起来学习,可以互相交流经验并分享见解,这样做效果会更好。无论采取哪一种方式,大约每周要花费1~2个小时学习psp课本,记录和分析有关数据,并把psp方法应用于你的工作。虽然学习psp所需要花费的时间与你现在的习惯和实践有关,但若一旦完成了本书的学习,对你今后专业生涯的持续开发就奠定了坚实的基础。然而应该注意,学习psp的关键是要对你的工作数据进行考察和思考,看看这些数据对你的个人性能说明些什么。

三、对教员的一些建议

本书是作为传统上两学期的计算机科学或软件工程课程的一部分而设计的,只要求大学一年级新生的程度。本书一步一步地介绍psp,学生可以在他们的日常课程中使用。前10章的练习都是一般性的,既可以面向程序设计工作,也可以面向其他工作。后10章的练习是为6~8小时或更多一点时间的小型程序设计练习而设计的。

虽然有些学生在进入大学后才第一次学习程序设计,但现在有很多学生在高中就学习程序设计的基础知识。因此将本书设计成既可在第一门程序设计课程中使用,也可在更高级的程序设计课程中使用。无论学生是否已经学过程序设计,他们都应该很容易理解本书的内容,并会立刻发现本书对他们非常有用。

本书是psp引论,而不是psp的全部内容。例如,本书没有包含准确估计或数据分析所需要的统计技术;也没有包含适用于大项目的psp方法,即没有包含将psp用于编写大型程序时所需要的过程定义和过程改善技术。因此,全面介绍psp技术应在学生教育计划的后期进行1。

当你指导学生学习本书并完成作业时,在第一学期,学生将学习跟踪和监控工作、管理时间以及制订计划的方法。在第二学期,学生将学习有关程序质量、进行复查以及利用各种质量度量和质量管理的方法。他们也将学习有关缺陷、引起缺陷的原因以及工程师对他们生产的产品质量应该承诺的个人责任。在第二学期课程结束时,学生们可以掌握psp的基本内容。为了在这个基础上继续深造,并帮助他们积累使用这种方法的经验,在后续课程中应该要求学生继续使用psp。

1.教学方案

由于本书是在两个学期的计算机科学或软件工程导论课程中使用,所以把本书的内容分成两部分,在第一学期中讲授时间管理(前10章),在第二学期中讲授质量问题。在两个学期中讲授本书共需要6个课内学时。由于学生在他们现在进行的课程中使用psp方法,讲授本书并没有明显加重学生的课业负担。学生在学习这种方法上所花费的时间,都将在其他工作中提高效率而得到补偿。

当讲授这本书时,应在每章的课后安排作业。经验证明,最好在第一学期的前几周讲完前10章的内容。然后在该学期的后几周对所介绍的方法进行实践。第二学期应该遵循同样的策略,在前几周进行psp的课堂讲授,在后几周对所介绍的方法进行实践。

特别重要的是,应把本书所讲授的内容作为整个计算机科学或软件工程导论课程的有机组成部分。要对学生讲清,本书所介绍的各种方法是软件工程方法的精髓,学生必须学习和实践。当你安排每个作业时,还要向学生说明,他们的分数不仅依赖于他们工作的质量,也依赖于他们运用psp方法的水平。他们必须完成每个psp练习,并且在介绍该psp方法后继续使用它。课程方案、建议讲授的内容以及作业所需要的工具等,在本书最后一页的教师指南和支持材料中介绍。

2.教员的准备

在讲授这门课程的过程中,你将会发现自己使用这种方法也有好处。例如,你可以使用计划和时间管理的方法来准备课堂讲座或批改作业。在你亲身使用psp方法之后,将会更加赞同需要个体规范。有了这种背景,对你向学生解释并指导他们使用psp方法都有好处。当学生发现你已经使用过psp,他们也就更有可能使用它。

四、致 谢

在撰写本书时,我要特别感谢embry-riddle航空大学计算机科学的全体教职员工。他们鼓励我编写本书并友好地评阅了我的手稿。由于他们在给几个新生班级授课,并且自己也在使用psp方法,因此他们给我提出了很多有益的建议。在此我要特别感谢tom hilburn、iraj hirmanpour、aboalfazl salimi、davie srachet和massood towhidnejad教授对我的支持和鼓励。我也要感谢他们的三位学生ben bishop、guillermo jose hernandez和richard rickert为我提供了他们的课程数据和课堂经验。此外,我还要感谢ben bishop、andrew henderson和michael patrick在本书的“给学生的话”中非常诚恳地描述了他们使用本书的经验。

在sei和其他单位的一些朋友和同事也友好地评阅了我的手稿,并提出了许多有益的建议和评注。我很感谢steve burke、 howie dow、 john eikenberry、andy huber、julia mullaney、glenn rosander、marie silverthorn和bob stoddard。我的秘书marlene macdonald在阅读和评注部分手稿以及在分发手稿进行评阅的过程中,也给了我很大的帮助。我还要感谢peter gordon和helen goldstein以及addison-wesley的专业人员在本书的出版过程中的有益支持。

最后,我为有一个出色的妻子感到骄傲。在我编写一本又一本书的过程中,我的妻子barbara给我极大的帮助。就像我在出版其他书时一样,在本书交付出版之前,总是由她阅读本书的最后一版手稿。虽然我得到这么多的帮助和支持,但我深信,无论是barbara或给我帮助的很多同事,都不可能发现我所有的疏忽和错误。所有留在书中的错误完全由我自己负责。

watts s. humphrey

sarasota, florida

1在我的另一本教科书 《软件工程规范》(《a discipline for software engineering》, reading ma: addison-wesley,1995)中,对psp和psp课程有更为详细的描述。在该书的辅助材料中,有教员指南以及包含课堂投影胶片和作业材料的光盘。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

目录

前言

<a href="https://yq.aliyun.com/articles/97505">第1章 软件工程师的任务</a>

<a>1.1 什么是软件工程</a>

<a href="https://yq.aliyun.com/articles/97506">1.2 为什么工程质量很重要</a>

<a href="https://yq.aliyun.com/articles/97507">1.3 个体软件过程</a>

<a href="https://yq.aliyun.com/articles/97508">1.4 高质量工作的规范</a>

<a href="https://yq.aliyun.com/articles/97509">1.5 高质量工作的重要性</a>

<a href="https://yq.aliyun.com/articles/97510">1.6 如何提高工作质量</a>

<a href="https://yq.aliyun.com/articles/97511">1.7 过程改进的步骤</a>

<a href="https://yq.aliyun.com/articles/97512">1.8 本书的策略</a>

<a href="https://yq.aliyun.com/articles/97513">1.9 总结</a>

<a href="https://yq.aliyun.com/articles/97514">1.10 练 习 1</a>

第2章 时间管理

第3章 时间跟踪

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

第5章 产品计划

第6章 产品规模

第7章 管理好时间

<a href="https://yq.aliyun.com/articles/97516">第8章 承诺的管理</a>

<a href="https://yq.aliyun.com/articles/97516">8.1 什么是承诺</a>

<a href="https://yq.aliyun.com/articles/97518">8.2 认真制订承诺</a>

<a href="https://yq.aliyun.com/articles/97581">8.3 承诺的一个示例</a>

<a href="https://yq.aliyun.com/articles/97586">8.4 工业中的示例</a>

<a href="https://yq.aliyun.com/articles/97592">8.5 处理没有完成的承诺</a>

<a href="https://yq.aliyun.com/articles/97590">8.6 管理承诺的重要性</a>

<a href="https://yq.aliyun.com/articles/97595">8.7 不对承诺进行管理的后果</a>

<a href="https://yq.aliyun.com/articles/97600">8.8 管理承诺的方法</a>

<a href="https://yq.aliyun.com/articles/97604">8.9 总结</a>

<a href="https://yq.aliyun.com/articles/97609">8.10 练习8</a>

第9章 进度管理

第10章 项目计划

第11章 软件开发过程

第12章 缺陷

第13章 缺陷查找技术

第14章 代码复查检查表

第15章 缺陷预测

第16章 缺陷排除的经济效益

第17章 设计缺陷

第18章 产品质量

第19章 过程质量

第20章 个人对质量的承诺

继续阅读