复旦大学961-软件工程-第一章-软件过程

961全部内容链接

文章目录

  • 软件过程的概念
  • 经典软件过程模型的特点
    • 瀑布模型
    • 演化模型
    • 增量模型
    • 统一过程模型
  • 过程评估与CMM/CMMI的基本概念
    • CMM的基本概念
    • CMMI的概念
  • 敏捷宣言与敏捷过程的特点
    • 敏捷宣言
    • 敏捷方法的共同特征
    • 精益思想的5条原则
  • 课后习题
    • 1.1 什么是计算机软件?软件的特点是什么
    • 1.2 简述软件的分类,并举例说明
    • 1.3 简述软件语言的分类,并举例说明
    • 1.4 什么是软件工程?
    • 1.5 简述软件工程的基本原则
    • 1.6 软件生存周期分哪几个阶段?分别简述各个阶段的任务
    • 1.9 简述各类软件过程模型的特点

软件过程的概念

  1. 软件过程是生产一个最终满足需求且达到工程目标的软件产品所需的步骤。
  2. 软件过程是软件生命周期中的一系列相关的过程。
  3. 过程是活动的集合,活动是任务的集合。
  4. 软件过程有三层含义:①个体含义,指软件产品或系统在生存周期中的某一类活动的集合,如软件开发过程,软件管理过程等;②整体含义:指软件产品或系统在所有上述含义下的软件过程的总体。③工程含义:指解决软件过程的工程,应用软件工程的原则、方法来构造软件过程模型,并结合软件产品的具体要求进行实例化,以及在用户环境下的运作,以此进一步提高软件生产率,降低成本。

吐槽下:你们写书的都非要这样嘛,我怎么感觉自己在背政治

经典软件过程模型的特点

瀑布模型

瀑布模型给出了软件生存周期的固定顺序,上一阶段的活动完成后向下一阶段的活动过渡,最终得到所开发的软件产品。

优点:①能确保软件开发的顺利进行、提高软件项目的质量和开发效率起到了重要的作用。②其他软件过程都包含了瀑布模型的成分
缺点:①客户需求存在不确定性。②活动中的错误往往由前一阶段造成,导致必须回到前一阶段。③修改软件的代价高

复旦大学961-软件工程-第一章-软件过程_第1张图片

演化模型

许多项目早期对需求不确定,为了减少不确定性为软件开发带来的风险,可以在获取了一组基本需求后,通过快速分析,构造出该软件的一个初始可运行版本,称为原型。根据用户试用原型的过程中提出的意见和建议,或者增加新需求,对原型进行改造,获得原型的新版本,重复这一过程,最终得到令客户满意的软件产品。

演化模型实际上就是从构造初始的原型出发,逐步将其演化成最终软件产品的过程

适用性:对软件需求缺乏准确认识的情况。

典型的演化模型:增量模型、原型模型、螺旋模型。

增量模型

增量模型将软件的开发过程分成若干个日程时间交错的线性序列,每个线性序列产生软件的一个可发布的“增量”版本,后一个版本是前一个版本的修改和补充,重复增量发布得过程,直到产生最终的完善产品。

特点:

  • 融合了瀑布模型的基本成分和演化模型的迭代特征
  • 适用于需求经常发生变化的软件开发
  • 能有计划地管理技术风险

统一过程模型

统一过程(RUP)模型来自于UML上的工作以及相关的统一软件开发过程。它集合了所有一般过程模型的要素,并给出了在描述和设计上的好的实践。

RUP一般从三个视角描述过程:

  • 动态视角,给出模型中随时间所经历的各个阶段
  • 静态视角,给出所进行的过程活动
  • 实践视角,提出在过程中可以采用的良好实践的建议

复旦大学961-软件工程-第一章-软件过程_第2张图片
RUP是一个阶段化的模型,识别出软件过程当中的4个独立阶段:

  1. 开端:开端阶段的目标是建立系统的一个业务案例。识别和定义所有与系统交互的外部实体。
  2. 细化:细化阶段的目标是增进对问题域的理解,建立系统的体系框架,给出项目计划并识别关键项目风险。
  3. 构造:构造阶段主要关心系统设计、编码和测试。
  4. 转换:该阶段关注如何将系统从开发单位转移到用户单位,并使之在真实环境中工作。

过程评估与CMM/CMMI的基本概念

过程评估:评价软件过程的能力。通常使用软件过程成熟度等级进行评判(个人理解)

CMM的基本概念

CMM(Capability Maturity Model,能力成熟度模型)模型定义了5个软件过程成熟度等级(成熟度由低到高):

  • 初始级:软件过程的特点是无秩序且混乱的。
  • 可重复级:建立了基本的项目管理过程来跟踪成本、进度和功能特性。能重复早先类似应用项目取得的成功。
  • 已定义级:将管理和工程活动两方面的软件过程文档化、标准化。所有项目使用标准软件过程来开发和维护。
  • 已管理级:收集对软件过程和产品质量的详细度量值,对软件过程和产品都有定量的理解和控制。
  • 优化级:过程的量化反馈和先进的新思想、新技术促进过程不断改进。

