软件工程重点_第1页
软件工程重点_第2页
软件工程重点_第3页
软件工程重点_第4页
软件工程重点_第5页
已阅读5页,还剩225页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程

1.1软件危机

1.2软件工程

1.3软件生命周期

1.4软件过程第1章软件工程学概述第1章软件工程学概述软件的定义软件(

Software)是计算机系统中与硬件相互依存的另一部分,它是包括程序(Program)

,数据(Data)及其相关文档(Document)的完整集合。软件=程序+数据+文档程序=算法+数据结构1.1.1软件危机的介绍软件危机(软件萧条、软件困扰):是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。实际上,几乎所有软件都不同程度地存在这些问题。软件危机包含下述两方面的问题:如何开发软件,满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。软件危机的典型表现:(1)对软件开发成本和进度的估计常常很不准确;(2)用户对“已完成的”软件系统不满意的现象经常发生;(3)软件产品的质量往往靠不住;(4)软件常常是不可维护的;(5)软件通常没有适当的文档资料;(6)软件成本在计算机系统总成本中所占的比例逐年上升;(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。1.1.2产生软件危机的原因(1)与软件本身的特点有关软件是逻辑部件。软件不会被“用坏”,如果发现了错误,很可能是开发时期引入。软件规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。(2)与软件开发与维护的方法不正确有关忽视软件需求分析的重要性。对用户要求没有完整准确的认识就匆忙着手编写程序。越早开始写程序,完成它所需要用的时间往往越长。认为软件开发就是写程序并设法使之运行。程序只是完整的软件产品的一个组成部分。一个软件产品必须由一个完整的配置组成,软件配置主要包括程序、文档和数据等成分。在软件开发的不同阶段进行修改需要付出的代价是很不相同的,见图1.1。图1.1引入同一变动付出的代价随时间变化的趋势轻视软件维护。维护是极端艰巨复杂的工作,需要花费很大代价。软件维护的费用占软件总费用的55%~70%。软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。1.1.3消除软件危机的途径

对计算机软件有正确的认识。认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。应该推广使用在实践中总结出来的开发软件的成功技术和方法,并继续研究探索。应该开发和使用更好的软件工具。总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。

1.2.3软件工程方法学

软件工程包括技术和管理两方面的内容。管理:通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。技术(软件工程方法学):通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。软件工程方法学3要素:方法:是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具:是为运用方法而提供的自动的或半自动的软件工程支撑环境;如,CASE(Computer-AidedSoftwareEngineering)工具过程:需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。1.3软件生命周期

三个时期八个阶段:软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)三个时期组成,每个时期又进一步划分成若干个阶段。三个时期:八个阶段:软件生命周期软件定义软件开发软件维护问题定义可行性研究需求分析概要设计详细设计编码和单元测试综合测试运行维护系统设计系统实现1.4软件过程软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。为获得高质量的软件产品,软件过程必须科学、有效。传统的瀑布模型实际的瀑布模型1.4.1瀑布模型瀑布模型的特点:1.阶段间具有顺序性和依赖性前一阶段的工作完成之后,才能开始后一阶段的工作;前一阶段的输出文档就是后一阶段的输入文档。2.推迟实现的观点对于规模较大的软件项目来说,往往编码开始得越早最终完成开发工作所需要的时间反而越长。3.质量保证的观点每个阶段都必须完成规定的文档,是“文档驱动”的模型;每个阶段结束前都要对所完成的文档进行评审,尽早发现问题,改正错误。瀑布模型的优点:可强迫开发人员采用规范的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。瀑布模型的缺点:只能通过文档了解产品,不经过实践的需求是不切实际的。实际项目很少按照该模型给出的顺序进行;用户常常难以清楚地给出所有需求;用户必须有耐心,等到系统开发完成瀑布模型适用于:

需求是预知的;软件实现方法是成熟的;项目周期较短。快速原型模型1.4.2快速原型模型

快速原型:是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。

快速原型模型的特点:快速原型模型不带反馈环,软件产品的开发基本上是线性顺序进行的。快速原型的本质是“快速”。应该尽可能快地建造出原型系统,以加速软件开发过程,节约成本。根据原型的不同作用,有三类原型模型:探索型原型——用于开发的需求分析阶段实验型原型——主要用于设计阶段演化型原型——用于及早向用户提交一个原型系统快速原型模型的运用方式:

抛弃策略——探索型和实验型采用此策略附加策略——演化型快速原型采用此策略1.4.3增量模型

增量模型把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。

增量模型项目日历时间软件功能性和特征12345第2次增量发布增量212345第n次增量发布增量n12345第1次增量发布增量1┇5部署(发布,反馈)4构造(编码,测试)3建模(分析,设计)2计划1交流增量模型的优点:人员分配灵活,刚开始不用投入大量人力资源。当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径。逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品。增量模型的难点:软件体系结构必须是开放的。模型本身是自相矛盾的。整体——独立构件。不同的构件并行地构建有可能加快工程进度,但是冒无法集成到一起的风险。增量模型适用于:适用于需求经常改变的软件开发过程。如果在项目既定的商业要求期限之前不可能找到足够的开发人员,在这种情况下,增量模型显得特别有用。1.4.4螺旋模型

螺旋模型的基本思想:使用原型及其他方法来尽量降低风险。把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。

