概念:当开发产品或构件系统时,遵循一系列可预测的步骤(即路线图)是非常重要的,它有助于及时交付高质量的产品。软件开发中所遵循的路线图就称为“软件过程”。

人员及责任:软件工程师及其管理人员根据需要调整开发过程,并遵循该过程。除此之外,软件的需求方也需要参与过程的定义、建立和测试。

重要性:软件过程提高了软件工程活动的稳定性、可控性和有组织性,如果没有过程约束,软件活动将失控并变得混乱。但是现代软件工程方法必须是“灵活”的。也就是要求软件工程活动、控制以及工作产品适合于项目团队和要开发的产品。

步骤:具体来讲,采用的过程依赖于所构造软件的特点。飞机电子系统的软件与网站的建设可能需要采用两种截然不同的软件过程。

工作产品:从软件工程师的角度来看,工作产品就体现为执行过程所定义的任务和活动的过程中,所产生的程序、文档和数据。

质量保证措施:有大量的软件过程评估机制,开发机构可以评估其软件过程的“成熟度”。然而,软件过程有效性最好的指标还是所构建产品的质量、及时性和长期生存能力。

【通用过程模型】

在软件过程中,技术工作的层次包括活动、活动由动作构成,动作有任务组成。

过程流(process flow)描述了在执行顺序和执行时间上,如何组织框架中的活动、动作和任务。

线性过程流(linear process flow)从沟通到部署顺序执行五个框架活动。

迭代过程流(iterative process flow)在执行下一个活动前重复执行之前的一个或多个活动。

演化过程流(evolutionary process flow)采用循环的方式执行各个活动,每次循环都能产生更为完善的软件版本。

并行过程流(parallel process flow)将一个或是多个活动与其他活动并行执行。

【明确任务集】

不同的项目需要不同的任务集。软件团队根据问题和项目的特点,选择任务集。

每一个软件工程动作都有若干个任务集构成,而每一个任务集都由软件工程工作任务、相关工作产品、质量保证点和项目里程碑等部分组成,需要选择最满足项目需要并适合开发团队特点的任务集。

任务集定义了为达到一个软件工作动作的目标所需要完成的工作。

【过程模式】

过程模式(process pattern)描述了软件工程工作中遇到的过程相关的问题,明确了问题环境并给出了针对该问题的一种或几种可证明的解决方案。通俗地讲,过程模式提供了一个模板——一种在软件过程的背景下统一描述问题解决方案的方法。

我们可以在不同抽象层次上定义模式。在某些情况下,模式可以描述一个与完整过程模型相关的问题(及其解决方案),在其他情况下,模式可以描述一个与框架活动或者框架活动中的一项具体任务相关的问题(及其解决方案)。

模式模板提供了描述模式的一般性方法。

过程模式提供了一种有效的机制,用以解决任何与软件过程相关的问题。模式使得软件工程组织能够从高层抽象开始(阶段模式),建立层次化的过程描述。高层抽象描述进一步细化为一系列步骤模式以描述框架活动,软件每一个步骤模式又进一步逐层细化为更详细的任务模式。过程模式一旦建立起来,就可以复用来定义各种过程变体——即软件开发队伍可以将模式作为过程模型的构建模块,定制特定的过程模型。

【过程评估与改进】

以改进为目标,评估力求理解软件过程的当前状态。

软件过程并不能保证软件按期交付,也不能保证软件满足客户要求,或是软件具备了长期质量保证的技术特点。软件过程模型必须与切实的软件工程实践相结合。另外,对过程本身也要进行评估,以确保满足了成功软件工程所必需的基本过程标准要求。

用于过程改进的CMMI标准评估方法(Standard CMMI Assessment Method for Process Improvement, SCAMPI)—— 提供了五步的过程评估模式:启动(initiating)、诊断(diagnosing)、建立(establishing)、执行(acting)和学习(learning)。SCAMPI方法采用SEI的CMMI作为评估的依据。

用于组织内部过程改进的CMM评估(CMM-Based Appraisal for Internal Process Improvement, CBA IPI)—— 采用SEI的CMM作为评估的依据,提供了一种诊断方法用以分析软件开发机构相对成熟度。

SPICE(ISO/IEC 15504)—— 该标准定义了软件过程评估的一系列要求,该标准的目的是帮助软件开发组织建立客观的评价体系,以评估定义的软件过程的有效性。

