1、http:/教育软件工程教育软件工程第一章 软件工程概述第一章 软件工程概述1.1软件工程软件工程1.2软件开发模型软件开发模型1.3软件开发方法软件开发方法1.4软件开发新技术软件开发新技术1.5教育软件工程简介教育软件工程简介习题习题1.1 软件工程1.1.1软件工程软件工程的发展的发展简史简史(1)现代)现代计算机软件的出现计算机软件的出现(2)软件软件危机危机1.1.2软件工程的软件工程的概念概念(1)传统)传统软件工程软件工程(2)现代)现代软件工程软件工程(3)软件工程)软件工程的概念的概念1.1.1 软件工程的发展简史(1)现代计算机软件的出现)现代计算机软件的出现早期早期的软件
2、开发没有系统方法可以遵循,软件设的软件开发没有系统方法可以遵循,软件设计是在某个人的头脑中完成的一个隐藏的过程计是在某个人的头脑中完成的一个隐藏的过程。随着随着计算机技术的发展,人们认识计算机技术的发展,人们认识到增加软件到增加软件功能会使计算机系统的功能得到很大提高。这个时功能会使计算机系统的功能得到很大提高。这个时期软件期软件的含义是:的含义是:“软件软件=程序程序+说明书说明书”。现代,社会生活对计算机提出了更高的要求,现代,社会生活对计算机提出了更高的要求,这个时期软件的含义就成为:这个时期软件的含义就成为:“软件软件=程序程序+数据数据+文档文档”。1.1.1 软件工程的发展简史(1
3、)现代计算机软件的出现)现代计算机软件的出现软件的特点:软件的特点:软件软件是一种逻辑是一种逻辑实体实体软件软件与硬件的生产方式与硬件的生产方式不同不同软件软件与硬件的维护与硬件的维护不同不同软件软件是复杂是复杂的的软件软件成本相当昂贵成本相当昂贵1.1.1 软件工程的发展简史(2)软件危机)软件危机软件软件危机的危机的概念概念软件危机:是指在计算机软件的开发和维护过程中所软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题,典型遇到的一系列严重问题,典型表现:表现:对软件开发成本和进度的对软件开发成本和进度的估计不估计不准确。准确。用户对用户对“已完成的已完成的”软件系统不满意
4、的现象经软件系统不满意的现象经常发生。常发生。软件产品的质量往往靠不住。软件产品的质量往往靠不住。软件常常是不可维护的。软件常常是不可维护的。软件通常没有适当的文档资料。软件通常没有适当的文档资料。软件软件成本逐年成本逐年上升。上升。软件开发生产率提高的软件开发生产率提高的速度不及计算机应用的速度不及计算机应用的速度。速度。1.1.1 软件工程的发展简史(2)软件危机)软件危机消除软件危机的途径:消除软件危机的途径:应该对计算机软件有一个正确的认识。应该对计算机软件有一个正确的认识。应该彻底消除在计算机系统早期发展阶段形应该彻底消除在计算机系统早期发展阶段形成的成的“软件就是程序软件就是程序”
5、的错误观念。的错误观念。应该推广使用在实践中总结出来的开发软件应该推广使用在实践中总结出来的开发软件的成功的技术和方法。的成功的技术和方法。应该开发和使用更好的软件工具。应该开发和使用更好的软件工具。1.1.2 1.1.2 软件工程的概念软件工程的概念(1)传统)传统软件工程软件工程为为迎接软件危机的挑战,人们进行了不懈的迎接软件危机的挑战,人们进行了不懈的努力。这些努力大致上是沿着两个方向同时进行努力。这些努力大致上是沿着两个方向同时进行。第一个方向是第一个方向是从管理的角度,实现软件开发从管理的角度,实现软件开发过程工程化过程工程化。“瀑布式瀑布式”生命周期模型是其最为生命周期模型是其最为
6、著名的著名的成果。成果。第二第二个方向,侧重于对软件开发过程中分析、个方向,侧重于对软件开发过程中分析、设计的方法研究设计的方法研究。这方面的重要成果就是在这方面的重要成果就是在70年代的结构化开发方法年代的结构化开发方法,以及,以及结构化的分析、设结构化的分析、设计和相应的测试方法。计和相应的测试方法。1.1.2 1.1.2 软件工程的概念软件工程的概念(2)现代软件工程)现代软件工程现代现代软件工程最根本的就是人跟物的关系,软件工程最根本的就是人跟物的关系,就是人和机器(工具、自动化)在不同层次不断就是人和机器(工具、自动化)在不同层次不断循环发展的关系循环发展的关系。面向对象面向对象的分
7、析、设计方法(的分析、设计方法(OOA和和OOD)的出现使传统开发方法发生了巨大变化。随之而的出现使传统开发方法发生了巨大变化。随之而来的是面向对象建模语言(以来的是面向对象建模语言(以UML为代表)、为代表)、软件复用、基于组件的软件开发等新方法和领域软件复用、基于组件的软件开发等新方法和领域。1.1.2 1.1.2 软件工程的概念软件工程的概念(3)软件工程的概念)软件工程的概念软件工程几个典型的定义:软件工程几个典型的定义:1968年年10月月,FritzBauer首次提出了首次提出了“软件工程软件工程”的概念:建立并使用完善的工程化的概念:建立并使用完善的工程化原则,以较经济的手段获得
8、能在实际机器上有效原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。运行的可靠软件的一系列方法。1993年年,IEEE对软件工程的定义是:软对软件工程的定义是:软件工程是将系统化的、严格约束的、可量化的方件工程是将系统化的、严格约束的、可量化的方法,应用于软件开发、运行和维护中去法,应用于软件开发、运行和维护中去。2001年,软件工程大师年,软件工程大师RogerS.Pressman对软件工程的定义是:软件工程是对软件工程的定义是:软件工程是一个过程、一组方法和一系列工具一个过程、一组方法和一系列工具。1.1.2 1.1.2 软件工程的概念软件工程的概念(3)软件工程的概念
9、)软件工程的概念软件工程软件工程的特性的特性:软件工程关注于大型程序的构造软件工程关注于大型程序的构造软件工程软件工程的中心课题是控制复杂性的中心课题是控制复杂性软件软件经常变化经常变化开发软件的效率非常重要开发软件的效率非常重要有效有效合作是开发软件的关键合作是开发软件的关键软件软件必须有效地支持它的用户必须有效地支持它的用户在在软件工程领域中是由具有一种文化背景软件工程领域中是由具有一种文化背景的人替代具有另一种文化背景的人的人替代具有另一种文化背景的人1.1.2 1.1.2 软件工程的概念软件工程的概念(3)软件工程的概念)软件工程的概念软件工程软件工程的的基本原理:基本原理:用分阶段的
10、生命周期计划严格管理用分阶段的生命周期计划严格管理坚持进行阶段评审坚持进行阶段评审实行严格的产品控制实行严格的产品控制采用现代程序设计技术采用现代程序设计技术结果应能清楚地审查结果应能清楚地审查开发小组的人员应该少而精开发小组的人员应该少而精承认不断改进软件工程实践的必要性承认不断改进软件工程实践的必要性这这7条原理是互相独立的,其中任意条原理是互相独立的,其中任意6条原条原理的组合都不能代替另一条理的组合都不能代替另一条原理。原理。1.1.2 1.1.2 软件工程的概念软件工程的概念(3)软件工程的概念)软件工程的概念软件工程的目标:软件工程的目标:付出付出较低的开发成本;较低的开发成本;达
11、到达到预期的软件功能;预期的软件功能;取得取得较好的软件性能;较好的软件性能;使使软件易于移植;软件易于移植;需要需要较低的维护费用较低的维护费用;按时完成按时完成开发工作,及时交付使用。开发工作,及时交付使用。1.1.2 1.1.2 软件工程的概念软件工程的概念(3)软件工程的概念)软件工程的概念软件工程的目标:软件工程的目标:图图1.1软件工程目标之间的关系软件工程目标之间的关系1.2软件开发模型1.2.1软件生命周期软件生命周期(1)软件生命周期的六个阶段)软件生命周期的六个阶段(2)软件)软件生命周期生命周期模型模型1.2.2软件生命周期模型软件生命周期模型(1)瀑布模型)瀑布模型(2
12、)快速)快速原型模型原型模型(3)增量)增量模型模型(4)螺旋)螺旋模型模型(5)RUP1.2 1.2.1 1软件生命周期软件生命周期软件生命周期(软件生命周期(又又称软件生存周期,称软件生存周期,SoftwareDevelopmentLifeCycle,SDLC)是指是指从软件的从软件的产生直到报废的生命周期。概括的产生直到报废的生命周期。概括的说,软件生命周期由软件定义、软件开发和运行说,软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)三个时期组成,每个时维护(也称为软件维护)三个时期组成,每个时期有进一步划分成若干个阶段。期有进一步划分成若干个阶段。1.2 1.2.1 1软件
13、生命周期软件生命周期(1)软件生命周期的六个阶段)软件生命周期的六个阶段可行性研究可行性研究是从总体出发,进行分析和论证,以确定项是从总体出发,进行分析和论证,以确定项目是否可行,为投资决策提供科学依据。目是否可行,为投资决策提供科学依据。需求分析需求分析是一个很重要的阶段,将为整个软件开发项是一个很重要的阶段,将为整个软件开发项目打下良好的基础。目打下良好的基础。软件设计软件设计此阶段主要根据需求分析的结果,对整个软此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计件系统进行设计,如系统框架设计,数据库设计等等。等等。1.2 1.2.1 1软件生命周期软件生命周
14、期(1)软件生命周期的六个阶段)软件生命周期的六个阶段程序编码程序编码是将软件设计的结果转换成计算机可运行是将软件设计的结果转换成计算机可运行的程序代码。的程序代码。软件测试软件测试测试过程分为单元测试、集成测试以及系测试过程分为单元测试、集成测试以及系统测试三个阶段进行。测试的方法主要有白盒统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试。测试和黑盒测试。运行维护运行维护软件维护是软件生命周期中持续时间最长软件维护是软件生命周期中持续时间最长的阶段。的阶段。1.2 1.2.1 1软件生命周期软件生命周期(2)软件生命周期模型软件生命周期模型软件生命周期模型也称为软件过程模型,软件生命周
15、期模型也称为软件过程模型,是从软件项目需求定义直至软件运行维护为止,是从软件项目需求定义直至软件运行维护为止,跨越整个生命周期的系统开发、运行和维护所跨越整个生命周期的系统开发、运行和维护所实施的全部过程、活动和任务的结构框架。实施的全部过程、活动和任务的结构框架。典型的几种生命周期模型包括瀑布模型、典型的几种生命周期模型包括瀑布模型、快速原型模型、迭代模型、增量模型、螺旋模快速原型模型、迭代模型、增量模型、螺旋模型、喷泉模型和型、喷泉模型和RUP等。等。1.2.21.2.2软件生命周期模型软件生命周期模型(1)瀑布模型瀑布模型这是一个传统的生命周期模型,也是一种顺这是一个传统的生命周期模型,
16、也是一种顺序的模型,自顶向下把一个软件开发过程分为:序的模型,自顶向下把一个软件开发过程分为:系统定义、需求分析、设计、编码、测试和维护系统定义、需求分析、设计、编码、测试和维护等阶段。等阶段。图图1.2瀑布模型图瀑布模型图1.2.21.2.2软件生命周期模型软件生命周期模型(1)瀑布模型瀑布模型瀑布模型的优点是清楚地标识出了软件开瀑布模型的优点是清楚地标识出了软件开发的阶段。它采用自顶向下逐步求精的方式把发的阶段。它采用自顶向下逐步求精的方式把整个开发过程分成不同的阶段,每个阶段的工整个开发过程分成不同的阶段,每个阶段的工作都很明确,因此便于控制开发过程。作都很明确,因此便于控制开发过程。瀑
17、布模型的缺点正是它自身的顺序性所导瀑布模型的缺点正是它自身的顺序性所导致的。实际的开发过程中,在需求阶段很难把致的。实际的开发过程中,在需求阶段很难把用户的需求完全明确下来,因此,当需求变更用户的需求完全明确下来,因此,当需求变更时将会导致阶段反复,而且都要重复需求、设时将会导致阶段反复,而且都要重复需求、设计、编码、测试等过程。计、编码、测试等过程。1.2.21.2.2软件生命周期模型软件生命周期模型(2)快速原型模型)快速原型模型快速原型模型又称原型模型,是快速建立快速原型模型又称原型模型,是快速建立起来的可以在计算机上运行的程序,它能完成起来的可以在计算机上运行的程序,它能完成的功能往往
18、是最终的软件产品所能完成的功能的功能往往是最终的软件产品所能完成的功能的一个子集。的一个子集。快速原型模型一般用于最终系统的早期快速原型模型一般用于最终系统的早期用户评价,在原形基础上用户提出新的需求,用户评价,在原形基础上用户提出新的需求,开发人员快速修改,如图开发人员快速修改,如图1.3所示(图中实线所示(图中实线箭头表示开发过程,虚线箭头表示维护过程)。箭头表示开发过程,虚线箭头表示维护过程)。1.2.21.2.2软件生命周期模型软件生命周期模型(2)快速原型模型)快速原型模型图图1.3快速原型模型快速原型模型1.2.21.2.2软件生命周期模型软件生命周期模型(2)快速原型模型)快速原
19、型模型快速原型法的优点是有助于满足用户的真快速原型法的优点是有助于满足用户的真实需求,并避免了在开发过程中进行较大规模实需求,并避免了在开发过程中进行较大规模的返工。的返工。快速原型法也存在一些问题。开发者常常快速原型法也存在一些问题。开发者常常需要进行多方面因素的平衡,以使原型能够尽需要进行多方面因素的平衡,以使原型能够尽快工作。仅仅因为选择了通用性,而采用了不快工作。仅仅因为选择了通用性,而采用了不合适的操作系统或程序设计语言;仅仅为了演合适的操作系统或程序设计语言;仅仅为了演示功能,而使用了效率低的算法。示功能,而使用了效率低的算法。1.2.21.2.2软件生命周期模型软件生命周期模型(
20、3)增量模型)增量模型增量模型也称为渐增模型,是一种非整体增量模型也称为渐增模型,是一种非整体开发的模型。使用增量模型开发软件时,把软开发的模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。该模型具有构成,并且能够完成特定的功能。该模型具有较大的灵活性,适合于软件需求不明确、设计较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目方案有一定风险的软件项目。1.2.21.2.2软件生命周期模型软件生命周期模型(3
21、)增量模型)增量模型图图1.4增量模型图增量模型图1.2.21.2.2软件生命周期模型软件生命周期模型(3)增量模型)增量模型增量模型和瀑布模型之间的本质区别是:增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它有细节。而增量模型属于非整体开发模型,它推迟某些阶段或者所有阶段中的细节,从而能推迟某些阶段或者所有阶段中的细节,从而能够较早地产生最终软件。够较早地产生最终软件。如果开发人员不能够及时完成最终软件,如
22、果开发人员不能够及时完成最终软件,增量模型是可以选择的方案之一。增量模型是可以选择的方案之一。1.2.21.2.2软件生命周期模型软件生命周期模型(4)螺旋模型)螺旋模型螺旋模型将瀑布模型和增量模型结合起来,螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。螺旋模型将开发过程分为并加入了风险分析。螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为几个螺旋周期,每个螺旋周期可分为4个工作个工作步骤,如图步骤,如图1.5所示:所示:制定计划:制定计划确定目标、方案和制定计划:制定计划确定目标、方案和限制条件;限制条件;风险分析:评估方案、标识风险和解决风险分析:评估方案、标识风险和解决风
23、险;风险;工程实施:建造、测试、安装和提供用工程实施:建造、测试、安装和提供用户支持所需要的任务;户支持所需要的任务;评估:获得用户反馈所需要的任务。评估:获得用户反馈所需要的任务。1.2.21.2.2软件生命周期模型软件生命周期模型(4)螺旋模型)螺旋模型图图1.5 1.5 螺旋模型螺旋模型1.2.21.2.2软件生命周期模型软件生命周期模型(4)螺旋模型)螺旋模型对于大型系统及软件的开发来说,螺旋模对于大型系统及软件的开发来说,螺旋模型是一个很现实的方法。因为螺旋模型使用快型是一个很现实的方法。因为螺旋模型使用快速原型模型作为降低风险的机制,更重要的是,速原型模型作为降低风险的机制,更重要
24、的是,它使开发者在产品演化的任一阶段均可应用快它使开发者在产品演化的任一阶段均可应用快速原型方法。速原型方法。螺旋模型也有其局限性。它难以使用户相螺旋模型也有其局限性。它难以使用户相信演化方法是可控的,它还需要风险评估的专信演化方法是可控的,它还需要风险评估的专门技术。如果一个大的风险未被发现和管理,门技术。如果一个大的风险未被发现和管理,目标系统出现问题的可能性很大;此外,该模目标系统出现问题的可能性很大;此外,该模型不像瀑布模型或者快速原型模型那样被广泛型不像瀑布模型或者快速原型模型那样被广泛应用,其应用经验还有待积累。应用,其应用经验还有待积累。1.2.21.2.2软件生命周期模型软件生
25、命周期模型(5)RUP RUP(RationalUnifiedProcess,统一,统一软件开发过程,统一软件过程)是一个面向对软件开发过程,统一软件过程)是一个面向对象且基于网络的程序开发方法论。象且基于网络的程序开发方法论。RUP中的软件生命周期在时间上被分解为中的软件生命周期在时间上被分解为四个顺序的阶段,分别是:初始阶段四个顺序的阶段,分别是:初始阶段(Inception)、细化阶段()、细化阶段(Elaboration)、)、构造阶段(构造阶段(Construction)和交付阶段)和交付阶段(Transition)。在每个阶段的结尾执行一次)。在每个阶段的结尾执行一次评估以确定这个
26、阶段的目标是否已经满足。如评估以确定这个阶段的目标是否已经满足。如果评估结果令人满意的话,可以允许项目进入果评估结果令人满意的话,可以允许项目进入下一个阶段。下一个阶段。1.2.21.2.2软件生命周期模型软件生命周期模型(5)RUP初始阶段初始阶段目标是为系统建立软件系统并确定系统的目标是为系统建立软件系统并确定系统的边界。边界。细化阶段细化阶段目标是分析问题领域,建立健全的体系结目标是分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰最高风险的元素。构基础,编制项目计划,淘汰最高风险的元素。构造阶段构造阶段将所有剩余的构件和应用程序功能被开发将所有剩余的构件和应用程序功能被开发并集成
27、为产品,所有的功能被详细测试。并集成为产品,所有的功能被详细测试。交付阶段交付阶段重点是确保软件对最终用户是可用的。重点是确保软件对最终用户是可用的。1.2.21.2.2软件生命周期模型软件生命周期模型(5)RUP图图1.6RUP模型模型1.3软件开发方法1.3.1面向过程开发方法面向过程开发方法1.3.2面向对象开发方法面向对象开发方法1.3.3Parnas方法方法1.3.4面向数据结构的软件开发方法面向数据结构的软件开发方法1.3.5面向问题的分析法面向问题的分析法1.3.6原型化方法原型化方法1.3.7可视化开发方法可视化开发方法1.3.8面向方面的软件开发方法面向方面的软件开发方法1.
28、3.9极限编程极限编程1.3.1 1.3.1 面向过程开发方法面向过程开发方法面向过程方法(面向过程方法(Process-OrientedMethod)又被称为结构化方法,该方法的基)又被称为结构化方法,该方法的基本特点是强调本特点是强调“自顶向下、逐步求精自顶向下、逐步求精”,编程,编程实现时强调程序的实现时强调程序的“单入口和单出口单入口和单出口。其特点是:程序的基本执行过程主要不是其特点是:程序的基本执行过程主要不是由用户控制,而是由程序控制的,并且按时序由用户控制,而是由程序控制的,并且按时序进行。面向过程的方法的优点是简单实用,缺进行。面向过程的方法的优点是简单实用,缺点是维护困难。
29、点是维护困难。面向过程的方法来自于面向过程的方法来自于20世纪世纪60至至70年年代流行的面向过程的程序设计语言。这些语言代流行的面向过程的程序设计语言。这些语言的特点是用顺序、选择、循环这的特点是用顺序、选择、循环这3种基本结构种基本结构来组织程序编制,实现设计目标。来组织程序编制,实现设计目标。1.3.2 1.3.2 面向对象开发方法面向对象开发方法面向对象方法(面向对象方法(Object-OrientedMethod)是一种运用对象、类、消息传递、)是一种运用对象、类、消息传递、继承、封装、聚合、多态性等概念来构造软件继承、封装、聚合、多态性等概念来构造软件系统的软件开发方法。系统的软件
30、开发方法。基本特点是:将对象的属性和方法(即数基本特点是:将对象的属性和方法(即数据和操作)封装起来,形成信息系统的基本执据和操作)封装起来,形成信息系统的基本执行单位,再利用对象的集成特征,由基本执行行单位,再利用对象的集成特征,由基本执行单位派生出其他执行单位,从而产生许多新的单位派生出其他执行单位,从而产生许多新的对象。众多的离散对象通过事件或消息连接起对象。众多的离散对象通过事件或消息连接起来,就形成了软件系统。来,就形成了软件系统。与面向对象的方法相对应地产生了面向对与面向对象的方法相对应地产生了面向对象的程序设计语言,如象的程序设计语言,如Java,C+,VisualBasic语言
31、等。语言等。1.3.3 Parnas1.3.3 Parnas方法方法Parnas方法是由方法是由.Parnas在在1972年提出年提出的。由于当时软件在可维护性和可靠性方面存的。由于当时软件在可维护性和可靠性方面存在着严重问题,因此在着严重问题,因此Parnas提出的方法是针对提出的方法是针对以下两个问题的。以下两个问题的。首先,首先,Parnas提出了信息隐蔽原则:在概提出了信息隐蔽原则:在概要设计时列出将来可能发生变化的因素,并在要设计时列出将来可能发生变化的因素,并在模块划分时将这些因素放到个别模块的内部。模块划分时将这些因素放到个别模块的内部。第二条原则是在软件设计时应对可能发生的种第
32、二条原则是在软件设计时应对可能发生的种种意外故障采取措施。种意外故障采取措施。Parnas对软件开发提出了深刻的见解。对软件开发提出了深刻的见解。遗憾的是,他没有给出明确的工作流程。所以遗憾的是,他没有给出明确的工作流程。所以这一方法不能独立使用,只能作为其它方法的这一方法不能独立使用,只能作为其它方法的补充。补充。1.3.4 1.3.4 面向数据结构的软件开发方法面向数据结构的软件开发方法Jackson方法是最典型的面向数据结构的方法是最典型的面向数据结构的软件开发方法。软件开发方法。这一方法也被称为面向数据结这一方法也被称为面向数据结构的软件开发方法。构的软件开发方法。Jackson方法把
33、问题分解为由三种基本结方法把问题分解为由三种基本结构形式表示的各部分的层次结构。三种基本的构形式表示的各部分的层次结构。三种基本的结构形式就是顺序、选择和重复。三种数据结结构形式就是顺序、选择和重复。三种数据结构可以进行组合,形成复杂的结构体系。构可以进行组合,形成复杂的结构体系。这一方法从目标系统的输入、输出数据结这一方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图。就可得到完整的程序结构图。1.3.5 1.3.5 面向问题的分析法面向问题的分析法PAM(ProblemAnalysisMethod)是
34、)是80年代末由日立公司提出的一种软件开发方法。年代末由日立公司提出的一种软件开发方法。它的基本思想是考虑到输入、输出数据结构,它的基本思想是考虑到输入、输出数据结构,指导系统的分解,在系统分析指导下逐步综合。指导系统的分解,在系统分析指导下逐步综合。这一方法的具体步骤是:先从输入、输出这一方法的具体步骤是:先从输入、输出数据结构导出基本处理框;然后分析这些处理数据结构导出基本处理框;然后分析这些处理框之间的先后关系;再按先后关系逐步综合处框之间的先后关系;再按先后关系逐步综合处理框,直到画出整个系统的理框,直到画出整个系统的PAD图。图。1.3.5 1.3.5 面向问题的分析法面向问题的分析
35、法这一方法本质上是综合的自底向上的方法,这一方法本质上是综合的自底向上的方法,但在逐步综合之前已进行了有目的的分解,这但在逐步综合之前已进行了有目的的分解,这个目的就是充分考虑系统的输入、输出数据结个目的就是充分考虑系统的输入、输出数据结构。构。PAM方法的另一个优点是使用方法的另一个优点是使用PAD图。图。这是一种二维树形结构图,是到目前为止最好这是一种二维树形结构图,是到目前为止最好的详细设计表示方法之一。当然由于在输入、的详细设计表示方法之一。当然由于在输入、输出数据结构与整个系统之间同样存在着鸿沟,输出数据结构与整个系统之间同样存在着鸿沟,这一方法仍燃只适用于中小型问题。这一方法仍燃只
36、适用于中小型问题。1.3.6 1.3.6 原型化方法原型化方法原型法(原型法(Prototyping)是)是20世纪世纪80年代随着计算机软件技术的发展,特别是在关年代随着计算机软件技术的发展,特别是在关系数据库系统、第四代程序生成语言和各种系系数据库系统、第四代程序生成语言和各种系统开发生成环境产生的基础上,提出的一种全统开发生成环境产生的基础上,提出的一种全新的系统开发方法。它扬弃了一步步周密细致新的系统开发方法。它扬弃了一步步周密细致地调查分析,然后逐步整理出文字档案,最后地调查分析,然后逐步整理出文字档案,最后才能让用户看到结果的繁琐作法。才能让用户看到结果的繁琐作法。开发原型化系统一
37、般包括以下几个阶段:开发原型化系统一般包括以下几个阶段:确定用户需求确定用户需求开发原始模型开发原始模型征求用户对初始原型的改进意见征求用户对初始原型的改进意见修改原型修改原型1.3.6 1.3.6 原型化方法原型化方法原型化开发比较适合于用户需求不清、业原型化开发比较适合于用户需求不清、业务理论不确定、需求经常变化的情况。当系统务理论不确定、需求经常变化的情况。当系统规模不是很大也不太复杂时采用该方法是比较规模不是很大也不太复杂时采用该方法是比较好的。原型法随着时代的变迁被不断丰富,目好的。原型法随着时代的变迁被不断丰富,目前常用的原型法又分为:快速原型法、实用性前常用的原型法又分为:快速原
38、型法、实用性原型法、抛弃性原型、演进原型法、实验原型原型法、抛弃性原型、演进原型法、实验原型法等。快速原型法就是最初的原型法,通过原法等。快速原型法就是最初的原型法,通过原型引导用户需求的方法。型引导用户需求的方法。1.3.7 1.3.7 可视化开发方法可视化开发方法其实可视化开发并不能单独的作为一种开其实可视化开发并不能单独的作为一种开发方法,更加贴切的说可以认为它是一种辅助发方法,更加贴切的说可以认为它是一种辅助工具。工具。可视化开发使我们把注意力集中在业务逻可视化开发使我们把注意力集中在业务逻辑和业务流程上,用户界面可以用可视化工具辑和业务流程上,用户界面可以用可视化工具方便的构成。通过
39、操作界面元素,例如菜单、方便的构成。通过操作界面元素,例如菜单、按钮、对话框、编辑框、单选框、复选框、列按钮、对话框、编辑框、单选框、复选框、列表框和滚动条等,由可视开发工具自动生成应表框和滚动条等,由可视开发工具自动生成应用软件。用软件。1.3.8 1.3.8 面向方面的软件开发方法面向方面的软件开发方法 面向方面编程(面向方面编程(Aspect-OrientedProcess,AOP)是对软件工程的一种革新性)是对软件工程的一种革新性思考。引入思考。引入AOP的目的是解决诸如安全性、的目的是解决诸如安全性、日志、持久化、调试、跟踪、分布式处理、性日志、持久化、调试、跟踪、分布式处理、性能监
40、控以及更有效地处理异常等问题的。能监控以及更有效地处理异常等问题的。面向方面软件开发(面向方面软件开发(AOSD)使用这一方)使用这一方法,为功能需求、非功能需求、平台特性等创法,为功能需求、非功能需求、平台特性等创造了更好的模块性,使你开发出更易于理解的造了更好的模块性,使你开发出更易于理解的系统,也更易于配置和扩展,以满足和解决涉系统,也更易于配置和扩展,以满足和解决涉众的需求。众的需求。1.3.9 1.3.9 极限编程极限编程极限编程(极限编程(ExtremeProgramming,简,简称称XP)是由)是由KentBeck在在1996年提出的,它是年提出的,它是一种软件工程方法学,是敏
41、捷软件开发中最富一种软件工程方法学,是敏捷软件开发中最富有成效的几种方法学之一。有成效的几种方法学之一。XP的支持者认为软件需求的不断变化是的支持者认为软件需求的不断变化是很自然的现象,是软件项目开发中不可避免的、很自然的现象,是软件项目开发中不可避免的、也是应该欣然接受的现象;他们相信,同传统也是应该欣然接受的现象;他们相信,同传统的在项目起始阶段定义好所有需求再费尽心思的在项目起始阶段定义好所有需求再费尽心思的控制变化的方法相比,有能力在项目周期的的控制变化的方法相比,有能力在项目周期的任何阶段去适应变化,将是更加现实更加有效任何阶段去适应变化,将是更加现实更加有效的方法。的方法。1.4
42、1.4 软件开发新技术软件开发新技术1.4.1多层体系结构多层体系结构1.4.2中间件中间件1.4.3统一建模语言统一建模语言UML1.4.4平台无关平台无关1.4.5WebService与与SOA1.4.6J2EE、.NET与与MVC1.4.7网格与云计算网格与云计算1.4.8标准化标准化1.4.9软件即服务软件即服务SaaS1.4.10软件外包服务软件外包服务1.4.1 1.4.1 多层体系结构多层体系结构多层体系主要指多层多层体系主要指多层C/S结构概念的出现结构概念的出现与发展。多层体系,是指单应用服务节点的多与发展。多层体系,是指单应用服务节点的多层结构。层结构。抽象并提出多层体系结
43、构主要是为了解决抽象并提出多层体系结构主要是为了解决数据库技术、前台展现技术及软件不断普及后数据库技术、前台展现技术及软件不断普及后出现的以下几个问题:出现的以下几个问题:应用服务需要应付大量的用户,需要能应用服务需要应付大量的用户,需要能够同时响应更多用户的需求,即大家常讲的良够同时响应更多用户的需求,即大家常讲的良好的可伸缩性;好的可伸缩性;应用服务希望核心数据不被别人直接访应用服务希望核心数据不被别人直接访问;问;应用服务希望能将用户界面、业务逻辑应用服务希望能将用户界面、业务逻辑与数据访问等在逻辑甚至物理上分开处理。与数据访问等在逻辑甚至物理上分开处理。1.4.1 1.4.1 多层体系
44、结构多层体系结构现在最普及的多层结构主要指包括用户界现在最普及的多层结构主要指包括用户界面层(展现层),业务逻辑层与数据访问层的面层(展现层),业务逻辑层与数据访问层的三层结构,其中以三层结构,其中以MVC最为流行。其他还有四最为流行。其他还有四层、五层等实际也没有脱离这个范畴,或者根层、五层等实际也没有脱离这个范畴,或者根据特殊的需求增加了专门处理部分(层)而已。据特殊的需求增加了专门处理部分(层)而已。目前成熟的实现多层体系的技术手段有很目前成熟的实现多层体系的技术手段有很多,主要包括多,主要包括J2EE与与.NET两个分支,在两个分支,在J2EE体系中的体系中的JSP,Servlet,J
45、avaBean,JMS,EJB等技术,以及流行的等技术,以及流行的Struts,Spring,Hibernate,JSF等框架。等框架。1.4.2 1.4.2 中间件中间件中间件的概念是指一种转接设备。在软件中间件的概念是指一种转接设备。在软件领域,中间件也正是具有这样一种含义:它位领域,中间件也正是具有这样一种含义:它位于应用软件与基础系统平台之间,实现类似于于应用软件与基础系统平台之间,实现类似于转接的功能。转接的功能。中间件的类型很多,有数据库中间件、消中间件的类型很多,有数据库中间件、消息中间件、交易中间件等。中间件的核心功能息中间件、交易中间件等。中间件的核心功能便是在应用与系统之间
46、建立一个桥梁,从而能:便是在应用与系统之间建立一个桥梁,从而能:降低开发难度与工作量;降低开发难度与工作量;提高软件质量;提高软件质量;提高开发效率;提高开发效率;提升系统并发访问性能。提升系统并发访问性能。1.4.2 1.4.2 中间件中间件中间件的范围很广,广义来讲,除了通常中间件的范围很广,广义来讲,除了通常意义上我们讲的交易中间件(如意义上我们讲的交易中间件(如TUXEDO)以)以及消息中间件(如及消息中间件(如IBMMQ)外,)外,J2EE体系中体系中的的WebSphere,WebLogic等的容器,数据库等的容器,数据库访问的控件,都可以算做是中间件。中间件技访问的控件,都可以算做
47、是中间件。中间件技术的出现,大大提高了分布式系统的与多层体术的出现,大大提高了分布式系统的与多层体系结构的实现效率与质量,应该是一个非常重系结构的实现效率与质量,应该是一个非常重要的技术进步。要的技术进步。1.4.3 1.4.3 统一建模语言统一建模语言UMLUML统一建模语言(统一建模语言(UnifiedModelingLanguage,UML)的出现是为了给面向对象)的出现是为了给面向对象分析与设计提供标准的表达手段,在实践中已分析与设计提供标准的表达手段,在实践中已经被大量的使用。经被大量的使用。用例图、类图、对象图、顺序图、状态图、用例图、类图、对象图、顺序图、状态图、活动图、组件图、
48、实施图等活动图、组件图、实施图等UML标准,从各个标准,从各个角度制定了面向对象分析与设计结果的表达标角度制定了面向对象分析与设计结果的表达标准,其中对类之间各种关系类型的抽象,例如准,其中对类之间各种关系类型的抽象,例如依赖、关联、继承,较为有效地帮助面向对象依赖、关联、继承,较为有效地帮助面向对象系统分析员将面向对象编程语言中提供的类之系统分析员将面向对象编程语言中提供的类之间的语法与所分析对象各抽象部分之间的关系间的语法与所分析对象各抽象部分之间的关系对应起来。对应起来。1.4.4 1.4.4 平台无关平台无关软件开发的平台无关是指在任何一个平台软件开发的平台无关是指在任何一个平台上开发
49、的软件,不经任何修改,便可以在其他上开发的软件,不经任何修改,便可以在其他平台上运行。这方面应以平台上运行。这方面应以Java为主要代表,为主要代表,Java的平台无关性已经成为其最有优势的特征的平台无关性已经成为其最有优势的特征之一。之一。另外,中间件也应该被算做是一种平台无另外,中间件也应该被算做是一种平台无关技术,许多中间件作为一种底层平台与应用关技术,许多中间件作为一种底层平台与应用开发之间的桥梁,从而应用可以建立在与底层开发之间的桥梁,从而应用可以建立在与底层平台无关的中间件之上。平台无关的中间件之上。1.4.5 Web Service1.4.5 Web Service与与SOASO
50、A面向服务的架构面向服务的架构SOA(Service-OrientedArchitecture),支持将企业业务转换为一组),支持将企业业务转换为一组相互链接的服务或者可重复业务任务,可在需相互链接的服务或者可重复业务任务,可在需要时通过网络访问这些服务和任务。虽然要时通过网络访问这些服务和任务。虽然SOA的概念中包括了大量其他的技术与产品,但事的概念中包括了大量其他的技术与产品,但事实上实上WebService标准的成熟和应用的普及为标准的成熟和应用的普及为广泛的实现广泛的实现SOA架构提供了基础,其中包括了架构提供了基础,其中包括了UDDI目录查找,目录查找,SOAP访问与访问与WSDL接