简化的螺旋模型完整的螺旋模型螺旋模型的优点:主要优势在于它是风险驱动的。对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试或测试不足所带来的风险;维护只是模型的另一个周期,维护和开发之间没有本质区别。螺旋模型的缺点:采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失。过多的迭代次数会增加开发成本,延迟提交时间。螺旋模型适用于:特别适用于庞大、复杂并具有高风险的系统。适用于内部开发的大规模软件项目。1.4.5喷泉模型

喷泉模型:是典型的面向对象生命周期模型。

“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。为避免使用喷泉模型开发软件时开发过程过分无序,应该把一个线性过程(例如,快速原型模型或图中的中心垂线)作为总目标。

喷泉模型的优点:该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。多次反复地增加或明确目标系统,而不是本质性的改动,降低错误的可能性。喷泉模型的缺点:由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,不利于项目的管理。要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。喷泉模型适用于:适用于面向对象的软件开发过程。第2章可行性研究回答“对于上一个阶段所确定的问题有行得通的解决办法吗?”系统分析员需要进行一次大大压缩和简化了的系统分析和设计过程。研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。

2.1可行性研究的任务可行性研究的目的:不是解决问题,而是确定问题是否值得去解决。可行性研究的实质:进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。

可行性研究的内容:首先进一步分析和澄清问题定义,导出系统的逻辑模型;然后从系统逻辑模型出发,探索若干种可供选择的主要解法(即系统实现方案);对每种解法都研究它的可行性,至少应该从三方面研究每种解法的可行性

。主要方面:技术可行性,使用现有的技术能实现这个系统吗?经济可行性,这个系统的经济效益能超过它的开发成本吗?操作可行性,系统的操作方式在这个用户组织内行得通吗?其他方面:运行可行性,系统的运行方式是否可行?法律可行性,系统是否侵犯他人、集体或国家的利益,是否违反法律?2.4数据流图数据流图(DFD):是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。2.4.1符号基本符号:数据源点/终点:通常是人或部门,可重复表示;处理:一个处理框可以代表一系列程序、单个程序或程序的一个模块;数据存储:可以表示一个文件、文件的一部分、数据库的元素或记录的一部分等,数据存储是处于lm静止状态的数据;数据流:描绘所有可能的数据流向,而不应该描绘出现某个数据流的条件,数据流是处于运动中的数据。2.5数据字典数据字典:是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。数据流图和数据字典共同构成系统的逻辑模型。2.5.1数据字典的内容数据字典的组成:数据流数据流分量(即数据元素)数据存储处理(用其它工具描述更方便,如IPO图)在数据字典中记录数据元素的下列信息:一般信息定义使用特点控制信息分组信息

2.5.3数据字典的用途数据字典最重要的用途是作为分析阶段的工具;数据字典中包含的每个数据元素的控制信息是很有价值的。很容易估计改变一个数据将产生的影响;数据字典是开发数据库的第一步,而且是很有价值的一步。2.5.4数据字典的实现计算机实现:目前,数据字典几乎总是作为CASE(计算机辅助软件工程)“结构化分析与设计工具”的一部分实现的。在开发大型软件系统的过程中,数据字典的规模和复杂程度迅速增加,人工维护数据字典几乎是不可能的。人工实现:采用卡片形式书写数据字典,每张卡片上保存描述一个数据的信息。每张卡片上主要应该包含下述这样一些信息:名字、别名、描述、定义、位置。

3.1需求分析的任务

3.2与用户沟通获取需求的方法

3.3分析建模与规格说明

3.4实体-联系图

3.5数据规范化

3.6状态转换图

3.7其他图形工具

3.8验证软件需求第3章需求分析分析模型的结构需求分析过程应该建立3种模型,分别是:数据模型功能模型行为模型

数据字典:是分析模型的核心,它描述软件使用或产生的所有数据对象。实体-联系图:描绘数据对象及数据对象之间的关系,是用于建立数据模型的图形。数据流图:描绘当数据在软件系统中移动时被变换的逻辑过程,指明系统具有的变换数据的功能,因此,数据流图是建立功能模型的基础。状态转换图(简称为状态图):指明了作为外部事件结果的系统行为。为此,状态转换图描绘了系统的各种行为模式(称为“状态”)和在不同状态间转换的方式。状态转换图是行为建模的基础。3.4实体-联系图概念性数据模型是一种面向问题的数据模型,是按照用户的观点对数据建立的模型。它描述了从用户角度看到的数据,它反映了用户的现实环境,且与在软件系统中的实现方法无关。数据模型中包含3种相互关联的信息:数据对象数据对象的属性数据对象彼此间相互连接的关系

3.4.1数据对象

数据对象:是对软件必须理解的复合信息的抽象。复合信息是指具有一系列不同性质或属性的事物,仅有单个值的事物不是数据对象。数据对象可以是外部实体、事物、行为、事件、角色、单位、地点或结构等。数据对象彼此间是有关联的。3.4.2属性属性:定义了数据对象的性质。必须把一个或多个属性定义为“标识符”。根据对问题的理解来确定特定数据对象的合适的属性。