软件ISO 9001:2000 —— 这是一个通用标准,任何开发组织如果希望提高所提供的产品、系统或服务的整体质量,都可以采用这个标准。因此,该标准可直接应用于软件组织和公司。

【惯用过程模型】

最早提出惯用过程模型是为了改变软件开发的混乱状况,使软件开发更加有序。

传统的过程模型定义了规定的过程元素集合及可预测的过程工作流。

【瀑布模型】

瀑布模型(waterfall model),又称为经典生命周期(classic life cycle),它提出了一个系统的,顺序的软件开发方法,从用户需求规格说明开始,通过计划、建模、构建和部署的过程,最终提供一个完整的软件并提供持续的技术支持。

瀑布模型的一个变体,称为V模型(V-model)。V模型描述了质量保证动作同沟通、建模相关动作以及早期构建相关的动作之间的关系。随着软件团队工作沿着V模型左侧步骤向下推进,基本问题需求逐步细化,形成问题及解决方案的技术描述。一旦编码结束,团队沿着V模型右侧的步骤向上推进工作,其本质上是执行了一系列测试(质量保证动作),这些测试验证了团队沿着V模型左侧步骤向下推进过程中所生成的每个模型。

实际上,经典生命周期模型和V模型没有本质区别,V模型提供了一种将验证确认动作应用于早起软件工程工作中的方法。

V模型阐明了验证确认动作如何与早起工程动作相互关联。

瀑布模型是软件工程最早的范例。遇到的问题:

1、实际的项目很少遵循瀑布模型提出的顺序。

2、客户通常难以清楚地描述所有的需求。

3、客户必须要有耐心。

经典生命周期模型的线性特性在某些项目中会导致“阻塞状态”,由于任务间的依赖性,开发团队的一些成员要等待另一些成员工作完成。事实上,花在等待上的时间可能超过花在生产性工作上的时间。在线性过程的开始和结束,这种阻塞状态更容易发生。

当需求确定、工作采用线性的方式完成时,瀑布模型是一个很有用的过程模型。

【增量过程模型】

增量模型发布一系列称为增量的版本,随着每个版本交付,逐步为用户提供更多的功能。

任何增量的过程流可能使用原型模型。

增量模型侧重于每个增量都提交一个可以运行的产品。

增量模型可以规避技术风险。

【演化过程模型】

演化过程模型中,每个迭代产生软件的一个更完整的版本。

演化模型是迭代的过程模型,是的软件开发人员能够逐步开发出更完整的软件版本。常用的两张演化过程模型:

1、原型开发。很多时候,客户提出了软件的一些基本功能,但是没有详细定义功能和特性需求。另一种情况下,开发人员可能对算法的效率、操作系统的兼容性和人机交互的形式等情况并不确定。在这些情况和类似情况下,采用原型开发范型(prototyping paradigm)是最好的解决办法。当需求模糊的时候,原型开发模型可帮助软件开发人员和利益相关者更好地理解究竟要做什么。

原型开发模型开始于沟通。理想状况下,原型系统提供了定义软件需求的一种机制。当需要构建可执行的原型系统时,软件开发人员可以利用已有的程序片段或应用工具,快速产生可执行的程序。

所有的利益相关者必须承认原型是为定义需求服务的,然后丢弃原型(至少是部分丢弃),实际的软件系统是以质量第一为目标开发的。

2、螺旋模型。螺旋模型是一种演进式软件过程模型。它结合了原型的迭代性质和瀑布模型的系统性和可控性特点。它具有快速开发越来越完善软件版本的潜力。

螺旋模型能运用在应用开发的整个生命周期,从概念开始到维护。

螺旋模型是开发大型系统和软件的理想方法。

【协同模型】

协同开发模型(concurrent development model),有时候也叫协同工程。协同模型更适合不同的工程团队共同开发的系统工程项目。

协同模型定义了一系列事件,这些事件将触发软件工程活动、动作或任务的状态转换。

协同过程模型可用于所有类型的软件开发,能够提供精确的项目当前状态图。它不是把软件工程活动、动作和任务局限在一个事件的序列,而是定义了一个过程网络。网络上每个活动、行为和任务与其他活动、行为和人物同时存在。过程网络中某一点产生的事件可以触发状态的转换。

