重点章节,选择会考12-15分。主要考察软件工程基础、软件开发方法、系统分析、设计、测试以及运行和维护。
1.软件工程基础概念
1.1.软件开发生命周期
1.2.软件工程文档分类和软件工程过程的四个方面
1.3.软件系统工具
1.4.软件设计的四个活动
2.能力成熟度模型和能力成熟度模型集成
2.1.CMM
- 红色字体是小编自己编出来便于记忆的(PS:小编生活中并不认识姓管的人,如果真有管优看见了这个口诀,小编先道歉~)
- 红色圈出来的需要大家记忆的关键字,需要和前面的能力等级对应上
2.2.CMMI
这个就没有什么口诀了,小编是这样记忆的,CMMI和CMM的能力等级分别其实差不多,但是他的已定义级和已管理级对调了位置,少了一个可重复级,多了一个定量管理,定量管理肯定比可重复管理级别高啊,所以它排在后面;定量管理又是定又是管的,所以它肯定也在管理和定义级别的后面,所以CMMI的等级如下:
- 初始级-已管理级-已定义级-定量管理-优化级
3.软件过程模型
关键过程模型 | 关键字 |
瀑布模型 |
|
原型模型 |
|
增量模型 |
|
螺旋模型 |
|
V模型 |
|
喷泉模型 |
|
基于构件的开发模型(CBSD) |
|
形式化方法模型 |
|
4.敏捷模型(先写代码后做文档)
4.1.敏捷方法的特点
1)适应性和预设性
敏捷型方法是“适应性”(adaptive)而非“预设性”的。重型方法试图对一个软件开发项目在很长的时间跨度内做出详细的计划,然后依计划进行开发。这类方法在计划制订完成后拒绝变化,而敏捷型方法欢迎变化。其实,敏捷的目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。
2)面向人而非面向过程
敏捷型方法是“面向人的”(People Oriented)而非“面向过程的”(Process-oriented)。它们试图使软件开发工作能够充分发挥人的创造能力。它们强调软件开发应当是一项愉快的活动。
4.2.敏捷方法的核心思想
(1)敏捷方法是适应型,而非可预测型。与传统方法不同,敏捷方法拥抱变化,也可以说它的初衷就是适应变化的需求,利用变化来发展,甚至改变自己,最后完善自己。
(2)敏捷方法是以人为本,而非以过程为本。传统方法以过程为本,强调充分发挥人的特性,不去限制它。并且软件开发在无过程控制和过于严格烦琐的过程控制中取得一种平衡,以保证软件的质量。
(3)迭代增量式的开发过程。敏捷方法以原型开发思想为基础,采用迭代增量式开发,发行版本小型化。它根据客户需求的优先级和开发风险,制订版本发行计划,每一发行版都是在前一成功发行版的基础上进行功能需求扩充,最后满足客户的所有功能需求。
4.3.主要敏捷方法简介
(1)极限编程(Extreme Programming,XP)
- 近螺旋式开发方法;
- 提倡测试先行,为了将之后的BUG降到最低
(2)水晶系列方法
水晶系列方法是由Alistair Cockburn提出的敏捷方法系列。它与XP方法一样,都有以人为中心的理念,但在实践上有所不同。其目的是发展一种提倡“机动性的”方法,包含具有共性的核心元素,每个都含有独特的角色、过程模型、工作产品和实践。
(3)并列争球法(Scrum)
- 是一种迭代的增量化过程
- “冲刺”
(4)特征驱动开发方法(Feature Driven Development,FDD)。
FDD是由Jeff De Luca和大师Peter Coad提出来的。FDD是一个迭代的开发模型。FDD认为有效的软件开发需要3个要素:人、过程和技术。
FDD有5个核心过程:开发整体对象模型、构造特征列表、计划特征开发、特征设计和特征构建。
PS:这个不是考试内容,可不看。
其实小编之前就一直在想敏捷模型这个为什么课本里要单独列出来,不在软件过程模型中包含。所以就查了一下,网上是这么说的:
敏捷模型之所以被单独列出,是因为它具有独特的特点、价值观和实践,与传统的软件过程模型存在显著差异。
以下是软件过程模型和敏捷模型在软件开发中扮演着重要角色,它们之间存在明显的区别和联系。
区别
定义与特点:
- 软件过程模型:是软件生产的一组互相连贯的活动的简化表示,规定了软件开发过程中各项活动的基本步骤、任务和流程。它决定了项目的组织、管理和执行方式,是对软件开发过程的建模。常见的软件过程模型包括瀑布模型、快速原型模型、演化模型(迭代模型/渐增模型/增量模型)等。
- 敏捷模型:是一种迭代和增量的软件开发方法,强调灵活性和客户参与。它反对传统的瀑布模型,鼓励快速反馈循环和适应性规划,使团队能够更快地响应变化。敏捷模型的核心价值观包括个体和互动高于过程和工具、可工作的软件高于详尽的文档、客户合作高于合同谈判以及响应变化高于遵循计划。
开发流程:
- 软件过程模型:通常遵循预定义的流程,如瀑布模型从需求定义到软件设计、实现、验证和进化的顺序进行。快速原型模型则通过构建原型来快速反馈和细化需求。演化模型则采用迭代的方式逐步完善产品。
- 敏捷模型:以迭代和增量为核心,通过短周期的迭代来快速交付可工作的软件。每个迭代都包括需求分析、设计、实现、测试和交付等环节,但更注重快速反馈和适应性调整。
文档与沟通:
- 软件过程模型:通常强调详细的文档记录和严格的流程控制,以确保项目的可追溯性和可控性。
- 敏捷模型:则更注重面对面的沟通和协作,以及可工作的软件的交付。虽然也会生成必要的文档,但相对于传统模型来说,文档的数量和详细程度可能会减少。
联系
- 目标一致性:无论是软件过程模型还是敏捷模型,其最终目标都是开发出高质量的软件产品,满足客户的需求和期望。
- 迭代与增量:虽然传统的软件过程模型如瀑布模型可能更侧重于顺序的开发流程,但现代软件过程模型(如快速原型模型和演化模型)已经融入了迭代和增量的思想。而敏捷模型更是以迭代和增量为核心,通过短周期的迭代来快速交付可工作的软件。
- 适应性:随着软件开发环境的不断变化和客户需求的日益多样化,软件过程模型和敏捷模型都在不断地发展和完善。它们都强调对变化的适应性和灵活性,以应对不断变化的市场需求和技术挑战。
5.统一过程模型(RUP)
RUP描述了如何有效地利用商业的可靠的方法开发和部署软件,是一种重量级过程,特别适用于大型软件团队开发大型项目。
5.1.RUP的三个特点
RUP具有三个显著的特点:
- 用例驱动:一个用例就是系统的一个功能。在系统分析和系统设计中,用例被用来将一个复杂的庞大系统分割、定义成一个个小的单元,这个小的单元就是用例。然后以每个小的单元为对象进行开发。
- 以架构为中心:4+1视图
- 迭代和增量:RUP强调软件开发是一个迭代模型,它定义了四个阶段:初始、细化、构建、交付。其中每个阶段都有可能经历从需求分析、系统设计、编码测试等一系列步骤,只是侧重点不同,例如构建阶段编码和测试部分就多一些。
5.1.1.4+1视图
下面这一段话会考,读熟它:
- 分析人员和测试人员关心的是系统的行为,会侧重于用例视图
- 最终用户关心系统功能,会侧重逻辑视图
- 程序员关系的系统的配置装配等问题,会侧重实现视图
- 系统集成人员关心的是系统的性能、可伸缩性。可扩展性等,会侧重进程视图
- 系统工程师关心的系统的发布、安装和拓扑结构等,会侧重部署试图
5.2.RUP的四个阶段
RUP中的软件过程在时间上被分解为初始、细化、构建和移交4个阶段。每个阶段结束时都要安排一次技术评审,以确定这个阶段的目标是否已经满足。如果评审结果令人满意,就可以允许项目进入下一阶段。
通过初始、细化、构建、移交4个阶段就是一个开发周期,每个周期即产生一代软件。循环往复地重复这4个阶段,产品将演化出新一代产品,直至产品退役。当然每个周期的侧重点将放在不同的阶段。
5.2.1.初始阶段
任务是为系统建立业务模型并确定项目的边界。识别所有与系统交互的外部实体,定义系统与外部实体交互的特性,关注项目风险。
5.2.2.细化阶段
分析问题领域,建立完善的架构,淘汰项目中最高风险的元素。架构需要对范围、主要功能和非功能需求做出决策,并搭建项目环境。打造可执行原型,其中必须包含关键用例。
实现过程如下:
1)确定架构
2)制订构建阶段计划,并建立基线
3)建立支持环境,包括开发环境、开发流程等
4)选择构件
5)阶段技术评审,检验系统目标和范围,架构选择,风险解决方案等
5.2.3.构建阶段
开发所有剩余的构件和应用程序功能,把这些构件集成为产品,并进行详细测试。
本阶段的开发工作,尽量拆分构件开发,并行进行。
阶段结束时进行技术评审,评审产品是否可以进行beta测试。
5.2.4.移交阶段
本阶段重点是确保软件对最终用户是可用的。
5.3.RUP九个核心工作流
记一下
- 业务建模
- 需求
- 分析与设计
- 实现
- 测试
- 部署
- 配置与更变管理
- 项目管理
- 环境
6.逆向工程
早期的软件复用就是代码复用。
6.1.逆向工程的四个级别
考选择,看到后面的关键字要会选择
- 实现级:抽象语法树、符号表、过程的设计
- 结构级:程序分量之间的依赖关系
- 功能级:程序段功能与程序段功能之间的关系
- 领域级:应用领域概念
领域级抽象级别最高,完备性最低;实现级反之。
6.2.重构、设计恢复、再工程和正向工程
- 重构:再同一抽象级别上转换系统的描述形式
- 设计恢复:借助工具 从已有程序中抽象出有关数据设计等信息
- 再工程:再逆向工程获得基础上,修改或者重构已有系统,产生一个新的版本
- 包含三个步骤:逆向工程-新需求考虑过程-正向工程
- 正向工程:不仅从现有系统中恢复设计信息,而且使用该信息去改变或者重构现有系统
引用的博客: