软件工程与实践-一软件工程基础概述-知识梳理
《软件工程与实践》 |(一)软件工程基础概述 知识梳理
系列索引:
本章目录:
本章重难点:
● 了解软件工程的发展和软件危机
● 掌握软件工程的概念、内容和原理
● 熟悉软件生存周期及阶段任务
● 掌握常用的软件开发模型
● 掌握软件开发准备及Visio2017应用实验
1.1 软件工程的发展
1.1.1 软件危机概述
软件危机(Software crisis)是指20世纪60年代计算机软件在 研发、运行、维护和管理 过程中,出现的一系列严重问题的现象。
软件危机直接导致软件工程的产生。
出现软件危机 最主要的两个因素 就是 开发成本难控制和开发计划难落实
1.1.2 软件工程的发展过程
软件技术的发展 经历了 程序设计阶段、程序系统阶段、软件工程阶段和创新完善软件工程 4个阶段
软件工程发展 经历4个重要阶段:
1.传统软件工程 传统软件工程是指软件工程产生的初期,也称为第一代软件工程。
2.对象工程 对象工程也称为第二代软件工程。20世纪80年代中到90年代,以Smalltalk为代表的 面向对象的程序设计语言 相继推出,使面向对象的方法与技术得到快速发展。
3.过程工程 过程工程也称为第三代软件工程。随着 网络 等高新技术的出现及信息技术的广泛应用,软件规模和复杂度不断增大,开发时间相应持续增长,开发人员的增加,致使软件工程开发和管理的难度不断增强。
4.构件工程 构件工程也称为第四代软件工程.90年代起,基于构件(Component)的开发方法取得重要进展,软件系统的开发可利用已有的可复用构件组装完成,而无需从头开始构建,可提高效率和质量、降低成本。
计算机辅助软件工程 简称 CASE (Computer Aided Software ngineering)将 工具和代码生成器 进行集成,为很多软件系统提供了可靠的解决方案;
1.2 软件及软件工程概述
1.2.1 软件的概念特点和分类
软件=程序 + 数据 + 文档 + 服务
数据则是使程序正常处理信息的数据结构及信息表示;文档(Document)是与程序开发、维护和使用有关的技术资料。服务主要指对各种软件用户的服务,包括提供软件产品使用说明书、推销服务及售后技术支持等
软件分为 系统软件、支撑软件(开发环境)和应用软件 等。其中应用软件常称为信息系统主要是指具体的应用系统。
软件的主要特点
(1) 智能性。软件是人类智能劳动的产物、代替和延伸。
(2) 抽象性。软件属于逻辑实体,无形性和智能性致使软件难以认识和理解。
(3) 人工方式。软件的开发、维护及设置管理等方面目前尚未完全脱离手工方式。
(4) 复杂性和系统性。逻辑处理和数据结构及构成等相对复杂
(5) 泛域性。软件应用很广泛,在信息化中可服务于各种领域、行业和层面。
(6) 复制性。软件成本相对比较昂贵,软件是人类创造性的可复制的特殊产品。
(7) 非损及更新性。软件不存在物理性磨损和老化问题,但可以退化需要更新升级。
软件的分类
(1) 按照 软件功能 划分-系统软件、支撑软件、应用软件
(2) 按照 软件规模 划分 (微型、小型、中型、大型、超大型5种)
(3)按照 软件工作方式 划分-实时处理软件、分时软件、交互式软件、批处理软件
(4)按照 软件服务对象 的范围划分-项目软件、产品软件。
(5)按照 软件运行的终端 设备划分。分为服务器软件、计算机软件、手机软件、机器人软件和其他嵌入设备(电子化设备)软件。
1.2.2 软件工程的概念、特点和目标
软件工程(Software Engineering)是 软件开发、运行、维护和引退的 系统方法 。
软件工程 = 工程原理 + 技术方法 + 管理技术
软件工程学科的 主要特点 是 实践性和发展性 ,其问题来源并应用于 实践 , 最终目的 是 高效高质量低成本 地研发软件产品 。
具体特点 : 多学科 多目标 多阶段
基本特点: 系统性,工程性,综合性,学科交叉性
软件工程的 目的 是 在 规定的 时间和开发经费 内,开发出满足用户需求的、高质量的软件产品 。
其 目标 是 实现 软件研发与维护的优质高效和自动化 。
1.2.3 软件工程学及其内容和方法
主要内容 包括 软件开发技术 和 软件工程管理 两个方面
软件工程方法学是 研发、管理与维护 软件的系统方法,具有 方法、工具和过程 三个要素,也称 软件工程三要素 :
软件工程方法
常用 软件工程方法 主要分为7种类型
(1) 面向功能方法 。也称为 结构化方法 ,主要采用结构化技术,包括 结构化分析、结构化设计和结构化编程实现 ,按照软件的开发过程、结构和顺序完成开发任务。
(2) 面向数据方法 。从目标系统输入、输出数据的结构,导出程序框架结构,再补充其他细节,得到完整的 程序结构图 。此方法也可与其他方法结合,用于模块的详细设计和数据处理等。对输入输出数据结构明确的中小型系统很有效,如商用文件表格处理等。
(3) 面向对象方法 (Object-Oriented Method,OOM)将对象作为数据和对数据的操作相结合的软件构件,用 对象分解 取代了传统方法的功能分解。基本思想是:对问题领域进行自然的分割,以更接近人类通常思维的方式建立问题领域的模型,以便对客观的信息实体(事物)进行结构和行为的模拟,从而使设计的软件更直接地表现问题的求解过程。
OOM 以对象作为最基本的元素,将所有对象都划分为类 ,是分析和解决问题的核心。OOM 要素 是对象、类、继承以及消息通信。 概括为: 面向对象 = 对象 + 类 + 继承 + 消息通信
OOM由 OOA(面向对象的 分析 )、OOD(面向对象 设计 )和OOP(面向对象的程序设计 / 实现 )三部分组成。
(4) 面向问题方法(PAM) .也称 问题分析法 。其基本思想是:以 输入输出数据结构 指导系统的问题分解,经过系统分析逐步综合。
(5) 面向方面的开发方法 .(Aspect-Oriented Programming, AOP )是面向对象系统的扩展,在现有的AOP实现技术中,可通过创建Aspect库或者专用Aspect语言实现面向方面的编程。
(6) 基于构件的开发方法 .基于构件的开发(Component-Based Development, CBD)或基于构件的软件工程(Component-Based Software Engineering, CBSE)方法是 软件开发新范型 。
软件复用方式 =分析 + 结构 + 设计 + 程序
(7) 可视化方法
总结: 七大方法分别为: 功能,数据,对象,问题,方面,构件,可视化
软件研发工具
软件工具通常由 工具(主体)、工具接口和工具用户接口 三部分构成。
软件工具 和 软件开发方法 密切相关,是 软件开发的两大支柱
软件开发环境
软件开发环境(Software Development Environment)也称为 软件工程环境 。“软件开发环境是相关的一组软件工具集合,支持一定的软件开发方法或按照一定的软件开发模型组织而成”。是包括方法、工具和管理等多种技术的综合系统。其设计目标是简化软件开发过程,提高软件开发质量和效率。
软件工程管理概述
软件工程管理的主要内容包括: (1)组织人员。 (2)计划管理。 (3)费用管理。 (4)软件配置管理。
1.2.4 软件过程及实际开发过程
软件过程(software process)ISO9000定义为:“ 将 输入转化为输出 的一组彼此相关的 资源和活动 ”。
软件实际开发过程是最重要的软件过程,主要包括 项目启动、需求调研分析、设计(概要设计及详细设计)、编码(实现)、测试、部署、测试和结束等过程。
1.2.5 软件工程基本原理及原则
软件工程的基本原理
软件工程的基本原则
(1) 选取适宜的开发模型。 (2) 采用合适的设计方法。 (3) 提供高质量的工程支撑。 (4) 重视软件工程的管理。
1.3 软件生存周期及任务
1.3.1 软件生存周期的有关概念
软件生存周期(Software life cycle)是从 开始研发软件 到 软件停止使用 的整个过程。也称为 软件生命周期或软件生存期 。
可以将一个软件的生存周期划分为 市场调研、立项、需求分析、规划、概要设计、详细设计、编测程序、单元测试、集成测试、运行、维护 这几个过程,前一过程的终点就是后一过程的起点。
完成阶段性工作的标志称为 里程碑 (Milestone),某些重要的里程碑又称为 基线 (Baseline)。
1.3.2 软件生存周期的阶段划分
软件生存周期 阶段划分的原则主要包括:
(1)各阶段的任务相对独立。 便于分阶段计划、逐步完成。
(2)同一阶段的工作任务性质尽量相同。 有利于软件开发和组织管理,明确开发人员的分工与职责,以便协同工作、保证质量。
1.3.3 软件生存周期各阶段的任务
软件生存周期组成包括 软件策划、软件开发和运行维护 三个时期。
软件生存周期分为7个阶段
1.4 常用软件开发模型
1.4.1 瀑布模型概述
瀑布模型开发适用于 软件需求明确,开发技术成熟,工程管理较严格 的场合下使用
瀑布模型(Waterfall model)将生存期的 计划时期、开发时期和运行时期,又细分为若干个阶段:
计划时期 可分为问题定义、可行性研究、需求分析3个阶段
开发时期 分为概要设计、详细设计、软件实现、软件测试等阶段
运行时期 则需要不断进行运行维护,需要不断修改错误、排除故障,或以用户需求、运行环境改变进行改更调整。
图中的实线箭头表示开发流程,每个阶段顺序进行,有时会返工;虚线箭头表示维护工作的流程, 根据不同情况返回到不同的阶段进行维护。
瀑布模型开发软件特点
(1)开发过程的顺序性 。
瀑布模型开发适用于 软件需求明确,开发技术成熟,工程管理较严格 的场合下使用
(2)统筹兼顾不过早编程。
(3)严格要求保证质量。
瀑布模型缺陷 是将 充满回溯且相互重叠的软件开发 过程硬性地分为多个阶段 ,随着开发软件规模的增加, 造成的危害大增。为了描述软件开发过程中可能回溯 对瀑布模型进行了改进,开发各阶段可能循环重复。
1.4.2 快速原型模型概述
快速原型模型最适合于可以先 尽快构建成一个原型的应用系统 。
1.4.3 增量模型概述
适用于 软件需求不明确、设计方案有一定风险 的软件项目
利用增量模型开发的软件被作为一系列的增量构件进行设计、实现、集成和测试,每个构件具有一定功能,并最终能组合成一个具有完整功能软件的模块
同瀑布模型之间的本质区别为 :
瀑布模型属于 整体开发模型 ,规定 在开始下一阶段工作之前,必须完成前一阶段的所有细节 。
而增量模型属于 非整体开发模型 , 可推迟某些阶段或所有阶段中细节 ,较早地研发出软件。
增量模型的缺陷
1.4.4 螺旋模型概述
螺旋模型将 瀑布模型和快速原型模型 结合,强调了其他模型所忽视的 风险分析 ,适合于 大型复杂系统
将 开发过程 划分为 制定计划、风险分析、实施工程和客户评估 四类活动。
螺旋模型沿着螺线进行多次迭代,其迭代过程如图所示。
螺旋模型的缺陷
不支持软件重用和多项开发活动集成
1.4.5 喷泉模型概述
适合于利用 面向对象技术 的软件开发项目
克服了瀑布模型 不支持软件重用和多项开发活动集成 的局限性。可使开发过程具有 迭代性和无间隙性 。
喷泉模型是以面向对象的开发方法为基础,以用户需求为源泉,具有以下7个特点:
1.4.6 基于面向对象的模型
面向对象技术强调了 类的创建与封装 , 构件重用 就是其重要技术之一。基于面向对象的模型,综合了 面向对象和原型方法及重用技术 。
1.4.7 软件开发模型的选定
开发模型与开发方法及工具的关系
应用软件的开发过程主要包括: 生存周期的系统规划、需求分析、软件设计、实现 四个阶段。
软件的开发方法多种多样, 结构化方法 和 面向对象的方法 是常用的 最基本的开发方法 。
软件的开发模型(生存周期过程模型)与开发方法、开发工具之间的 关系如图:
软件开发模型选取
最常用的是瀑布模型和原型模型,在具体选择模型时需要综合考虑以下6点:
软件开发模型的修定
开发模型的选定并非直接照抄照搬、一成不变,有时还需要根据实际开发目标要求进行裁剪、修改、确定和综合运用。
1.5 本章小结