第1章 软件工程
《软件工程实用教程》第1章软件工程引论
第1章 軟體工程引論
本章學習內容: 1.掌握軟體的定義與特點 2.軟體危機以及軟體危機產生的原因 3.掌握軟體工程的定義、目標和原則 4.瞭解軟體工程的研究內容與對象 5.理解學習軟體工程的意義
第1章 軟體工程引論
1. 1 軟體及軟體危機
1.1.1 軟體及其特性 1.軟體 :是由電腦程式的發展而形成的一 個概念。它是與電腦系統操作有關的程 式、規程、規則及其文檔和數據的統稱。
第1章 軟體工程引論
1. 3 軟體工程的基本原則
1 .採用分階段的生命週期計畫,以實現對專 案的嚴格管理 2.堅持進行階段評審,以確保軟體產品品質 3 .實行嚴格的產品控制,以適應軟體規格的 變更 4.採用現代程式設計技術 5.軟體結果應能清楚地審查 6.開發小組人員應該少而精 7.承認不斷改進軟體工程實踐的必要性
第1章 軟體工程引論
(2)軟體工具
工具類別
專案管理工具 軟體分析工具
舉例
專案規劃編輯器、用戶需求跟蹤器、 軟體版本管理器 數據字典管理器、分析建模編輯器
軟體設計工具
程式處理工具 軟體測試工具
用戶介面設計器、軟體結構設計器、 代碼框架生成器 程式編輯器、程式編譯器、程式解釋 器、程式分析器 測試數據生成器、根源程式調試器
第1章 軟體工程引論
2.軟體工程的目標 軟體開發成本較低; 軟體功能能夠滿足用戶的需求; 軟體性能較好; 軟體可靠性高; 軟體易於使用、維護和移植; 能按時完成開發任務,並及時交付使用。
第1章 軟體工程引論
3.軟體工程的研究內容與對象
第1章 軟體工程引論
4.軟體工程技術 (1)軟體工程方法 結構化方法 面向數據結構方法 原型化方法 面向對象的方法 形式化方法等
第一章软件工程学概述选择题
第一章软件工程学概述选择题1.软件是一种( )产品。
A.有形 B.逻辑C.物质 D.消耗2.软件工程学的目的应该是最终解决软件生产的( )问题。
A.提高软件的开发效率 B.使软件生产工程化C.消除软件的生产危机 D.加强软件的质量保证3.与计算机科学的理论研究不同,软件工程是一门( )学科。
A.理论性 B.工程性 C.原理性 D.心理性4.软件危机的主要原因有( )。
①软件本身的特点②用户使用不当③硬件可靠性差· ④对软件的错误认识⑤缺乏好的开发方法和手段A.③④ B.①②④C.①⑤ D.①③5.在计算机软件开发和维护中所产生的一系列严重的问题通常称为软件危机,这些问题中相对次要的因素是( )。
A.文档质量 B.开发效率C.软件功能 D.软件性能6.软件工程与计算机科学性质不同,软件工程着重于( )。
A.原理探讨 B.理论研究C.建造软件系统 D.原理的理论7.软件工程学科出现的主要原因是( )。
A.计算机的发展B.其他工程科学的影响C.软件危机的出现D. 程序设计方法学的影响8.软件工程方法学的研究内容包含软件开发技术和软件工程管理两个方面,其期望达到的最终目标是( )。
A.软件开发工程化B.消除软件危机C.实现软件可重用D.程序设计自动化9.由于软件生产的复杂性和高成本性,使大型软件的生存出现危机,软件危机的主要表现包括了下述( )方面。
①生产成本过高②需求增长难以满足③进度难以控制④质量难以保证A.①② B.②③ c.④ D.全部10.软件工程方法学中的软件工程管理是其中的一个重要内容,它包括软件管理学和软件工程经济学,它要达到的目标是( )。
A.管理开发人员,以开发良好的软件B.采用先进的软件开发工具,开发优秀的软件c.消除软件危机,达到软件生产的规模效益D.以基本的社会经济效益为基础,工程化生产软件11.软件工程方法学的目的是使软件生产规范化和工程化,而软件工程方法得以实施的主要保证是( )。
第1章软件工程和软件测试概述
1.1软件工程概述- 软件工程
• 1968年北大西洋公约组织的计算机科学家在联邦 德国召开国际会议,讨论软件危机问题,在这次 会议上正式提出并使用了“软件工程”这个名词。 • 软件工程是指导计算机软件开发和维护的一门工 程学科,它是采用工程的概念、原理、技术和方 法来开发与维护软件,把经过时间考验而证明正 确的管理技术和当前能够得到的最好的技术方法 结合起来,以经济地开发出高质量的软件并有效 地进行维护。
• 实际问题的复杂性 实际问题的复杂性 • 程序逻辑结构的复杂性 程序逻辑结构的复杂性
5
1.1软件工程概述- 软件的分类
• 按软件的功能进行划分: 按软件的功能进行划分:
– 系统软件
• • • • • • • • • 操作系统 数据库管理系统 设备驱动程序 通信处理程序等
– 支撑软件
文本编辑程序 文件格式化程序 磁盘向磁带向数据传输的程序 程序库系统 支持需求分析、设计、实现、 支持需求分析、设计、实现、测试和支持管理的软件
• 软件是计算机系统中与硬件相互依存的另一部
它是包括程序 及其相关文档 分,它是包括程序,数据及其相关文档的完整集 它是包括程序,数据及其相关文档的完整集 其中: 合。其中:
– 程序 程序(instructions)是按事先设计的功能和性能要求 是按事先设计的功能和性能要求 执行的指令序列 – 数据 数据(data)是使程序能正常操纵信息的数据结构 是使程序能正常操纵信息的数据结构 – 文档 文档(documents)是与程序开发,维护和使用有关的 是与程序开发, 是与程序开发 图文材料
– 问题定义 – 可行性研究 – 需求分析
18
1.1软件工程概述-软件开发时期
• 开发时期具体设计和实现在前一个时期定 义的软件,它通常由下述4个阶段组成
软件工程第01章
教学目的:1. 了解软件、软件危机等概念2. 掌握软件工程的定义、原理、目标和原则教学重点:软件工程的定义、原理、目标和原则教学难点:软件工程的目标和原则第一章软件与软件工程1.1 软件(Software)1.1.1 软件与软件的组成程序设计语言三种类型:1.机器语言、汇编语言:依赖于机器,面向机器2.高级语言:独立于机器,面向过程或面向对象3.面向问题语言:独立于机器,非过程式语言(4GL)文档(document)—一种数据媒体和其上所记录的数据。
文档记录软件开发活动和阶段成果,具有永久性,可供人或机器阅读。
文档可用于专业人员和用户之间的通信和交流;软件开发过程的管理;运行阶段的维护。
1. 软件的特点软件是逻辑产品,硬件是物理产品。
特点:(1)软件开发更依赖于开发人员的业务素质、智力、人员的组织、合作和管理。
软件开发、设计几乎都是从头开始,成本和进度很难估计。
(2)软件存在潜伏错误,硬件错误一般能排除。
(3)软件开发成功后,只需对原版进行复制。
(4)软件在使用过程中维护复杂:1)纠错性维护—改正运行期间发现的潜伏错误;2)完善性维护—提高或完善软件的性能;3)适应性维护—修改软件,以适应软硬件环境的变化;4)预防性维护—改进软件未来的可维护性和可靠性。
(5)软件不会磨损和老化。
2. 软件的发展第一阶段——20世纪60年代中期以前,软件开发处于个体化生产状态。
在这一阶段中,软件还没有系统化的开发方法。
目标主要集中在如何提高时空效率上。
第二阶段——从20世纪60年代中期到70年代末期。
软件开发已进入了作坊式生产方式,即出现了“软件车间”。
软件开发开始形成产品。
到20世纪60年代末,“软件危机”变得十分严重。
第三阶段——从20世纪70年代中期到20世纪80年代末期。
软件开发进入了产业化生产,即出现了众多大型的“软件公司”。
在这一阶段,软件开发开始采用了“工程”的方法,软件产品急剧增加,质量也有了很大的提高。
第1章-软件工程学概述1-1
• 软件用后不磨损
• 随着时间的推移,应用程序
的某些部分可能会变得不再 相关(例如,需求改变时), 而需要修改
• 但是,没有备件的概念
1.1、软件的定义
硬件和软件故障率曲线
由于副作用造成 故障率的提高 原来的软件已经面目全非了!
故障率
磨损后
生命初期
修改
硬件的故障率曲线 实际曲线
软件故障率的理想曲线
1.2、软件危机
软件危机案例
3 . 软件产品的质量靠不住 [案例]:
ARIANE 5 火箭 1996 年6 月,耗资70 亿美元,发射
本章内容
1.1、软件的定义 1.2、软件危机 1.3、软件工程 1.4、软件生存期 1.5、软件过程
1.2、软件危机
软件危机
Crisis!
“软件危机”(Software crisis) 的出现是由于软件的规模越来越大,复杂 度不断增加,软件需求量增大。而软件开 发过程是一种高密集度的脑力劳动,软件 开发的模式及技术不能适应软件发展的需 要。致使大量质量低劣的软件涌向市场, 有的花费大量人力财力,而在开发过程中 就夭折。
时间
1.1、软件的定义
硬件和软件故障率曲线的比较
软件不会用坏(wear out).
软件会退化( deteriorate)!
1.1、软件的定义
软件的特点-7
要求
软件产品不允许误差
软件产品的高质量取决于好的设计( High quality is achieved through) 依赖于人(Depend on people) 需要对产品进行构造(Require the construction of a “product”)
第1章软件工程学概述
(3)软件经常变化 (4)开发软件的效率非常重要 (5.) 和谐地合作是开发软件的关键 (6.) 软件必须有效地支持它的用户 开发软件的目的就是支持用户的工作,满足 用户对软件的需求 (7. )在软件工程领域中通常由具有一种文 化背景的人替具有另一种文化背景的人创 造产品
37
软件工程的研究内容
软件是计算机系统中与硬件(hardware)相互依存 的另一部分,与硬件合为一体完成系统功能。 软件定义包括如下几点: (1)功能和性能的指令集(即程序); (2)程序能正常操纵信息的数据结构(即相关数 据); (3)与程序开发维护和使用有关的各种图文数据 (即说明文档)。
16
软件=程序+数据+相关文档
软件的发展主要经历了以下3个发展阶段:
第一阶段(20世纪50年代初期至20世纪60年 代中期) 特点:(1)称为程序设计阶段 (2)软件生产以个体化为主 (3)编写程序的工具只有低级语言 (4)软件规模小,几乎没有系统化的 标准可循
11
(5)软件由软件使用者自己开发和编写,适 合个人应用 (6)没有“软件”概念,对于程序有关的文 档的重要性认识不足,开发主要围绕硬件 进行 (7)工程规模小,使用工具单一,开发者之 间没有明确分工 第二阶段(20世纪60年代中期至70年代末期) 称程序系统阶段
7
ENIAC诞生于二战时期,最初是作为辅助炮兵计 算炮弹轨迹的工具,在盟军登陆西欧前一年开始 制造,但直到1945年停火时还没完成。在冷战初 期军方就发现了ENIAC的大量用途,它的17468 根真空管被用来测试氢弹的早期设计的可行性。 这台计算机每秒能执行5000条指令,在当时的情 况下它的运算速度比电动式计算机快1000倍。当 然,现在iPhone 6每秒能响应250亿条指令。
第1章 软件工程学概述
Robert Martin Arie van Bennekun Alistair Cockburn Ward Cunningham Martin Fowler
31
软件过程:敏捷开发
开发原则
尽早地、持续地交付有价值的软件来使客户满意。
即使到了开发后期,也欢迎改变需求。敏捷过程利用变化来为客户创造 竞争优势。 经常交付可工作的软件,其时间间隔可以是几周到几个月。 开发期间,业务人员和开发人员必须天天在一起工作。 最有效果的、最有效率的传递信息的方法,就是面对面的交谈。 首要的进度度量标准是工作的软件。 简单是根本的 ……
2013-7-16
重构:建造产品的过程中不断地调整设计 上海大学计算机学院
33
各种生命周期模型的比较
第1章 软件工程学概述
软件危机
软件工程
软件生命周期
软件过程
2013-7-16
上海大学计算机学院
1
软件危机
软件发展的四个阶段
1. 1950’s~1960’s中
规模较小,个体开发
2. 1960’s中~1970’中
软件作坊,产品软件 “软件危机” 出现,“软件工程” 学科诞生(1968年)
3. 1970’中 ~1980’s
方法
2013-7-16
上海大学计算机学院
10
软件工程
传统方法学
也称为生命周期方法学或结构化范型
采用结构化技术(结构化分析、设计和实现) 结构化范型要么面向行为,要么面向数据
面向对象方法学
把数据和行为看成同等重要,以数据为主线, 把数据和对数据的操作紧密地结合
4个要点
面向对象方法=对象+类+继承+用消息通信
软件工程电子教案--第1章
山西大学商务学院教案2010—2011学年第二学期
课程名称软件工程
授课对象08计科GB3、GB4、DB10
授课教师刘忠宝
教材版本软件工程张海藩等著
第 3 页
第 4 页
2、面向对象方法学
概括地说,面向对象方法具有下述四个要点:
·对象:把对象(Object)作为融合了数据及在数据上的操作行为的统一的软件
构件。
面向对象程序是由对象组成的,程序中任何元素都是对象,复杂对象由比
较简单的对象组合而成。
·类:把所有对象都划分成类(Class)。
每个类都定义了一组数据和一组操作,
类是对具有相同数据和相同操作的一组相似对象的定义。
数据用于表示对象的静
态属性,是对象的状态信息,而施加于数据之上的操作用于实现对象的动态行为。
·继承按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类
组成一个层次结构的系统(也称为类等级)。
·联系对象彼此之间仅能通过发送消息互相联系。
对象的所有私有信息都被封
装在该对象内,不能从外界直接访问,这就是通常所说的封装性。
面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使
开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,从而使
描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构
上尽可能一致。
第 5 页
第 6 页
第7 页
第8 页
第9 页
第10 页
第11 页。
软件工程第1章 软件工程综述
4. 按服务对象划分:通用软件、定制软件。
软件发展历程
1. 程序设计时代(20世纪50年代):软件发展早 期, 计算机主要用于科学或工程计算,软件则是 为某种特定型号的计算机而专门配置的程序。
2. 程序系统时代(20世纪60年代):由于软件需 求不断增长, “软件作坊”在这个时期出现了, 伴随着“软件作坊”还产生出了具有一定通用性 的软件产品。
软件工程基本原则
围绕工程设计、工程支持以及工程管理已提出了 以下四条基本原则:1、选取适宜的开发模型;2、 采用合适的设计方法;3、提供高质量的工程支 撑;4、重视软件工程的管理。
美国著名软件工程专家勃姆(B.W.Boehm)经过总结, 提出了以下7条软件工程的基本原理,即:(1) 采用分阶段的生命周期计划严格管理,(2)坚 持进行阶段评审,(3)实行严格的产品控制; (4)采用现代程序设计的技术;(5)结果应能 够清楚地审查;(6)开发队伍应该少而精;(7) 承认不断改进软件工程实践的必要性。
对象彼此间仅能通过发送消息互相联系。
面向对象方法学基本原则
尽量模拟人类习惯的思维方式,使开发软件的 方法与过程尽可能接近人类认识世界、解决问 题的方法与过程,从而使描述问题的问题空间 (也称为问题域)与实现解法的解空间(也称为求解 域)在结构上尽可能一致。
面向对象方法学
优点: 降低了软件产品的复杂性,提高了软件的可
采用生命周期方法学可以大大提高软件开发的成功率,软 件开发的生产率也能明显提高。
目前,传统方法学仍然是人们在开发软件时使用得十分广 泛的软件工程方法学。
5. 主流工程方法学
面向对象方法学则是目前的主流方法学,包括面 向对象分析(OOA)、面向对象设计(OOD)与 面向对象实现(OOA),可对整个软件生命周期 提供方法学支持。其以实体为基本元素,如:类 体、对象,并可使程序系统基于现实实体构建, 更加接近现实环境。
第1章 软件工程概述
因而软件成本相当昂贵;
(6)相当多的软件开发涉及到社会因素。
2017/10/26 第4页 软件工程
3、软件的分类:
(1)按功能分类 a、系统软件:支持计算机系统各个部件、相关的软件
和数据协调、高效地工作的软件。如:OS、DBMS、
DRIVER、COMMUNICATION-SYSTEM。 b、支撑软件:协助用户开发软件的工具性软件,文本 编辑软件。如:PSL/PSA(问题描述语言、问题描述分析 器)、图形软件包、预编译程序、静态分析程序。
是批处理还是人机交互,信息存储是采用文件系统还是数据库?),方案的级
别有:低、中、高等级,每种方案都用系统流程图或其它工具加以描述。推荐 一种方案。最后确定一种方案。 (4)完成的任务:可能的解法(每种解法的系统流程图和成本效益分析),推 荐的系统结构(层次图或结构图)。 总体设计结束的标志是提交总体设计说明书、数据库或数据结构说明书和 集成测试计划等文件。
软件工程
2017/10/26
第1页
软件工程
第一章 软件工程概述
软件 软件危机 软件工程
2017/10/26
第2页
软件工程
1.1 软
1、什么叫软件?
件
(1)广义软件:相对于有形物理实体,把技术条件、管理法
规以及人员素质等无形因素称为软件。 (2)计算机软件:是与计算机硬件相对应的计算机组成部分, 包括程序、数据及其相关文档的完整集合。 Boehm:“软件是程序以及开发、使用和维护程序所需的所有
2017/10/26
第6页
软件工程
(4)按功能软件服务对象分类 a、项目软件:受特定客户委托由一个或多个软件 开发机构在合同的约束下开发出来的软件。 b、产品软件:提供给市场的商品。
软件工程软件第1章
“大”与“小”的分界线并不十分清晰。通常 把一个人在较短时间内写出的程序称为小型程序, 而把多人合作用时半年以上才写出的程序称为大型 程序。传统的程序设计技术和工具是支持小型程序 设计的,不能简单地把这些技术和工具用于开发大 型程序。
事实上,在此处使用术语“程序”并不十分恰当, 现在的软件开发项目通常构造出包含若干个相关程发和维护还有 不少糊涂观念,在实践过程中或多或少地采用了错 误的方法和技术,这可能是使软件问题发展成软件 危机的主要原因。
一个软件从定义、开发、使用和维护,直到最 终被废弃,要经历一个漫长的时期,这就如同一个 人要经过胎儿、儿童、青年、中年和老年,直到最 终死亡的漫长时期一样。通常把软件经历的这个漫 长的时期称为生命周期。软件开发最初的工作应是 问题定义,也就是确定要求解决的问题是什么;然 后要进行可行性研究,决定该问题是否存在一个可 行的解决办法;接下来应该进行需求分析,也就是 深入具体地了解用户的要求,在所要开发的系统 (不妨称之为目标系统)必须做什么这个问题上和用 户取得完全一致的看法。
严重的问题是,在软件开发的不同阶段进行修 改需要付出的代价是很不相同的,在早期引入变动, 涉及的面较少,因而代价也比较低;而在开发的中 期软件配置的许多成分已经完成,引入一个变动要 对所有已完成的配置成分都做相应的修改,不仅工 作量大,而且逻辑上也更复杂,因此付出的代价剧 增;在软件“已经完成”时再引入变动,当然需要 付出更高的代价。根据美国一些软件公司的统计资 料,在后期引入一个变动比在早期引入相同变动所 需付出的代价高2~3个数量级。图1.1定性地描绘 了在不同时期引入一个变动需要付出的代价的变化 趋势。
这7条原理是互相独立的,其中任意6条原理的组合 都不能代替另一条原理,因此,它们是缺一不可的 最小集合,然而这7条原理又是相当完备的,人们 虽然不能用数学方法严格证明它们是一个完备的集 合,但是,可以证明在此之前已经提出的100多条 软件工程原理都可以由这7条原理的任意组合蕴含 或派生。
软件工程第1章软件过程
软件工程第1章软件过程在当今数字化的时代,软件已经成为我们生活和工作中不可或缺的一部分。
从手机上的各种应用程序,到企业的管理系统,软件无处不在。
而要开发出高质量、可靠且满足用户需求的软件,就离不开对软件过程的深入理解和有效管理。
那么,什么是软件过程呢?简单来说,软件过程就是指软件开发、运行和维护过程中所涉及的一系列活动、方法和实践。
它就像是一条指引软件开发的路径,规定了从需求分析到软件退役的各个阶段应该做什么、怎么做以及由谁来做。
软件过程的重要性怎么强调都不为过。
一个良好定义和管理的软件过程可以提高软件开发的效率和质量,降低成本和风险。
想象一下,如果在软件开发中没有明确的流程和规范,开发团队就可能像无头苍蝇一样乱撞,导致项目进度拖延、成本超支,甚至最终开发出的软件无法满足用户的需求。
软件过程通常包括多个阶段,每个阶段都有其特定的目标和任务。
首先是需求分析阶段,这是软件开发的起点。
在这个阶段,开发团队需要与用户进行充分的沟通,了解他们的需求和期望。
这可不是一件简单的事情,因为用户往往并不能清晰地表达自己的需求,或者他们的需求在开发过程中可能会发生变化。
因此,开发团队需要运用各种方法和技巧,如问卷调查、用户访谈、原型设计等,来挖掘和明确用户的真实需求。
需求明确之后,就进入了设计阶段。
在这个阶段,开发团队需要根据需求分析的结果,设计软件的架构和模块。
这就像是建造房屋时的设计图纸,决定了软件的整体结构和功能布局。
设计阶段需要考虑软件的可扩展性、可维护性、性能等诸多因素,以确保软件在未来能够适应不断变化的需求和环境。
接下来是编码实现阶段,这是将设计转化为实际代码的过程。
开发人员根据设计文档,使用选定的编程语言和开发工具,将软件的各个模块逐一实现。
在这个阶段,开发人员需要遵循编程规范和最佳实践,确保代码的质量和可读性。
编码完成后,就进入了测试阶段。
测试的目的是发现软件中的缺陷和错误,确保软件的质量和稳定性。
第1章初识软件工程
软件工程
Software Engineering
李宁
Questions
❖ 什么是软件工程? ❖ 我们为什么要学习软件工程? ❖ 我们该如何学习和应用软件工程?
软件工程是什么?
❖ 用来指导软件开发的好的经验、方法和技术 ❖ 用工程化的东西来规范和指导软件企业的活动和
过程
我们自己做的网站
我们自己做的网站(2010级)
软件危机的典型表现(特征):
软件规模越来越大
Windows 95有1000万行代码 Windows 2000有5000万行代码 其中,Windows 2000开发人员结构
项目经理 开发人员 测试人员
约250人 约1700人 约3200人
软件危机的发展过程
计算机应用发展
软件数量多 软件成本高、
规模大
❖ 软件危机是指在计算机软件的开发和管理过程中 所遇到的一系列严重问题(正常、不正常运行软 件都具有这种问题) 。
2011年,甬温线特别重大铁路交通事故
2011年7月23日20时30 分05秒,甬温线浙江省 温州市境内D301次列 车与D3115次列车发生 动车组列车追尾事故。 造成40人死亡、172人 受伤,中断行车32小时 35分,直接经济损失 19371.65万元。
高校在每个学期考试结束后,要求教师在网上登 录成绩管理系统,输入本学期任教的课程的成绩 到系统中; 学生可以在线查询成绩; 院系教学管理人员可以在线统计分析成绩、在线 生成班级成绩报表等;
项目启动会
小组讨论,形成:
❖开发目标 ❖开发时间 ❖小组分工(任务) ❖实施步骤和思路 ❖其他要考虑的问题
对项目的思考
发生“软件危机”最突出的案例
IBM公司在1963年至1966年开发的IBM 360操 作系统。该项目花了5000人/年的工作量,得到的结 果却非常糟糕。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.2.3 软件工程方法学
· 对象彼此之间仅能通过发送消息互相联 系。对象与传统数据有本质区别,它不是被动地 对象与传统数据有本质区别, 等待外界对它施加操作,相反, 等待外界对它施加操作,相反,它是进行处理的 主体,必须向它发消息请求它执行它的某个操作 主体, 以处理它的数据, 以处理它的数据,而不能从外界直接对它的数据 进行处理。也就是说, 进行处理。也就是说,对象的所有私有信息都被 封装在该对象内,不能从外界直接访问, 封装在该对象内,不能从外界直接访问,这就是 通常所说的封装性。 通常所说的封装性。
1.2.3 软件工程方法学
目前使用得最广泛的软件工程方法学, 目前使用得最广泛的软件工程方法学,分别 是传统方法学和面向对象方法学。 是传统方法学和面向对象方法学。
1.2.3 软件工程方法学
传统方法学也称为生命周期方法学或结构化 范型。 范型。 当软件规模较大,或者对软件的需求是模糊 当软件规模较大, 的或随时间变化的时候,使用结构化范型开发软 的或随时间变化的时候, 件往往不成功;此外, 件往往不成功;此外,使用传统方法学开发出的 软件,维护起来通常都很困难。 软件,维护起来通常都很困难。
1.1.2 软件危机的含义
5.软件通常没有适当的文档资料。 5.软件通常没有适当的文档资料。 软件通常没有适当的文档资料 6.软件成本在计算机系统总成本中所占的比例逐 6.软件成本在计算机系统总成本中所占的比例逐 年上升。 年上升。 软件开发生产率提高的速度, 7. 软件开发生产率提高的速度,既跟不上硬件 的发展速度, 的发展速度,也远远跟不上计算机应用迅速普及 深入的趋势。 深入的趋势。
1.2 软件工程
1.2.1 什么是软件工程
采用工程的概念、原理、 采用工程的概念、原理、技术和方法来开发与 维护软件,把经过时间考验而证明正确的管理技术 维护软件, 和当前能够得到的最好的技术方法结合起来, 和当前能够得到的最好的技术方法结合起来,以经 的技术方法结合起来 济地开发出高质量的软件并有效地维护它, 济地开发出高质量的软件并有效地维护它,这就是 软件工程。 软件工程。
课程内容
一、软件工程与软件过程 二、传统方法学 三、面向对象方法学 四、软件项目管理
第一篇 软件工程与软件过程
第1章 软件工程
1.1
软件危机
1.2
软件工程
1.3
小结
1.1
软件危机
1.1.1 计算机系统的发展历程
所谓计算机系统就是指适当地组织在一起的一系 列系统元素的集合,这些元素通常包括: 列系统元素的集合,这些元素通常包括:计算机 软件、计算机硬件、人员、数据库、文档和过程。 软件、计算机硬件、人员、数据库、文档和过程。
图1.1 引入同一变动付出的代价随时间变化的趋势
1.1.4 消除软件危机的途径
1.为了消除软件危机,首先应该对计算机软件 为了消除软件危机, 为了消除软件危机 有一个正确的认识。 有一个正确的认识。 2.应该推广使用在实践中总结出来的开发软件 2.应该推广使用在实践中总结出来的开发软件 的成功的技术和方法, 的成功的技术和方法,并且研究探索更好更有效 的技术和方法, 的技术和方法,尽快消除在计算机系统早期发展 阶段形成的一些错误概念和做法。 阶段形成的一些错误概念和做法。 3.应该开发和使用更好的软件工具。 应该开发和使用更好的软件工具。 应该开发和使用更好的软件工具
1.1.1 计算机系统的发展历程
4. 在计算机系统发展的第四代已经不再看重单 台计算机和程序, 台计算机和程序,人们感受到的是硬件和软件的 综合效果。 综合效果。
1.1.2 软件危机的含义
软件危机是指在计算机软件的开发和维护 过程中所遇到的一系列严重问题。 过程中所遇到的一系列严重问题。这些问题绝 不仅仅是不能正常运行的软件才具有的, 不仅仅是不能正常运行的软件才具有的,实际 上,几乎所有软件都不同程度地存在这些问题。 几乎所有软件都不同程度地存在这些问题。
1.2.3 软件工程方法学
概括地说,面向对象方法具有下述四个要点。 概括地说,面向对象方法具有下述四个要点。 把对象(Object) (Object)作为融合了数据及在数据 · 把对象(Object)作为融合了数据及在数据 上的操作行为的统一的软件构件。 上的操作行为的统一的软件构件。 面向对象程序是由对象组成的, 面向对象程序是由对象组成的,程序中任何元 素都是对象,复杂对象由比较简单的对象组合而成。 素都是对象,复杂对象由比较简单的对象组合而成。
1.1.4 消除软件危机的途径
总之,为了消除软件危机, 总之,为了消除软件危机,既要有技术措施 方法和工具) 又要有必要的组织管理措施。 (方法和工具),又要有必要的组织管理措施。软 件工程正是从管理和技术两方面研究如何更好地 开发和维护计算机软件的一门新兴学科。 开发和维护计算机软件的一门新兴学科。
1.2.3 软件工程方法学
面向对象方法学的出发点和基本原则,是尽 面向对象方法学的出发点和基本原则, 可能模拟人类习惯的思维方式, 可能模拟人类习惯的思维方式,使开发软件的方 法与过程尽可能接近人类认识世界解决问题的方 法与过程。 法与过程。
1.2.3 软件工程方法学
向对象方法普遍进行的对象分类过程, 向对象方法普遍进行的对象分类过程,支持 从特殊到一般的归纳思维过程; 从特殊到一般的归纳思维过程;通过建立类等级 而获得的继承性, 而获得的继承性,支持从一般到特殊的演绎思维 过程。 过程。
1.1.3 产生软件危机的原因
在软件开发和维护的过程中存在这么多严 重问题,一方面与软件本身的特点有关, 重问题,一方面与软件本身的特点有关,另一 方面也和软件开发与维护的方法不正确有关。 方面也和软件开发与维护的方法不正确有关。 错误的认识和作法主要表现为忽视软件需 求分析的重要性, 求分析的重要性,认为软件开发就是写程序并 设法使之运行,轻视软件维护等。 设法使之运行,轻视软件维护等。
1.1.2 软件危机的含义
软件危机主要典型表现: 软件危机主要典型表现: 1.对软件开发成本和进度的估计常常很不准确。 对软件开发成本和进度的估计常常很不准确。 用户对“已完成的” 2.用户对“已完成的”软件系统不满意的现象经 常发生。 常发生。 3.软件产品的质量往往靠不住 3.软件产品的质量往往靠不住 4.软件常常是不可维护的。 4.软件常常是不可维护的。 软件常常是不可维护的
1.1.1 计算机系统的发展历程
1.
20世纪60年代中期以前, 20世纪60年代中期以前,是计算机系统发展 世纪60年代中期以前 的早期; 的早期;
2.
从60年代中期到70年代中期,是计算机系统 60年代中期到70年代中期, 年代中期到70年代中期 发展的第二代。 发展的第二代。
3.
计算机系统发展的第三代从20世纪70年代中 计算机系统发展的第三代从20世纪70年代中 20世纪70 期开始,并且跨越了整整10年 期开始,并且跨越了整整10年。 10
1.2.2 软件工程的基本原理
1. 1.用分阶段的生命周期计划严格管理 2.坚持进行阶段评审 2.坚持进行阶段评审 3.实行严格的产品控制 3.实行严格的产品控制 4.采用现代程序设计技术 4.采用现代程序设计技术 5.结果应能清楚地审查 5.结果应能清楚地审查 6.开发小组的人员应该少而精 6.开发小组的人员应该少而精 7.承认不断改进软件工程实践的必要性 7.承认不断改进软件工程实践的必要性
1.2.3 软件工程方法学
通常把在软件生命周期全过程中使用的一 整套技术的集合称为方法学。 整套技术的集合称为方法学。 软件工程方法学包括三个要素, 软件工程方法学包括三个要素,这就是方 工具和过程。 法、工具和过程。
1.2.3 软件工程方法学
方法是完成软件开发的各项任务的技术方法, 方法是完成软件开发的各项任务的技术方法, 是完成软件开发的各项任务的技术方法 回答“如何做”的问题;工具是为方法的运用提 回答“如何做”的问题;工具是为方法的运用提 供自动的或半自动的软件支撑环境;过程是为了 供自动的或半自动的软件支撑环境;过程是为了 获得高质量的软件所需要完成的一系列任务的框 它规定了完成各项任务的工作步骤。 架,它规定了完成各项任务的工作步骤。Leabharlann 1.2.3 软件工程方法学
把所有对象都划分成类(Class) (Class)。 · 把所有对象都划分成类(Class)。每个类 都定义了一组数据和一组操作, 都定义了一组数据和一组操作,类是对具有相同 数据和相同操作的一组相似对象的定义。 数据和相同操作的一组相似对象的定义。 数据用于表示对象的静态属性,是对象的状 数据用于表示对象的静态属性, 态信息, 态信息,而施加于数据之上的操作用于实现对象 的动态行为。 的动态行为。
1.2.3 软件工程方法学
按照父类(或称为基类)与子类( · 按照父类(或称为基类)与子类(或称为派 生类)的关系, 生类)的关系,把若干个相关类组成一个层次结 构的系统(也称为类等级) 构的系统(也称为类等级)。 在类等级中, 在类等级中,下层派生类自动拥有上层基类 中定义的数据和操作,这种现象称为继承。 中定义的数据和操作,这种现象称为继承。
1.2.3 软件工程方法学
由于对象是相对独立的实体, 由于对象是相对独立的实体,容易在以后的 软件产品中重复使用,因此, 软件产品中重复使用,因此,面向对象范型的另 一个重要优点是促进了软件重用。 一个重要优点是促进了软件重用。 面用对象方法特有的继承性, 面用对象方法特有的继承性,进一步提高 了面向对象软件的可重用性。 了面向对象软件的可重用性。
1.2.3 软件工程方法学
正确运用面向对象方法学开发软件, 正确运用面向对象方法学开发软件,则最终 的软件产品由许多较小的基本上独立的对象组成, 的软件产品由许多较小的基本上独立的对象组成, 而且大多数对象都与现实世界中的实体相对应。 而且大多数对象都与现实世界中的实体相对应。 因此,降低了软件产品的复杂性, 因此,降低了软件产品的复杂性,提高了软件产 品的可理解性,简化了软件的开发和维护工作。 品的可理解性,简化了软件的开发和维护工作。