第6章-详细设计_第1页
第6章-详细设计_第2页
第6章-详细设计_第3页
第6章-详细设计_第4页
第6章-详细设计_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

第5章详细设计详细设计的基本任务详细设计过程详细设计内容结构程序设计人机界面设计过程设计的工具程序复杂度的定量度量详细设计优化小结详细设计的基本任务确定应该怎样具体的实现系统?;设计程序的”蓝图”,但不是编程序;详细设计的结果决定了最终的程序代码的质量;结构化程序设计是详细设计的逻辑基础;详细设计的基本任务详细设计也是采用细化的方法把每个功能模块分解为一系列的处理步骤;详细设计须遵循的原则:模块的逻辑描述正确可靠,清晰易读;采用结构化程序设计方法,改善控制结构,降低程序复杂度,提高程度的可读性、可测试性和可维护性。详细设计过程Step1:确定每个模块的算法;Step2:确定每个模块的数据组织;Step3:为每个模块设计一组测试用例;Step4:编写详细设计说明书。详细设计内容程序描述功能性能输入项输出项算法接口存储分配注释设计限制条件结构化程序设计自顶向下,逐步求精;有限制的使用GOTO语句;单入口,单出口;采用”顺序”,”选择”,”循环”3种基本的控制结构来详细设计软件模块的结构;(注:也可称是5种,参考书上例子)自顶向下,逐步求精细化软件模块;设计功能更加独立的模块;可用层次结构图或HIPO图来进行描述;自顶向下,逐步求精例,用筛选法求100以内的素数筛选法就是从2到100中去掉2,3,…,9,10的倍数,剩下的就是100以内的素数。为了解决这个问题,可先按程序功能写出一个框架。自顶向下,逐步求精main(){//程序框架

建立2到100的数组A[],其中A[i]=i;

-----------------------------------1

建立2到10的素数表B[],其中存放2

到10以内的素数;-----------2

若A[i]=i是B[]中任一数的倍数,则剔除A[i];---------------------3

输出A[]中所有没有被剔除的数;

-----------------------------------4}

main(){

/*建立2到100的数组A[],其中A[i]=i*/

for(i=2;i<=100;i++)A[i]=i;

/*建立2到10的素数表B[],其中存放2到

10以内的素数*/

B[1]=2;B[2]=3;B[3]=5;B[4]=7;

/*若A[i]=i是B[]中任一数的倍数,则剔除A[i]*/

for(j=1;j<=4;j++)

检查A[]所有的数能否被B[j]整除并将能被整除的数从A[]中剔除;-----3.1

自顶向下,逐步求精

/*输出A[]中所有没有被剔除的数*/for(i=2;i<=100;i++)

若A[i]没有被剔除,则输出之---4.1}main(){

/*建立2到100的数组A[],其中A[i]=i*/

for(i=2;i<=100;i++)A[i]=i;

/*建立2到10的素数表B[],其中存放2到

10以内的素数*/

B[1]=2;B[2]=3;B[3]=5;B[4]=7;

/*若A[i]=i是B[]中任一数的倍数,则剔除

A[i]*/

for(j=1;j<=4;j++)

/*检查A[]所有的数能否被B[j]整除并将能被整除的数从A[]中剔除*/

for(i=2;i<=100;i++)

if(A[i]/B[j]*B[j]==A[i])

A[i]=0;

/*输出A[]中所有没有被剔除的数*/

for(i=2;

i<=100;i++)

/*若A[i]没有被剔除,则输出之*/

if(A[i]!=0)

printf(“A[%d]=%d\n”,I,A[i]);

}

有限制的使用GOTO语句不要破坏程序的可读性;尽量少的使用它;BREAK语句也是一种特殊的GOTO语句;有限制的使用GOTO语句例1打印A,B,C三数中最小者程序有限制的使用GOTO语句

if(A<B)

goto120;

if(B<C)goto110;100write(C);

goto140;

110write(B);

goto140;120if(A<C)goto130;

goto100;130write(A);140end

有限制的使用GOTO语句

if(A<B)and(A<C)thenwrite(A)

else if(AB)and(B<C)then

write(B)

else

write(C)endifendif单入口,单出口降低模块接口的复杂性;提高模块的独立性;单入口含义:从顶部进行模块;单出口含义:从底部退出模块;例2用二分法求方程f(x)=0在区间[a..b]中的根的程序

假设在闭区间[a..b]上函数f(x)有唯一的一个零点f0=f(a);f1=f(b); //程序1if(f0*f1<=0){x0=a;x1=b;

for(i=1;i<=n;i++){

xm=(x0+x1)/2;fm=f(xm);

if(abs(fm)<eps||abs(x1-x0)<eps)

gotofinish;

if(f0*fm>0){x0=xm;f0=fm;}

elsex1=xm;

}

finish:printf(“\nTherootofthisequationis%d\n”,xm);}非正常出口正常出口单入口,两出口正常出口是循环达到n次非正常出口是循环中途控制转出到标号finish

所在位置可读性好f0=f(a);f1=f(b);//程序2

if(f0*f1<=0){

x0=a;x1=b;

for(i=1;i<=n;i++){

xm=(x0+x1)/2;fm=f(xm);

if(abs(fm)<eps||abs(x1-x0)<eps)break;

if(f0*fm>0)

{x0=xm;f0=fm;}

else

x1=xm;

}}f0=f(a);f1=f(b);//程序3if(f0*f1<=0){

x0=a;x1=b;i=1;finished=0;

while(i<=n&&finished==0){

xm=(x0+x1)/2;fm=f(xm);

if(abs(fm)<eps||abs(x1-x0)<eps)finished=1;

if(finished==0)

if(f0*fm>0){x0=xm;f0=fm;}

else

x1=xm;

}}结构程序设计定义:尽可能少的使用GOTO语句的程序设计方法。最好仅在检测出错误时才使用GOTO语句;应该总是使用前向的GOTO语句;几种基本的控制结构过程设计的工具程序流程图盒图PAD图判定表判定树PDL语言均要掌握程序流程图历史悠久,为最广泛的人所熟悉;描绘直观,便于初学者掌握;总的趋势越来越多的人不使用它;循环的标准符号注解的使用多出口判断程序流程图主要缺点它本质上不是逐步求精的工具;它使得程序员过早的考虑程序的控制结构,而忽略程序的全局结构;箭头符号代表控制流,不受程序员控制,有随意性;它不表示数据结构;盒图也称为N-S图它的主要特点功能域明确;作用域明确;不能任意转移;易确定作用域;易表现嵌套关系;比较直观、易于绘制;有助于程序员养成结构化的设计思想;缺点:算法复杂,画图困难,影响清晰性,灵活性差。A调用子程序盒图盒图N-S图的嵌套定义形式PAD图PAD图是问题分析图(problemanalysisdiagram)的英文缩写。它用二维树型结构的图来表示程序结构,便于将它翻译为程序代码。它还允许递归使用。PAD图def分支PAD图

对应于增量型循环结构

fori:=n1ton2stepn3do

在PAD中有相应的循环控制结构PAD图P1P2P3P4P5CP2P6P7P8CUNTILC2UNTILC3P9P10defPAD图它的主要优点:符合结构化程序设计要求;结构清晰,层次分明,易读,易懂,易记;既可表示程序逻辑,又可表示数据结构;容易将PAD自动转换为高级语言源程序;支持自顶向下、逐步求精的方法。自上而下,从左向右顺序执行判定表表示复杂的条件组合与应做动作之间的对应关系;判定表并不适用于作为一种通用的设计工具,通常将之用于辅助测试;要求将程序流程图中的多分支判断都改成两分支判断;判定表例:

航空行李托运费的算法

按规定:重量不超过30公斤的行李可免费托运。重量超过30公斤时,对超运部分,头等舱国内乘客收4元/公斤;其它舱位国内乘客收6元/公斤;外国乘客收费为国内乘客的2倍;残疾乘客的收费为正常乘客的1/2。

判定表缺点:含义不清楚;数据元素多于两个时,判定表简洁性下降;判定树它是判定表的变种;它的优点在于形式简单,含义明确;它是一种常用的详细设计的工具;判定树缺点:简洁性很差;分支次序影响判定树的简洁度;如把行李重量的判断作为最后一个分支,会怎样?PDL语言它也称为伪码,它是一种“混杂”语言;关键字有固定的语法,称为外语法;处理用自然语言描述,称为内语法;有数据说明;有子程序定义与调用机制;示例:拼词检查程序PROCEDURE

spellcheck

IS

BEGIN

--*1

splitdocumentintosinglewords

--*2

lookupwordsindictionary

--*3

displaywordswhicharenotindictionary

--*4 createanewdictionary

END

spellcheck

PROCEDURE

spellcheckBEGIN

--*splitdocumentintosinglewords

LOOP

getnextword

addwordtowordlistinsortorder

EXITWHEN

allwordsprocessed

ENDLOOP

--*lookupwordsindictionary

LOOP

getwordfromwordlist

IF

wordnotindictionary

THEN

--*displaywordsnotindictionary

displayword promptonuserterminal

IF

userresponsesayswordOK

THEN

addwordtogoodwordlist