【演化模型的最终评述】

演化模型的初衷是采用迭代或者增量的方式开发高质量软件。可是,用演化模型也可以做到强调灵活性、可延展性和开发速度。软件团队及其经理所面临的挑战就是在这些严格的项目和产品参数与客户(软件质量的最终仲裁者)满意度之间找到一个合理的平衡点。

【专用过程模型】

专用过程模型往往应用面较窄而专一,只适用于某些特定的软件工程方法。

【基于构件的开发】

商品化成品(Commercial Off-The-Shelf,COTS)软件构件由厂家作为产品供应,通过良好定义的接口提供特定的功能,这些构件能够集成到正在构建的软件中。

基于构件开发模型(component-based development model)具有许多螺旋模型的特点。它本质上是演化模型,需要以迭代方式构建软件。

建模和构建活动开始于识别可选构件。

步骤(采用演化方法):

1、对于该问题领域研究和评估可用的基于构件的产品。

2、考虑构件集成的问题。

3、设计软件架构以容纳这些构件。

4、将构件集成到架构中。

5、进行充分的测试以保证功能正常。

基于构件开发模型能够使软件复用,软件复用为软件工程师带来极大收益。

【形式化方法模型】

形式化方法模型(formal methods model)的主要活动是生成计算机软件形式化的数学规格说明。形式化方法使软件开发人员可以应用严格的数学符号来说明、开发和验证基于计算机的系统。这种方法的一个变型是净室软件工程(cleanroom software engineering),这一软件工程方法目前已应用于一些软件开发机构。

使用形式化方法诸如歧义性问题、不完整问题、不一致问题都能够更容易地被发现和改正——不是依靠特定的评审,而是应用数学分析的方法。在设计阶段,形式化方法是程序验证的基础,使软件开发人员能够发现和改正一些往往被忽略的问题。形式化方法的意义在于可以提供无缺陷的软件。主要应用于开发高度关注安全性的软件(如飞行器和医疗设施)或者开发出错将导致重大经济损失的软件。

【面向方法的软件开发】

如果某个关注点涉及系统多个方面的功能、特性和信息,这些关注点通常称为横切关注点(Crosscutting Concern)。方面性需求(Aspectual Requirement)定义那些对整个软件体系结构产生影响的横切关注点。面向方面的软件开发(Aspect-Oriented Software Development,AOSD)通常称为面向方面编程(Aspect-Oriented Programming,AOP),是相对较新的一种软件工程模型,为定义、说明、设计和构建方面(aspect)提供过程和方法——是对横切关注点局部表示的一种机制,超越了子程序和继承的方法。

AOSD定义“方面”,表示用户跨越多个系统功能、特性和信息的关注点。

具有自身特点的面向方面的过程还不成熟。尽管如此,这种过程模型看似有了演化模型和协同过程模型的共同特点。演化模型适合定义和构建方面;而协同开发的并行特点很重要,因为方面是独立于局部的软件构件开发的。并且对这些构件的开发有直接影响。因此,在构建方面和构件的过程活动之间建立起异步的通信非常重要。

【统一过程】

在某种程度上,统一过程(Unified Process,UP)尝试着从传统的软件过程中挖掘最好的特征和性质,但是以敏捷软件开发中许多最好的原则来实现。统一过程认识到与客户沟通以及从用户的角度描述系统并保持改描述的一致性的重要性。它强调软件体系结构的重要作用,并“帮助架构师专注于正确的目标”。它建立了迭代的、增量的过程流,提供了演进的特性,这对现代软件开发非常重要。

UML——统一建模语言(unified modeling language),这种语言包含了大量用于面向对象系统建模和开发的符号。

【统一过程的阶段】

1、起始阶段(inception phase)包括客户沟通和策划活动。

2、细化阶段(elaboration phase)包括沟通和通用过程模型的建模活动。

3、构建阶段(construction phase)与通用软件过程中的构建活动相同,采用体系结构模型作为输入,开发或是获取软件构件,是的最终用户能够操作用力。

4、转换阶段(transition phase)包括通用构建活动的后期阶段以及通用部署(交付和反馈)活动的第一部分。

5、生产阶段(production phase)与通用过程的部署活动一直。

【个人软件过程】