复旦大学961-软件工程-第一章-软件过程_第3张图片

CMM的结构
复旦大学961-软件工程-第一章-软件过程_第4张图片

  • 关键过程域,是企业需要集中力量改进的软件过程,用于达到增加过程能力的效果。
  • 关键实践,是指关键过程域中的一些主要实践活动。每个关键过程域最终由关键实践所组成,通过实现这些关键实践达到关键过程域的目标。

CMMI的概念

CMMI的全称为Capability Maturity Model Integration,即能力成熟度模型集成。CMMI是CMM模型的最新版本。CMMI是若干过程模型的综合和改进,能提高过程的质量和工作效率。

CMMI提供了两种表示法:阶段式模型和连续式模型。

  1. 阶段式模型,类似于CMM,关注组织的成熟度。分为以下几个
  • 初始的:过程不可预测且缺乏控制
  • 已管理的:过程为项目服务
  • 已定义的:过程为组织服务
  • 定量管理的:过程已度量和控制
  • 优化的:集中于过程改进
  1. 连续式模型关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级。包括6个过程域能力等级:
  • CL0 未完成的:过程域未执行或未到达CL1中定义的所有目标。
  • CL1 已执行的:其共性目标是过程将可识别的输入工作产品转化为可识别的输出工作产品,已实现支持过程域的特定目标。
  • CL2 已管理的:其共性目标集中于已管理的过程的制度化
  • CL3 已定义的:其共性目标集中于已定义的过程的制度化。
  • CL4 定量管理的:其共性目标集中于可定量管理的过程的制度化。
  • CL5 优化的:使用量化(统计学)手段改变和优化过程域,以对付客户要求的改变和持续改进计划中的过程域的功效。

敏捷宣言与敏捷过程的特点

软件开发的3个特征(由此引出了敏捷式开发):

  • 提前预测需求是困难的
  • 软件设计和构建是交错进行的(软件的详细设计和开发是交错进行的)
  • 从制定计划的角度来看,分析、设计、构建和测试活动并不容易预测

比较常用的敏捷开发方法:极限编程、Scrum、看板方法、精益软件开发方法

敏捷宣言

个体和交互 重于 过程和工具
工作的软件 重于 详尽的文档
客户合作 重于 合同谈判
响应变化 重于 遵循计划

敏捷方法的共同特征

  • 致力于降低变化带来的成本
  • 强调价值
  • 强调人的作用
  • 使用增量和迭代的开发方法

精益思想的5条原则

  • 识别价值:价值是客户愿意购买产品的原因,也是产品开发的根本价值所在。“是否有助于增加价值”是精益方法衡量过程活动的准则
  • 定义价值流:价值流描述了组织为了交付价值所采取的一系列有增值的活动
  • 保持价值流的流动:良好的系统应该让价值迅速流动,从而用较低的成本生产出正确的产品(价值流是指从原材料转变为成品、并给它赋予价值的全部活动)(这句话的意思就是快点做(迅速流动),别停(保持流动),效率高点(低成本))
  • 拉动系统:拉动系统是基于当前客户的需求,向上游环节逐级反馈(这个环节有问题很可能是上一个或者更之前的环节出问题了),每个环节都基于下一个环节的需求而进行生产
  • 持续改善:持续改善是精益思想的最重要支柱。精益思想的核心就是不断进行改善从而最大化价值

课后习题

1.1 什么是计算机软件?软件的特点是什么

计算机软件指计算机系统中的程序及其文档。

软件的特点:

  • 软件是一种逻辑实体,而不是有形的系统元件,其开发成本和进度难以准确得估算
  • 软件是被开发的或被设计的,没有明显的制造过程,一旦开发成功,只需复制即可,但其维护的工作量大
  • 软件的使用没有硬件那样的机械磨损和老化问题

1.2 简述软件的分类,并举例说明

软件分为系统软件、支撑软件和应用软件:

  • 系统软件:系统软件居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。系统软件与具体的应用领域无关。例如:编译程序、操作系统等
  • 支撑软件:支撑软件是支撑软件的开发和维护的软件。例如:数据库管理系统、网络软件、软件工具、软件开发环境等
  • 应用软件:应用软件是特定应用领域专用的软件。例如:工程/科学计算软件、嵌入式软件、产品线软件、web应用软件、人工智能软件。

1.3 简述软件语言的分类,并举例说明

  • 需求定义语言:用于书写软件需求定义的语言。如PSL
  • 功能性语言:用于书写软件功能规约的语言。如广谱语言,Z语言等
  • 设计性语言:用于书写软件设计规约的语言。如PDL
  • 程序设计语言:用于书写计算机程序的语言。如C,Java
  • 文档语言:用于书写计算机软件文档的语言。如ER图,数据流图等。