ELSE

addwordtobadwordlist

ENDIF

ENDIF

EXITWHEN

allwordsprocessed

ENDLOOP

--*createanewwordsdictionary

dictionary:=

mergedictionaryandgoodwordlistEND

spellcheckPDL语言它的优点:易于实现由PDL到源代码的自动转换;可作为注释直接插在源程序中间;编辑简单,使用方便;它的缺点:直观性很差;(比图,表的直观性差)各种工具的比较表示法准则伪码IPO判定树(表)流程图N-S图PAD易用性优中中优良良逻辑表达能力良良优中良良机器可读性中差差中中中易转换程序代码优差良良良良结构化良中差差优优易修改性良中良差良差数据表示能力中差中差中中易验证性中中中差中中使用频率高低低高低低程序复杂性定量度量它可以用来衡量模块的设计质量。它的价值:把程序的复杂度乘以适当的常数即可估算出软件中错误的数量以及软件开发需要用的工作量。经常使用的方法:McCable方法Halstead方法McCabe方法根据程序控制流的复杂程度定量度量方法。它分析的基础是流图(程序图)。它的分析过程:过程设计结果→流图→计算→环路复杂度流图圆表示结点,可代表一条或多条语句。流图中的箭头称为边,代表控制流。边必须终止于一个结点。由边和结点围成的面积称为区域。任何方法表示的过程设计结果都可以翻译为流图。处理框和菱形判定框包括图外面的那个区域复合条件的计算复合条件的含义。把复合条件分解为若干个简单条件,注意每一个简单条件对应一个结点。包含条件的点称为判定结点。复合条件的计算IfaorbthenprocedurexElseprocedureyEndifabxyend顺序结构的结点可以合并abc计算环形复杂度的3种方法流图中的区域的个数等于环形复杂度。公式V(G)=E-N+2,E代表流图中边的数目,N是结点数目。公式V(G)=P+1,P是流图中判定结点的数目。环形复杂度计算的例子根据程序流程图计算1234568711910顺序结构可以和3合并顺序结构可以和5合并该段程序的正常出口该段程序的正常出口整个程序的正常出口环形复杂度计算的例子12,34,510689711区域1区域2区域3区域4区域个数:4(即复杂度)判定个数:3(3+1=4)边:11,节点:9即:11-9+2=4判定1判定2判定3环形复杂度计算的例子根据PDL伪码计算图6.16环形复杂度的用途程序的分支增加,则环形复杂度也随之增加;它是对程序结构的定量度量,同时也是对测试难度的定量度量;一般,V(G)<=10为宜。基本结构的环形复杂度顺序结构:1双分支选择结构:2While结构:2Until结构:2多分支选择结构:n(代表分支数)Halstead方法它根据程序中运算符和操作数的总数来度量程序的复杂程度。N=N1+N2,N为程序长度,N1为程序中运算符出现的总次数,N2为操作数出现的总次数。H=n1log2n1+n2log2n2H代表预测程序长度;n1代表不同运算符的个数;n2代表不同操作数的个数;Halstead方法预测长度H和实际长度N很接近Halstead还给出了预测程序中包含错误个数的公式:E=N*log2(n1+n2)/3000实验证明,预测的错误数量与实际错误数量的误差在8%之内人机界面设计人机界面(HumanComputerInterface,简称HCI)通常也称为用户界面;TheoMandel创造了三条黄金原则:置用户于控制之下减少用户的记忆负担保持界面一致

人机界面设计人机界面应具备的特性:可使用性灵活性可靠性人机界面设计可使用性使用的简单性;术语标准化的一致性;快速的系统响应和低的系统成本;用户界面具有容错能力;人机界面设计灵活性算法的可隐可显性;用户可以根据需要制定和修改界面方式;足够的响应信息;界面具有一定的灵活性;人机界面设计可靠性用户界面的复杂性;用户界面的可靠性;人机界面设计人机界面的设计质量,直接影响用户对软件产品的评价。设计问题系统响应时间用户帮助设施出错信息处理命令行交互系统响应时间它指从用户完成某个控制动作,到软件给出预期的响应之间的这段时间;它有两个重要属性:长度;易变性;用户帮助设施帮助是必须的。帮助设施可分为两类:集成;附加;出错信息处理系统出现问题了给出的“坏消息”;出错信息应该具备如下的属性:信息用户应该可以理解;信息有助于从错误中恢复;信息应该反映错误导致的负面后果;信息应该伴随着听觉和视觉上的提示;信息不能带有指责色彩。命令交互在提供命令交互方式时,必须考虑下列问题:是否每个

温馨提示

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

评论

0/150

提交评论