软考-10.1软件工程-逆向工程
前言
内容:
- 软件工程概述
- 能力成熟度模型(CMM)
- 能力成熟度模型集成(CMMI)
- 软件过程模型
- 逆向工程
中论
软件工程概述
软件开发生命周期
软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标
软件开发时期:就是软件的设计和实现,分成概要设计、详细设计、编码、测试
软件运行和维护:把软件产品移交给用户使用
软件系统的文档
分为用户文档和系统文档
用户文档:描述系统功能和使用方法
系统文档:描述系统设计、实现和测试等各方面内容
软件工程过程
- P(Plan)————软件规格说明。规定软件的功能及其运行时的限制
- D(Do)————软件开发。开发出满足规则说明的软件
- C(Check)————软件确认。确认开发的软件能够满足用户的需求
- A(Action)————软件演进。软件在运行过程中不断改进以满足客户新的需求
软件系统工具
软件开发工具:需求分析工具、设计文档、编码与排错工具、测试工具
软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具
软件管理和软件支持工具:软件管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择
软件设计的四个活动
数据设计、架构(体系结构)设计、人机界面(接口)设计和过程设计
能力成熟度模型(CMM)
能力成熟度模型集成(CMMI)
CMMI两种表示方法
- 阶段性模型:
- 连续式模型:
-
瀑布模型(SDLC):
特点:从上一项开发活动接受该项活动的工作对象作为输入;开发费用小的开发软件
-
螺旋模型:
特点:开发过程具有周期性重复的螺旋线状;四个象限分别标志每个周期所划分的四个阶段:指定计划、风险分析、实施工程和客户评估。螺旋模型强调
风险分析
,适用于庞大而复杂的、高风险系统。 -
原型化模型:
特点:实际可行;具有最终系统的基本特征;构造方便、快速、造价低;对用户的需求是动态响应、逐步纳入的。
-
增量模型:
特点:不是从系统整体角度规划各个模块,不利于模块划分;难点在于如何将客户需求划分为多个增量;增量模型的每一次增量版本都可以作为独立可操作的作品
-
喷泉模型:
特点:以用户需求为动力,以对象作为驱动的模型,适合面向对象的开发方法;开发过程具有迭代性和无间隙性
-
基于构件的开发模型CBSD:利用预先包装的构件来构造应用系统。增强了复用性
-
形式化方法模型:建立在严格的数学基础上的一种软件开发方法
软件过程模型
敏捷模型
开发宣言:个体和交互胜过过程和工具、可以工作的软件胜过面面俱到的文档、客户合作胜过合作谈判、响应变化胜过遵循计划
特点:适应性;面向人
核心思想:适应型而非可预测型;以人为本而非以过程为本;迭代增量式(以原型开发思想为基础,增量式开发,发行版本小型化)
主要敏捷方法:
- 极限编程(XP):交流、朴素、反馈和勇气。
- 近螺旋式的开发方法,将复杂的开发过程分解为一个个相对比较简单的小周期
- 测试先行
- 水晶系列方法:以人为中心;每个都包含独特的角色、过程模式、工作产品和时间
- 并列争球法:增量化过程;吧每段时间的一次迭代称为一个冲刺(Sprint),按需求的优先级别实现产品
- 特性驱动开发方法:要素:人、过程和技术。核心过程:开发整体对象模型、构造特征列表、计划特征开发、特征设计和特征构建。
统一过程模型(RUP)
RUP主要描述了如何有效地利用商业的、可靠的方法开发和部署软件,是一种重量级过程。为所有方面和层次的程序开发提供指导方针、模板和实例支持。
RUP生命周期是一个二维的软件开发模型,有九个核心工作流
- 业务建模
- 需求
- 分析与设计
- 实现
- 测试
- 部署
- 配置与变更管理
- 项目管理
- 环境
RUP把软件开发生命周期划分为多个循环,每个循环生成产品的一个新版本,每个循环依次由四个连续的阶段组成
- 初试阶段:定义最终产品视图和业务模型,并确定系统范围
- 细化阶段:设计及确定系统的体系结构,制订工作计划及资源要求
- 构造阶段:构造产品并继续演进需求、体系结构、计划直至产品提交
- 移交阶段:把产品提交给用户使用
RUP定义了如下一些核心概念
- 角色WHO
- 活动HOW
- 制品WHAT
- 工作流WHEN
特点:
- 用例驱动
- 以体系结构为中心。采用多个视图来描述
- 分析人员和测试人员关心系统的行为,侧重用例视图
- 最终用户关心的是系统的功能,侧重逻辑视图
- 程序员关心系统配置、装配,侧重实现视图
- 系统集成人员关心系统的性能、可伸缩性、吞吐率等问题,侧重进程视图
- 系统工程师关心系统的发布、安装、拓扑结构等问题,侧重部署视图
- 迭代与增量。把整个项目分为多个迭代过程。
逆向工程
软件复用
将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。早期的软件复用主要是代码级复用,后续扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。
逆向工程
软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。
逆向工程的级别:
- 实现级
- 结构级
- 功能级
- 领域级
领域级抽象级别最高,完备性最低,实现级抽象级别最低,完备性最高。
相关概念:重构、设计恢复、再工程和正向工程
- 重构:在同一抽象级别上转换系统描述形式
- 设计恢复:借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面信息
- 再工程:在逆向工程所获得信息的基础上,修改或重构已有的系统,产生一个新的版本。再工程是对现有系统的重新开发:包括逆向工程、新需求的考虑过程和正向工程三个步骤
- 正向工程:不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量
后记
凭君莫话封侯事,一将功成万骨枯。