《软件工程—实践者的研究方法》读书笔记
《软件工程—实践者的研究方法》这本书内容丰富,从软件工程的定义、软件过程、建模、质量管理到管理软件项目和软件工程发展趋势的探讨,作者逐个展开并做了大量的讲解。内容丰富,当然书也是非常厚。借到这本书之后,一开始没看,一再推迟,大概十一月末才鼓起勇气开始翻阅这本厚厚的书。
这本书不像之前翻阅的软件工程书,里面有大量篇幅讲解敏捷开发,还有WebApp和移动App的分析、设计、测试和质量管理等。书中内容不局限于理论知识的阐述,使用大量篇幅在简单实例中进行分析和设计,主要以SafeHome来演示软件项目如何推进。也与Brooks的人月神话不同,Brooks的人月神话以工程项目中出现的重大问题为主线,以技术为核心,分析了软件开发和软件工程存在的一些问题,探寻到底有没有存在消灭“人狼”的“银弹”;而本书,我觉得作者想呈现给大家一套比较完整的软件工程理论体系,同时以项目示例演示如何将各种理论方法应用于项目工程。
本书主要分为五大部分,软件过程、建模、质量管理、管理软件项目和软件工程高级课程。在五部分之前还用了两章来讲述软件的定义和软件工程。
软件是:(1)指令的集合(计算机程序),通过执行这些指令可以满足预期的特性、功能和性能需求;(2)数据结构,使得程序可以合理利用信息;(3)软件描述信息,它以硬拷贝和虚拟形式存在,用来描述程序的操作和使用。IEEE对软件工程下的定义是:(1)将系统化的、规范化的、可量化的方法应用于软件的开发、运行和维护,即将软件工程化方法应用于软件;(2)对(1)中所述方法的研究。作者认为我们需要规范,也需要可适应性和灵活性。
第一部分是软件过程,软件工程的通用过程框架定义了五种框架活动:沟通、策划、建模、构建以及部署,此外,还有一系列普适活动:项目跟踪控制、分线管理、质量保证、配置管理、技术评审以及其他活动。过程模式有惯用过程模式、专用过程模式和统一过程。惯用过程模型有:瀑布模型(变体V模型)、增量过程模型、演化过程模型(原型开发、螺旋模型)、并发模型;专用过程模型有:基于构建的开发、形式化方法模型、面向方面的软件开发。敏捷开发推崇:让客户满意且尽早的增量发布;小而高度自主的项目团队;非正式的方法;最小化软将工程工作产品以及整体精简开发。极限编程是敏捷开发中使用最广泛的一种方法。XP关键活动有策划、设计、编码和测试。
第二部分是建模部分,主要内容有指导实践的原则、理解需求、需求建模和设计。软件工程是以一系列核心原则作为指导的,这些原则有指导过程的原则和指导实践的原则。构建一个软件系统最困难的部分是确定构建什么,它会严重的影响随后所开发的系统,于是出现了需求工程。需求工程的任务是为设计和构建活动建立一个可靠且坚固的基础。软件团队成员需要完成7个不同的需求工程任务:起始、获取、细化、协商、规格说明、确认和管理。需求建模有基于场景的方法、基于类的方法以及行为、模式和Web/移动App。软件设计是一个迭代的过程,通过这个过程,需求被变换为用于构建软件的“蓝图”。本书设计内容有:体系结构设计、构件级设计、用户界面设计、基于模式的设计、web App设计和移动App设计。
第三部分是质量管理。什么是质量?质量是一个复杂多面的概念,设计质量和符合质量两方面都需要软件工程师考虑。质量很重要,但是用户不满意,其他的事就都不重要了。这是Robert Glass给出的一个“直观的公式”:用户满意度=合格的产品+好的质量+按预算和进度安排交付。对于质量管理,相关的技术和方法有:评审技术、软件质量保证、软件测试策略和安全性工程。
第四部分是管理软件项目。管理设计的范围包括人员、产品、过程和项目。在这里就需要考虑过程的度量和项目的度量以及软件项目的估算。软件项目管理还涉及项目进度安排、风险管理和维护与再工程。关于人员管理,人月神话中Brooks用一章来讲团队组成的重要性,使用“外科手术团队”来打比方。在本书中,作者也用了不少篇幅来讲团队的重要性。作者用了两章依次来讲过程度量与项目度量和软件项目估算。软件测量的方法有面向规模的度量、面向功能的度量、调和代码行度量和功能点度量、面向对象的度量、面向用例的度量和WebApp项目的度量。软件项目估算使用经验估算模型来预测工作量,本书中展示了典型的估算模型、COCOMO II模型和软件方程。软件方程是一个动态的多变量模型,它假定在软件开发项目的整个生命周期中有特定的工作量分布。
第五部分是软件工程高级课程。这里,作者介绍了软件过程改进(SPI)和软件工程的一些新趋势。SPI方法是迭代和连续的,它包括5个步骤:1、当前软件过程的评估;2、对业务人员和管理者的教育和培训;3、过程要素、软件工程方法以及工具的选区和合理性判定;4、SPI计划的实现;5、基于计划结果的评价和调整。SPI框架评价一个组织软件过程的“成熟度”,并提供成熟度等级定性的表示。CMMI(Capability Maturity Model Integration成熟度模型集成)以两种不同的方式表示过程元模型:一个连续式模型,一个分级式模型。连续式CMMI元模型定义了6个能力等级,分别是:不完全级、已执行级、已管理级、已定义级、定量管理级和优化级。分级式的CMMI元模型定义了5个成熟度等级,分别是:初始级、已管理级、已定义级、定量管理级和优化级。
参考文献:
[1]罗杰S.普莱斯曼(Roger S.Pressman),布鲁斯R.马克西姆(Bruce R.Maxim)著; 郑人杰等译. 软件工程:实践者的研究方法[M]. 北京:机械工业出版社.2016.9