⼀、填空题(每空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分)
1.软件设计中划分模块的⼀个准则是()。A、低内聚低耦合B、低内聚⾼耦合
C、⾼内聚低耦合D、⾼内聚⾼耦合
2.Jackson设计⽅法是由英国的M. Jackson提出的,它是⼀种⾯向()的软件设计⽅法。A、对象B、数据流C、数据结构D、控制结构
3.试判断下列叙述中,哪个(些)是正确的( )。a、软件系统中所有的信息流都可以认为是事务流b、软件系统中所有的信息流都可以认为是变换流c、事务分析和变换分析的设计步骤是基本相似的A、aB、bC、cD、b和c
4.()是⽤户和设计交换最频繁的⽅法。A、原型化⽅法B、瀑布模型⽅法C、螺旋模型⽅法D、构件组装模型
5.软件⼯程⽅法学的⽬的是:使软件⽣产规范化和⼯程化,⽽软件⼯程⽅法得以实施的主要保证是( )。A、硬件环境B、软件开发的环境
C、软件开发⼯具和软件开发的环境D、开发⼈员的素质
6.20世纪50年代以来,出现了许多不同的程序设计语⾔,下列语⾔中哪个语⾔是低级语⾔( )。A、PASCALB、 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分)STARTIF C1THENWHILE C2 DOfENDDOELSEBLOCKgp
ENDBLOCKENDIF
REPEAT UNTIL C3qrENDREPSTOP
1)画出程序流程图(4分)2)⽤N—S图描述(4分)2.有下列伪码程序:START
INPUT (M,N)IF M>=10THEN X=10ELSE X=lENDIFIF N>=20THEN Y=20ELSE Y=2ENDIFPRINT(X,Y)STOP
设计该程序的语句覆盖和路径覆盖测试⽤例。(7分)M=9(或
M=l0(或>=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种标准事件:/动作表达式
则当且仅当事件发⽣且布尔表达式为真时,状态转换才发⽣;如果只有守卫条件没有事件说明则只要守卫条件为真,状态转换就发⽣。
守卫条件是⼀个布尔表达式。
动作表达式是⼀个过程表达式,当状态表达式开始时执⾏该表达式。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_THEN_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=N 1+N 2程序总长度:N
运算符出现的总次数:N 1操作数出现的总次数:N 2
Halstead 给出的预测程序长度的公式:H=n 1log 2n 1+n 2log 2n 2
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务