第6版第一部分——软件过程

前言
本书阐述了一个包含过、一系列方法和工具的框架,我们称之为软件工程。
本书所面向的读者是正在进行软件开发、需要保证软件正确性的软件工程师。

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

时间: 2024-10-06 07:50:31

第6版第一部分——软件过程的相关文章

在Win7(64位)使用VS2015运行《OpenGL编程指南》第八版第一章程序的方法

前言:笔者第一次用vs2015来实现<OpenGL编程指南>第八版第一个程序时确实花费了不少时间,按照网上教程,尝试了各种方法,最终花费了两个上午加一个下午的时间, 成功运行了程序,花了这么多时间,确实让人懊恼,现在把运行程序的步骤记录下来,以便查阅. 1.第一步,下载oglpg-8th-edith. 如果去书本上的官网下载,下载的是第九版的,而不是第八版的源码. 去其他网站下载,下载的这个包里面没有第一章的源码,可以网上黏贴其他人的代码,建议下第八版源码,下载网址:链接:http://pan

Java 线程第三版 第一章Thread导论、 第二章Thread的创建与管理读书笔记

第一章 Thread导论 为何要用Thread ? 非阻塞I/O I/O多路技术 轮询(polling) 信号 警告(Alarm)和定时器(Timer) 独立的任务(Task) 并行算法 第二章 Thread的创建与管理 一.什么是Thread ? Thread是所在主机执行的应用程序任务(task). 只有一个线程的例子: public class Factorial { public static void main(String[] args) { int n = 5; System.ou

Pro ASP.NET Core MVC 第6版 第一章

第一章 ASP.NET Core MVC 的前世今生 ASP.NET Core MVC 是一个微软公司开发的Web应用程序开发框架,它结合了MVC架构的高效性和简洁性,敏捷开发的思想和技术,和.NET 平台的最好的部分.在本章,我们将学习为什么微软创建ASP.NET Core MVC, 看看他和他的前辈的比较以及和其他类似框架的比较,最后,大概讲一下ASP.NET core MVC里面有什么新东西,还有本书中包括哪些内容. 了解ASP.NET Core MVC的历史 最开始的ASP.NET 诞生

对一千万条数据进行排序---编程珠玑第二版 第一章

本书第一章提出了一个看似简单的问题,有最多1000万条不同的整型数据存在于硬盘的文件中,如何在1M内存的情况下对其进行尽可能快的排序. 每个数字用4byte,1M即可存储250 000个数据,显然,只要每次对250 000个数据排序,写入到文件中即可,重复40次. 那么如何选出每次遍历的二十五万条数据呢?有如下两个策略: 1.对一千万条数据遍历40次,第i次遍历时,判断数是否属于[i*250000,i*250000+249999),如果是,则读入内存,当第i次遍历完成时,内 存中有了二十五万条数

精通ios开发第六版,第一章,文章中的例子及习题.

第一章 1 #import "ViewController.h" 2 3 @interface ViewController () 4 5 @end 6 7 @implementation ViewController 8 9 10 - (IBAction)buttonPressed:(UIButton *)sender { 11 //取出按钮的title 12 NSString *title = [sender titleForState:UIControlStateNormal];

Java 螺纹第三版 第一章Thread介绍、 第二章Thread创建和管理学习笔记

第一章 Thread导论 为何要用Thread ? 非堵塞I/O I/O多路技术 轮询(polling) 信号 警告(Alarm)和定时器(Timer) 独立的任务(Task) 并行算法 第二章 Thread的创建与管理 一.什么是Thread ? Thread是所在主机运行的应用程序任务(task). 仅仅有一个线程的样例: public class Factorial { public static void main(String[] args) { int n = 5; System.o

java疯狂讲义笔记整理(第二版第一部分)

第一章    java语言概述 1.1    java语言的发展简史 1990末:    sun公司“Green计划”(James Gosling领导)        ----目的是智能家电编写一个通用嵌入式控制系统,为此创建oak 1992夏天:    "Green计划"完成新平台的部分功能 1992年11月:    "Green计划"被转为"FirstPerson有限公司"-一个sun的全资子公司,致力于创建一个高度互动的设备 1994夏天:

RabbitMQ官方中文入门教程(PHP版) 第一部分:Hello World

RabbitMQ是一个消息代理.它的核心原理非常简单:接收和发送消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处.在这个比喻中,RabbitMQ是一个邮箱.邮局.邮递员.RabbitMQ和邮局的主要区别是,它处理的不是纸,而是接收.存储和发送二进制的数据——消息.一般提到RabbitMQ和消息,都用到一些专有名词. 生产(Producing)意思就是发送.发送消息的程序就是一个生产者(producer).我们一般用”P”来表示: 队列(queue)就是邮箱的名

数字图像处理 第三版 第一章笔记

1. 数字图像和数字图像处理 图像可定义为一个函数,其自变量是坐标,因变量是灰度值. 当自变量和因变量全是离散值时,则称该图像是数字图像. 数字图像由有限数量的元素组成,这些元素成为像素,每个像素都有特定的位置和灰度值. 数字图像处理是指借助数字计算机来处理数字图像. 从图像处理到计算机视觉是一个连续的统一体. 典型地,将统一体分为三种计算处理,即初级.中级和高级. (1)低级处理涉及初级操作,如降噪.增强.锐化.输入输出都是图像. (2)中级处理涉及诸多任务,如分割.分类和识别等.输入为图像,