3.4.3联系联系:数据对象彼此之间相互连接的方式称为联系,也称为关系。联系可分为以下3种类型:一对一联系(1∶1)一对多联系(1∶N)多对多联系(M∶N)联系也可能有属性。3.4.4实体-联系图的符号ER图中包含:实体(即数据对象),用矩形框表示;关系,用连接相关实体的菱形框表示;属性,用椭圆形或圆角矩形表示,并用直线把实体(或关系)与其属性连接起来。例1:某校教学管理系统的ER图ER图的优点:比较接近人的习惯思维方式;用简单的图形符号表达系统分析员对问题域的理解,用户也容易理解,可以作为用户与分析员之间有效的交流工具。数据建模工具:以自动化的方式创建ER图、数据字典及相关模型。AllFusionERWin辅助设计数据库、数据对象、结构、关键元素ER/Studio支持实体-关系建模OracleDesigner建模、应用系统和数据库设计MetaScope图形化显示数据ModelSphereVisibleAnalyst模型可视化分析例2:习题3.3,银行储蓄系统的ER图银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。银行储蓄系统的ER图ER图练习题:请为某仓库的管理设计一个ER模型。该仓库主要管理零件(包括零件编号、名称、颜色、重量)的定购和供应等事项。仓库向工程项目(包括项目编号、项目名称、开工日期)供应零件,并且根据需要向供应商(包括供应商编号、名称、地址)定购零件。仓库管理系统的ER图4.1概述4.2有穷状态机4.3Petri网4.4Z语言第4章形式化说明技术软件工程使用方法的分类:非形式化,用自然语言描述需求规格说明;半形式化,用数据流图或实体-联系图建立模型;形式化,是描述系统性质的基于数学的技术,也就是说,如果一种方法有坚实的数学基础,那么它就是形式化的。

4.1概述

4.1.1非形式化方法的缺点矛盾,指一组相互冲突的陈述。二义性,指读者可以用不同方式理解的陈述。含糊性,几乎不可避免地会出现含糊性。不完整性,不完整性可能是在系统规格说明中最常遇到的问题之一。抽象层次混乱,指在非常抽象的陈述中混进了一些关于细节的低层次陈述。

4.1.2形式化方法的优点数学能够简洁准确地描述物理现象、对象或动作的结果,因此是理想的建模工具。特别适合于表示状态,也就是表示“做什么”。可以在不同的软件工程活动之间平滑地过渡。不仅功能规格说明,而且系统设计也可以用数学表达,当然,程序代码也是一种数学符号。它提供了高层确认的手段。可以使用数学方法证明,设计符合规格说明,程序代码正确地实现了设计结果。第5章总体设计5.1设计过程5.2设计原理5.3启发规则5.4描绘软件结构的图形工具5.5面向数据流的设计方法设计阶段:从工程管理的角度,可以将软件设计分为总体设计阶段和详细设计阶段。从技术的角度,传统的结构化方法将软件设计划分为体系结构设计、数据设计、接口设计和过程设计4部分。面向对象方法则将软件设计划分为体系结构设计、类设计/数据设计、接口设计和构件级设计4部分。模块独立程度的两个定性标准度量:耦合衡量不同模块彼此间互相依赖(连接)的紧密程度。耦合要低,即每个模块和其他模块之间的关系要简单;内聚衡量一个模块内部各个元素彼此结合的紧密程度。内聚要高,每个模块完成一个相对独立的特定子功能。1.耦合耦合:是对一个软件结构内不同模块之间互连程度的度量。要求:在软件设计中应该追求尽可能松散耦合的系统。可以研究、测试或维护任何一个模块,而不需要对系统的其他模块有很多了解;模块间联系简单,发生在一处的错误传播到整个系统的可能性就很小;模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。耦合程度的度量:(1)非直接耦合/完全独立(nodirectcoupling)如果两个模块中的每一个都能独立地工作而不需要另一个模块的存在,那么它们完全独立。在一个软件系统中不可能所有模块之间都没有任何连接。(2)数据耦合(datacoupling)如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。评价:系统中至少必须存在这种耦合。一般说来,一个系统内可以只包含数据耦合。数据耦合是理想的目标。维护更容易,对一个模块的修改不会是另一个模块产生退化错误。(3)控制耦合(controlcoupling)如果两个模块彼此间传递的信息中有控制信息,这种耦合称为控制耦合。评价:控制耦合往往是多余的,把模块适当分解之后通常可以用数据耦合代替它。被调用的模块需知道调用模块的内部结构和逻辑,降低了重用的可能性。(4)特征耦合(stampcoupling)当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。评价:被调用的模块可使用的数据多于它确实需要的数据,这将导致对数据的访问失去控制,从而给计算机犯罪提供了机会。无论何时把指针作为参数进行传递,都应该仔细检查该耦合。(5)公共环境耦合(commoncoupling)当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等等。公共环境耦合的类型:

一个模块往公共环境送数据,另一个模块从公共环境取数据。数据耦合的一种形式,是比较松散的耦合。两个模块都既往公共环境送数据又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间。评价:与结构化编程矛盾,生成的代码完全不可读。如果在一个模块中对一个全局变量的声明进行修改,必须修改能够访问该全局变量的每一个模块。公共环境耦合的模块难于重用,必须提供一个全局变量的清单。即使模块本身不改变,它和产品中其他模块之间公共环境耦合的实例数也会变化非常大。潜在危险很大。模块暴露出必需要更多的数据,难以控制数据存取,而且会导致计算机犯罪。有些情况下公共环境耦合更好。(6)内容耦合(contentcoupling)最高程度的耦合是内容耦合。如果出现下列情况之一,两个模块间就发生了内容耦合:一个模块访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口。耦合是影响软件复杂程度的一个重要因素。应该采取下述设计原则:

尽量使用数据耦合,

少用控制耦合和特征耦合,

