目录

软件工程与实践-一软件工程基础概述-知识梳理

《软件工程与实践》 |(一)软件工程基础概述 知识梳理

系列索引:


本章目录:


本章重难点:

● 了解软件工程的发展和软件危机

● 掌握软件工程的概念、内容和原理

● 熟悉软件生存周期及阶段任务

● 掌握常用的软件开发模型

● 掌握软件开发准备及Visio2017应用实验

1.1  软件工程的发展

1.1.1 软件危机概述

软件危机(Software crisis)是指20世纪60年代计算机软件在 研发、运行、维护和管理 过程中,出现的一系列严重问题的现象。

软件危机直接导致软件工程的产生。

https://i-blog.csdnimg.cn/blog_migrate/3f83d6d8f4139cfafd038cc0259e54c8.png

https://i-blog.csdnimg.cn/blog_migrate/3cd66d5a3f6fdc36b08bb6be4605c4dd.png

出现软件危机 最主要的两个因素 就是 开发成本难控制和开发计划难落实

https://i-blog.csdnimg.cn/blog_migrate/8568e389355dcafa7d15eee4d2a19936.png

1.1.2  软件工程的发展过程

软件技术的发展 经历了 程序设计阶段、程序系统阶段、软件工程阶段和创新完善软件工程 4个阶段

https://i-blog.csdnimg.cn/blog_migrate/1c9b452f55ee3c58fa6cb4a47f74dcba.png

软件工程发展  经历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  软件工程学及其内容和方法

主要内容 包括 软件开发技术软件工程管理 两个方面

软件工程方法学是 研发、管理与维护 软件的系统方法,具有 方法、工具和过程 三个要素,也称 软件工程三要素

https://i-blog.csdnimg.cn/blog_migrate/faf58e0b6d459963106971850e7e2444.png

软件工程方法

常用 软件工程方法 主要分为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)方法是 软件开发新范型 。

https://i-blog.csdnimg.cn/blog_migrate/65c06285d9fef3b3e9980a9c30c05f8f.png

软件复用方式 =分析 + 结构 + 设计 + 程序

(7) 可视化方法

总结: 七大方法分别为: 功能,数据,对象,问题,方面,构件,可视化

软件研发工具

软件工具通常由 工具(主体)、工具接口和工具用户接口 三部分构成。

软件工具 和 软件开发方法 密切相关,是 软件开发的两大支柱

软件开发环境

软件开发环境(Software Development Environment)也称为 软件工程环境 。“软件开发环境是相关的一组软件工具集合,支持一定的软件开发方法或按照一定的软件开发模型组织而成”。是包括方法、工具和管理等多种技术的综合系统。其设计目标是简化软件开发过程,提高软件开发质量和效率。

https://i-blog.csdnimg.cn/blog_migrate/1081e064e0bbdaec4c4fd4b75a739004.png

https://i-blog.csdnimg.cn/blog_migrate/8f1b9e7f7fa18e505be83021bbbc5978.png https://i-blog.csdnimg.cn/blog_migrate/9e8f90eaecfdd68fca4741f081b0f6e0.png

软件工程管理概述

软件工程管理的主要内容包括: (1)组织人员。 (2)计划管理。 (3)费用管理。 (4)软件配置管理。

1.2.4  软件过程及实际开发过程

软件过程(software process)ISO9000定义为:“ 将 输入转化为输出 的一组彼此相关的 资源和活动 ”。

https://i-blog.csdnimg.cn/blog_migrate/445ae5829b88ac54ca37c83883e4cfc5.png

软件实际开发过程是最重要的软件过程,主要包括  项目启动、需求调研分析、设计(概要设计及详细设计)、编码(实现)、测试、部署、测试和结束等过程。

1.2.5  软件工程基本原理及原则

软件工程的基本原理

https://i-blog.csdnimg.cn/blog_migrate/5fe363e9b1287bf893afb46df12dde43.png

软件工程的基本原则

(1) 选取适宜的开发模型。    (2) 采用合适的设计方法。    (3) 提供高质量的工程支撑。    (4) 重视软件工程的管理。

1.3 软件生存周期及任务

1.3.1  软件生存周期的有关概念

软件生存周期(Software life cycle)是从 开始研发软件 到 软件停止使用 的整个过程。也称为 软件生命周期或软件生存期 。

可以将一个软件的生存周期划分为 市场调研、立项、需求分析、规划、概要设计、详细设计、编测程序、单元测试、集成测试、运行、维护 这几个过程,前一过程的终点就是后一过程的起点。

完成阶段性工作的标志称为 里程碑 (Milestone),某些重要的里程碑又称为 基线 (Baseline)。

1.3.2  软件生存周期的阶段划分

软件生存周期 阶段划分的原则主要包括:

(1)各阶段的任务相对独立。 便于分阶段计划、逐步完成。

(2)同一阶段的工作任务性质尽量相同。 有利于软件开发和组织管理,明确开发人员的分工与职责,以便协同工作、保证质量。

1.3.3 软件生存周期各阶段的任务

软件生存周期组成包括 软件策划、软件开发和运行维护 三个时期。

软件生存周期分为7个阶段