个人软件过程(personal software process,PSP)强调对产品以及产品质量的个人测量。并且,PSP让第一线工作人员负责项目计划的指定,并授权给他们来控制所有开发的软件产品的质量。PSP过程模型定义了五个框架工作活动:

1、策划。

2、高层设计。

3、高层设计评估。

4、开发。

5、后验。

PSP强调尽早发现错误,并且分析易犯的错误种类,后者和前者同样重要。

【团队软件过程】

团队软件过程(Team Software Process,TSP)的目标是建立一个能够“自我管理”的项目团队,团队能自我组织进行高质量的软件开发。

一个自我管理的团队对其整体目标有一致的理解。它定义了每个团队成员的角色和责任;跟踪量化的项目数据(包括生产率和质量);确定适合该项目的团队过程和执行该过程的具体策略;定义适合团队软件工程工作的本地标准;持续评估风险并采取风险规避措施;跟踪、管理和报告项目状态。

框架活动:项目启动、高层设计、实现、集成、测试和后验。

TSP使用大量的脚本(Script)、表格和标准等来指导其团队成员的工作。TSP脚本定义了团队过程的组成部分,以及过程中的活动。

【过程技术】

过程技术工具(process technology tool),帮助软件开发组织分析现有过程、组织工作任务、控制并检测过程进度和管理技术质量。

【产品与过程】

产品和过程二象性。

【小结】

一个软件工程通用过程模型包含了一系列的框架和普适性活动、动作以及工作任务。每种不同的过程模型都可以用不同的过程流来描述,工作流描述了框架活动、动作和任务如何按顺序组织。过程模式用来解决软件过程中遇到的共性问题。

传统软件过程模型已经使用了多年,力图给软件开发带来秩序和结果。每一个模型都建议了一种不同的过程流,但所有模型都实现统一的一组通用框架活动:沟通、策划、建模、构建和部署。

类似瀑布模型和V模型的顺序过程模型是最经典的软件工程模型,顺序过程模型建议采用线性过程流,这在软件世界里通常与当代的软件开发的现实情况不符。但线性过程模型确实适用于需求定义清楚且稳定的软件开发。

增量过程模型采用迭代的方式工作,能够快速地生成一个软件版本。演化过程模型认识到大多数软件工程项目的迭代、递增特性,其设计的目的是为了适应变更。演化模型,例如原型开发及螺旋模型,会快速地产生增量的工作产品。这些模型可以应用于所有软件工程活动——从概念开发到长期的软件维护。

并发过程模型为软件团队提供了过程模型中的重叠和并发元素的描述方法。专用模型主要包括基于构件的模型,强调软件构件的重用和组装;形式化方法模型提倡采用数学方法进行软件开发与验证;面向方面的模型的目的是解决跨越整个软件体系架构的横切关注问题。统一过程模型是一种“用例驱动、以体系结构为核心、迭代及增量”的软件过程框架,由UML方法和工具支持。

软件过程的个人模型和团队模型,都强调了成功软件过程的关键因素:测量、策划和自我管理。

【读书笔记】第二章 过程模型相关推荐

  1. 《计算传播学导论》读书笔记——第二章文本分析简介

    <计算传播学导论>读书笔记--第二章文本分析简介 第一节 文本分析研究现状 常用文本挖掘技术 第二节 文本分析与传播学研究 (一)为什么文本挖掘技术逐渐受到传播学者的关注 (二)不同文本分 ...

  2. In-memory Computing with SAP HANA读书笔记 - 第二章:SAP HANA overview

    本文为In-memory Computing with SAP HANA on Lenovo X6 Systems第二章SAP HANA overview的读书笔记. 本章最重要的部分是SAP HAN ...

  3. C++ Primer Plus读书笔记第二章

    自学了一段时间的C++打算还是要系统的整理一下一些知识点,让学习思路更清晰,不然老是学一点忘一点,这个读书笔记用来记录这段时间对C++ Primer Plus一书中知识点的记录,尽量会写的详细一点.直 ...

  4. 《软件测试经验与教训》读书笔记---第二章

    <软件测试经验与教训>读书笔记--目录 第一章 测试员的角色 第二章 按测试员的方式思考 第三章 测试手段 第四章 程序错误分析 第五章 测试自动化 第六章 测试文档 第七章 与程序员交互 ...

  5. 计算机网络(第五版 作者:AndrewS.Tanenbaum David J.Wetherall 清华大学出版社)读书笔记----第二章的学习

    计算机网络第二章--物理层读书笔记 1.物理层是网络的技术设置,物理层的材质和带宽决定了最大的传输速率. 2.传输介质的分类:引导性(有线介质)和非引导性(无线介质). (1)有线介质:磁介质.双绞线 ...

  6. 《辛雷学习方法》读书笔记——第二章 心态

    第二章 心态   (1)保持良好心态:学习时保持良好心态,你才能比较容易入门.深入掌握知识.灵活运用知识.学习时始终保持着轻松愉悦振奋的心情,你就容易产生学习心得,更容易灵活运用. (2)爱情对心态影 ...

  7. 《暗时间》读书笔记--第二章 进度条,第三章 有效记忆和学习

    第二章 进度条 要点: 进度条的例子 过早的退出 专注和持之以恒 饿死在甘草间的驴子 我的总结: 开篇作者讲了一个进度条的例子,我们的生活中充满着各种各样的进度条,工作的之前我们要做工作计划,要指定T ...

  8. 《Process Analytics 过程分析》读书笔记 第二章 业务过程范例

    第二章 业务过程范例 毫无疑问,在过程管理中的研究和开发为技术革命铺平了道路. 更重要的是,过程管理技术在今天也同样重要,就像它在两三年前成立时一样. 然而,主要转移的是主要重点. 例如,在1990年 ...

  9. 【编程珠玑】读书笔记 第二章 算法

    2013-07-11 22:00:28 第二章 算法 本章围绕三个问题进行算法讨论,包括元素的查找.字符串的旋转.以及变位词的查找. 下面给出了实现代码.以及测试结果. 问题一 查找不存在的元素 思路 ...

  10. PHP核心技术与最佳实践 读书笔记 第二章 面向对象的设计原则

    2019独角兽企业重金招聘Python工程师标准>>> 第二章 面向对象的设计原则 2.1 面向对象设计的五大原则 单一职责原则 接口隔离原则 开放-封闭原则 替换原则 依赖倒置原则 ...

最新文章

  1. Pacbio 纯三代组装复活草基因组
  2. python3 第三十四章 - 聊聊File对象
  3. 为什么OpenCV3在Python中导入名称是cv2
  4. assert()用法
  5. mysql索引与约束有什么关系_MySQL 约束与索引
  6. 西湖大学最年轻博导来了丨93年出生的他,想创造属于中国的“追光”纪录
  7. Java类类getGenericSuperclass()方法及示例
  8. linux lvm 删除pv磁盘,如何安全的删除Linux LVM中的PV物理卷(硬盘或分区)
  9. SAP License:BCS进阶第五篇-BCS合并现金流量表的实现
  10. 填坑帖 By cellur925
  11. 七种武器——.NET工程师求职面试必杀技(转)
  12. 【Django 2021年最新版教程34】python unittest 对函数单元测试 覆盖率检测
  13. 利用网络媒体搭建自己就业之“桥”——卖糖葫芦北大毕业生谋职报道带来的启示...
  14. 对excel的导出,使用jxt
  15. ubuntu 19查看和修改时区
  16. leetcode 没有php,Leetcode PHP题解--D99 860. Lemonade Change
  17. 2021年什么邮箱最好用,这款电子邮箱让你的工作效率翻倍!
  18. php 保留2位小数 不四舍五入
  19. ChatGPT详聊IT服务台,AI可以取代人工么?
  20. c语言循环读文件程序,c语言读文件程序报告.docx

热门文章

  1. meo学习笔记1:编译是什么——程序的执行过程概述
  2. c语言对数组取反,C语言中按逆取反是什么意思
  3. 计算机日历教案,计算机基础教学日历.doc
  4. java填充word文档_如何使Word文档可填充但不可编辑
  5. mysql 1146错误 修复6,MySQL中出现错误1146时出现问题
  6. python 实现otu表水平转化
  7. 亚马逊员工的至暗时刻:1.5W人血淋淋的裁员开始..
  8. 回顾码农历程总结2013 期待2014
  9. 神经网络之父Hinton介绍及其论文介绍
  10. 【软考软件评测师】第五章节 安全测试测试方法