限制公共环境耦合的范围,

完全不用内容耦合。2.内聚内聚:标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。要求:设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多;但是,低内聚不要使用。内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。内聚程度的度量:(1)偶然内聚(coincidentalcohesion)如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚。MA=B+CGETCHERIFR=5THENS=1评价:模块内各元素之间没有实质性联系,很可能在一种应用场合需要修改这个模块,在另一种应用场合又不允许这种修改,从而陷入困境;可理解性差,可维护性产生退化;模块是不可重用的。解决方案:将模块分成更小的模块,每个小模块执行一个操作。(2)逻辑内聚(logicalcohesion)如果一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚。评价:接口难以理解,造成整体上不易理解;完成多个操作的代码互相纠缠在一起,即使局部功能的修改有时也会影响全局,导致严重的维护问题;难以重用。解决方案:模块分解。(3)时间内聚(temporalcohesion)如果一个模块包含的任务必须在同一段时间内执行,就叫时间内聚。执行初始化打开旧主文件、新主文件、事务文件和打印文件;初始化销售地区表;读第一条事务记录和第一条旧主文件记录;评价:时间关系在一定程度上反映了程序某些实质,所以时间内聚比逻辑内聚好一些。模块内操作之间的关系很弱,与其他模块的操作却有很强的关联。时间内聚的模块不太可能重用。(4)过程内聚(proceduralcohesion)如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。使用程序流程图作为工具设计软件时,常常通过研究流程图确定模块的划分,这样得到的往往是过程内聚的模块。评价:比时间内聚好,至少操作之间是过程关联的。仍是弱连接,不太可能重用模块。解决方案:分割为单独的模块,每个模块执行一个操作。(5)通信内聚(communicationalcohesion)如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。即在同一个数据结构上操作。评价:模块中各操作紧密相连,比过程内聚更好。不能重用。解决方案:分成多个模块,每个模块执行一个操作。(6)顺序内聚(sequentialcohesion)如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行,则称为顺序内聚。评价:根据数据流图划分模块时,通常得到顺序内聚的模块,这种模块彼此间的连接往往比较简单。(7)功能内聚(functionalcohesion)如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。功能内聚是最高程度的内聚。评价:模块可重用,应尽可能重用;可隔离错误,维护更容易;扩充产品功能时更容易。七种内聚的优劣评分结果:高内聚:功能内聚10分顺序内聚 9分 中内聚:通信内聚 7分 过程内聚 5分低内聚:时间内聚 3分逻辑内聚 1分偶然内聚 0分设计时力争做到高内聚,并且能够辨认出低内聚的模块。第6章详细设计6.1结构程序设计6.2人机界面设计6.3过程设计的工具6.4面向数据结构的设计方法6.5程序复杂程度的定量度量6.6小结6.1结构程序设计定义:如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。70年代初N.Wirth在Pascal语言中设置支持“顺序结构”、“IF-THEN-ELSE选择结构”、“DO-WHILE重复结构”或“DO-UNTIL重复结构”三种基本控制结构语句。6.13种基本的控制结构6.3过程设计的工具1.图形工具:利用图形工具可以把过程的细节用图形描述出来。如程序流程图,N-S图,PAD。2.表格工具:用一张表来描述过程的细节,在这张表中列出了各种可能的操作和相应的条件。如判定表,判定树。3.语言工具:用某种高级语言(叫做伪码)来描述过程的细节。如PDL。

缺点:本质上不具备逐步求精的特点,使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构;转移控制太方便;不易表示数据结构。

趋势:使用越来越少。

ISO认可的规定符号:优点:直观、容易掌握,且历史“久”,使用广泛。6.3.1程序流程图(程序框图)图6.3程序流程图中使用的符号。(1)顺序型AB3种基本控制结构(2)选择型PBAFT(2)多情况选择型(case)TA1FP=1TA2FP=2…TAnFP=n(3)先判定型循环

(do-while)TPSF后判定型循环

(do-until)FSTP例1、某模块有两个输入a和b,一个输出c,当满足条件(a>0)and(b<2)时,c=a+b,否则c=a-b。画出该模块的程序流程图。ab(a>0)and(b<2)c=a-bc=a+bFTc6.3.2盒图(N-S图)

Nassi和Shneiderman

1973年提出,是一种符合结构化程序设计原则的图形描述工具,用方框图代替传统的流程图。图6.4盒图的基本符号

3种基本控制结构:

(1)顺序型ABCABF

PTthen–部分else–部分(2)选择型(If–then–else)

(2)多分支选择型(CASE型)A1=1A2An........P=2=n(3)WHILE重复型UNTIL重复型

S(循环体)DO-WHILEPS(循环体)DO-UNTILP(先测试循环)(后测试循环)循环条件移出标记ACBFX6TA:D(调用结构)x4TFDo-Untilx5ighfkx1TFbDo-Untilx6ajx21cDo-Whilex323dek:例:图4.43盒图(N-S图)的特点:(1)功能域(即,一个特定控制结构的作用域)明确,可以从盒图上一眼就看出来。(2)不可能任意转移控制。(3)很容易确定局部和全程数据的作用域。(4)很容易表现嵌套关系,也可以表示模块的层次结构。注、使程序员用结构化的方式思考和解决问题。例1、某模块有两个输入a和b,一个输出c,当满足条件(a>0)and(b<2)时,c=a+b,否则c=a-b。画出该模块的N-S图。c=a+b(a>0)and(b<2)TFbac=a-bc【例2、某模块有三个输入a、b和c,一个输出s,当a=1时,s=b+2c,当a=2时,s=2b-c,当a=3时,s=b。画出该模块的N-S图。】a23s=2b-cs=bcbas=b+2c1s6.3.3PAD图(问题分析图)1973年由日本日立公司发明。它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。图6.5PAD图的基本符号

