系列索引: 《软件工程与实践》第三版 软件工程课程知识梳理
本章目录:
本章重难点:
● 了解软件工程的发展和软件危机
● 掌握软件工程的概念、内容和原理
● 熟悉软件生存周期及阶段任务
● 掌握常用的软件开发模型
● 掌握软件开发准备及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 本章小结
评论记录:
回复评论: