前言
本书阐述了一个包含过、一系列方法和工具的框架,我们称之为软件工程。
本书所面向的读者是正在进行软件开发、需要保证软件正确性的软件工程师。
1. 软件工程师和程序猿的区别是什么?
2. 软件是逻辑的系统元素而非物理的系统元素。
3. 在项目开始之前,尽可能努力了解工作内容。也许难以明确所有细节,但你了解的越多,所面临的风险就越低。
4. 每当你认为没有时间采用软件工程方法时,就再问问自己,是否有时间做整个软件?
第一部分 软件过程
1. 什么是软件过程?
2. 软件过程中,有哪些共同活动、基本的活动?
3. 增量模型的那些特征使得它们能适应现代的软件项目需求?
4. 为什么现代软件工程强调“灵活性”?
5. 什么事敏捷软件开发?它与传统的过程模型有什么区别?
补充:6、软件过程和软件工程是什么关系?软件工程包括:软件过程+技术方法+自动化工具+测量和度量(后补充)。
软件综述
1. 软件开发过程中所遵循的路线图就称为“软件过程”。
软件过程提高了软件工程活动的稳定性、可控性和有组织性,如果没有过程约束,软件活动将失控并变得混乱。
2. 软件过程是一个对话,在对话中,软件所必需的知识被收集在一起并在软件中实现。
3. 软件工程包括过程、方法和工具。
4. 过程框架,定义了活动的时间、人员、工作内容和达到预期目标的途径。
5. 五个最基本的过程框架活动是什么?沟通、策划、建模、构建、部署。
6. 过程模式提供了一种有效的机制来描述各种软件过程。
过程模式一旦建立起来,就可以在过程变体的定义中复用。
7. 过程评估,以改进为目标,评估力求理解软件过程的当前状态。
插一句:软件组织在将其从整个项目中所获得的经验转化成资产的过程中存在重大缺陷。——NASA
8. PSP和TSP。理想情况下,每一个软件工程师都会建立最适合他的过程,并同时能够与开发队伍及整个组织的要求相吻合。
插一句:成功者不过是养成了成功人士做事的习惯。——Dexter Yager
9. PSP,强调对产品以及产品质量的个人测量。为了改变无效的个人过程,开发人员必须经过4个阶段。
PSP过程模型定义了5个框架活动:策划、高层设计、高层设计评审、开发、后验。
10. PSP强调对所犯的错误类型进行记录和分析,以便于制定避免错误的策略。即,在此基础上,PSP强调每一个软件工程师都尽早发现错误,良性循环。
关于PSP:http://ipd.uka.de/PSP
11. TSP的目标是建立一个能够“自我管理”的项目团队,团队能自我组织进行高质量的软件开发。建立团队自己的过程和计划。
为了组建有自我管理能力的团队,必须能够内部相互配合,并与外部良好沟通。
12. TSP定义的框架活动:项目启动、高层设计、实现、集成、测试和后验。TSP使用大量的脚本、表格和标准等来指导其团队成员的工作。
http://www.sei.cmu.edu/tsp/
13. 产品与过程。如果过程很薄弱,最终产品必将受到影响。但是对于过程的过于依赖也是很危险的。二象性。
过程模型
1. 每一个软件工程组织都应该用一组特定的框架活动来描述其所采用的软件过程。
2. 所有的软件过程模型都支持第2章中描述的通用框架活动,但是每一个模型都对框架活动有不同的侧重,并且定义了不同的工作流
如何以不同的方式执行每一个框架活动(以及软件工程动作和任务)。
3. 不同的过程模型:
<1>. 瀑布模型:在需求明确确定的情况下很有用;
<2>. 增量过程模型:增量模型以迭代的方式运用瀑布模型,即每个增量都是一个瀑布,随着每个版本交付,逐步为用户提供更多的功能;
<3>. RAD模型,Rapid App Dev。RAD是瀑布模型的“Rapid”变体,通过基于构件的构建方法实现快速开发;
<4>. 演化过程模型:每次迭代产生软件的一个更完整的版本;
<5>. 原型开发:当需求很模糊的时候,原型开发泛型帮助软件工程师和客户更好地理解究竟需要做什么。如果你的客户有一个合理的需求,但是对细节没有思路,
那么不妨先开发一个原型。注意,客户和开发者必须承认原型是为定义需求服务的。
<6>. 螺旋模型:它结合了原型的迭代性质和瀑布模型的系统性和可控性特点。是一种风险驱动型过程模型生成器。两个特点:逐步加深系统定义和确定一系列 里程碑。
螺旋模型是开发大型系统和软件的理想方法。但它依赖大量的风险评估专家来保证成功。如果有较大的风险没有被发现和管理,肯定会发生问题。
<7>. 协同开发模型:协同模型更适合不同的工程团队共同开发的系统工程项目。
软件过程应该侧重于灵活性和可扩展性,而不是高质量。这种说法听起来很惊人。但是,我们必须优先追求开发速度,而不是零缺陷。可是,很多广为人们尊重的
软件工程专家都这样建议。
<8>. 专用过程模型:
a. 基于构件的开发模型,具有许多螺旋模型的特点,它本质上市演化模型,需要以迭代方式构件软件。不同在于,基于构件开发模型采用预先打包的软件构件开发程序。
b. 形式化方法模型,主要活动是生成计算机软件形式化的数学规格说明。意义在于可以提供无缺陷的软件。
c. 面向方面的软件开发,
<9>. 统一过程(UP,Unified Process):用例驱动,以架构为核心,迭代并且增量的软件过程。和UML是一对孪生兄弟。
细化阶段扩展了起始阶段定义的用例,并扩展体系结构以包括了软件的五种视图——用例模型、分析模型、设计模型、实现模型和部署模型。
第4章 敏捷视角下的过程
1. 敏捷软件过程推崇让客户满意和软件尽早增量发布;小而高度自主的项目团队;最小化软件产品以及整体精简开发。
2. 在敏捷与软件工程之间做选择不是必须的。自定义一个敏捷软件工程方式是最好的选择。即使在敏捷学派内部也有不同的敏捷方式。
3. 有效的软件团队,其成员必须具备哪些显著特点?
4. 敏捷过程中人的因素:基本能力、共同目标、精诚合作、决策能力、模糊问题解决能力、相互信任和尊重、自我组织。
5. 敏捷过程模型
a. 极限编程XP,XP是基于简洁、交流、反馈和勇气的软件开发原则。“story”、CRC卡,重构,KIS。测试驱动开发,在story设计完之后,
团队并不直接开始编码,而是开发一系列的包括所有story的单元测试,一旦建立起单元测试,开发者就可以更集中精力于必须实现的内容
以通过单元测试。不需要加任何额外的东西(KIS)。一旦编码完成,便可立即完成单元测试,可即使反馈。
XP最关键的概念之一是结对编程。
b. 自适应软件开发,即ASD,Adaptive,着眼于人员协作和团队自我组织。Highsmith给ASD“生命周期”的定义包含思考、协作和学习三个阶段。
值得一提的是,ASD中的协作的本质就是现在最流行的JAD。
只有在抛弃了“我们和他们”的观念后,有效的协作才会出现。
c. 动态系统开发方法,DSDM,核心理念是,80%的应用系统可以用20%的时间交付。像XP和ASD一样,DSDM建议使用迭代软件过程。
d. Scrum,由一系列强调项目优先级、分离的工作单元、沟通、频繁的客户反馈等过程模式组成。
d1. 待定项(backlog,本质是优先级列表);
d2. 冲刺(sprint),必须在预定时间内完成(一般为30天),冲刺过程中不允许有变更。给开发团队提供一个短期但稳定的环境。
d3. Scrum例会,上次例会后做了什么?遇到什么困难?下次例会前做些什么?
d4. 演示——向客户交付软件增量。
e. Crystal;
f. 特征驱动开发,FDD(和目前我司的FO比较像),特征是可以在2周或更短时间实现的具有客户价值的功能。
g. 敏捷建模,Agile Modeling,AM是一种用于对软件系统有效建模和文档化的实践方法学。
AM独具特色的是:
g1. 有目的的模型,在构建模型之前,使用AM模型的开发者心中应当有明确的目标;
g2. 使用多个模型,AM建议从需要的角度看,每一种模型应当表达系统的不同侧面;
g3. 前进灯,是用于所有软件工作的理念,即仅仅构建能提供价值的模型——不多也不少;
g4. 内容重于表达形式;
g5. 理解模型及工具;
g6. 适应本地需要。
6. 代表性工具
a. Actif Extreme,由Microtool开发(www.microtool.com),提供对各种技术活动的敏捷过程管理支持;
b. Ideogramic UML,由Ideogramic开发(www.ideogramic.coom),是特别为敏捷过程开发的UML工具集;
c. Together Tool Set,提供支持XP和其他敏捷过程中许多技术活动的工具包。
以上为《软件工程:实践者的研究方法》第6版第一部分的摘录,该部分的主题为“软件过程”
http://mhhe.com/engineering/pressman/
http://www.mheducation.com/highered/home-guest.html