3种基本控制结构:(1)顺序型(2)选择型

ABCABTFP(2)多分支选择型(CASE型)

A1A2An...P=1=2=n(3)WHILE重复型

WHILE

PS(先测试循环)等价的PASCAL语言:WHILEPDOSUNTIL重复型

(后测试循环)UNTIL

PS等价的PASCAL语言:REPEATSUNTILPdef格式:def

开始

结束

aj

Untilx5i

Untilx6bx1fx4ghx2de=1=2=3

While

x3c例:开始

结束

aj

Untilx5i

Untilx6bx1kfx4gh例:defkx2de=1=2=3

Whilex3c定义PAD图的主要优点:(1)使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序。(2)PAD图所描绘的程序结构十分清晰。图中最左面的竖线是程序的主线,即第一层结构。随着程序层次的增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线。PAD图中竖线的总条数就是程序的层次数。(3)用PAD图表现程序逻辑,易读、易懂、易记。PAD图是二维树形结构的图形,程序从图中最左竖线上端的结点开始执行,自上而下,从左向右顺序执行,遍历所有结点。(4)容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成,从而可省去人工编码的工作,有利于提高软件可靠性和软件生产率。(5)即可用于表示程序逻辑,也可用于描绘数据结构。(6)PAD图的符号支持自顶向下、逐步求精方法的使用。开始时设计者可以定义一个抽象的程序,随着设计工作的深入而使用def符号逐步增加细节,直至完成详细设计。例1、某模块有两个输入a和b,一个输出c,当满足条件(a>0)and(b<2)时,c=a+b,否则c=a-b。画出该模块的PAD。abc=a+bc=a-b(a>0)and(b<2)c【例2、某模块有三个输入a、b和c,一个输出s,当a=1时,s=b+2c,当a=2时,s=2b-c,当a=3时,s=b。画出该模块的PAD。】abcs=b+2cs=2b-cs=ba=1=3=2s*P141:3画出下列伪码程序的程序流程图、盒图和PAD图。STARTIFPTHENWHILEqDOfENDDOELSEBLOCKgnENDBLOCKENDIFSTOP作业及解答(第6章)TqfF程序流程图g

WhileqfpnPAD图N-S图6.3.6过程设计语言(PDL)/伪码

一种用于描述功能模块的算法设计和加工细节的语言。结构化语言介于自然语言和形式语言之间的半形式化语言。结构化语言(PDL)结构化语言是一种书写过程规范的方法,它将结构化编程技术和叙述性英语结合起来。结构化语言非常适合用来描述带有一系列处理步骤和相对简单的控制逻辑(ifthenelse;whiledo;repeatuntil;caseof等)的过程。例:PROCEDUREspell_checkISBEGIN

SplitdocumentintosinglewordsLookupwordsindictionaryDisplaywordswhicharenotindictionaryCreateanewdictionaryENDspell_checkExternalstatementsInternalStatements特点:①有固定的关键字(一律大写)外语法,用于定义控制结构和数据结构;例:上页②内语法用自然语言描述;③有数据说明,例如:

TYPEnumberISSTRINGLENGTH(12)TYPEtableISINSTANCEOFsymboltable

抽象类型④模块定义和调用的技术,应该提供各种接口描述模式定义:

PROCEDURE<子程序名><属性>

INTERFACE<参数表>

I\O等

pseudocodelines(伪码行)

END

调用:

PERFORM<子程序名>USING<参数表>PDL优点:可以作为注释直接插在源程序中间。(2)可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作。(3)可以自动由PDL生成程序代码。PDL缺点:不如图形工具形象直观;描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单。注、通常以PDL为主,对存在复杂判断问题的加工逻辑,可辅之以判定表和判定树,判定表更严密,判定树更易读。6.5程序复杂程度的定量度量

软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。McCabe方法Halstead方法6.5.1McCabe方法McCabe方法:根据程序控制流的复杂程度定量度量程序的复杂程度。其结果称为程序的环形复杂度。方法:先画出流图,然后用该图的环路数作为程序复杂性的度量值。流图流图:是“退化了的”程序流程图,仅仅描绘程序的控制流程,不表现对数据的具体操作以及分支或循环的具体条件。流图组成:圆:结点(一个圆代表一条或多条语句)。箭头线:边。同下图一样。图6.16由PDL翻译成的流图*画出下列伪码程序的程序图,并求出复杂性度量值V(G)?2.计算环形复杂度的方法(1)环形复杂度=流图中的区域数。(2)环形复杂度V(G)=E-N+2,其中E是边数,N是结点数。(3)环形复杂度V(G)=P+1,其中P是判定结点数。图6.16由PDL翻译成的流图R1R2R3R4(2)V(G)=E-N+2

=11-9+2=4(1)封闭区域个数4procedure:sort1:dowhilerecordsremain2:readrecord:

