软考笔记——第九章--软件工程基础知识

第九章 软件工程基础知识

  • 软件工程概述、软件过程模型、软件开发方法、软件工具与软件开发环境、软件项目管理、软件风险管理、软件度量。

1.软件工程概述

  • 软件工程基本原理:用分阶段的生命周期计划严格管理、坚持进行阶段评审、实现严格的产品控制、采用现代程序设计技术、结果应能清楚的审查、开发小组的人员应少而精、承认不断改进软件工程实践的必要性。
  • 基本要素:方法、工具、过程
  • 软件生存周期:可行性分析与项目开发计划、需求分析、概要设计(选择系统解决方案,规划子系统)、详细设计(设计子系统内部具体实现)、编码、测试、维护。

2.软件过程

  • 能力成熟度模型CMM:对软件组织化阶段的描述,随着软件组织定义、实施、测量、控制和改进其软件过程,软件组织的能力经过这些阶段逐步提高。

    • 初始级
    • 可重复级
    • 已定义级
    • 已管理级
    • 优化级
  • 能力成熟度模型CMMI:将已有的几个CMM模型结合在一起,使之构造成为“集成模型”。支持多个工程学科和领域的、系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率。

  • CMMI两种表示方法:

    1. 阶段式模型:类似于CMM,它关注组织的成熟度,五个成熟模型如下:
    • 初始的
    • 已管理的
    • 已定义的
    • 定量管理的
    • 优化的
    1. 连续式模型:关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程能力等级。

