主讲,许家 珆电 子 科 技 大 学课程内容,
1、传统的软件工程方法
2、面向对象的开发方法( UML)
3、构件技术关于课程课程的主要特点及教学安排
1.研究内容广泛,发展迅速。
2.实践性强。
注意取材,内容反映最新发展。
A.采用多媒体课堂教学与网络教学相结合。
B.以综合性的设计型课程设计带动课程的学习。在教师指导组成开发小组成员协同工作,
完成一个实际课题的开发。
1,软件工程 —理论与实践许家 珆 曾翎 彭德中 编著 高等教育出版社 2004.7
2,软件工程技术概论朱三元 钱乐秋 宿为民 编著 科学出版社 2002.1
3,Software Engineering,6th Edition
Sommerville.I,(影印版 ) 机械工业出版社 2003.4
教材及主要参考书:
使用说明 课程大纲 课程指导 课件浏览课程设计 自测系统 资料查询 案例分析系统主要功能介绍课程定位,学习对象和学习基本要求明确。
有明确的学习目的。提供了必要的课程指导及各章的学习指导。
系统主要功能介绍二、系统主要功能介绍 (3)
第一 章 软件工程概述1
1.1 软件工程的基本概念
1.3 软件生存期模型
1.5 软件工具与软件开发环境
1.4 软件开发方法
1.2 软件工程过程与软件生存期
1.1 软件工程的基本概念
1.1 软件工程的基本概念软件是信息化的核心,国民经济,国防建设,社会发展及人民生活都离不开软件 。 软件产业是增长最快的朝阳产业,
是高投入/高产出,无污染,低能耗的绿色产业 。 软件产业关系到国家经济和文化安全,体现了国家综合实力,是决定 21世纪国际竞争地位的战略性产业 。
软件工程 ( Software Engineering)是在克服 60年代末所出现的,软件危机,的过程中逐渐形成与发展的 。 软件工程是一门指导计算机软件系统开发和维护的工程学科,是一门新兴的边缘学科,主要 研究如何应用软件开发的科学理论和工程技术来指导大型软件系统的开发 。
1.1.1软件工程的产生和发展
1.1.1 软件工程的产生和发展软件工程的发展已经历了四个重要阶段:
4,第 四代 软件工程 — 构件工程
3,第三代 软件工程 — 过程工程
2,第二代 软件工程 — 对象工程
1,第一代 软件工程 — 传统 的软件工程
1.1.1软件工程的产生和发展
1.1.1 软件工程的产生和发展软件工程的发展已经历了四个重要阶段:
1,第一代 软件工程 — 传统 的软件工程
2,第二代 软件工程 — 对象工程
3,第三代 软件工程 — 过程工程
4,第 四代 软件工程 — 构件工程
60年代末到 70年代为了克服,软件危机,
(Software crisis) 提出
,软件工程,的名词,将软件开发纳入工程化的轨道,
基本形成软件工程的概念,
框架,技术和方法 。 称为 传统 的软件工程 。
1.1.1软件工程的产生和发展
1.1.1 软件工程的产生和发展软件工程的发展已经历了四个重要阶段:
1,第一代 软件工程 — 传统 的软件工程
2,第二代 软件工程 — 对象工程
3,第三代 软件工程 — 过程工程
4,第 四代 软件工程 — 构件工程80年代中到 90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,
演化为一种完整的软件开发方法和系统的技术体系,称为 对象工程。
1.1.1软件工程的产生和发展
1.1.1 软件工程的产生和发展软件工程的发展已经历了四个重要阶段:
1,第一代 软件工程 — 传统 的软件工程
2,第二代 软件工程 — 对象工程
3,第三代 软件工程 — 过程工程
4,第 四代 软件工程 — 构件工程
80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是,软件过程,,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程 。
1.1.1软件工程的产生和发展
1.1.1 软件工程的产生和发展软件工程的发展已经历了四个重要阶段:
1,第一代 软件工程 — 传统 的软件工程
2,第二代 软件工程 — 对象工程
3,第三代 软件工程 — 过程工程
4,第 四代 软件工程 — 构件工程
90起年代,基于构件( Component)
的开发方法取得重要进展,软件系统的开发可 通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为 构件工程。
1.1.2 软件工程研究的内容软件工程 是一门新兴的边缘学科,涉及的学科多,研究的范围广 。 归结起来软件工程研究的主要内容有以下几方面:
}软件开发技术软件开发方法,技术软件开发工具及环境软件管理技术软件规范 ( 国际规范 )
}软件管理技术
(1)软件开发技术 ( 软件结构,开发方法,工具与软件工程环境,软件工程标准化 )
(2)软件工程管理 ( 质量管理,软件工程经济学:成本估算,
计划安排 )
1.1.2 软件工程研究的内容
1,2 软件工程过程与软件生存期
1.2 软件工程过程与软件生存期从 68年北大西洋公约的软件可靠性会议 ( NATO) 上,
首次提出,软件工程,的概念,提出了在软件生产中采用工程化的方法,采用一系列科学的,现代化的方法技术来开发软件 。 这种工程化的思想贯穿到软件开发和维护的全过程 。
了解有关软件,软件生存期及软件工程过程等重要的概念,对掌握,学习和应用软件工程的方法,技术是极有益的 。
1.2.1 软件的概念和特点
1.2.1 软件的概念和特点一,软件 ( Software) 要纠正软件就是程序,开发软件就是编写程序的错误观念 。 软件是,程序以及开发使用维护程序所需的所有文档,,由应用程序,系统程序,面向用户的文档,及面向开发者的文档四部分构成 。
二,软件的特点
1,软件是一种逻辑实体,不是具体的物理实体 。
2,软件产品的生产主要是研制 。
3,软件具有,复杂性,,其开发和运行常受到计算机系统的限制 。
4,软件成本昂贵,其开发方式目前尚未完全摆脱手工生产方式 。
5,软件不存在磨损和老化问题,但存在退化问题 。
硬件失效率曲线,是一 U型曲线 ( 即浴盆曲线 ) 。 软件失效率曲线,它没有 U型曲线的右半翼 。 因为软件不存在磨损和老化问题,然而存在退化问题 。
失效率时间硬件失效率曲线失效率时间实际曲线理想曲线软件失效率曲线
1.2.1 软件的概念和特点软、硬件失效情况的对比三、软件的分类
1,按照软件功能划分系统软件 — 如操作系统,设备驱动程序等 。
支撑软件 ( 实用软件 ) — 协助用户开发的工具软件,如编辑程序,程序库,图形软件包等 。
应用软件 — 如工程与科学计算软件,CAD/CAM软件,CAI软件,信息管理系统等 。
1.3 软件生存期模型软件生存周期模型是描述软件开发过程中各种活动如何执行的模型 。
目前有若干软件生存期模型,各种模型有其不同的特点,
并适用于不同的开发方法 。
1.3 软件生存期模型瀑布模型 (waterfall model)
循环模型 (loop model)
增量模型 (incremental model)
螺旋模型 (spiral model)
喷泉模型 (fountain model)
智能模型 (intelligent model)
问题定义编 码需求分析设 计可行性研究运行与维护测 试开发时期运行时期计划时期
(目标与范围说明书 )
(可行性论证论告 )
(维护报告 )
(测试报告 )
(程序 )
(设计文档 )
(需求说明书 )
瀑布模型图 1.3 瀑布模型
1,3 软件生存期
1.3.2 循环模型为了描述软件开发过程中可能的回溯,尤其是维护阶段往往要经历上述各个阶段,采用循环模型描述 。
1.3.2 循环模型需求分析设计 编码测试运行评价计划循环模型
1.3.3 增量模型 (incremental model)
1.3.3 渐增模型增量模型是一种非整体开发的模型 。 根据增量的方式和形式的不同,分为基于瀑布模型的 渐增模型 和基于原型的 快速原型模型 。
该模型具有较大的灵活性,适合于软件需求不明确,
设计方案有一定风险的软件项目 。
增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,
必须完成前一阶段的所有细节 。 而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件 。
1.3.3 增量模型定义概要需求把需求分配给增量设计系统结构开发系统增量验证增量组装增量验证系统系统不完全最终系统增量模型
1.3.3 增量模型螺旋模型 对于大型软件,只开发一个原型往往达不到要求 。
螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析 。
1.3.4 螺旋模型螺旋模型将开发过程分为几个螺旋周期,
每个螺旋周期可分为 4
个工作步骤:
1.确定目标、方案和限制条件;
2.评估方案、标识风险和解决风险;
3.开发确认产品;
4.计划下一周期工作。
螺旋模型
1.3.5 喷泉模型分 析系统 设计软件 设计实 现图 1.5 喷泉模型该模型是由 B.H.Sollers和 J.M.Edwards于 1990年提出的一种新的开发模型。主要用于采用对象技术的软件开发项目。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,
喷泉模型使开发过程具有迭代性和无间隙性。
其特点如下:
1,开发过程有分析、系统设计、软件设计和实现 4个阶段。
2、各阶段相互重叠,它反映了软件过程并行性的特点。
3、以分析为基础,资源消耗成塔型。
4、反映了软件过程迭代性的自然特性,
从高层返回低层无资源消耗。
5、强调增量开发,整个过程是一个迭代的逐步提炼的过程。
1.3.5 喷泉模型
1.3.6 智能模型 (intelligent model)
获取需求 需求分析 具体描述 优化 程序调整验证维护知识库专家系统程序也称为基于知识的软件开发模型,是知识工程与软件工程相结合的软件开发模型。其主要特点是必须建立知识库,
并将模型本身、软件工程知识、特定领域知识放入知识库。
具体描述可以使用形式功能规约,也可以使用知识处理语言描述等。其模型如图所示:
1.3.5 智能模型图 1.13 智能模型
1.4 软件开发方法
1.4 软件开发方法软件开发的目标是要在规定的投资和时间内,开发出符合用户的需求,高质量的软件,为此需要有成功的开发方法 。
为了克服软件危机,从 60年代末开始,一直在进行软件方法的研究与实践,提出了多种软件开发方法和技术,对软件产业的发展起着不可估量的作用 。
1.4.1 软件工程方法软件工程的内容包括技术和管理两方面,两方面又紧密结合。通常把在软件生命期中所使用的 一整套技术 的集合称为方法 ( methodology) 或范型 (paradigm ) 。
1.4.1 软件工程方法如何评价软件开发方法:
1,技术特征,层次性,抽象性,并行性,安全性,正确性等 。
2,使用特征,易理解性,易修改性,可移植性,工具的支持,
可复用性,任务范围,使用的频度等 。
3,管理特征,易管理性;成本估算,配置管理等 。
4,经济特征,各种效益与代价 。
软件工程方法包括 三要素:方法、工具和过程。
方法,完成软件开发各项任务的技术方法;
工具,为方法的运用提供自动或者半自动的支撑环境;
过程,为开发高质量软件所规定的各项任务的工作步骤。
软件开发方法可分为几大类:
面向过程的开发方法 ( 传统的 )
面向对象的开发方法基于构件的开发方法
1.4.1 软件工程方法特别要注意:
由于软件与程序是不同的概念,软件开发方法与程序设计方法是两个不同的概念。
软件开发方法可以是针对局部的,也可以是针对全局的。
软件工程方法,更加 强调 和重点研究的是 需求分析与软件设计的开发方法。
也称为 面向过程的 软件开发方法,这类开发方法都典型地包含了分析、设计、实现、确认(测试)、演化(维护)等活动。
典型的传统软件开发方法有:
Jackson方法、结构化开发方法,原型化方法,HIPO
法,IDEF法等。
1.4.2 传统的软件开发方法
1.4.2 传统的软件开发方法
1.4.2 传统的软件开发方法一、结构化开发方法 ( Structured Developing Method)
是一种 面向数据流 的开发方法,是现有的软件开发方法中最成熟,应用最广泛的方法,主要特点是快速,自然和方便 。
,逐步求精,以数据流,数据的封闭性准则来逐层分解的,它的基本原则是功能的分解与抽象 。
结构化方法强调结构的合理性。提出了一组提高软件结构质量的准则,如 功能的分解与抽象、模块独立性、信息屏蔽等。
二,Jackson方法
1.4.2 传统的软件开发方法
JACKSON方法是一种 面向数据结构 的设计方法。
强调程序结构与问题结构相对应。
JACKSON方法由两部分构成:
1,JSP( Jackson structured Programming)
2,JSD (Jackson System Development)
原型是软件开发过程中,软件的一个早期可运行的版本,
它反映了最终系统的部分重要特性 。
原型化方法的基本思想是花费少量代价建立一个可运行的系统,使用户及早获得学习的机会,原型化方法又称速成原型法 ( Rapid Prototyping) 。 强调的是软件开发人员与用户的不断交互,通过原型的演进不断适应用户任务改变的需求 。 将维护和修改阶段的工作尽早进行,使用户验收提前,
从而使软件产品更加适用 。
1.4.2 传统的软件开发方法三、原型化方法 ( Prototyping Method)
1.4.2 传统的软件开发方法四,HIPO法( Hierarchy Plus Input—Process—Output)
HIPO法( Hierarchy Plus Input—Process—Output),
按功能层次结构分析法,74年由 IBM公司推出的软件分析及设计方法,又称 HIPO图。
HIPO图是以功能、功能完备性准则逐层分解的。
由直观目录表( H图),概要 HIPO图,详细 IPO图三部分组成。
OOSD( Object-Oriented Software Development) 法这是 80年代推出的一种全新的软件开发方法 。 非常实用而强有力,被誉为 90年代软件的核心技术之一 。
1.4.3 面向对象方法
1.4,3 面向对象方法其基本思想是,对问题领域进行自然的分割,以更接近人类通常思维的方式建立问题领域的模型,以便对客观的信息实体进行结构和行为的模拟,从而使设计的软件更直接地表现问题的求解过程 。 面向对象的开发方法以对象作为最基本的元素,是分析和解决问题的核心 。
1.5 软件复用技术
“软件重用,或,软件复用,( Software Reuse)是指将已有的软件成分用于 构造新的软件系统 。该技术是提高软件生产率和质量,降低成本的有效方法。
1.5.1复用方式复用程序,包括目标代码和源代码的复用,可通过连接
(Link),绑定 (Binding),包含 (include)等功能支持及对象链接及嵌入 (OLE)技术实现 。
复用分析 比设计复用级别更高,实现方式与设计复用类似。
复用设计,设计结果比源程序的抽象级别高,因此复用受环境影响小。可以通过从现有系统中提取全部或者不同粒度的设计构件,或者独立于具体应用开发设计构件。
复用结构 复用模块结构或者数据结构。
1.5 软件复用技术
1.5.2 可复用的构件构件 是指可以被明确标识的软件制品,可以是软件开发不同阶段的产品。
可复用构件 是指可被其它系统复用,用于构成新系统的构件。
可复用构件的特性:
1,独立性 解决相对独立的问题,与外界联系尽量少。
2,完整性 既要包括完整的解决方案,还定义相应操作。
3,通用性 在同类应用中具有一般性。
4,可标识性 通过合适的命名,构件所解决的问题是可标识的。
5,可适应性 适应环境变化。
6,可靠性 对各个使用它的系统都具有高的可靠性。
1.5.2 可复用的构件
1.6 软件工具及软件开发环境
CASE(计算机辅助软件工程)的两个阶段:
1、依赖与于软件内生命周期各阶段的分散工具。
2、软件开发环境( Software Development Environment)
软件工程环境( Software Engineering Environment)
是包括方法、工具和管理等多种技术在内的综合系统,应具备以下特点:
① 紧密性 (各种工具紧密配合工作)
② 坚定性 (环境可自我保护,不受用户和系统影响,可实现非预见性的环境恢复)
③ 可适应性(适应用户要求,环境中的工具可修改、增加、
减少)
④ 可移植性 (工具可移植)
1.6 软件工具及软件开发环境典型的软件工程环境典型的软件工程环境具有三级结构:
1,核心级 (核心工具组、数据库、通讯工具、运行支持功能、与硬件无关的移植接口)
2,基本级 (环境的用户工具,编译、编辑程序,作业控制语言的解释程序等)
3,应用级 (应用软件的开发工具)
应用级基本级核心级
1.5 软件工具及软件开发环境