ifrecordfield1=03:thenprocessrecord;storeinbuffer;incremertcounter;4:elseifrecordfield2=05:thenresetcounter;6:elseprocessrecord;storeinfile;7a:endifendif7b:enddo8:end(3)3个判定,V(G)=3+1=43.环形复杂度的用途McCabe研究大量程序后发现,环形复杂度高的程序往往是最困难、最容易出问题的程序。实践表明,模块规模以V(G)≤10为宜,V(G)=10是模块规模的一个更科学更精确的上限。缺点:①对于不同种类的控制流的复杂度不能区分。②简单IF语句与循环语句的复杂性同等看待。③嵌套IF语句与简单CASE的复杂性是一样的。④模块间接口当成一个简单分支一样处理。⑤一个具有1000行的顺序程序与一行语句的复杂性相同。第7章实现7.1编码7.2软件测试基础7.3单元测试7.4集成测试7.5确认测试7.6白盒测试技术7.7黑盒测试技术7.8调试7.9软件可靠性7.2.3测试方法黑盒测试(功能测试):把程序看作一个黑盒子;完全不考虑程序的内部结构和处理过程;是在程序接口进行的测试。白盒测试(结构测试):把程序看成装在一个透明的盒子里;测试者完全知道程序的结构和处理算法;按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。黑盒测试与白盒测试优缺点比较:黑盒测试白盒测试优点①适用于各阶段测试②从产品功能角度测试③容易入手生成测试数据①可构成测试数据使特定程序部分得到测试②有一定的充分性度量手段③可获较多工具支持缺点①某些代码得不到测试②如果规格说明有误,则无法发现③不易进行充分性测试①通常不易生成测试数据②无法对未实现规格说明的部分进行测试③工作量大,通常只用于单元测试,有应用局限性质一种确认技术,回答“我们在构造一个正确的系统吗?”一种验证技术,回答“我们在正确地构造一个系统吗?”7.2.4测试步骤1.模块测试(单元测试)保证每个模块作为一个单元能正确运行;发现的往往是编码和详细设计的错误。2.子系统测试把经过单元测试的模块放在一起形成一个子系统来测试;着重测试模块的接口。3.系统测试把经过测试的子系统装配成一个完整的系统来测试;发现的往往是软件设计中的错误,也可能发现需求说明中的错误;不论是子系统测试还是系统测试,都兼有检测和组装两重含义,通常称为集成测试。4.验收测试(确认测试)把软件系统作为单一的实体进行测试;它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息)进行测试;发现的往往是系统需求说明书中的错误。5.平行运行同时运行新开发出来的系统和将被它取代的旧系统;比较新旧两个系统的处理结果;可以在准生产环境中运行新系统而又不冒风险;用户能有一段熟悉新系统的时间;可以验证用户指南和使用手册之类的文档;能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。7.3.3计算机测试必须为每个单元测试开发驱动程序和(或)存根程序。驱动程序是一个“主程序”,它接收测试数据,传送给被测试的模块,并且印出有关的结果。存根程序代替被测试的模块所调用的模块。它使用被它代替的模块的接口,可能做最少量的数据操作,印出对入口的检验或操作结果,并且把控制归还给调用它的模块。驱动程序和存根程序代表开销,通常并不把它们作为软件产品的一部分交给用户。7.4集成测试集成测试是测试和组装软件的系统化技术,主要目标是发现与接口有关的问题。由模块组装成程序时有两种方法:非渐增式测试方法渐增式测试方法非渐增式测试方法:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序;非渐增式测试一下子把所有模块放在一起,并把庞大的程序作为一个整体来测试,测试者面对的情况十分复杂。在庞大的程序中想要诊断定位一个错误是非常困难的,改正错误更是极端困难,而且一旦改正一个错误之后,马上又会遇到新的错误。渐增式测试方法:把下一个要测试的模块同已经测试好的那些模块结合起来进行测试;测试完以后再把下一个应该测试的模块结合进来测试,每次增加一个模块;实际上同时完成单元测试和集成测试;把程序划分成小段来构造和测试,在这个过程中比较容易定位和改正错误;渐增方式有两种集成策略:自顶向下自底向上7.4.1自顶向下集成从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来。在把附属于主控制模块的那些模块组装到程序结构中去时,或者使用深度优先的策略,或者使用宽度优先的策略。深度优先:先组装在软件结构的一条主控制通路上的所有模块。宽度优先:沿软件结构水平地移动,把处于同一个控制层次上的所有模块组装起来。按深度优先策略组装按宽度优先策略组装把模块结合进软件结构的过程由下述4个步骤完成:第一步,对主控制模块进行测试,测试时用存根程序代替所有直接附属于主控制模块的模块;第二步,根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代换一个存根程序(新结合进来的模块往往又需要新的存根程序);第三步,在结合进一个模块的同时进行测试;第四步,为了保证加入模块没有引进新的错误,可能需要进行回归测试(即,全部或部分地重复以前做过的测试)。从第二步开始不断地重复进行上述过程,直到构造起完整的软件结构为止。优点:能够在测试的早期对主要的控制或关键的抉择进行检验。如果选择深度优先的结合方法,可以在早期实现软件的一个完整的功能并且验证这个功能。缺点:存根程序代替了低层次的模块,在软件结构中没有重要的数据自下往上流。用下述步骤可以实现自底向上的结合策略:第一步,把低层模块组合成实现某个特定的软件子功能的族;第二步,写一个驱动程序(用于测试的控制程序),协调测试数据的输入和输出;第三步,对由模块组成的子功能族进行测试;第四步,去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。上述第二步到第四步实质上构成了一个循环。7.4.2自底向上集成自底向上结合自底向上结合7.4.3不同集成测试策略的比较不同集成测试方法的比较:方法优点缺点非渐增式没有错误隔离手段主要设计错误发现迟潜在可重用代码测试不充分需要驱动程序和存根程序自顶向下具有错误隔离手段主要设计错误发现早不需要驱动程序潜在可重用代码测试不充分需要存根程序自底向上具有错误隔离手段潜在可重用代码能充分测试不需要存根程序主要设计错误发现迟需要驱动程序混合具有错误隔离手段主要设计错误发现早潜在可重用代码能充分测试混合策略:改进的自顶向下测试方法基本上使用自顶向下的测试方法,但是在早期使用自底向上的方法测试软件中的少数关键模块。能在测试的早期发现关键模块中的错误;测试关键模块时需要驱动程序。混合法对软件结构中较上层使用的自顶向下方法与对软件结构中较下层使用的自底向上方法相结合。兼有两种方法的优缺点,当被测试的软件中关键模块比较多时,这种混合法可能是最好的折衷方法。7.6白盒测试技术所谓测试方案包括具体的测试目的(例如,预定要测试的具体功能),应该输入的测试数据和预期的结果。通常又把测试数据和预期的输出结果称为测试用例。7.6.1逻辑覆盖有选择地执行程序中某些最有代表性的通路是对穷尽测试的惟一可行的替代办法。从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准:语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖1.语句覆盖含义:选择足够多的测试数据,使被测程序中每个语句至少执行一次。分析:执行路径sacbed测试用例:A=2,B=0,X=4

