软件工程全部课件-第1章 软件与软件工程的概念
合集下载
《软件工程》课件——第1章 软件工程概述
软件的分类
图1.3 软件的分类
软件的分类
另外,从软件工程学的角度来划分软件产品,可以分为基础软件、支 撑软件和应用软件等。
基础软件是指保证计算机运行并支撑应用软件运行的基础环境,包括 操作系统、数据库、中间件。
支撑软件是指支撑各种软件的开发与维护的软件,又称减开发环境( Integrated Development Environment, IDE),主要有环境数据库、各 种接口软件和工具组,包括编程工具、建模工具、版本控制、软件测试等 类型。
软件的特性
图1.1 硬件失效曲线图
软件的特性
图1.2 软件失效曲线
软件的特性
⑥ 应用特性。软件的应用极为广泛,如今它 已渗入国民经济和国防的各个领域,现已成为信 息产业、先进制造业和现代服务业的核心,占据 了无可取代的地位。
软件的特性
(2)软件的生产特性 ① 软件开发特性。由于软件固有的特性,使得软件的开发不仅具
有技术复杂性,还有管理复杂性。技术复杂性体现在:软件提供的功能比 一般硬件产品提供的功能多,而功能的实现具有多样性,需要在各种实现 中做出选择,更有实现算法上的优化带来的不同,而实现上的差异会带来 使用上的差别。管理上的复杂性表现在:第一,软件产品的能见度低,要看 到软件开发进度比看到有形产品的进度困难得多;第二,软件结构的合理性 差,结构不合理使软件管理复杂性随软件规模增大而呈指数增长。
软件的特性
③ 软件维护特性。软件在运行过程中的维护工作比硬件复杂得多。
首先软件投入运行后,总会存在缺陷甚至暴露出潜伏的错误,需要进行“纠 错性维护”。其次,用户可能要求完善软件性能,对软件产品进行修改,进 行“完善性维护”。当支撑软件产品运行的硬件或软件环境改变时,也需要 对软件产品进行修改,进行“适应性维护”。软件的缺陷或错误属于逻辑性 的,因此,不需要更换某种备件,而是修改程序,纠正逻辑缺陷,改正错误 ,提高性能,增加适应性。当软件产品规模庞大、内部的逻辑关系复杂时, 经常会发生为纠正一个错误而产生新错误的情况,因此,软件产品的维护往 往比硬件产品的维护工作量大且复杂。
软件工程课件第1章 软件工程概述
1.1.1 软件危机爆发的原因
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列 严重问题。
这些问题绝不仅仅是“不能正常运行的”软件才具有的,实际上几 乎所有软件都不同程度地存在这些问题。
软件危机主要表现,如:对软件开发成本和进度估计不准确、软 件产品的质量靠不住、用户对“已完成的”软件系统不满意、软件 开发速度跟不上、软件不可维护以及没有适当的文档资料等等。
60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅 速扩大;高级语言的出现、操作系统的发展和第一代数据库管理系统 的诞生,使得软件系统规模越来越大、软件可靠性问题也越来越突出, 私人化的软件生产方式不能满足社会日益增长的软件需求。
软件的发展速度远远滞后于硬件的发展速度,60年代末软件危机爆发。
1.5 软件生存期模型
1.5.1 瀑布模型
在20世纪80年代之前,瀑布模型一直 是唯一被广泛采用的软件生存期模型。
核心思想:按工序将问题化简,采用 结构化的分析与设计方法将功能的实 现与设计分开,便于分工协作。
将软件生命周期划分为六个基本活动, 并且规定了它们自上而下、相互衔接 的固定次序,如同瀑布流水,逐级下 落。
软件工程方法学包括三要素:方法、工具和过程。
软件工程方法为软件开发提供了 “如何做” 的技术;软件工程工具为 软件开发提供了自动的或半自动的软件支撑环境;软件工程过程是为 了获得高质量的软件所需要完成的一系列任务框架,它规定了完成各 项任务的工作步骤。
1.3 软件工程方法
1.3.1 结构化方法 结构化方法是传统的软件开发方法,面向对象开发方法出现前应用最广泛。 结构化方法的基本思想:用系统工程的思想和工程化的方法,按用户至上
此方法学可以大大提高软件开发的生产率和成功率。
《软件工程概念》课件
时间与资源限制
软件开发项目通常有严格的时间和资源限制,如何 在有限的时间内高效地完成项目是一个挑战。
沟通障碍
在软件开发过程中,团队成员之间的沟通至 关重要,如何确保信息传递的准确性和及时 性是一个挑战。
技术挑战
技术选型
在软件开发过程中,选择合适的技术和工具至关重要,如何根据项 目需求选择合适的技术是一个挑战。
版本控制工具
总结词
用于管理软件代码版本的工具。
详细描述
版本控制工具可以记录每次代码的修改,方便团队成员协同工作,避免代码冲突。常见的版本控制工 具有Git、SVN等。
测试工具
总结词
用于ቤተ መጻሕፍቲ ባይዱ动化测试和性能测试的工具。
详细描述
测试工具可以帮助开发人员快速进行单元测试、集成测试和性能测试,提高软件质量。 常见的测试工具有JUnit、Selenium等。
技术更新迅速
随着技术的不断发展,如何跟上技术更新的步伐,保持技术的领先 地位是一个挑战。
技术实现难度
某些技术实现难度较大,需要团队具备较高的技术能力和经验。
人员管理挑战
01
团队协作
在软件开发过程中,团队协作至 关重要,如何提高团队凝聚力, 促进团队合作是一个挑战。
02
人员能力提升
03
人员激励与留任
详细描述
安全性高、稳定性强、可扩展性好
企业级软件通常用于处理企业核心业务,因此对安全性、 稳定性和可扩展性要求较高。在开发过程中,需要充分考 虑这些因素,采用成熟的技术和架构,确保软件能够长期 稳定运行,并能够根据企业需求进行扩展。
谢谢
THANKS
部署过程中需要考虑软件的安装、配置和升级等方面的问题。
维护过程中需要对软件进行故障排除、性能优化和功能扩展等方面的 处理。
软件工程―软件与软件工程介绍课件
软件需求
差距
软件技术
成本%
硬件
软件
时间 软件技术的发展落后于需求
1950 1970 1985 1995 年份 硬、软件成本比例的变化
第一章 软件与软件工程
软件的分类
1、按软件的功能进行划分
系应支 统用撑 软软软 件件件
第一章 软件与软件工程
软件的分类
系统软件
操作系统 数据库管理系统 设备驱动程序 通信处理程序等
软件工程管理
软件开发方法学 软件工具 软件工程环境
软件工程管理学 软件经济学
软件工程学的范畴
第一章 软件与软件工程
第四节 软件工程的产生及发展
3、软件的演变(即从传统软件开发到现代软件开发)
程序
软件
传统软件开发
软件产品 现代软件开发
240
80 0.00016
1975
营业额增长曲线 1989
2000
第一章 软件与软件工程
第二节 软件生存期
(6) 运行/维护
改正性维护 运行中发现了软件中的错 误需要修正 适应性维护 为了适应变化了的软件工 作环境,需做适当变更 完善性维护 为了增强软件的功能需做 变更
第一章 软件与软件工程
第二节 软件生存期
第一章 软件与软件工程
第三节 软件危机
所谓软件危机,就是指在软件开发和软件维 护过程中所存在的一系列严重问题。
第一章 软件与软件工程
软件的分类
支撑软件
文本系统 支持需求分析、设计、实现、 测试和支持管理的软件
第一章 软件与软件工程
软件的分类
应用软件
商业数据处理软件 工程与科学计算软件 计算机辅助设计/制造软件 系统仿真软件 智能产品嵌入软件 医疗、制药软件 事务管理、办公自动化软件 计算机辅助教学软件
第1章-软件工程概述PPT课件
第1章 概述
教学目标
● 了解软件工程的产生和发展 ● 掌握软件工程的概念、内容和原理 ● 熟悉软件生存周期及阶段任务 ● 掌握软件开发模型
案例1-1 IBM 公司研发初期的OS/360,共约100万条指令,
花费了5000个人年;经费达数亿美元,而结果却令人沮丧,错误 多达2000 个以上,系统根本无法正常运行。OS/360 系统的负责 人Brooks 这样描述开发过程的困难和混乱:“像巨兽在泥潭中 垂死挣扎,挣扎得越猛,泥浆沾得越多陷入更深,最后没有一个 野兽能够逃脱淹没在泥潭中的命运” 。
自定 义软
表1-1 软件技术各发展阶段的典型技术
程序 系统 阶段
多 用户
实 时处 理
数 据库
软
软件 工程 阶段
分布 式系 统 嵌入 “智 能” 低成 本硬
创新完 善软 件工程 阶段
强大桌 面系统 面向对 象技术 专家系 统、神 经网络、 8并行计
1.1 软件工程的发展
“软件工程”的发展经历了4个重要阶段: 1.传统软件工程
质量难以保证,甚至在开发过程中就被迫中断。 (3) 软件开发管理差,对成本和进度的估计时常不准确。 (4) 系统时常出现无法维护、升级或更新现象。 (5) 软件开发没有标准、完整、统一规范的文档资料。计算机软件不
仅只是程序,还应当有一整套规范的文档资料和售后服务。 (6) 软件开发效率低,无法满足计算机应用迅速发展与提高的实际需
软件工程原理 软件工程过程
软件工程技术 软件工程方法
软件工程模型 软件工程管理 软件工程度量 软件工程环境 软件工程应用
软件目标、原则、学科基础 开发过程、运作过程、维护过程,如获取、供应、管理、开 发、运作、维护、支持、裁减 开发技术、管理技术、度量技术、维护技术、应用技术
《软件工程全》课件
软件质量的标准
软件质量的标准包括ISO 9126、 McCall等,它们从不同角度对软 件质量进行了描述和评价。
单元测试
单元测试的概念
单元测试是对软件中的最小可测试单 元进行检查和验证。在面向对象编程 中,单元测试通常是对类的方法进行 测试。
单元测试的方法
单元测试的方法包括白盒测试和黑盒 测试。白盒测试需要了解内部实现细 节,而黑盒测试只需要关注输入和输 出结果。
软件工程的定义
详细描述
软件工程是一门研究软件开发和维护的学科,它采用工程化的方法和技术,将 系统化的开发过程、先进的开发技术和高效的开发管理结合起来,以高效地开 发高质量的软件产品。
软件工程的历史与发展
总结词:软件工程的历史与发展
详细描述:软件工程的历史可以追溯到20世纪60年代 。最初,软件开发主要依靠程序员的手动编程,随着软 件规模的扩大和复杂性的增加,软件开发过程中的问题 逐渐显现。为了解决这些问题,软件工程的概念和方法 逐渐形成和发展。随着时间的推移,软件工程不断演进 和完善,形成了许多经典的软件开发模型和方法论,如 瀑布模型、螺旋模型、迭代模型等。同时,随着技术的 不断发展,软件工程也在不断引入新的技术和方法,如 敏捷开发、持续集成和持续交付等。
系统测试与验收测试
系统测试的概念
系统测试是对整个系统的功能、性能 和其他方面进行全面的测试,以确保 系统能够满足用户需求。
验收测试的概念
验收测试是用户对系统的最终验收过 程,其目的是确认系统是否符合合同 或需求规格说明中的要求。
PART 06
软件维护与演化
软件维护的定义与分类
定义
软件维护是在软件运行过程中,为了改正错误、满足新的需求、改进性能等目的,对软件进行的修改和调整。
软件质量的标准包括ISO 9126、 McCall等,它们从不同角度对软 件质量进行了描述和评价。
单元测试
单元测试的概念
单元测试是对软件中的最小可测试单 元进行检查和验证。在面向对象编程 中,单元测试通常是对类的方法进行 测试。
单元测试的方法
单元测试的方法包括白盒测试和黑盒 测试。白盒测试需要了解内部实现细 节,而黑盒测试只需要关注输入和输 出结果。
软件工程的定义
详细描述
软件工程是一门研究软件开发和维护的学科,它采用工程化的方法和技术,将 系统化的开发过程、先进的开发技术和高效的开发管理结合起来,以高效地开 发高质量的软件产品。
软件工程的历史与发展
总结词:软件工程的历史与发展
详细描述:软件工程的历史可以追溯到20世纪60年代 。最初,软件开发主要依靠程序员的手动编程,随着软 件规模的扩大和复杂性的增加,软件开发过程中的问题 逐渐显现。为了解决这些问题,软件工程的概念和方法 逐渐形成和发展。随着时间的推移,软件工程不断演进 和完善,形成了许多经典的软件开发模型和方法论,如 瀑布模型、螺旋模型、迭代模型等。同时,随着技术的 不断发展,软件工程也在不断引入新的技术和方法,如 敏捷开发、持续集成和持续交付等。
系统测试与验收测试
系统测试的概念
系统测试是对整个系统的功能、性能 和其他方面进行全面的测试,以确保 系统能够满足用户需求。
验收测试的概念
验收测试是用户对系统的最终验收过 程,其目的是确认系统是否符合合同 或需求规格说明中的要求。
PART 06
软件维护与演化
软件维护的定义与分类
定义
软件维护是在软件运行过程中,为了改正错误、满足新的需求、改进性能等目的,对软件进行的修改和调整。
软件工程ppt课件完整版
修改与测试
对软件进行修改,并进行测试以确保 修改的正确性。
版本管理与发布
对修改后的软件进行版本管理,并发 布新版本。
软件演化策略与方法
增量式演化
逐步增加新功能或修改现有功能。
迭代式演化
通过不断迭代改进软件质量。
软件演化策略与方法
组件化演化
将软件拆分为独立组件进行演化。
重构
改进软件内部结构而不改变其外部行为。
处理团队冲突,化解矛盾,促进团队合作
版本控制与文档管理
使用版本控制工具(如Git) 管理项目代码和文档
建立完善的文档管理体系, 包括需求文档、设计文档、 测试文档等
制定版本控制规范,包括 分支管理、代码提交和合 并流程等
定期评审和更新文档,确 保文档与项目实际进展保 持一致
07 软件维护与演化
软件维护类型及流程
版本迁移与数据迁移
将旧版本的数据迁移到新版本,确保数据的 完整性和一致性。
持续集成与持续交付
持续集成
频繁地将代码集成到主干, 并进行自动化测试以快速发 现问题。
持续交付
在持续集成的基础上,将软 件以可发布的状态交付给用 户,以便用户能够快速获得 新功能或修复问题。
自动化测试与部署
监控与反馈
利用自动化工具进行测试和 部署,提高开发效率和质量。
软件工程的发展
软件工程经历了从程序设计、软件 工程方法、软件工程过程到软件工 程学科的逐步成熟过程。
软件工程目标与原则
软件工程的目标
在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护 性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求 的软件产品。
软件工程的原则
软件工程概述PPT课件
南京理工大学计算机学院
18
前一页 休息
第1章 软件工程概念
软件的神话——管理者的神话
➢ 神话:如果我们已落后于计划,可以增加更 多的程序员来赶上进度。
➢ 事实:软件开发并非像制造一样是一个机械 过程。用Brooks的话来说,“给一个已经延 迟的软件项目增加人手只会使其更加延迟”。 看起来,这句话与人的直觉正好相反。但实 际上,增加新人,原来正在工作的开发者必 须花时间来培训新人,这样就减少了他们花 在项目开发上的时间。人手可以增加,但只 能在计划周密、协调良好的情况下。
2.软件的生产于硬件不同。
3.在软件的运行和使用期间,没有硬件那样的 机械磨损,老化问题。
失
效 磨合
率
调整
磨损 用坏
硬件失效曲线
时间
失 效 率
实际曲线
软件失效曲线
理想曲线 时间
南京理工大学计算机学院
5
前一页 休息
第1章 软件工程概念
软件的特点
4.软件的开发和运行常常受到计算机系统的限 制,对计算机系统有着不同程度的依赖。
南京理工大学计算机学院
17
前一页 休息
第1章 软件工程概念
软件的神话——管理者的神话
➢ 神话:我们已经有了很多很好的软件开发工具, 而且,我们为它们买了最新的计算机。
➢ 事实:为了使用最新型号的计算机、工作站和 PC机去开发高质量的软件,我们已经投入了 太多的费用。实际上,计算机辅助软件工程 (CASE)工具比起硬件而言,对于获得高质 量和高生产率更为重要,但大多数软件开发者 并未使用它们。
13
前一页 休息
第1章 软件工程概念
什么是软件危机
定义:软件危机是计算机软件在它的开发和 维护过程中所遇到的一系列严重问题。
软件工程课件(全)ppt
第1章 1.2软件工程
1.2.1 软件工程的定义和目标
为了克服软件危机,1968年10月在北大西洋公约组织(NATO)召开的计 算机科学会议上,Fritz Bauer首次提出“软件工程”的概念。
按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一 条主要出路。
软件工程的主要思想是强调软件开发过程中应用工程化原则的重要性。软 件工程的目标是实现软件的优质高产。软件工程的目的是在经费的预算范围内, 按期交付出用户满意的、质量合格的软件产品。
第1章 1.1软件与软件危机
1.1.3 软件危机
2. 软件危机产生的原因
(1)忽视软件开发前期的调研和需求分析工作。 (2)缺乏软件开发的经验和有关软件开发数据的积累,使得开发计划很难制定。 (3)开发过程缺乏统一的、规范化的方法论指导。 (4)忽视与用户、开发组成员间的及时有效的沟通。 (5)文档资料不规范或不准确。导致开发者失去工作的基础,管理者失去管理的依据。 (6)没有完善的质量保证体系。
第1章 1.1软件与软件危机
1.1.1 软件的定义及其特点
2.软件具有下列特点:
比硬件发展慢
是逻辑产品
软件
生产与硬件不同 不会磨损和老化
成本高、风险高
手工开发为主
依赖硬件
第1章 1.1软件与软件危机
1.1.2 软件的发展及其分类
1.软件技术的发展
程序设计
程序系统
软件工程
第1章 1.1软件与软件危机
第1章 1.1软件与软件危机
1.1.3 软件危机
3. 软件危机解决途径
要解决软件危机问题,需要采取以下措施: (1)使用好的软件开发技术和方法。 (2)使用好的软件开发工具,提高软件生产率。 (3)有良好的组织、严密的管理,各方面人员相互配合共同完成任务。 为了解决软件危机,既要有技术措施(好的方法和工具),也要有组织管理措施。软件工 程正是从技术和管理两方面来研究如何更好地开发和维护计算机软件的。
软件工程完整PPT课件
2021/3/9
10
④局部化。要求在一个物理模块内集中逻辑上相互关联 的计算资源,保证模块间具有松散的耦合关系,模块 内部有较强的内聚性,这有助于控制解的复杂性。
⑤确定性。软件开发过程中所有概念的表达应是确定的、 无歧义且规范的。
⑥一致性。包括程序、数据和文档的整个软件系统的各 模块应使用已知的概念,内外部接口应保持一致,系 统规格说明与系统行为应保持一致。
2021/3/9
14
2. 需求分析方法 常见的需求分析方法有:
①结构化分析方法。 ②面向对象的分析方法。
2021/3/9
15
2.2结构化分析方法
(1)关于结构化分析方法 结构化分析方法的实质是着眼于数据流,自顶向下,逐层分解,
建立系统的处理流程,以数据流图和数据字典为主要工具,建 立系统的逻辑模型。 结构化分析的步骤如下:
3. 信息隐蔽 信息隐蔽使得一个模块内包含的信息(过程和数据)
对于不需要这些信息的模块来说,是不能访问 的。
2021/3/9
24
4. 模块独立性 每个模块完成一个相对独立的特定子功能,并且 和其他模块之间的接口很简单。
模块的独立程度可以由两个定性标准来衡量,这 两个标准分别称为耦合性和内聚性。藕合衡量不 同模块彼此间互相依赖(连接)的紧密程度;内 聚衡量一个模块内部各个元素彼此间结合的紧密 程度。
⑦完备性。软件系统不丢失任何重要成分,完全实现系 统所需的功能。
⑧可验证性。开发大型软件系统需要对系统自顶向下, 逐层分解。系统分解应遵循容易检查、测评、评审的 原则,以确保系统的正确性。
2021/3/9
11
1.5软件开发工具与软件开发环境
1. 软件开发工具 软件开发工具是指可以用来帮助开发,测试、分 析、维护其他计算机程序及其文档资料,实现软 件生产过程自动化的一类程序。 软件工具主要包括需求分析工具、设计工具、编 码工具、确认工具、维护工具等。
软件工程(全套课件)
软件工程(全套课件 )
contents
目录
• 软件工程概述 • 软件开发过程模型 • 需求分析与管理 • 系统设计与实现 • 测试与质量保证 • 项目管理与团队协作 • 软件维护与演化
01
软件工程概述
软件工程定义与发展
软件工程的定义
软件工程是一种系统性的、规范化的、可量化的方法来开发和维护软件,它涉及 到软件开发的全过程,包括需求分析、设计、编码、测试和维护等各个阶段。
需求、成本估算等
设立里程碑和关键任务,以便 监控项目进展
定期评估项目状态,与项目干 系人沟通,确保项目按计划进 行
及时调整项目计划,以应对变 更和不可预见的风险
风险管理策略制定
01 识别项目潜在的风险,包括技术风险、市 场风险、资源风险等
02 评估风险的概率和影响程度,确定风险优 先级
03
制定相应的风险应对策略和措施,如风险 规避、减轻、转移和接受等
软件工程知识体系的核心内容
软件工程知识体系的核心内容包括软件开发过程模型、软件开发方法、软件需 求工程、软件设计、软件测试与维护等。这些内容相互关联、相互支持,构成 了完整的软件工程知识体系框架。
02
软件开发过程模型
瀑布模型
瀑布模型是一种线性的软件开发过程模型,它 按照一系列有序的、相互依赖的阶段进行开发 ,每个阶段都有明确的输入和输出。
版本控制与文档管理
01
使用版本控制工具(如Git)管理 项目代码和文档,确保数据的一 致性和可追溯性
02
制定版本控制规范,包括分支管 理、提交信息、合并策略等
பைடு நூலகம்
定期备份项目数据,以防数据丢 失或损坏
03
编写详细的开发文档和用户手册 ,以便团队成员和最终用户了解
contents
目录
• 软件工程概述 • 软件开发过程模型 • 需求分析与管理 • 系统设计与实现 • 测试与质量保证 • 项目管理与团队协作 • 软件维护与演化
01
软件工程概述
软件工程定义与发展
软件工程的定义
软件工程是一种系统性的、规范化的、可量化的方法来开发和维护软件,它涉及 到软件开发的全过程,包括需求分析、设计、编码、测试和维护等各个阶段。
需求、成本估算等
设立里程碑和关键任务,以便 监控项目进展
定期评估项目状态,与项目干 系人沟通,确保项目按计划进 行
及时调整项目计划,以应对变 更和不可预见的风险
风险管理策略制定
01 识别项目潜在的风险,包括技术风险、市 场风险、资源风险等
02 评估风险的概率和影响程度,确定风险优 先级
03
制定相应的风险应对策略和措施,如风险 规避、减轻、转移和接受等
软件工程知识体系的核心内容
软件工程知识体系的核心内容包括软件开发过程模型、软件开发方法、软件需 求工程、软件设计、软件测试与维护等。这些内容相互关联、相互支持,构成 了完整的软件工程知识体系框架。
02
软件开发过程模型
瀑布模型
瀑布模型是一种线性的软件开发过程模型,它 按照一系列有序的、相互依赖的阶段进行开发 ,每个阶段都有明确的输入和输出。
版本控制与文档管理
01
使用版本控制工具(如Git)管理 项目代码和文档,确保数据的一 致性和可追溯性
02
制定版本控制规范,包括分支管 理、提交信息、合并策略等
பைடு நூலகம்
定期备份项目数据,以防数据丢 失或损坏
03
编写详细的开发文档和用户手册 ,以便团队成员和最终用户了解
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 概念
1.4 软件生存期
软件也有一个孕育、诞生、成长、成熟和衰亡的生 存过程,我们称这个过程为软件生命周期或软件 生存期。
软件生存期由软件定义、软件开发和运行维护3个 时期组成,每个时期又可划分为若干个阶段。
1.4 软件生存期
• 软件定义时期
主要任务是解决“做什么”的问题,即确定工程的 总目标和可行性;导出实现工程目标应使用的策 略及系统必须完成的功能;估计完成工程需要的 资源和成本;制订工程进度表。
1.2 软件危机与软件工程
具体来说,软件危机主要有以下一些典型表现:
➢对软件开发成本和进度的估计常常很不准确。 ➢用户对“已完成的”软件系统不满意的现象经常发生。 ➢软件产品的质量往往靠不住。 ➢软件常常是不可维护的。 ➢软件通常没有适当的文档资料。 ➢软件成本在计算机系统总成本中所占的比例逐年上升。 ➢软件开发生产率提高的速度,既跟不上硬件的发展速度, 也远远跟不上计算机应用迅速普及深入的趋势。
• 软件的特性
(1) 形态特性: 软件是无形的、不可见的逻辑实体。 度量常规产品的几何尺寸、物理性质和化学成分 对它却是毫无意义的。
(2) 智能特性:软件是复杂的智力产品,它的开发 凝聚了人们的大量脑力劳动,它本身也体现了知 识实践经验和人类的智慧,具有一定的智能。它 可以帮助我们解决复杂的计算、分析、判断和决 策问题。
1.2 软件危机与软件工程
典型例子:美国IBM公司在1963年至1966年开发 的IBM 360机的操作系统。
这个项目的负责人F.D.Brooks事后总结了他在组 织开发过程中的沉痛教训时说:
……正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣 扎,陷得越深。最后无法逃脱灭顶的灾难,……程序设计工 作正像这样一个泥潭,……一批批程序员被迫在泥潭中拼命 挣扎,……谁也没有料到竟会陷入这样的困境……
什么是软件?
1.1 软件的概念、特性和分类
•软件是计算机系统中与硬件相互依存的另一部分,
它是包括程序、数据及相关文档的完整集合。
•程序是按事先设计的功能和性能要求执行的指令序
列。
•数据是使程序能正常操纵信息的数据结构。 •文档是与程序开发,维护和使用有关的图文材料。
1.1 软件的概念、特性和分类
第1章 软件与软件工程的概念
• 软件的概念、特性和分类 • 软件危机与软件工程 • 软件工程的目标 • 软件生存期 • 软件生存期模型 • 软件工程知识体系及知识域
1.1 软件的概念、特性和分类
• 软件的作用
具有产品和产品生产载体的双重作用。
(1) 作为产品,软件显示了由计算机硬件体现的计 算能力,扮演着信息转换的角色:产生、管理、 查询、修改、显示或者传递各种不同的信息。
1.2 软件危机与软件工程
除了软件本身的特点,软件危机发生的主要原因有:
(1) 缺乏软件开发的经验和有关软件开发数据的积累,使得开发 工作的计划很难制定。
(2) 软件人员与用户的交流存在障碍,使得获取的需求不充分或 存在错误 。
(3) 软件开发过程不规范。如,没有真正了解用户的需求就开始 编程序。
(1) 改正性维护,也就是诊断和改正在使用过程中 发现的软件错误;
(2) 适应性维护,即修改软件以适应环境的变化; (3) 完善性维护,即根据用户的要求改进或扩充软
件,使它更完善; (4) 预防性维护,即修改软件为将来的维护活动预
先做准备。
ቤተ መጻሕፍቲ ባይዱ
1.4 软件生存期
• 开发过程中的典型文档
① 软件需求规格说明书:描述将要开发的软件做什 么。
• 在NATO会议上,Fritz Bauer对软件工程的定义是: “软件工程就是为了经济地获得可靠的且能在实 际机器上有效地运行的软件,而建立和使用完善 的工程原理。”
1.2 软件危机与软件工程
• 1993年IEEE给出的定义: “软件工程是:① 把系统的、规范的、可 度量的途径应用于软件开发、运行和维护过 程,也就是把工程应用于软件;② 研究① 中提到的途径。”。
严密、各类人员协同配合、共同完成的工程项目。 • 推广和使用在实践中总结出来的开发软件的成功
技术、方法和工具。 • 按工程化的原则和方法组织软件开发工作。
1.2 软件危机与软件工程
软件工程的概念
• 为了克服软件危机,1968年10月在北大西洋公约 组织(NATO)召开的计算机科学会议上,Fritz Bauer首次提出“软件工程”的概念,试图将工 程化方法应用于软件开发。
1.2 软件危机与软件工程
• 软件工程是指导计算机软件开发和维护的一门 工程学科。
• 采用工程的概念、原理、技术和方法来开发和 维护软件,把经过时间考验而证明正确的管理 方法和当前能够得到的最好技术结合起来,以 经济地开发出高质量的软件并有效地维护它, 这就是软件工程。
1.3 软件工程的目标
• 软件工程的目标是运用先进的软件开发技术和管 理方法来提高软件的质量和生产率,也就是要以 较短的周期、较低的成本生产出高质量的软件产 品,并最终实现软件的工业化生产。
瀑布模型
• 瀑布模型的优点
➢ 可强迫开发人员采用规范化的方法。 ➢ 严格地规定了每个阶段必须提交的文档。 ➢ 要求每个阶段交出的所有产品都必须是经过验证
的。
瀑布模型
• 瀑布模型的缺点
➢ 由于瀑布模型几乎完全依赖于书面的规格说明, 很可能导致最终开发出的软件产品不能真正满足 用户的需要。如果需求规格说明与用户需求之间 有差异,就会发生这种情况。
本阶段要回答的关键问题是“到底要解决什么问题?在成 本和时间的限制条件下能否解决问题?是否值得做?”
(2) 需求分析
本阶段要回答的关键问题是“目标系统应当做什么?”
(3) 软件设计
设计是软件工程的技术核心。本阶段要回答的关键问题是 “如何实现目标系统?”
1.4 软件生存期
• 各个阶段所要完成的基本任务
1.1 软件的概念、特性和分类
• 软件的分类
按照软件的作用,一般可以将软件做如下 分类。
(1) 系统软件 (2) 应用软件 (3) 支撑软件 (4) 可复用软件
1.2 软件危机与软件工程
• 软件危机
软件危机暴发于上个世纪六十年代末。 主要表现为:软件的发展速度远远滞后于硬件的
发展速度,不能满足社会日益增长的软件需求。 软件开发周期长、成本高、质量差、维护困难。
② 项目计划:描述将要完成的任务及其顺序,并估 计所需要的时间及工作量。
③ 软件测试计划:描述如何测试软件,使之确保软 件应实现规定的功能,并达到预期的性能。
④ 软件设计说明书:描述软件的结构,包括概要设 计及详细设计。
⑤ 用户手册:描述如何使用软件。
1.4 软件生存期
• 各个阶段所要完成的基本任务 (1) 问题定义与可行性研究
• 瀑布模型的特点
➢
① 瀑布模型在编码之前设置了系统分析和系统设计 的各个阶段,分析与设计阶段的基本任务规定, 在这两个阶段主要考虑目标系统的逻辑模型,不 涉及软件的物理实现。
② 清楚地区分逻辑设计与物理设计,尽可能推迟程 序的物理实现,是按照瀑布模型开发软件的一条 重要的指导思想。
瀑布模型
• 瀑布模型的特点
(4) 程序编码和单元测试
本阶段要解决的问题是“正确地实现已做的设计”, 即“如何编写正确的、可维护的程序代码?”
(5) 集成测试和系统测试
集成测试的任务是将已测试过的模块按设计规定的 顺序组装起来,在组装的过程中检查程序连接中的 问题。 系统测试的任务是根据需求规格说明的要求,对必 须实现的各项需求,逐项进行确认,判定已开发的 软件是否符合用户需求,能否交付用户使用。
(8) 维护特性:软件投入使用以后需要进行维护, 但这种维护与传统产业产品的维护概念有着很大 差别。
1.1 软件的概念、特性和分类
(9) 废弃特性: 与硬件不同,软件并不是由于被“用 坏”而被废弃的 。
(10) 应用特性:软件的应用极为广泛,如今它已渗 入国民经济和国防的各个领域,现已成为信息产 业、先进制造业和现代服务业的核心,占据了无 可取代的地位。
(2) 作为产品生产的载体,软件提供了计算机控制 (操作系统)、信息通信(网络),以及应用 程序开发和控制的基础平台(软件工具和环 境)。
1.1 软件的概念、特性和分类
• 软件的概念
虽然软件对于现代人并不陌生,但很多人对于软 件的理解并不准确,“软件就是程序,软件开发 就是编程序”的这种错误观点仍然存在。
1.4 软件生存期
• 各个阶段所要完成的基本任务
(6) 软件运行和维护
已交付的软件投入正式使用,便进入运行阶 段。这一阶段可能持续若干年。软件在运 行中可能由于多方面的原因,需要对它进 行修改。
1.5 软件生存期模型
• 瀑布模型 • 快速原型模型 • 增量模型 • 螺旋模型 • 喷泉模型 • 统一过程
此产生的规格说明文档能够正确地描述用户需求。 (3)软件产品的开发基本上是按线性顺序进行。 (4)因为规格说明文档正确地描述了用户需求,因此,
在开发过程的后续阶段不会因为发现规格说明文 档的错误而进行较大的返工。
快速原型模型
• 快速原型模型的优点
(5)开发人员通过建立原型系统已经学到了许多东西, 因此,在设计和编码阶段发生错误的可能性也比 较小,这自然减少了在后续阶段需要改正前面阶 段所犯错误的可能性。
通常又分为3个阶段:问题定义、可行性研究和需 求分析。
1.4 软件生存期
• 软件开发时期
主要任务是解决“如何做”的问题,即具体设计和 实现在前一个时期定义的软件。
由概要设计、详细设计、编码和测试4个阶段组成。
1.4 软件生存期
• 软件运行维护时期
主要任务是使软件持久地满足用户的需要,通常 有4类维护活动:
1.1 软件的概念、特性和分类