1.4 什么是软件工程?

软件工程是应用计算机科学、数学及管理科学等原理,开发软件的工程

1.5 简述软件工程的基本原则

  • 围绕适宜的开发模型
  • 采用合适的设计方法
  • 提供高质量的工程支撑
  • 重视软件工程的管理

1.6 软件生存周期分哪几个阶段?分别简述各个阶段的任务

软件生存周期有计算机系统工程、需求分析、设计、编码、测试、运行和维护6个阶段:

  • 计算机系统工程: 任务是确定待开发软件的总体要求和范围,以及该软件与其他计算机系统元素之间的关系,进行成本估算,做出进度安排,并进行可行性分析,即从经济、技术、法律等方面分析待开发的软件是否有可行的解决方案,并在若干个可行的解决方案中做出选择
  • 需求分析:主要解决待开发软件要“做什么”的问题,确定软件的功能、性能、数据、界面等要求,生成软件需求规约
  • 软件设计:软件设计只要解决待开发软件“怎么做”的问题。软件设计通常可分为系统设计和详细设计。系统设计的任务是设计软件系统的体系结构,包括软件系统的组成成分、各成分的功能和接口、成分间的连接和通信,同时设计全局数据结构。详细设计的任务是设计各个组成成分的实现细节,包括局部数据结构和算法等
  • 编码:编码阶段的任务是用某种程序设计语言,将设计的结果转换为可执行的程序代码
  • 测试:测试阶段的任务是发现并纠正软件中的错误和缺陷。测试主要包括单元测试、集成测试、确认测试和系统测试
  • 运行和维护:软件完成各种测试后就可交付使用,在软件运行期间,需对投入运行的软件进行维护,即可发现了软件中潜藏的错误或需要增加新的 功能或使软件适应外界环境的变化等情况出现时,对软件进行修改

1.9 简述各类软件过程模型的特点

典型的软件过程模型有:瀑布模型、演化模型(增量模型、原型模型、螺旋模型)、喷泉模型、基于构件的开发模型和形式方法模型等

  • 瀑布模型:上一阶段的活动完成并经过评审后才能开始下一阶段的活动,其特征是:①接受上一阶段活动的结果作为本阶段活动的输入;②依据上一阶段活动的结果实施本阶段应完成的活动;③对本阶段的活动进行评审;④将本阶段活动的结果作为输出。
  • 增量模型:将软件的开发过程分成若干个日程时间交错的线性序列,每个线性序列产生软件的一个可发布的增量版本,后一个版本是对前一个版本的修改和补充,重复增量发布的过程,直至产生最终的完善产品。
  • 原型模型:从软件工程师与客户的交流开始,其目的是定义软件的总体目标,标识需求。然后快速制定原型开发的计划,确定原型的目标和范围,采用快速设计的方式对其建模,并构建模型。被开发的原型应交付给客户使用,并收集客户的反馈意见,这些反馈意见可在下一轮迭代中对原型进行改进。在前一个原型需要改进,或者需要扩展其范围的时候,进入下一轮原型的迭代开发
  • 螺旋模型:将原型模型实现的迭代特征与瀑布模型中控制的和系统化的方面结合起来,不仅体现了这两种模型的优点而且还增加了风险分析
  • 喷泉模型:是一种支持面向对象开发的过程模型。类及对象是面向对象方法中的基本成分。在分析阶段,标识类及对象,定义类之间的关系,建立对象-关系模型和对象-行为模型。在设计阶段,从实现的角度对分析模型进行调整和扩充。在编码阶段,用面向对象语言实现类及对象,通过消息机制实现对象之间的通信,完成软件的功能。在面向对象方法中,分析模型和设计模型采用相同的符号表示体系,开发的各个活动没有明显的边界,各个活动经常重复,迭代地交替进行
  • 基于构件的开发模型:基于构件的开发是指利用预先包装的构建来构造应用系统。构件可以是组织内部开发的构建,也可以是商业化的、现存的软件构件
  • 形式化方法:形式化方法是建立在严格数学基础上的一种软件开发方法。软件开发的全过程中,从需求分析、规约、设计、编程、系统集成、测试、文档生成,直至维护等各个阶段,凡是采用严格的数学语言,具有精确的数学语义的方法,都称为形式化方法。形式化方法用严格的数学语言和语义描述功能和设计规约,通过数学的分析和推导,易于发现需求的歧义性、不完整性和不一致性,易于对分析模型、设计模型和程序进行验证。通过数学的演算,使得从形式化功能规约到形式化设计规约,以及从形式化设计规约到程序代码转换成为可能

你可能感兴趣的:(961)