前言

内容:

  • 软件工程概述
  • 能力成熟度模型(CMM)
  • 能力成熟度模型集成(CMMI)
  • 软件过程模型
  • 逆向工程

中论

软件工程概述

软件开发生命周期

软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标

软件开发时期:就是软件的设计和实现,分成概要设计、详细设计、编码、测试

软件运行和维护:把软件产品移交给用户使用

软件系统的文档

分为用户文档和系统文档

用户文档:描述系统功能和使用方法

系统文档:描述系统设计、实现和测试等各方面内容

软件工程过程

  1. P(Plan)————软件规格说明。规定软件的功能及其运行时的限制
  2. D(Do)————软件开发。开发出满足规则说明的软件
  3. C(Check)————软件确认。确认开发的软件能够满足用户的需求
  4. A(Action)————软件演进。软件在运行过程中不断改进以满足客户新的需求

软件系统工具

软件开发工具:需求分析工具、设计文档、编码与排错工具、测试工具

软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具

软件管理和软件支持工具:软件管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择

软件设计的四个活动

数据设计、架构(体系结构)设计、人机界面(接口)设计和过程设计

能力成熟度模型(CMM)

image-20240509213702047

能力成熟度模型集成(CMMI)

CMMI两种表示方法

  1. 阶段性模型:

image-20240509213822971

  1. 连续式模型:
  • 瀑布模型(SDLC):

    image-20240509213947911

    特点:从上一项开发活动接受该项活动的工作对象作为输入;开发费用小的开发软件

  • 螺旋模型:

    image-20240509214107114

    特点:开发过程具有周期性重复的螺旋线状;四个象限分别标志每个周期所划分的四个阶段:指定计划、风险分析、实施工程和客户评估。螺旋模型强调风险分析,适用于庞大而复杂的、高风险系统。

  • 原型化模型:

    特点:实际可行;具有最终系统的基本特征;构造方便、快速、造价低;对用户的需求是动态响应、逐步纳入的。

  • 增量模型:

    特点:不是从系统整体角度规划各个模块,不利于模块划分;难点在于如何将客户需求划分为多个增量;增量模型的每一次增量版本都可以作为独立可操作的作品

  • 喷泉模型:

    特点:以用户需求为动力,以对象作为驱动的模型,适合面向对象的开发方法;开发过程具有迭代性和无间隙性

  • 基于构件的开发模型CBSD:利用预先包装的构件来构造应用系统。增强了复用性

  • 形式化方法模型:建立在严格的数学基础上的一种软件开发方法

软件过程模型

敏捷模型

开发宣言:个体和交互胜过过程和工具、可以工作的软件胜过面面俱到的文档、客户合作胜过合作谈判、响应变化胜过遵循计划

特点:适应性;面向人

核心思想:适应型而非可预测型;以人为本而非以过程为本;迭代增量式(以原型开发思想为基础,增量式开发,发行版本小型化)

主要敏捷方法:

  1. 极限编程(XP):交流、朴素、反馈和勇气。
    • 近螺旋式的开发方法,将复杂的开发过程分解为一个个相对比较简单的小周期
    • 测试先行
  2. 水晶系列方法:以人为中心;每个都包含独特的角色、过程模式、工作产品和时间
  3. 并列争球法:增量化过程;吧每段时间的一次迭代称为一个冲刺(Sprint),按需求的优先级别实现产品
  4. 特性驱动开发方法:要素:人、过程和技术。核心过程:开发整体对象模型、构造特征列表、计划特征开发、特征设计和特征构建。

统一过程模型(RUP)

RUP主要描述了如何有效地利用商业的、可靠的方法开发和部署软件,是一种重量级过程。为所有方面和层次的程序开发提供指导方针、模板和实例支持。

RUP生命周期是一个二维的软件开发模型,有九个核心工作流

  • 业务建模
  • 需求
  • 分析与设计
  • 实现
  • 测试
  • 部署
  • 配置与变更管理
  • 项目管理
  • 环境

RUP把软件开发生命周期划分为多个循环,每个循环生成产品的一个新版本,每个循环依次由四个连续的阶段组成

  • 初试阶段:定义最终产品视图和业务模型,并确定系统范围
  • 细化阶段:设计及确定系统的体系结构,制订工作计划及资源要求
  • 构造阶段:构造产品并继续演进需求、体系结构、计划直至产品提交
  • 移交阶段:把产品提交给用户使用

RUP定义了如下一些核心概念

  • 角色WHO
  • 活动HOW
  • 制品WHAT
  • 工作流WHEN

特点:

  • 用例驱动
  • 以体系结构为中心。采用多个视图来描述
    • image-20240509220548812
    • 分析人员和测试人员关心系统的行为,侧重用例视图
    • 最终用户关心的是系统的功能,侧重逻辑视图
    • 程序员关心系统配置、装配,侧重实现视图
    • 系统集成人员关心系统的性能、可伸缩性、吞吐率等问题,侧重进程视图
    • 系统工程师关心系统的发布、安装、拓扑结构等问题,侧重部署视图
  • 迭代与增量。把整个项目分为多个迭代过程。

逆向工程

软件复用

将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。早期的软件复用主要是代码级复用,后续扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。

逆向工程

软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。

逆向工程的级别:

  • 实现级
  • 结构级
  • 功能级
  • 领域级

领域级抽象级别最高,完备性最低,实现级抽象级别最低,完备性最高。

相关概念:重构、设计恢复、再工程和正向工程

  • 重构:在同一抽象级别上转换系统描述形式
  • 设计恢复:借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面信息
  • 再工程:在逆向工程所获得信息的基础上,修改或重构已有的系统,产生一个新的版本。再工程是对现有系统的重新开发:包括逆向工程、新需求的考虑过程和正向工程三个步骤
  • 正向工程:不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量

后记

凭君莫话封侯事,一将功成万骨枯。