覆盖sacbed语句覆盖特点:语句覆盖对程序的逻辑覆盖很少。语句覆盖只关心判定表达式的值,而没有分别测试判定表达式中每个条件取不同值时的情况。语句覆盖是很弱的逻辑覆盖标准。

2.判定覆盖(分支覆盖)含义:不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次。所有判定分支:(1)a点判定为T(2)a点判定为F(3)b点判定为T(4)b点判定为F测试用例:Ⅰ.满足(1)(4)A=3,B=0,X=3

覆盖sacbdⅡ.满足(2)(3)A=2,B=1,X=1覆盖sabed或者Ⅰ.满足(1)(3)A=2,B=0,X=3

覆盖sacbed

Ⅱ.满足(2)(4)A=3,B=1,X=1

覆盖sabd特点:比语句覆盖强,但对程序逻辑的覆盖程度仍不高。

3.条件覆盖含义:不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。所有条件:(1)A>1(2)A≤1(3)B=0(4)B≠0(5)A=2(6)A≠2(7)X>1(8)X≤1测试用例:Ⅰ.满足(1)(3)(5)(7)A=2,B=0,X=4

覆盖sacbed

Ⅱ.满足(2)(4)(6)(8)A=1,B=1,X=1覆盖sabd

或者Ⅰ.满足(1)(3)(5)(8)A=2,B=0,X=1

覆盖sacbed

Ⅱ.满足(2)(4)(6)(7)

A=1,B=1,X=2

覆盖sabed或者……条件覆盖特点:条件覆盖通常比判定覆盖强,因为它使每个条件都取到了两个不同的结果,判定覆盖却只关心整个判定表达式的值。但也有反例,如第二组测试用例。判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。4.判定/条件覆盖含义:使得判定表达式中的每个条件都取到各种可能的值,每个判定表达式也都取到各种可能的结果。测试用例:Ⅰ.满足条件(1)(3)(5)(7)

和判定(1)(3)A=2,B=0,X=4

覆盖sacbed

Ⅱ.满足条件(2)(4)(6)(8)和判定(2)(4)A=1,B=1,X=1

覆盖sabd

特点:有时判定/条件覆盖也并不比条件覆盖更强。

5.条件组合覆盖含义:要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。条件组合:(1)A>1,B=0

(2)A>1,B≠0(3)A≤1,B=0

(4)A≤1,B≠0(5)A=2,X>1

(6)A=2,X≤1(7)A≠2,X>1

(8)A≠2,X≤15.条件组合覆盖测试用例:Ⅰ.满足(1)(5)A=2,B=0,X=4

覆盖sacbed

Ⅱ.满足(2)(6)A=2,B=1,X=1

覆盖sabedⅢ.满足(3)(7)A=1,B=0,X=2

覆盖sabed

Ⅳ.满足(4)(8)A=1,B=1,X=1

覆盖sabd条件组合覆盖特点:条件组合覆盖是前述几种覆盖标准中最强的。满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。但是,条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到。(4组数据都没有测试到sacbd)

从对程序路径的覆盖程度分析的逻辑覆盖标准:6.点覆盖含义:选取足够多的测试数据,使得程序执行路径至少经过流图的每个结点一次。特点:由于流图的每个结点与一条或多条语句相对应,因此点覆盖标准和语句覆盖标准是相同的。7.边覆盖含义:选取足够多测试数据,使得程序执行路径至少经过流图中每条边一次。特点:通常边覆盖和判定覆盖是一致的。8.路径覆盖含义:选取足够多测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。

语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖点覆盖边覆盖7.6.2控制结构测试1.基本路径测试基本路径测试是TomMcCabe提出的一种白盒测试技术。首先计算程序的环形复杂度;以该复杂度为指南定义执行路径的基本集合;从该基本集合导出的测试用例可保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。