3.统一过程UP

  • 统一过程模型:是一种开发过程,特征如下:
  • 三大特点:用例和风险驱动、以架构为中心、迭代并且增量
  • 开发的四个阶段:起始(项目的初始活动,如确认需求和风险评估等)、精化(需求分析和架构设计等)、构建(系统的构建,产生实现模型等)、移交(软件提交方面的工作,产生软件增量,进行β测试,交付系统等)。
  • UP的每一次迭代都是一次完整的软件开发过程,包括整个软件开发生命周期,有五个核心工作流(需求、分析、设计、实现、测试

4.软件过程模型

  • 软件过程模型:即软件开发模型,是软件开发全部过程、活动和任务的结构框架。

瀑布模型(SDLC)

软考笔记——第九章--软件工程基础知识_第1张图片

  • 结构化方法中的模型,是结构化的开发,开发流程如同瀑布一般,一步一步的走下去,直到最后完成项目开发,只适用于需求明确或者二次开发(需求稳定),当需求不明确时,最终开发的项目会错误,有很大的缺陷。

V模型

软考笔记——第九章--软件工程基础知识_第2张图片

  • 是瀑布模型的一个变体。特点是增加了很多轮测试,并且这些测试贯穿于软件开发的各个阶段,不像其他模型都是软件开发完再测试,很大程度上保证了项目的准确性。

演化模型

软考笔记——第九章--软件工程基础知识_第3张图片

  • 原型模型:即快速原型开发,与瀑布模型相反,原型针对的就是==需求不明确的情况==,首先快速构造一个功能模型,演示给用户看,并按用户要求及时修改,中间再通过不断的演示与用户沟通,最终设计出项目,就不会出现与用户要求不符合的情况,采用的是迭代的思想。

  • 螺旋模型:是多种模型的混合,针对需求不明确的项目,与原型类似,但是增加了**风险分析**,这也是其最大的特点。同时,该模型特别适合用于庞大、复杂并且具有高风险的系统。(也适用于用户需求不清、需求经常变化的情况)

    • 四步:制定计划—风险分析—实施工程—用户评估

增量模型

  • 首先开发核心模块功能,而后与用户确认,之后再开发核心模块的功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发,优先级最高的服务最先交付。
  • 特点:但由于并不是从系统整体角度规划各个模块,因此不利于模块划分。难点在于如何将客户需求划分为多个增量。与原型不同的是==增量模型的每一次增量版本都可作为独立可操作的作品==,而原型的构造一般是为了演示。

其他模型

  • 喷泉模型:是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。使开发过程具有迭代性和无间隙性。
  • 基于构件的开发模型CBSD:利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品软件构件。
  • 特点是增强了复用性,在系统开发过程中,会构建一个构件库,供其他系统复用,因此可以提高可靠性,节省时间和成本。

5.软件开发方法

  • 结构化方法:流程固定,针对需求明确的项目,自顶向下,逐层分解,面向数据流
  • 结构化方法的设计:体系结构设计是宏观架构设计;数据设计是数据流的设计;接口设计关注模块间的连接设计;过程设计是模块内的具体实现过程的数据结构和算法的设计。
  • Jackson方法:面向数据结构的开发方法,适合于小规模的项目。
  • 原型方法:适合于需求不明确的开发,以原型模型为代表。
  • 面向对象方法:强调复用性,构建全面合理的模型,供不同项目使用,方便修改,节省开发时间和效率,增强复用性,以构件组装模型为代表。

6.敏捷开发

  • 针对中小型项目,主要是为了给程序员减负,去掉一些不必要的会议和文档。指代一组模型(极限编程、自适应开发、水晶方法…),这些模型都具有相同的原则和价值观,具体如图所示:软考笔记——第九章--软件工程基础知识_第4张图片

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

  • 结对编程:一个程序员开发,另一个程序员在一旁观察审查代码,能够有效的提高代码质量,共同对代码负责。

  • 自适应开发:强调开发方法的适应性。

  • 水晶开发:每一个不同的项目都需要一套不同的策略、约定和方法论。

  • 特性驱动开发:是一套针对中小型软件开发项目的开发模式。

  • 极限编程XP:核心是沟通、简明、反馈和勇气。XP提倡测试先行,为了将以后出现bug的几率降到最低。

  • 并列争球法SCRUM:是一种迭代的增量化过程。

7.软件工具

  • 软件开发工具:对于软件开发过程的各种活动。包括需求分析工具、设计工具、编码与排错工具、测试工具。
  • 软件维护工具:辅助软件维护过程中活动的软件,辅助维护人员对软件代码及其文档进行各种维护活动。
  • 软件管理和软件支持工具:辅助管理人员和软件支持人员的管理活动和支持活动,以确保软件高质量的完成。包括项目管理工具、配置管理工具、软件评价工具。

8.软件开发环境

  • 软件开发环境:指支持软件产品开发的软件系统,由软件工具集和环境集成机制构成。
  • 开发支持环境(环境信息库,过程控制和消息服务,用户界面规范)

9.软件项目管理

  • 有效的项目管理集中在4P上:人员、产品、过程、项目。
  • 软件项目估算方法:成本估算方法
    • 自顶向下估算
    • 自底向上估算
    • 差别估算法
    • 专家估算
  • COCOMO模型:常见的软件规模估算方法。
  • COCOMOⅡ模型:COCOMO的升级,也是以软件规模作为成本的主要因素,考虑多个成本驱动因子。

10.进度管理

  • 基本原则:划分、相互依赖、世间分配、工作量确认、确认责任、明确输出结果、确定里程碑。

  • Gantt图(甘特图):又称横道图。横轴表示时间、纵轴表示活动、以时间顺序表示活动。能反应活动间的并行关系,但无法反应活动之间的依赖关系,因此也难以清晰的确关键任务和关键路径。

  • PERT图:类似于前趋图,是有向图,反应活动之间的依赖关系,有向边上标注活动运行的时间,但无法反应活动之间的并行关系。

  • 图的关键路径:软考笔记——第九章--软件工程基础知识_第5张图片

  • 时间/事件 1 2 3 4 5 6 7 8 9
    最早开始时间 0 2 2 0 4 4 9 9 15
    最晚开始时间 0 2 9 6 4 10 9 11 15

    由上图分析,以及Gantt图和PERT图的相关概念,可知,第一空选D,第二空选C。

  • 松弛时间:关键路径—哪段的最长段的路径。

11.软件项目的组织(了解)

  • 组织结构模式:项目型、职能型、矩阵型

  • 程序设计小组的组织方式:

    • 主程序员制小组:主程序员全权负责,后援工程师必要时能替代主程序员,适合大规模项目。
    • 民主制小组:也即无主程序员小组,成员之间地位平等,任何决策都是全员参与投票,适合于项目规模小,开发人员少,采用新技术和确定性较小的项目。
    • 层次式小组:两个层次,一名组长领导若干个高级程序员,每个高级程序员领导若干个程序员。

12.软件质量管理

  • ISO/IEC9126软件质量模型:质量特性和子特性
    • 功能性:适合性、准确性、互用性、依从性、安全性
    • 可靠性:成熟性、容错性、易恢复性
    • 易使用性:易理解性、易学性、易操作性
    • 效率:时间特性、资源特性
    • 可维护性:易分析性、易改变性、稳定性、易测试性
    • 可移植性:适应性、易安装性、一致性、易替换性

13.软件质量保证

  • 3个要点:

    • 软件必须满足用户需求,与用户需求不一致的软件无质量可言。
    • 软件应遵循规定的一系列开发标准,不遵循这些准则的软件,其质量难以得到保证。
    • 软件还应满足某些隐含的需求(如可理解性、可维护性,未明确写在用户需求中)。
  • 7个任务:

    • 应用技术方法、正式的技术评审、测试软件、标准的实施、控制变更、质量、记录保存和报告。
  • 软件容错技术

    • 通常将质量理解为用户满意程度,有两个必要条件:设计质量评审程序质量评审
  • 软件配置管理

    • 基线
    • 软件配置项
    • 版本控制

14.风险管理

  • 软件风险两个特性:不确定性、损失。

  • 软考笔记——第九章--软件工程基础知识_第6张图片

  • 风险管理过程如下:

    • 风险识别
    • 风险预测
    • 风险评估
    • 风险控制

15.软件度量

  • 软件的两种属性:外部属性指面向管理者和用户的属性,可直接测量,一般为性能指标。内部属性指软件产品本身的属性,如可靠性等,只能间接测量
  • McCabe度量法:又称为环路复杂度,假设有向图中有向边数为m,节点数为n,则此有向图的环路复杂度为 m − n + 2 m-n+2 mn+2

你可能感兴趣的:(软考笔记,软件工程)