1、第六章 详细设计,(Program Design),主要内容,详细设计的目标和任务(理解) 详细设计工具(应用) 程序复杂性的定量度量(理解) 人机界面设计(自学),3,4,1 详细设计的目标和任务,从软件开发的工程化观点来看,在使用程序设计语言编制程序以前,需要对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。这就是详细设计的任务。,5,回答的关键问题:“怎样具体地实现这个系统”。 主要任务是设计出程序的“蓝图”,供程序员日后根据这个蓝图编写出实际的程序代码。 注意:设计程序的蓝图,不是具体地编写程序。 设计程序主要采用结构化的程序设计方法。,基本任务,Progra
2、m Design Coding,6,什么是结构程序设计 结构程序设计是一种设计程序的技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。 *只使用三种基本的控制结构 *单入口单出口的控制结构(取消GOTO语句),结构程序设计,经典的结构程序设计:顺序,选择, 当型循环 扩展的结构程序设计:顺序,选择+多分支,当型循环+直到型循环 修正的结构程序设计:顺序,选择+多分支,当型循环+直到型循环,break结构,8,结构程序设计的优点 显著提高软件开发工程的成功率和生产率; 程序具有清晰的层次结构,容易阅读和理解; 程序的静态结构和动态结构较一致,程序容易读和理解,开发较易保证程序的正确
3、性; 控制结构有确定的逻辑模式,编写程序代码简单 源程序清晰流畅,易读易懂易测试; 可以重用的代码量最大; 程序的逻辑结构清晰,有利于程序正确性证明。结构程序设计的缺点 存贮容量和运行时间较大(增加10%-20%)。,9,详细设计的原则与方法,1、清晰第一的设计风格 2、结构化的控制结构 3、逐步细化(逐步求精)的实现方法,10,逐步求精的含义 总体设计阶段逐步求精的含义:把一个复杂问题的解法分解和细化成一个由许多模块组成的层次结构的软件系统。详细设计阶段逐步求精的含义:把一个模块的功能逐步分解细化为一系列具体的处理步骤。,11,在详细设计阶段,要决定各个模块的实现算法,并精确地表达这些算法。
4、 表达详细规格说明的工具叫做详细设计工具,它可以分为以下三类:图形工具表格工具语言工具,2 详细设计工具,12,(1)程序流程图又称为程序框图,是早期软件设计的主要工具。 (2)优点: 对控制流程的描绘很直观,便于初学者掌握。 (3)缺点: 程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。,2.1 程序流程图,13,程序流程图中用箭头代表控制流,因此程序员不受约束,可以完全不顾结构程序设计的精神,随意转移控制。 程序流程图不易表示数据结构。程序流程图使用五种基本控制结构是:,14,15,示例,16,程序流程图的标准符号,17,多出口判断,1
5、8,N-S图也叫做盒图。Nassi和Shneiderman提出,有以下特点: (1)功能域(即一个特定控制结构的作用域)明确,很容易从盒图上看出。 (2)盒图没有箭头,不可以随意转移控制,不允许违背程序设计的原则。 (3)很容易确定局部和全程数据的作用域。 (4)很容易表现嵌套关系,也可以表示模块的层次结构。,2.2 N-S图,19,五种基本控制结构由五种图形构件表示。,20,示例,21,N-S图的嵌套定义形式,22,PAD图由日本日立公司在1973年发明,它用二维树型结构的图来表示程序的控制流,比较容易翻译成程序代码。主要特点: (1)使用PAD图设计的程序必然是结构化程序。 (2)PAD图
6、描绘的程序结构十分清晰。 (3)用PAD图表现程序逻辑,易读、易懂、易记。,2.3 问题分析图(PAD),23,(4)PAD图面向高级语言,容易将PAD图转换成高级语言源程序 (5)PAD图既可用于表示程序逻辑,也可用于描绘数据结构。 (6)PAD图的符号支持自顶向下、逐步求精方法的使用。,24,PAD也设置了五种基本控制结构的图式,并允许递归使用。,25,PAD描述的示例,开始 ,结束 ,26,对应于增量型循环结构for i := n1 to n2 step n3 do 在PAD中有相应的循环控制结构,PAD的扩充控制结构,27,2.4 判定表,判定表用于表示程序的静态逻辑。 在判定表中的条
7、件部分给出所有的两分支判断的列表,动作部分给出相应的处理。,28,判定表能够清晰地表示复杂的条件组合与应做的动作之间的对应关系,而其它的工具不易表示。 一张判定表由四部分组成,左上部列出所有条件,左下部是所有可能做的动作,右上部是表示各种条件组合的一个矩阵,右下部是和每种条件组合相对应的动作。 判定表的每一列实质上是一条规则,规定了与特定的条件组合相对应的动作。,详细设计的工具 - 判定表,例子 假设某航空公司规定,乘客可以免费托运重量不超过30公斤的行李。当行李重量超过30公斤时,对头等舱的国内乘客超重部分每公斤收费 4 元,对其它舱的乘客超重部分每公斤收费 6 元,对外国乘客超重部分每公斤
8、收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。用判定表来表示与上述每种条件组合相对应的动作。,例:某校制定了教师的讲课课时津贴标准。对于各种性质的讲座,无论教师是什么职称,每课时津贴费一律是50元;而对于一般的授课,则根据教师的职称来决定每课时津贴费:教授30元,副教授25元,讲师20元,助教15元。,31,“检查发货单”的判定表,32,无多分支判断结构,33,34,建立判定表的步骤,列出过程执行期间的所有条件(或所有判断)。 列出与一个具体过程(或模块)有关的所有处理。 将特定条件取值组合与特定的处理相匹配,消去不可能发生的条件取值组合。 将右部每一纵列规定为一个处理规
9、则,即对于某一条件取值组合将有什么动作。,35,判定树是判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。优点:形式简单,不需任何说明,易看出含义,易于掌握和使用。缺点:简洁性不如判定表,相同的数据元素往往要重复写多遍,而且越接近树的叶端重复次数越多。,2.5 判定树,详细设计的工具 - 判定树,行李费 算 法,行李重量W30,国内乘客,外国乘客,头等舱,其它舱,残疾乘客 - (W-30)*2,正常乘客 - (W-30)*4,残疾乘客 - (W-30)*3,正常乘客 - (W-30)*6,头等舱,其它舱,残疾乘客 - (W-30)*4,正常乘客 - (W-30)*8,残疾乘
10、客 - (W-30)*6,正常乘客 - (W-30)*12,行李重量W30,免费,教师课时津贴判定树,注:判定表与判定树并不适用于作为一种通用的设计工具,通常将之用于辅助测试,38,2.6 PDL (Program Design Language),PDL是一种用于描述功能模块的算法设计和加工细节的语言。称为设计程序用语言。它是一种伪码。 伪码的语法规则分为“外语法”和“内语法”。 PDL具有严格的关键字外语法,用于定义控制结构和数据结构,同时它的表示实际操作和条件的内语法可使用自然语言的词汇。,39,示例: 拼词检查程序,PROCEDURE spell_check ISBEGINSplit
11、document into single wordsLook up words in dictionaryDisplay words which are not in dictionaryCreate a new dictionaryEND spell_check,40,应具备以下特点: 有固定的外语法(keyword);, 有数据说明,例如:TYPE number IS STRING LENGTH (12)TYPE table IS INSTANCE OF symbol_table又如:DESCLARE 变量名AS 限定词1限定词2, 内语法用自然语言描述;,抽象类型,41,有子程序定义与调
12、用机制,例如:PROCEDURE INTERFACE pseudocode lines END调用时可用:PERFORM USING,42,程序控制结构 判定结构 IF 条件THEN PDL语句段或程序块ELSE PDL语句段或程序块ENDIF,43,分支结构CASE 情况变量WHEN 情况条件1 SELECT 块或PDL语句WHEN 情况条件2 SELECT 块或PDL语句。WHEN 情况条件N SELECT 块或PDL语句省缺或出错情况:块或PDL语句END CASE重复结构WHILE-DO ,REPEAT-UNTIL ,FORDO,44,优点:易于实现由PDL到源代码的自动转换。 缺点:
13、不够直观。,45,使用PDL语言,逐步求精:,PROCEDURE spellcheck BEGIN -* split document into single words LOOP get next word add word to word list in sortorder EXIT WHEN all words processed END LOOP-* look up words in dictionary LOOP get word from word list,46,IF word not in dictionary THEN -* display words not in dict
14、ionary display wordprompt on user terminal IF user response says word OK THEN add word to good word list ELSE add word to bad word list ENDIF ENDIF EXIT WHEN all words processed END LOOP,47,-* create a new words dictionary dictionary :merge dictionary and good word list END spellcheck,48,“检查发货单”的例子,
15、IF 发货单金额超过$500 THENIF 欠款超过了60天 THEN在偿还欠款前不予批准ELSE (欠款未超期)发批准书,发货单ENDIF ELSE (发货单金额未超过$500)IF 欠款超过60天 THEN发批准书,发货单及赊欠报告 ELSE (欠款未超期)发批准书,发货单ENDIF ENDIF,49,上述工具的比较,50,3 程序复杂性的定量度量,定义:程序复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少,开发周期的长短和软件内部潜伏错误的多少。,意义 可用于估算软件中的故障数量 可用于估算软件开发的工作量 可作为模块规模的精确度量 可用于比较设计的优劣,51,复杂性度量需
16、要满足的假设,为了度量程序复杂性,要求: 可用于计算任何一个程序的复杂性;对于不合理的程序(例如对于长度动态增长的程序,或者对于原则上无法排错的程序)不应当使用它进行复杂性计算;如果程序中指令条数、附加存储量、计算时间增多,不会减少程序的复杂性。,52,3.1 代码行度量法,源代码行数度量法基于两个前提:程序复杂性随着程序规模的增加不均衡地增长;控制程序规模的方法最好是采用分而治之的办法。将一个大程序分解成若干个简单的可理解的程序段。,53,方法的基本考虑是统计一个程序模块的源代码行数目,并以源代码行数做为程序复杂性的度量。设每行代码的出错率为每100行源程序中可能有的错误数目。Thayer曾
17、指出,程序出错率的估算范围是从0.047之间,即每100行源程序中可能存在0.047个错误。他还指出,每行代码的出错率与源程序行数之间不存在简单的线性关系。,54,Lipow指出,对于小程序,每行代码出错率为1.31.8;对于大程序,每行代码的出错率增加到2.73.2之间,这只是考虑了程序的可执行部分,没有包括程序中的说明部分。Lipow及其他研究者得出一个结论:对于少于100个语句的小程序,源代码行数与出错率是线性相关的。随着程序的增大,出错率以非线性方式增长。,55,3.2 McCabe度量法,McCabe度量法,又称环路复杂性度量,是一种基于程序控制流的复杂性度量方法。 它基于一个程序模
18、块的程序图中环路的个数,因此计算它先要画出程序图(流图)。 程序图是退化的程序流程图。流程图中每个处理都退化成一个结点,流线变成连接不同结点的有向弧。,56,57,程序图仅描述程序内部的控制流程,完全不表现对数据的具体操作,以及分支和循环的具体条件。计算环路复杂性的方法:根据图论,在一个强连通的有向图G中,环的个数由以下公式给出: V(G)mnp,环路个数,弧数,结点数,强连通分量个数,详细设计的工具 - 程序复杂度的定量度量,V(G)=13-11+1=3,59,补充:计算环形复杂度的方法(教材P137)环形复杂度定量度量程序的逻辑复杂度。有了描绘程序控制流的流图之后,可以用下述3种方法中的任
19、何一种来计算环形复杂度。 (1) 流图中的区域数等于环形复杂度。 (2) 流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。 (3) 流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。,60,几点说明,环路复杂度取决于程序控制结构的复杂度。当程序的分支数目或循环数目增加时其复杂度也增加。环路复杂度与程序中覆盖的路径条数有关。环路复杂度是可加的。例如,模块A的复杂度为3,模块B的复杂度为 4,则模块A与模块B的复杂度是7。,61,McCabe建议,对于复杂度超过10的程序,应分成几个小程序,以减少程序中的错误。Walsh用实例证实了这个建议的正确性。
20、在McCabe复杂度为10的附近,存在出错率的间断跃变。McCabe环路复杂度隐含的前提是:错误与程序的判定加上例行子程序的调用数目成正比。加工复杂性、数据结构、录入与打乱输入卡片的错误可以忽略不计。,62,这种度量的缺点是:对于不同种类的控制流的复杂性不能区分简单IF语句与循环语句的复杂性同等看待嵌套IF语句与简单CASE语句的复杂性是一样的模块间接口当成一个简单分支一样处理一个具有1000行的顺序程序与一行语句的复杂性相同,63,作业:画出与下列用伪码书写的程序所对应的NS图和PAD图。 K0; FLAG1 WHILE FLAG 0 DO KK+1 FLAG0 FOR J1 TO K DO
21、 IF L(J)L(J+1) THEN DO L(J L(J+1) FLAG1 END DO END FOR END WHILE,64,解:,65,五、详细设计说明书 1 引言 1.1 编写目的:阐明编写详细设计说明书的目的,指明读者对象。 1.2 项目背景:应包括项目的来源和主管部门等。 1.3 定义:列出本文档中所用到的专门术语的定义和缩写词的愿意。 1.4 参考资料: 列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源 项目经核准的计划任务书、合同或上级机关的批文;项目开发计划;需求规格说明书;概要设计说明书;测试计划(初稿);用户操作手册 文档所引用的资料、软件开发的标准或规
22、范。 2 总体设计 2.1 需求概述 2.2 软件结构:如给出软件系统的结构图。 3 程序描述 3.1 逐个模块给出以下说明: 功能 性能 输入项目 输出项目 3.2 算法:模块所选用的算法。 3.3 程序逻辑:详细描述模块实现的算法,可采用:标准流程图;PDL语言;N-S图;判定表等描述算法的图表。 3.4 接口 存储分配 限制条件 3.5测试要点:给出测试模块的主要测试要求。,4 补充人机界面设计,软件的任务是由用户在提供给用户的虚拟工作环境中来完成,用户所面对的虚拟工作环境就是人机界面。 用户承担需要创造、判断和探索的任务,而计算机承担重复检查、计算和数据处理的任务。 用户能够正确、高效
23、的完成任务,取决于软件所提供的工作环境。 在应有的功能和性能基础上,人机界面在完成用户任务,用户形成使用软件的感受中起到非常重要的作用。人机界面设计是软件设计的重要内容。,人机界面应具备的特性 1.可使用性 (1)使用的简单性 (2)术语标准化和一致性 (3)快速的系统响应和低的系统成本 (4)用户界面应具有容错能力 2.灵活性 (1)算法的可隐可显性 (2)用户可以根据需要制定和修改界面方式 (3)足够的响应信息 (4)与其它软件系统应有标准的界面 3. 可靠性,人机交互部件的设计 人机交互部件突出人如保命令系统以及系统如何向用户提供交互信息。 在设计人机交互部件时,首先考虑的是人,其次是任
24、务,然后再是有关工具。 人机交互部件在系统行为和用户界面之间架起了一座桥梁。,交互设计准则 一致性,即使用一致的术语,一致的步骤、一致的动作等; 及时提供反馈信息;并且应简短、直接、及时从户角度作出提示; 提供撤消命令; 减少用户记忆负担,如每步给出足够的提示; 易学,富有吸引力,如提供联机帮助,充分利用图形用户界面的优越性等。,用户界面是用户与计算机之间联系的中间媒介,是应用程序中用户能见到的系统运行部分,是应用程序中重要的部分和最直接的体现者。,4.1 什么是好的用户界面 4.2 用户界面的风格4.3 学生成绩管理系统用户4.4 用户界面设计原则 4.5 用户界面设计步骤 4.6 用户界面
25、设计的评价 4.7 小结,4.1 什么是好的用户界面,第一代是以文本为基础的简单交互,如常见的命令行、字符菜单等。第二代直接操作的图形用户界面。它大量使用图形、语音和其它交互媒介,,4.2 用户界面的风格分析,(1) 命令语言 (2) 菜单选项 (3) 面向窗口的点选界面 (4) 自然语言,4.3 学生成绩管理系统用户界面设计,4.3.1 “学生成绩管理”菜单设计菜单的基本作用有两个:第一是提供人机对话的接口,以便让用户选择应用系统的各种功能;第二是管理应用系统,控制各种功能模块的运行。菜单一般分为两种基本类型:下拉式菜单和弹出式菜单。,图4.1 “学生成绩管理”菜单 图4.2 VB工程资源管
26、理器窗口弹出式菜单,4.3.2 “增加学生成绩”窗口设计,图4.5 “增加学生成绩”窗口,4.4 用户界面设计原则,(1) 控件的位置拖放安排 (2) 控件的大小与一致性编排 (3) 合理利用空间,保持界面的简洁 (4) 合理利用颜色、图像和显示效果来达成内容与形式的统一 (5) 易用性 (6) 规范性,(7) 帮助设施 (8) 合理性 (9) 美观与协调性 (10) 菜单位置 (11) 独特性 (12) 快捷方式的组合 (13) 安全性考虑 (14) 多窗口的应用与合理分配系统资源,4.5 用户界面设计步骤,图4.7 用户界面设计的主要步骤,(1) 设计准备 (2) 界面设计 (3) 撰写用
27、户界面设计文档 (4) 设计评审,图4.8 商场管理信息系统的主界面,4.6 用户界面设计的评价,评价可以从以下几个主要方面进行考虑: (1) 用户对用户界面的满意程度; (2) 用户界面的标准化程度; (3) 用户界面的适应性和协调性; (4) 用户界面的应用条件; (5) 用户界面的性能价格比。,一个友好的人机界面应该至少具备以下特征: (1) 操作简单,易学,易掌握; (2) 界面美观,操作舒适; (3) 快速反应,响应合理; (4) 用语通俗,语义一致。,4.7 小结,用户界面是用户与计算机之间联系的接口,是应用程序中用户能见到的系统运行部分,是应用程序的最直接的体现者。用户界面的优劣主要体现在是否容易使用和是否美观。第一代是以文本为基础的简单交互,第二代是以菜单、按钮为基础的图形用户界面。,用户界面设计的主要步骤有:设计准备;界面设计;撰写用户界面设计文档;设计评审。用户界面设计一般要经历原型创作、原型评估、细化等步骤,通常迭代进行。评价用户界面设计质量的优劣,主要考虑用户对用户界面的满意程度;用户界面的标准化程度;用户界面的适应性和协调性;用户界面的应用条件;用户界面的性能价格比等。,课后查阅、根据自己的体会总结人机界面设计中应该注意的问题及技巧,