i=1;total.input=total.valid=0;sum=0;DOWHILEvalue[i]<>-999 ANDtotal.input<100incrementtotal.inputby1;IFvalue[i]>=minimumANDvalue[i]<=maximumTHENincrementtotal.validby1;sum=sum+value[i];ENDIFincrementiby1;ENDDOIFtotal.valid>0THENaverage=sum/total.valid;ELSEaverage=-999;ENDIF例:求平均值过程

(1)根据过程设计结果画出相应的流图。1234567891011121312345698710121113(2)计算流图的环形复杂度。

V(G)=6(3)确定线性独立路径的基本集合。所谓独立路径是指至少引入程序的一个新处理语句集合或一个新条件的路径。用流图术语描述,独立路径至少包含一条在定义该路径之前不曾用过的边。

路径1:1-2-10-11-13路径2:1-2-10-12-13路径3:1-2-3-10-11(12)-13路径4:1-2-3-4-5-8-9-2-10-11(12)-13路径5:1-2-3-4-5-6-8-9-2-10-11(12)-13路径6:1-2-3-4-5-6-7-8-9-2-10-11(12)-137.7黑盒测试技术黑盒测试着重测试软件功能,错误类型为:功能不正确或遗漏了功能;界面错误;数据结构错误或外部数据库访问错误;性能错误;初始化和终止错误。测试标准:测试用例尽可能少;一个测试用例能指出一类错误。7.7.1等价划分等价划分是一种黑盒测试技术,把程序的输入域划分成若干个数据类,据此导出测试用例。等价划分法力图设计出能发现若干类错误的测试用例,从而减少测试用例的数目。

每类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同。使用等价划分法设计测试方案首先需要划分输入数据的等价类。常常还需要分析输出数据的等价类,以便根据输出数据的等价类导出对应的输入数据等价类。7.7.2边界值分析经验表明,处理边界情况时程序最容易发生错误。例如,许多程序错误出现在下标、纯量、数据结构和循环等等的边界附近。使用边界值分析方法设计测试方案首先应该确定边界情况。选取的测试数据应该刚好等于、刚刚小于和刚刚大于边界值。通常设计测试方案时总是联合使用等价划分和边界值分析两种技术。7.7.3错误推测不同类型不同特点的程序通常又有一些特殊的容易出错的情况。因此必须依靠测试人员的经验和直觉,从各种可能的测试方案中选出一些最可能引起程序出错的方案。错误推测法在很大程度上靠直觉和经验进行。它的基本想法是列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。7.9软件可靠性

7.9.1基本概念软件可靠性:程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。软件的可用性:程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。第8章维护8.1软件维护的定义8.2软件维护的特点8.3软件维护过程8.4软件的可维护性8.5预防性维护8.6软件再工程过程

8.1软件维护的定义所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。可分为4项活动:

改正性维护

适应性维护

完善性维护

预防性维护

改正性维护:把诊断和改正错误的过程称为改正性维护。改正性维护占17%~21%。

适应性维护:为了和变化了的环境适当地配合而进行的修改软件的活动,是既必要又经常的维护活动。包括外部环境和数据环境的变化。适应性维护占18%~25%。

完善性维护:为了满足在用户提出的增加新功能或修改已有功能的要求和一般性的改进要求,需要进行完善性维护。包括功能和性能的要求。完善性维护占50%~66%。预防性维护:“把今天的方法学应用于昨天的系统以满足明天的需要。”

采用先进的软件工程方法对需要维护的软件或软件中的某一部分,主动地进行重新设计、编码和测试。预防性维护占4%左右。

只有预防性维护是主动的,其他维护都是被动的。各类维护工作量所占比例维护工作量在软件生命周期所占比例9.1.1传统方法的缺点★结构化分析方法:面向功能 软件结构严重依赖于功能,而功能是软件开发中最不稳定的因素。★数据和操作相分离9.1.2面向对象开发方法OOSD

(Object-OrientedSoftwareDevelopment)是一种把面向对象的思想应用于软件开发过程,指导开发活动的系统方法。

面向对象=对象(objects)+类(classes)+继承(inheritance)+通信(communicationwithmessages)9.1.3面向对象方法的要点

认为客观世界是由各种对象组成的,任何事物都是对象。

把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。

按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。

对象彼此之间仅能通过传递消息互相联系。9.1.4面向对象方法组成

OOSD由三部分组成:

OOA(Object-OrientedAnalysis)面向对象的分析

OOD(Object-OrientedDesign)面向对象的设计

OOP(Object-OrientedProgram)面向对象的程序设计OOA强调的是对一个系统中的对象特征和行为的定义。建立系统的三类模型。OOD与OOA密切配合顺序实现对现实世界的进一步建模。OOP是面向对象的技术中发展最快的,使用面向对象的程序设计语言,进行编码。9.2面向对象的概念对象1.类(class)2.实例(instance)3.消息(message)4.方法(method)5.属性(attribute)6.封装(encapsulation)7.继承(inheritance)8.多态性(polymorphism)9.重载(overloading)9.3面向对象建模(I)

面向对象方法最基本的原则,是按照人们习惯的思维方式,用面向对象观点建立问题域的模型,开发出尽可能自然地表现求解方法的软件。

OMT(ObjectModelTechnology)是一种软件工程方法学,支持整个面向对象软件生命周期,它覆盖了问题构成、分析、设计和实现等阶段。

9.3面向对象建模(II)面向对象开发软件,需要建立3种

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论