软件工程期末复习资料.doc_第1页
软件工程期末复习资料.doc_第2页
软件工程期末复习资料.doc_第3页
软件工程期末复习资料.doc_第4页
软件工程期末复习资料.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

软件危机定义:软件危机是指在计算机软件的开发和维护过程中遇到的一系列严重问题。 包含两方面的问题:如何开发软件 如何维护软件软件危机的主要表现(表象)对软件开发成本和进度的估计常常很不准确;用户对“已完成的”软件系统不满意的现象经常发生;软件产品的质量往往靠不住;软件质量保证技术(审查、复查、测试)没有贯穿于开发的全过程。软件常常是不可维护的;软件通常没有适当的文档资料;软件成本在计算机系统总成本中所占的比例逐年上升;软件开发生产率提高的速度,既跟不上部分硬件的发展速度,也跟不上计算机应用速度普及深入的趋势。软件危机的主要原因:软件本身的特点(如:软件规模庞大、缺乏可见性)导致开发和维护困难;对软件开发没有严格而科学的管理;软件开发中采用了错误的方法和技术;开发人员与管理人员重视开发而轻视问题的定义和软件维护;缺乏总体考虑,没有软件工程学概念或系统工程思想,对业务了解支离破碎,需求分析不准;不能与用户及时沟通,在开发过程中需求不断变化;消除软件危机的途径:采用先进的开发技术和方法;使用好的软件开发工具,提高软件生产率;有良好的组织、严密的管理,各类人员相互配合共同完成任务;软件工程基本原理:用分阶段的生命周期计划严格管理;坚持进行阶段评审;实行严格的产品控制;采用现代程序设计技术;结果应该能清楚进行审查;开发小组成员应该少而精;承认不断改进软件工程实践的必要性。软件工程方法学传统方法学(生命周期方法学或结构化范型) 采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运行。面向对象方法 面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地联系在一起的方法。面向对象方法=对象+类+继承+信息通信。软件生命周期的基本任务:问题定义:问题定义阶段必须回答的关键问题:“要解决的问题是什么”。可行性研究:这个阶段要回答的关键问题是:“上一阶段所确定的问题是否有行得通的解决办法”。需求分析:这个阶段要准确的回答:“目标系统必须做什么”。概要设计:这个阶段要概括地回答:“怎样实现目标系统”。 概要设计也可以说是体系结构的设计,根据软件需求规格说明建立软件系统的总体结构和模块间的关系,定义个功能模块的接口,规定设计约束,确定设计策略、制定组装测试计划。详细设计:这个阶段要概括地回答:“怎样具体地实现这个系统”。 详细设计阶段的任务就是对概要设计产生的功能模块逐步细化,形成若干个可编程的程序模块,用某种过程设计语言设计程序模块的内部细节,包括算法、数据结构和各程序模块之间的详细接口信息,为编写源代码提供必要的说明,并拟定模块测试方案。编码和单元测试:这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块,并对这些程序进行调试和程序单元测试。综合测试:这个阶段的关键任务是通过各种类型的测试使软件达到预定的要求。最基本的测试时集成测试和验收测试。软件维护:这个阶段的关键任务是通过各种必要的维护活动使系统持久地满足用户的需要。瀑布模型(生存周期模型)就是传统的生命周期方法学(既自顶向下结构化开发模型方法)。特点: 1.阶段间具有顺序性和依赖性; 2.推迟实现的观点; 3.质量保证观点。快速原形模型:建立原型模型的主要原因是为了解决在产品开发的早期阶段需求不确定的问题,用户、经理和其他非技术项目风险承担者发现在确定和开发产品时,原型可以使他们的想象更具体化。原型在软件开发过程中可以起到以下主要作用:(1) 明确并完善需求 原型作为一种需求工具,它初步实现所理解的系统的一部分。用户对原型的评价可以指出需求中的许多问题,在你开发真正产品之前,可以最低的费用来解决这些问题。(2) 探索设计选择方案 原型作为一种设计工具,用它可以探索不同的用户界面技术,使系统达到最佳的可用性,并且可以评价可能的技术方案。(3) 发展为最终的产品 原型作为一种构造工具,是产品最初子集的完整功能实现,通过一系列小规模的开发循环,你可以完成整个产品的开发建立/修改原型听取用户意见用户测试运行原型增量模型:也称渐增模型,使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。 增量模型由若干个开发序列构成,每个序列均采用瀑布模型来开发可以发行的“增量”,每个“增量”都是在原有软件基础上开发出来的,每产生一个“增量”相当于推出一个软件新版本。 增量模型是一种分段的线性模型。它与瀑布模型没有实质性的区别。优点: 1.抗变化能力比瀑布模型强; 2.每一个“增量”实现后就可以交给用户使用,开发新的“增量”不会花费太长的时间。难点: 1.在把每个增量构件集成到现有软件体系结构中时,必须不破坏原来已经发布出的产品。 2.必须把软件的体系机构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程简单、方便。螺旋模型:它是瀑布模型与原型模型的结合,不仅体现了两个模型的优点,而且还增加了新的成分风险分析。 制定计划、风险分析、实施工程、客户评估。 特点 瀑布模型+快速原型+风险分析 迭代过程 边开发、边评审 缺点 执行风险分析的费用较高,会大大降低项目的利润; 使用该模型要求开发人员具备相当丰富的风险分析经验; 螺旋模型过于复杂,不及瀑布模型那么容易理解。喷泉模型 喷泉模型是一种“逐步求精”的面向对象生命周期模型。喷泉模型其实是瀑布模型的另一种表述,其中的各个活动仍然按照分析、设计、实现这样的顺序来执行。 迭代、无缝结构化分析:在模型的核心是数据字典,它描述了所有的在目标系统中使用的和生成的数据对象。围绕着这个核心的有三种图: ERD、DFD、STD 数据流图(DFD) 描述数据在系统中如何被传送或变换,以及描述如何对数据流进行变换的功能(子功能); 实体关系图(ERD) 描述数据对象及数据对象之间的关系; 状态转换图(STD) 指明了作为外部事件结果的系统行为,描述系统对外部事件如何响应,如何动作。ERD用于数据建模DFD用于功能建模STD用于行为建模实体关系图 数据模型:数据模型包括三种互相关联的信息:数据对象,描述数据对象的属性,描述对象间相互连接的关系。数据对象 数据对象是对软件必须理解的复合信息的表示。或者说,数据对象是现实世界中省略了功能和行为的实体。属性:定义了数据对象(实体)的特征。 它可用来:为数据对象的实例命名;描述该实例;引用另一个数据对象的实例。关系:数据对象彼此之间连接的方式称为关系,也叫联系。数据流图 当信息在软件中移动时,它将被一系列“变换”所修改。数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。 数据流图有四种基本符号:正方形(或立方体)表示数据的源点或终点;圆角矩形(或圆形)代表变换数据的处理;开口矩形(或两条平行横线)代表数据存储;箭头表示数据流,即特定数据的流动方向。(注意,数据流与程序流程图中用箭头表示的控制流有本质不同,千万不要混淆。)状态转换图状态转换图(简称为状态图)通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。数据字典 数据字典是为了描述在结构化分析过程中定义的对象的内容,而使用的一种半形式化的工具。下面是对这个重要的建模工具的定义 数据元素、数据流、数据存储、数据处理、外部项结构化设计(SD) 结构化设计是一种面向数据流的设计方法。结构化设计分为概要设计、详细设计两个过程。概要设计的主要任务是:通过仔细分析软件规格说明,适当地对软件进行功能分解,从而把软件划分为模块,并且设计出完成预定功能的模块结构。详细设计阶段详细地设计每个模块,确定完成每个模块功能所需要的算法和数据结构。结构化设计基本要点:n 软件系统由层次结构的模块构成;n 模块是单入口、单出口的;n 模块构造和联结的基本准则是模块独立;n 软件系统结构用图来描述。软件设计应遵循的基本原理包括哪些内容 (1) 模块化:指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。每个模块完成一个特定的子功能,所有模块按某种方法组装起来,成为一个整体完成整个系统所要求的功能。模块化是软件解决复杂问题所具备的手段。 (2) 抽象:是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节、不考虑其他因素。软件工程中每一步都是对软件解决方法的抽象层次的一次细化。 (3) 信息隐蔽:指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。通过信息隐蔽,可以定义和实施对模块的过程细节和局部数据结构的存取限制。(4) 模块独立性:指每个模块只完成系统要求的独立的于功能,并且与其他模块的联系最少且接口简单。衡量模块独立性有两个标准:耦合性和内聚性,可判断设计方案的优劣。模块独立概念是模块化、抽象、逐步求精和信息隐藏等概念的直接结果,也是完成有效的模块设计的基本标准。模块的独立程度可以由两个定性标准来度量,这两个标准分别称为内聚和耦合。耦合 耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。非直接耦合、数据耦合 、标记耦合 、控制耦合 、内容耦合 内聚 内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情功能内聚 、顺序内聚 、通信内聚 、过程内聚 、时间内聚 、逻辑内聚、偶然内聚启发规则1 改进软件结构提高模块独立性2 模块规模应该适中3 深度、宽度、扇出和扇入都应适当 4 模块的作用域应该在控制域之内交换流 信息沿输入通路进入系统,同时由外部形式变换成内部形式。进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流叫做交换流。事务流 数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流。程序内部必须有正确的文档(书写规范)2. 数据说明应便于查阅易于理解3. 语句应该尽量简单清晰4. 正确的输入/输出风格5. 不要盲目追求高效率,程序效率要满足用户的要求6. 结构化程序设计(SP):强调自上而下、逐步求精设计方法,只使用顺序、选择和循环三种基本控制机构构造程序。1. 等价划分 等价划分是一种黑盒测试方法,这种方法把程序的输入域划分成数据类,据此可以导出测试用例。一个理想的测试用例能独自发现一类错误(例如,对所有字符数据的处理都不正确)。 如果把所有可能的输入数据(有效的和无效的)划分成若干个等价类,则可以合理地做出下述假定:每类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同。因此,可以从每个等价类中只取一组数据作为测试数据。这样选取的测试数据最有代表性,最可能发现程序中的错误。使用等价划分法设计测试方案首先需要划分输入数据的等价类,为此需要研究程序的功能说明,从而确定输入数据的有效等价类和无效等价类。在确定输入数据的等价类时常常还需要分析输出数据的等价类,以便根据输出数据的等价类导出对应的输入数据等价类。单元测试的测试用例主要根据详细设计的结果来设计。软件需求分析阶段的测试手段一般采用需求分析评审。软件测试计划开始于需求分析阶段,完成于软件设计阶段。单元测试、集成测试、确认测试结构化程序设计方法的基本要点有三点: (1) 采用自顶向下、逐步求精的程序设计方法,在需求分析、概要设计中,都采用了自顶向下逐层细化的方法。在详细设计中,虽然处于“具体”设计阶段但在设计某个模块内部处理过程中,可以逐步求精,降低处理细节的复杂程度。 (2) 使用二种基本控制结构构造程序,任何程序都可由顺序、选择、重复三种基本控制结构构造。这三种基本结构的共同点是单入门、单接口。不但能有效的限制使用GoTo语句。还创立了新的程序设计思想、方法和风格同时为自顶向下,逐步求精的设计方法提供了具体的实施手段。 (3) 主程序员组的组织形式。指程序开发的人员组织方式应采用由一个主程序员(负责全部技术活动)、一个后备程序员(协调、支持主程序员)和一个程序管理员(负责事务性工作,如收集、记录数据,文档资料管理等)三人为核心,再加上一些专家(如通信专家、数据库专家)和其他技术人员组成小组。这种组织形式突出了主程序员的领导,设计责任集中在少数人身上,有利于提供软件质量,并且能有效地提高软件生产率。结构化程序设计方法是综合应用这些手段来构造高质量程序的思想方法。面向对象方法具有下述四个要点: (1)认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。按照这种观点,可以认为整个世界就是一个最复杂的对象。因此,面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。 (2)把所有对象都划分成各种对象类(简称为类,Class),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。因此,每当建立该对象类的一个新实例时,就按照类中对数据的定义为这个新对象生成一组专用的数据,以便描述该对象独特的属性值。例如,荧光屏上不同位置显示的半径不同的几个圆,虽然都是Circle类的对象,但是,各自都有自己专用的数据,以便记录各自的圆心位置、半径等等。 类中定义的方法,是允许施加于该类对象上的操作,是该类所有对象共享的,并不需要为每个对象都复制操作的代码。(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。在这种层次结构中,通常下层的派生类具有和上层的基类相同的特性(包括数据和方法),这种现象称为继承(Inheritance)。但是,如果在派生类中对某些特性又做了重新描述,则在派生类中的这些特性将以新描述为准,也就是说,低层的特性将屏蔽高层的同名特性。 (4)对象彼此之间仅能通过传递消息互相联系。 对象与传统的数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体,必须发消息请求它执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。也就是说,一切局部于该对象的私有信息,都被封装在该对象类的定义中,就好像装在一个不透明的黑盒子中一样,在外界是看不见的,更不能直接使用,这就是“封装性”。继承(Inheritance) 广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。 面向对象软件技术的许多强有力的功能和突出的优点,都来源于把类组成一个层次结构的系统(类等级):一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是继承性,一个类直接继承其父类的全部描述(数据和操作)。 继承具有传递性,如果类C继承类B,类B继承类A,则类C继承类A。因此,一个类实际上继承了它所在的类等级中在它上层的全部基类的所有描述,也就是说,属于某类的对象除了具有该类所描述的性质外,

温馨提示

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

评论

0/150

提交评论