https://i-blog.csdnimg.cn/blog_migrate/9c719d867ff001abe54cf7a8a0ccfec9.png https://i-blog.csdnimg.cn/blog_migrate/609ff50a3afbcc2ab4d3ffee26351259.png https://i-blog.csdnimg.cn/blog_migrate/ef9afe8a92a642207b887b45f3b19bf4.png

1.4 常用软件开发模型

1.4.1 瀑布模型概述

瀑布模型开发适用于 软件需求明确,开发技术成熟,工程管理较严格 的场合下使用

瀑布模型(Waterfall model)将生存期的 计划时期、开发时期和运行时期,又细分为若干个阶段:

计划时期 可分为问题定义、可行性研究、需求分析3个阶段

开发时期 分为概要设计、详细设计、软件实现、软件测试等阶段

运行时期 则需要不断进行运行维护,需要不断修改错误、排除故障,或以用户需求、运行环境改变进行改更调整。

https://i-blog.csdnimg.cn/blog_migrate/3b8d99715996be8e4af56c374ed6e89e.png

图中的实线箭头表示开发流程,每个阶段顺序进行,有时会返工;虚线箭头表示维护工作的流程, 根据不同情况返回到不同的阶段进行维护。

瀑布模型开发软件特点

(1)开发过程的顺序性 。

瀑布模型开发适用于 软件需求明确,开发技术成熟,工程管理较严格 的场合下使用

(2)统筹兼顾不过早编程。

(3)严格要求保证质量。

瀑布模型缺陷 是将 充满回溯且相互重叠的软件开发 过程硬性地分为多个阶段 ,随着开发软件规模的增加, 造成的危害大增。为了描述软件开发过程中可能回溯 对瀑布模型进行了改进,开发各阶段可能循环重复。

https://i-blog.csdnimg.cn/blog_migrate/caa3eff092e2655eaa39b740d619413a.png https://i-blog.csdnimg.cn/blog_migrate/facb4c4ad6dfbe90429182c9b23eb4d5.png

1.4.2 快速原型模型概述

快速原型模型最适合于可以先 尽快构建成一个原型的应用系统 。

1.4.3 增量模型概述

适用于 软件需求不明确、设计方案有一定风险 的软件项目

利用增量模型开发的软件被作为一系列的增量构件进行设计、实现、集成和测试,每个构件具有一定功能,并最终能组合成一个具有完整功能软件的模块

https://i-blog.csdnimg.cn/blog_migrate/9074b63a147f471d21eda90cca6a8092.png

同瀑布模型之间的本质区别为

瀑布模型属于 整体开发模型 ,规定 在开始下一阶段工作之前,必须完成前一阶段的所有细节 。

而增量模型属于 非整体开发模型 , 可推迟某些阶段或所有阶段中细节 ,较早地研发出软件。

增量模型的缺陷

https://i-blog.csdnimg.cn/blog_migrate/12c4232a7f57c90d60acf565f994f232.png

1.4.4 螺旋模型概述

螺旋模型将 瀑布模型和快速原型模型 结合,强调了其他模型所忽视的 风险分析 ,适合于 大型复杂系统

开发过程 划分为 制定计划、风险分析、实施工程和客户评估 四类活动。

螺旋模型沿着螺线进行多次迭代,其迭代过程如图所示。

https://i-blog.csdnimg.cn/blog_migrate/db9df4d733545660074cec2ac7446f1e.png

螺旋模型的缺陷

不支持软件重用和多项开发活动集成

1.4.5 喷泉模型概述

适合于利用 面向对象技术 的软件开发项目

克服了瀑布模型 不支持软件重用和多项开发活动集成 的局限性。可使开发过程具有 迭代性和无间隙性 。

喷泉模型是以面向对象的开发方法为基础,以用户需求为源泉,具有以下7个特点: https://i-blog.csdnimg.cn/blog_migrate/6a75f442e4c570d713344563d4b0b719.png https://i-blog.csdnimg.cn/blog_migrate/6f211bd6a47751583e8a93169eb329cf.png

1.4.6 基于面向对象的模型

面向对象技术强调了 类的创建与封装 , 构件重用 就是其重要技术之一。基于面向对象的模型,综合了 面向对象和原型方法及重用技术 。

1.4.7 软件开发模型的选定

开发模型与开发方法及工具的关系

应用软件的开发过程主要包括: 生存周期的系统规划、需求分析、软件设计、实现 四个阶段。

软件的开发方法多种多样, 结构化方法 和 面向对象的方法 是常用的 最基本的开发方法 。

软件的开发模型(生存周期过程模型)与开发方法、开发工具之间的 关系如图:

https://i-blog.csdnimg.cn/blog_migrate/35f2778550955eb464d78862a9d2b878.png

软件开发模型选取

最常用的是瀑布模型和原型模型,在具体选择模型时需要综合考虑以下6点:

https://i-blog.csdnimg.cn/blog_migrate/3cea26871f759052513dd56b00293c6d.png https://i-blog.csdnimg.cn/blog_migrate/adb2a1ee4957b5580b562a274ae40883.png

软件开发模型的修定

开发模型的选定并非直接照抄照搬、一成不变,有时还需要根据实际开发目标要求进行裁剪、修改、确定和综合运用。

1.5 本章小结

https://i-blog.csdnimg.cn/blog_migrate/8c8a966ab3f37480ca0a9049047735f3.png https://i-blog.csdnimg.cn/blog_migrate/25165bdd8e2c4f9ce03c335579648898.png