资源描述
一、 填空题(每空1分,共25分)1. 软件生存周期一般可以划分为,问题定义、_、_、设计、编码、测试和_。2. 基于软件的功能划分,软件可以划分成_、_、_三种。3. 可行性研究,应从 、技术可行性、运行可行性、 和开放方案可行性等方面研究。4. 系统流程图是描绘 的传统工具。它的基本思想是用图形符号以 描绘系统里面的每个部件。5. 数据流图的基本四种成分:数据输入的源点和数据输出汇点、 、 和 。6. 结构化分析方法是面向_进行需求分析的方法。结构化分析方法使用_与_来描述。7. 是自动地共享类、子类和对象中的方法和数据的机制。8. 软件详细设计工具可分为3类,即_、_和_。9. 为了在软件开发过程中保证软件的质量,主要采取下述措施:_、复查和管理复审、_。10. 大型软件测试包括 、 、确认测试和 四个步骤。1、 可行性研究 需求分析 运行与维护2、 系统软件 支撑软件 应用软件3、 经济可行性 法律可行性4、 物理系统 黑盒子形式5、 加工 数据流 数据存储文件6、 数据流 数据流图DFD 数据字典DD7、 继承性8、 图示工具、设计语言 表格工具9、 审查 测试10、 单元测试 集成测试 系统测试二、 单项选择题(每小题2分,共20分)12345CCCAC678910DDACB1. 软件设计中划分模块的一个准则是( )。A、 低内聚低耦合B、 低内聚高耦合C、 高内聚低耦合D、 高内聚高耦合2. Jackson设计方法是由英国的M. Jackson提出的,它是一种面向( )的软件设计方法。A、 对象B、 数据流C、 数据结构D、 控制结构3. 试判断下列叙述中,哪 个(些)是正确的( )。a、软件系统中所有的信息流都可以认为是事务流b、软件系统中所有的信息流都可以认为是变换流c、事务分析和变换分析的设计步骤是基本相似的A、a B、b C、c D、b和c4. ( )是用户和设计交换最频繁的方法。A、 原型化方法 B、瀑布模型方法C、 螺旋模型方法 D、构件组装模型5. 软件工程方法学的目的是:使软件生产规范化和工程化,而软件工程方法得以实施的主要保证是( )。A、 硬件环境B、软件开发的环境C、 软件开发工具和软件开发的环境 D、 开发人员的素质6. 20世纪50年代以来,出现了许多不同的程序设计语言,下列语言中哪个语言是低级语言( )。A、 PASCAL B、 VISUAL BASICC、 C+D、 汇编语言7. 软件测试的目的是?( )A、 证明软件的正确性B、 找出软件系统中存在的所有错误C、 证明软件系统中存在错误D、 尽可能多的发现软件系统中的错误8. 使用白盒测试方法时,确定测试数据应根据( )和指定的覆盖标准。A、程序的内部逻辑 B、程序的复杂程度C、该软件的编辑人员 D、程序的功能9. 软件维护工作的最主要部分是( )。A、 校正性维护 B、适应性维护C、完善性维护 D、预防性维护10. PDL是( )语言。A、 高级程序设计语言 B、伪码式 C、中级程序设计语言 D、低级程序设计语言三、 判断题(正确的在括号内打上“”,错误的打上“”。每题2分,共20分)1. 用黑盒法测试时,测试用例是根据程序内部逻辑设计的。( X )2. 发现错误多的程序模块,残留在模块中的错误也多。( V )3. 为了加快软件维护作业的进度,应尽可能增加维护人员的数目。( X )4. 软件维护就是改正软件中的错误。( X )5. 质量保证是为了保证产品和服务充分满足消费者要求的质量而进行的有计划,有组织的活动。( V )6. 软件开发的主要任务是写程序。 ( X )7. 测试只能证明程序有错误,不能证明程序没有错误。( V )8. 模块化程序设计中,模块越小,模块化的优点越明显。一般来说,模块的大小都在10行以下。( X )9. 在编制程序时,首先应该对程序的结构充分考虑,不要急于开始编码,而要像写软件文档那样,很好地琢磨程序具有什么样的功能,这些功能如何安排,等等。( X )10. 程序设计风格指导原则提出,尽量多使用临时变量。( X )四、 简答题(每题5分,共20分)1 什么是软件工程?软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。2 耦合性和内聚性有几种类型? 其耦合度、内聚强度的顺序如何?低:非直接耦合 数据耦合标记耦合 控制耦合外部耦合 公共耦合内容耦合 :高强:功能内聚 信息内聚 通信内聚 过程内聚 时间内聚 逻辑内聚 巧合内聚:弱 3 简述需求分析工作可以分成哪四个方面?软件需求分析的有哪三个基本原则?:需求分析阶段分成四个方面:对问题的识别、分析与综合、制定规格说明和评审。三个基本原则:必须能够表达和理解问题的数据域和功能域;必须按自顶向下、逐步分解的方式对问题进行分解和不断细化;要给出系统的逻辑视图和物理视图。4 什么是黑盒测试法?黑盒测试法把程序看成一个黑盒子,完全不考虑程序的内部结构和处理过程,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据,产生正确地输出信息。五、 程序设计与算法描述题(共15分)1. 根据下面的伪代码程序,完成相应要求。(8分) START IF C1THEN WHILE C2 DO f ENDDOELSE BLOCK g p ENDBLOCK ENDIF REPEAT UNTIL C3qr ENDREP STOP1) 画出程序流程图(4分)2) 用NS图描述(4分)2. 有下列伪码程序:STARTINPUT (M,N)IF M=10 THEN X=10 ELSE X=lENDIFIF N=20 THEN Y=20 ELSE Y=2ENDIFPRINT(X,Y)STOP设计该程序的语句覆盖和路径覆盖测试用例。(7分)M=9(或l0),N=l9(或=10),N=20(或=20)路径覆盖的测试用例为M=9,N=19;M=9、N=20; M=l0,N=l9;M=10,N=20要目标是提高软件质量,减少软件维护代价。问题定义(确定题目)可行性研究需求分析概要设计详细设计编码和单元测试综合测试系统设计系统实现软件定义软件开发运行维护:主要任务是使软件持久地满足用户的需要软件生命周期:软件过程五个模型对比(瀑布模型、快速原型、增量、螺旋、喷泉模型)可行性研究:1、任务:用最小的代价在尽可能短的时间内确定问题是否能够解决。2、四个方面:技术、经济、操作可行性3、数据流图四种成分:1、源点/终点2、处理3、数据存储4、数据流需求分析:1、任务:确定系统必须完成哪些工作,对目标系统提出完整、清晰、具体的要求。2、结构化方法就是面向数据流自顶向下逐步求精进行需求分析的方法。3、实体联系图:1、数据对象2、属性3、联系(1:1、1:N、M:N)总体设计:任务:回答“概括的说,系统应该如何实现”,用比较抽象概括的方式确定系统如何完成预定的任务,也就是说应该确定系统的物理配置方案,并且进而确定组成系统的每个程序结构。系统设计阶段(确定系统具体实施方案)、结构设计阶段(确定软件结构)模块独立:内聚和耦合耦合表示一个软件结构内各个模块之间的互连程度,应尽量选用松散耦合的系统内聚 (Cohesion): 一个模块内各元素结合的紧密程度面向数据流的设计方法:变换流和事务流详细设计:任务:确定应该怎样具体的实现所要求的系统,也就是说经过这个阶段的设计工作应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。过程设计的工具(程序流程图、盒图、PAD图、判定表、判定树)面向数据结构的设计方法(jackson方法):程序复杂程度的定量(McCabe方法):1、V(G)=E-N+2(E是流图中边的条数,N是结点数) 2、V(G)=P+1(P是流图中判定结点的个数) 3、流图中的区域数等于环形复杂度。编码单元测试:又称模块测试。每个程序模块完成一个相对独立的子功能,所以可以对该模块进行单独的测试。由于每个模块都有清晰定义的功能,所以通常比较容易设计相应的测试方案,以检验每个模块的正确性。集成测试:在单元测试完成后,要考虑将模块集成为系统的过程中可能出现的问题,例如,模块之间的通信和协调问题,所以在单元测试结束之后还要进行集成测试。这个步骤着重测试模块间的接口,子功能的组合是否达到了预期要求的功能,全程数据结构是否有问题等。白盒测试技术(逻辑覆盖、基本路经测试) 白盒测试时将程序看作是一个透明的盒子,也就是说测试人员完全了解程序的内部结构和处理过程。所以测试时按照程序内部的逻辑测试程序、检验程序中的每条通路是否都能按预定的要求正确工作。白盒测试又称为结构测试。语句覆盖就是设计足够的调试用例,使得程序中的每个语句至少执行一次。判定覆盖就是设计足够的测试用例,使得程序中每个判定的取“真”分支和取“假”分支至少都执行一次,判定覆盖又称分支覆盖条件覆盖就是设计足够的测试用例,使得程序判定中的每个条件能获得各种可能的结果。判定条件覆盖就是设计足够的测试用例,使得判定中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。条件组合覆盖就是设计足够的测试用例,使得每个判定中的条件的各种可能组合都至少出现一次。基本路经测试:黑盒测试技术(等价划分) 黑盒测试时完全不考虑程序内部的结构和处理过程,只按照规格说明书的规定来检查程序是否符合它的功能要求。黑盒测试是在程序接口进行的测试,又称为功能测试。1、黑盒测试检查的主要方面有:程序的功能是否正确或完善;数据的输入能否正确接收,输出是否正确;是否能保证外部信息(如数据文件)的完整性等。用黑盒法设计测试用例时,必须用所有可能的输入数据来检查程序是否都能产生正确的输出 2、等价类划分 等价类的划分在很大程度上依靠的是测试人员的经验,下面给出几条基本原则:(1)如果输入条件规定了取值范围,则可划分出一个有效的等价类(输入值在此范围内)和两个无效的等价类(输入值小于最小值、输入值大于最大值)。(2)如果输入条件规定了输入数据的个数,则可相应地划分出一个有效的等价类(输入数据的个数等于给定的个数要求)和两个无效的等价类(输入数据的个数少于给定的个数要求、输入数据的个数多于给定的个数要求)。(3)如果输入条件规定了输入数据的一组可能的值,而且程序对这组可能的值做相同的处理,则可将这组可能的值划分为一个有效的等价类,而这些值以外的值划分成无效的等价类。(4)如果输入条件规定了输入数据的一组可能的值,但是程序对不同的输入值做不同的处理,则每个输入值是一个有效的等价类,此外还有一个无效的等价类(所有不允许值的集合)。(5)如果输入条件规定了输入数据必须遵循的规则,则可以划分一个有效的等价类(符合规则)和若干个无效的等价类(从各种角度违反规则)。维护(改正性维护、适应性维护、完善性维护、预防性维护)决定软件可维护性因素(可理解性、可测试性、可修改性、可移植性、可重用性)面向对象方法学优点:1、与人类习惯的思维方法一致2、稳定性好3、可重用性好4、较易开发大型软件产品5、可维护性好对象模型1、关联2、聚集3、泛化4、依赖和细化贰 软件工程1.1软件危机1、软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。(熟记)2、了解软件危机主要的一些典型表现。(P2)3、出现软件危机的原因:4、消除软件危机的途径:首先,我们要对计算机软件有一个正确的认识;更重要的是,必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严格、各类人员协同配合、共同完成的工程项目;最后,应该开发和使用更好的软件工具。总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。1.2软件工程1、软件工程:采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。(熟记)2、了解软件工程的本质特征: 1)、软件工程关注于大型程序的构造 2)、软件工程的中心课题是控制复杂性 3)、软件经常变化 4)、开发软件的效率非常重要 5)、和谐的合作是开发软件的关键 6)、软件必须有效地支持它的用户 7)、在软件工程的领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品3、缺乏应用领域地相关知识,是软件开发项目出现问题的常见原因。4、软件工程的基本原理: 1)、用分阶段的生命周期计划严格管理 2)、坚持进行阶段审评 3)、实行严格的产品控制 4)、采用现代程序设计技术 5)、结果应能清楚地审查 6)、开发小组的人员应该少而精 7)、承认不断改进软件工程实践的必要性5、方法学(范型):在软件生命周期全过程中使用的一整套技术方法的集合。6、软件工程方法学3要素:方法、工具和过程。7、目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学8、传统方法学也成为生命周期方法学或结构化范型。9、面向对象方法学具有的4个要点。(P10)1.3软件生命周期1、概括地说,软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。2、软件定义时期的任务3、软件定义时期通常进一步划分成3个阶段:问题定义、可行性研究、需求分析4、维护时期的主要任务是使软件持久地满足用户的需要。5、软件开发时期通常分成4个阶段:总体设计、详细设计、编码和单元测试、综合测试。前两个阶段又称为系统设计,后两个阶段又称为系统实现。6、软件生命周期每个阶段的基本任务:问题定义、可行性研究、需求分析、总体设计、详细设计、编码和单元测试、综合测试。1.4软件工程生命周期模型(过程模型):瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型。(对各种模型要了解)1.5小结(熟读,对本章系统地了解)可行性分析可行性分析的目的:用最小的代价在尽可能短的时间内确定问题是否能够解决。2.1可行性研究的任务研究解法的可行性的三个方面:技术可行性、经济可行性、操作可行性。可行性研究最根本的任务:对以后的行动方针提出建议。可行性研究需要的时间长短取决于工程的规模。2.2可行性研究过程复查系统规模和目标研究目前正在试用的系统导出新系统的高层逻辑模型进一步定义问题导出和评价供选择的解法推荐行动方针草拟开发计划书写文档提交审查 2.3系统流程图1、系统流程图:概括地描绘物理系统的工具。2、系统流程图的基本思想:用图形符号以黑盒子形式描绘组系统的每个部件(程序、文档、数据库、人工过程等)。3、P39符号4、系统流程图的习惯画法:使信息在图中从顶向下或从左向右流动。5、面对复杂的系统时,一个比较好的方法时分层次地描绘这个系统。2.4数据流图数据流图(DFD):一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。数据流图的四种基本符号P41数据存储(静止状态)和数据流(运动)都是数据。数据流图的基本要点是描绘“做什么”,而不是考虑“怎么做”。星号(*)是数据流之间的“与”关系;加号(+)表示“或”关系;号表示只能从中选一个(互斥关系)。画数据流图的基本目的是利用它作为交流信息的工具。2.5数据字典数据字典应由对下列4类元素的定义组成:数据流、数据流分量(即数据元素)、数据存储、处理。由数据元素组成数据的方式的三种基本类型:顺序、选择、重复。+可选用以下符号描述由数据元素组成数据的关系:=意思是等价于(或定义为)、+意思是和(即连接两个分量)、 意思是或(通常用“|”号隔开供选择的分量)、 意思是重复、( )意思是可选。数据字典最重要的用途是作为分析阶段的工具。2.6成本/效益分析成本/效益分析的目的:从经济角度分析开发一个特定的新系统是否划算,从而帮助客户组织的负责人正确地作出是否投资于这项开发工程的决定。软件开发成本:主要表现为人力消耗。成本估算技术:代码行技术、任务分解技术、自动估计成本技术。货币的时间价值:用利率的形式。 假设年利率为i,如果现在存入P元,则n年后的价值:F=P(1+i)n衡量一项开发工程的价值:投资回收期。纯收入投资回收率2.7小结三 需求分析需求分析是软件定义时期的最后一个阶段。基本任务:准确地回答“系统必须做什么?”这个问题。用于需求分析的结构化分析方法必须遵守下述准则: (1)、必须理解并描述问题的信息域,根据这条准则应该应该建立数据模型。E-R图 (2)、必须定义软件应完成的功能,这条准则要求建立功能模型。数据流图 (3)、必须描述作为外部事件结果的软件行为,这条准则要求建立行为模型。状态图 (4)、必须对描述信息、功能和行为的模型进行分解,用层次的方式展开细节。3.1需求分析的任务对软件系统的综合要求:功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求、约束、逆向需求、将来可能提出的要求。需求分析的任务:确定对系统的综合要求 分析系统的数据要求 导出系统的逻辑模型 修正系统开发计划3.2与用户沟通获取需求的方法访谈、面向数据流自顶向下求精、简易地应用规格说明技术,快速建立软件原型。结构化分析方法就是面向数据流自顶向下求精进行需求分析的方法。快速建立软件原型是最准确、最有效、最强大的需求分析技术。3.3分析建模与规格说明需求分析过程应建立3种模型:数据模型、功能模型、行为模型。数据流图是建立功能模型的基础。状态转换图是行为建模的基础。3.4实体-联系图(E-R)E-R图中包含着实体(即数据对象)、关系和属性3种基本成分。3.5数据规范化第一范式:每个属性值都必须是原子值,即仅仅是一个简单值而不含内部结构。第二范式:满足第一范式的条件,而且每个非关键字都由整个关键字决定(而不是由关键字的一部分来决定)。第三范式:符合第二范式的条件,每个非关键字属性都仅由关键字决定,而且一个非关键字属性不能仅仅是对另一个非关键字属性的进一步描述(即一个非关键字属性值不依赖于另一个非关键字属性值)。3.6状态转换图状态转换图(简称状态图):通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。在状态图中定义的状态主要有:初态(即初始状态)、终态(即最终状态)和中间状态。在状态图中只能有一个初态,而终态则可以有0至多个。事件就是引起系统做动作或(和)转换状态的控制信息。 状态名状态变量的名字和值活动表在状态图中,初态用一对同心圆(内圆为实心圆)表示。中间状态用圆角矩形表示。如图:活动表的语法格式:事件名(参数表)/动作表达式在活动表中通常使用的3种标准事件: Entry事件指定进入该状态的动作 Exit事件指定退出该状态的动作 Do事件制定在该状态下的动作状态转换:箭头指明的转换方向。事件表达式的语法:事件说明【守卫条件】/动作表达式 事件说明与守卫条件同时使用时,则当且仅当事件发生且布尔表达式为真时,状态转换才发生;如果只有守卫条件没有事件说明则只要守卫条件为真,状态转换就发生。守卫条件是一个布尔表达式。动作表达式是一个过程表达式,当状态表达式开始时执行该表达式。3.7其他图形层次方框图、warnier图、IPO图(输入、处理、输出图的简称)3.8验证软件需求从四个方面进行验证:一致性、完整新、现实性、有效性3.9小结五 总体设计5.1设计过程总体设计过程通常有两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件的结构。典型的总体设计过程包括下述9个步骤: 1)、设想宫选择的方案 需求分析阶段得出的数据流程图是总体设计的极好的出发点。 2)、选择合理的方案 对每个合理的方案,分析员都应准备下列四份材料: A.系统流程图 B.组成系统的物理元素清单 C.成本/效益分析 D.实现各个系统的进度计划 3)、推荐最佳方案 4)、功能分解 5)、设计软件结构 软件结构可以用层次图或结构图来描绘。 6)、设计数据库 7)、制定测试计划 8)、书写文档 这个阶段完成的文档有:系统说明、用户手册、测试计划、详细的实现计划、数据库设计结果。 9)、审查和复查5.2设计原理模块化、抽象、逐步求精、信息隐藏和局部化、模块独立模块是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。模块是构成程序的基本构件。模块化就是把程序分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。抽象:把相似的方面集中和概括起来,暂时忽略它们之间的差异,或者说,抽出事物的本质特性而暂时不考虑它们之间的细节。逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术的基础。定义:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。局部化:把一些关系密切的软件元素物理地放得彼此靠近。模块独立的概念是模块化,抽象,信息隐藏和局部化概念的直接结果。模块独立化重要性的原因:第一,有效地模块化的软件比较容易开发出来;第二,独立的模块化比较容易测试和维护。模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。耦合是对一个软件结构内不同模块之间互连程度的度量。耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。如果传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现),则这种耦合称为控制耦合。数据耦合是低耦合。公共环境耦合、最高程度的耦合式内容耦合。内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。偶然内聚、逻辑内聚、时间内聚低内聚、中内聚、高内聚的分类。5.3启发规则/软件结构提高模块独立性模块规模应该适中深度、宽度、扇出和扇入都应适当模块的应用域应该在控制域之内力争降低模块接口的复杂程度设计单入口单出口的模块模块功能应该可以预测5.4描绘软件结构的图形工具层次图和HIPO图结构图5.5面向数据流的设计方法面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。信息流分成两种类型:变化流、事物流(概念)变换分析是一系列设计步骤的总称,经过这些步骤吧具有变换流特点的数据流图按预先确定的模式映射成软件结构。变换分析的设计步骤。5.6小结第6章 详细设计目标:1.确定应该怎样具体的实现所要求的系统 2.设计出程序的“蓝图” 3.详细设计的结果基本决定了最终的程序代码的质量6.1 结构程序设计1.概念:结果程序设计是一种设计程序的技术,它采用自顶向下逐步求精的的设计方法和单入口但出口的控制结构。2.三种基本控制结构: 1)顺序结构:相当于“A、B” 2)选择结构:相当于“If exp then A else B endif;” 3) 循环结构:相当于“While exp do A”3.扩充的两种控制结构: 1)多分支结构:相当于“Case I of I=1:C1;I=n:Cn;” 2)UNTIL循环结构:相当于“Repeat A until exp;”4.结构程序设计的种类: 1)经典的结构程序设计:只允许使用顺序、IF_ELSE型分支和DO_WHILE型循环; 2)扩展的结构程序设计:除了三种基本控制结构,还使用DO_CASE型多分支结构和DO_WHILE型循环结构; 3)修正的结构程序设计:除了三种基本控制结构和两种扩充结构,还使用LEAVE(或BREAK)结构。6.2 人机界面设计6.2.1 设计问题1.系统响应时间2.用户帮助设施3.出错信息处理4.命令交互6.2.2 设计过程6.2.3 人机界面设计指南1.一般交互指南2.信息显示指南3.数据输入指南6.3 过程设计的工具6.3.1 程序流程图 程序流程图:是一种描述程序的控制结构流程和指令执行情况的有向图。程序流程图的主要缺点:程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。程序流程图不易表示数据结构。6.3.2 盒图 盒图特点:功能域明确,可以从盒图上一眼就看出来。不可能任意转移控制。很容易确定局部和全程数据的作用域。很容易表现嵌套关系,也可以表示模块的层次结构。PAD图是一种问题分析图。PAD图优点:使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序PAD图所描绘的程序结构十分清晰。图中最左面的竖线是程序的主线,即第一层结构。随着德程序层次的增加,PAD图逐渐向右延伸,每次增加一个层次,图形向右扩展竖线。PAD图中竖线的总条数就是程序的层次数。用PAD图表现程序逻辑,易懂、易读、易记。PAD图是二维树形结构的图形,程序从图中最左竖线上端的结点开始执行,自上而下,从左向右顺序执行,遍历所有结点。容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成,从而可省去人工编码的工作,有利于提高软件可靠性和软件生产率。即可用于表示程序逻辑,也可用于描绘数据结构。PAD图的符号支持自顶向下、逐步求精方法的使用。开始时设计者可以定义一个抽象的程序,随着设计工作的深入而使用def符号逐步增加细节,直至完成详细设计。判定表判定表由四部分组成: 左上部列出所有条件 左下部是所有可能做的动作 右上部是表示各种条件组合的一个矩阵 右下部是和每种条件组合相对应的动作6.3.5 判定树 判定树是判定表的变种。过程设计语言过程设计语言(PDL)也称为伪码。PDL的优点:可以作为注释的直接插在源程序中间可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDl的书写和编辑工作已经有自动处理PDL的程序存在,而且可以自动由PDL生成程序代码。PDL缺点:不如图形工具形象直观。面向数据结构的设计方法Jackson图顺序结构选择结构重复结构改进的Jackson图Jackson方法Jackson结构程序设计方法基本上由5个步骤组成:分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构。找出输入数据结构和输出数据结构中有对应关系的数据单元。用下述3条规则从描绘数据结构的Jackson图导出描绘程序结构的Jackson图。为每对有对应关系的数据单元,按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框。根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框。根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框。列出所有操作和条件,并且把它们分配到程序结构图的适当位置。用伪码表示程序。程序复杂程度的定量度量McCabe方法1.流图 “退化了的”程序流程图,它仅仅描绘程序的控制流程,完全不表现对数据的具体操作以及分支或循环的具体条件。2.计算环形复杂度的方法环形复杂度等于流图中的区域数。流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数的,N是结点数。流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。3.环形复杂度的用途 它是对测试难度的一种定量度量,也能对软件最终的可靠性给出某种预测。 实践表明,模块规模以V(G)=10为宜。6.5.2 Halstead根据程序中运算符和操作数的总数来度量程序的复杂程度。N=N1+N2程序总长度:N 运算符出现的总次数:N1操作数出现的总次数:N2Halstead给出的预测程序长度的公式: H=n1log2n1+n2log2n2 预测程序中包含错误的个数的公式: E=Nlog2(n1+n2)/3000第七章 实现概念:编码和测试统称为实现。编码:把软件设计结果翻译成程序。测试:检测程序并改正错误的过程。编码选择程序设计语言1.计算机程序设计语言基本上可以分为两大类: 1):汇编语言 2):高级语言2.选择语言时应考虑的实用标准:系统用户要求可以使用的编译程序可以得到的软件工具工程规模程序员的知识软件可移植性要求软件的应用领域编码风格程序内部的文档数据说明语句构造输入输出效率软件测试基础7.2.1 软件测试的目标 1.有关测试的一些规则:测试是为了发现程序中的错误而执行程序的过程好的测试方案是极可能发现迄今为止尚未发现的错误的测试成功的测试是发现多了至今为止尚未发现的错误的测试软件测试准则所有测试都应该追溯到用户要求应该远在测试开始之前就制定出侧是计划把Pareto原理应用到软件测试中应该从“小规模”测试开始,并逐步进行“大规模”测试穷举测试是不可能的为了达到最佳的测试效果,应该由独立的第三方从事测试工作测试方法黑盒测试白盒测试测试步骤模块测试子系统测试系统测试验收测试平行运行测试阶段的信息流单元测试测试重点:模块接口局部数据结构重要的执行通路出错处理通路边界条件代码审查计算机测试集成测试自顶向下集成自顶向下集成是一种递增的装配软件结构的方法,这种应用方法非常广泛。它需要存根程序,不需要驱动程序。自底向上集成自底向上集成是从软件结构最底层模块开始进行组装和测试,它与自顶向下结合方法相反,需要驱动程序,但是不需要存根程序。不同集成测试策略的比较回归测试包括3类不同的测试用例检测软件全部功能的代表性测试用例专门针对可能受修改影响的软件功能的附加测试针对被修改过的软件成分的测试确认测试7.5.1 确认测试的范围确认测试的两种可能的结果:功能和性能与用户要求一致,软件是可以接受的功能和性能与用户要求有差距软件配置复查Alpha和Beta测试Alpha测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。Beta测试由软件的最终用户在一个或多个客户场所进行白盒测试逻辑覆盖语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖点覆盖边覆盖路径覆盖控制结构测试基本路径测试:步骤:1)根据过程设计结果画出相应的流图2)计算流图的环形复杂度3)确定线性独立路径的基本集合4)设计可强制执行基本集合中每条路径的测试用例条件测试循环测试方法:1)简单循环2)嵌套循环3)串接循环7.7 黑盒测试技术7.7.1 等价划分7.7.2边界值分析7.7.3错误推断7.8调试7.8.1调试过程7.8.2调试途径蛮干法回溯法原因排除法软件可靠性基本概念软件可靠性的定义软件的可用性估算平均无效故障时间的方法方法基本假定估算平均无故障时间估算错误总数的方法第8章维护8.1软件维护定义软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。维护的种类:改正性维护适应性维护完善性维护预防性维护软件维护的特点结构化维护与非结构会维护差别巨大维护的代价高昂维护的问题很多软件维护过程维护组织维护报告维护的事件流保存维护记录评价维护活动软件的可维护性决定软件可维护性的因素可理解性可测试性可修改性可移植性可重用性文档是影响软件可维护性的决定因素。包括:1)用户文档2)系统文档8.4.3可维护性复审8.5预防性维护8.6软件再工程过程库存目录分析文档重构逆向工程代码重构数据重构正向工程第9章面向对象方法学引论9.1面向对象方法学概述9.1.1面向对象方法学的要点认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以有比较简单的对象以某种方式组合而成把所有对象都划分成各种对象类,每个类定义了一组数据和一组方法按照子类与父类的关系,把若干个对象类组成一个层次结构的系统。对象彼此之间仅能通过传递消息互相联系。面向对象方法学的优点与人类习惯的思维方法一致稳定性好可重用性好轻易开发大型软件产品可维护性好面向对象的概念对象对象的形象标识对象的定义对象是封装了数据结构及可以施加在这些数据上的操作的封装体,这个封装体有可以唯一的表示它的名字,而且向外界提供一组服务。对象的特点:以数据为中心对象是主动的实现了数据封装本质上具有并行性模块独立性好其它概念类:是具有相同属性和行为的一个或多个对象的描述实例消息由3部分组成:1)接收消息的对象2)消息选择符3)零个或多个变元4. 方法是对象所能执行的操作5. 属性6. 封装7. 继承8多态性9. 重载9.3面向对象建模9.4对象模型9.4.1类图的基本符号1.定义类2.定义属性3.定义服务9.4.2表示关系的符号1.关联普通关联关联角色限定关联关联类2.聚集1)共享聚集2)组合聚集3泛化1)普通泛化2)受限泛化4.依赖和细化依赖关系细化关系动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象型中的对象的合法变化序列。功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。用例图系统用例特征:1)用例代表某些用户可见的功能,实现一个具体的用户目标2)用例总是被行为者启动,并向行为者提供可识别的值3)用例必须是完整的行为者用例之间的关系用例建模32
展开阅读全文