您好,欢迎访问三七文档
第九讲详细设计本讲(第六章)的主要内容一、详细设计及其任务二、结构程序设计三、人机界面设计四、详细设计的工具五、Jackson程序设计方法六、程序复杂度的定量度量一、详细设计及其任务1.什么是详细设计?从软件开发的工程化观点来看,在使用程序设计语言编制程序以前,需要对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。这就是过程设计的任务。针对一个个模块的设计,是过程设计、算法设计。详细设计仅仅是设计出程序的“蓝图”,是编码的先导,但不是编写程序。2.模块的属性:功能、逻辑和状态3.模块的内部特性和外部特性4.详细设计的任务每个模块内的数据结构每个模块的控制算法内部接口描述为每一模块设计出一组测试用例(testcases)。评审二、结构程序设计1.定义:结构化程序设计是一种设计程序的技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。2.结构化程序设计的要点自顶向下逐步求精采用三种基本结构,消除goto语句设计单入口、单出口的模3.结构程序设计的提出1965年E.W.Dijkstra指出GOTO语句对程序质量的负面影响,建议取消它。Bohm等证明了任何单入口单出口的程序都可以用“顺序”、“选择”和“循环”三种控制结构实现。Mills基于在IBM的实践,提出程序应该只有一个入口和一个出口。Wirth通过对抽象层次的论述,对逐步求精方法进行了肯定。4.结构程序设计的类型经典的结构程序设计Seq;if-then-else;do-While扩展的结构程序设计增加do-case;do-until修正的结构程序设计允许leave;break5.结构程序设计的优点符合人类解决复杂问题的规律。自顶向下逐步求精,使得相邻两次精化之间变化甚小,不难验证前后内容是否一致和有效。使得程序具有清晰的结构层次。不使用GOTO语句,避免了“病态连接”,消除“涟漪效应”,提高可理解性、可靠性、可测试性和可维护性。清晰的模块化程序利于重用和复用。利于程序的正确性证明和形式化开发。三、人机界面设计1.设计问题•系统响应时间•用户帮助设施•出错信息处理•命令交互2.设计过程(p111)3.人机界面设计指南(p112)1.设计问题系统响应时间(p110)用户帮助设施(p110)出错信息处理(p110)命令交互(p111)2.设计过程(p111)原型化设计与GUI工具对GUI设计模型的早期评价标准1)系统及其界面的规格说明书的长度和复杂程度决定了用户学习使用该系统所付出的代价。2)命令或动作的数量、命令的参数个数等对系统交互时间和效率的影响。3)命令或动作的数量、系统状态的数量对用户操作的影响(如迷航问题)。4)界面风格、在线帮助、出错处理协议等决定了用户是否能够顺利接受你所设计的界面。3.人机界面设计指南(p112)四、详细设计的工具(P114)1.程序流程图(Programflowdiagram)2.N-S图(Nassi和Shneiderman提出)3.PAD图(ProblemAnalysisDiagram)4.判定表(DecisionTable)5.过程设计语言PDL(ProgramDesignLanguage,alsocalledStructuredEnglishorPseudocode)1.程序流程图程序流程图也称为程序框图,程序流程图使用五种基本控制结构是:示例程序流程图的标准符号循环的标准符号注解的使用多出口判断2.N-S图N-S图,即盒图五种基本控制结构由五种图形构件表示示例N-S图的嵌套定义形式3.问题分析图(PAD)PAD也设置了五种基本控制结构的图式,并允许递归使用。PAD描述的示例对应于增量型循环结构fori:=n1ton2stepn3do在PAD中有相应的循环控制结构PAD的扩充控制结构4.程序流程的判定表判定表用于表示程序的静态逻辑在判定表中的条件部分给出所有的两分支判断的列表,动作部分给出相应的处理要求将程序流程图中的多分支判断都改成两分支判断无多分支判断结构建立判定表的步骤列出与一个具体过程(或模块)有关的所有处理。列出过程执行期间的所有条件(或所有判断)。将特定条件取值组合与特定的处理相匹配,消去不可能发生的条件取值组合。将右部每一纵列规定为一个处理规则,即对于某一条件取值组合将有什么动作。5.PDL(ProgramDesignLanguage)PDL是一种用于描述功能模块的算法设计和加工细节的语言。称为设计程序用语言。它是一种伪码。伪码的语法规则分为“外语法”和“内语法”。PDL具有严格的关键字外语法,用于定义控制结构和数据结构,同时它的表示实际操作和条件的内语法又是灵活自由的,可使用自然语言的词汇。示例:拼词检查程序PROCEDUREspellcheckISBEGINsplitdocumentintosinglewordsloodupwordsindictionarydisplaywordswhicharenotindictionarycreateanewdictionaryENDspellcheckPDL的特点提供全部结构化控制结构、数据说明和模块特征。能对PDL正文进行结构分割,使之变得易于理解。为了区别关键字,规定关键字一律大写,其它单词一律小写。或者规定关键字加下划线,或者规定它们为黑体字。内语法使用自然语言来描述处理特性。内语法比较灵活,只要写清楚就可以,不必考虑语法错,以利于人们可把主要精力放在描述算法的逻辑上。有数据说明机制,包括简单的(如标量和数组)与复杂的(如链表和层次结构)的数据结构。有子程序定义与调用机制,用以表达各种方式的接口说明。使用PDL语言,逐步求精:PROCEDUREspellcheckBEGIN--*splitdocumentintosinglewordsLOOPgetnextwordaddwordtowordlistinsortorderEXITWHENallwordsprocessedENDLOOP--*lookupwordsindictionaryLOOPgetwordfromwordlistIFwordnotindictionaryTHEN--*displaywordsnotindictionarydisplaywordpromptonuserterminalIFuserresponsesayswordOKTHENaddwordtogoodwordlistELSEaddwordtobadwordlistENDIFENDIFEXITWHENallwordsprocessedENDLOOP--*createanewwordsdictionarydictionary:=mergedictionaryandgoodwordlistENDspellcheck五、面向数据结构的设计方法1.面向数据结构的设计方法2.MJSD方法(MichaelJacksonStructuredDesignmethod),是一种面向数据结构的设计方法,既可以表达程序结构,也能表达数据结构。3.Jackson设计方法与SD比较面向数据结构一般用于详细设计阶段设计工具不同Jackson方法与SD比较问题结构(DFD)程序结构(SC)程序的过程性表示(PDL等)概要设计详细设计数据结构(Jackson图)程序结构(Jackson图)程序的过程性表示(Jackson伪代码)程序分析程序设计4.Jackson图与Jackson伪代码ABCABoCoAB*顺序AseqBCendA选择Aselectcond1Borcond2CendA重复Aiter{while}condBendA有关Jackson图的提示1.Jackson图既能表示数据结构,又能表示程序结构。2.表示数据结构时,用于表示数据元素彼此间的三种逻辑关系(顺序、选择和重复)。3.表示程序结构时,Jackson图表现的不是调用关系,一个方框中所包括的操作仅仅由它下层方框中的那些操作组成。一个方框也不能代表一个模块。4.改进的Jackson图(p121)实例:用Jackson图表示二维表格职工名册姓名类别津贴表示数据结构津贴教龄津贴o工龄津贴o名册表头表体行*表名行栏名行姓名类别产生津贴产生教龄津贴o产生工龄津贴o产生名册产生表头产生表体产生行*产生表名行产生栏名行产生姓名产生类别表示程序结构Jackson伪代码(过程性表示)产生表体iterwhile小于或等于总人数产生行end产生表体产生行seq产生姓名产生类别产生津贴end产生行产生名册seq产生表头产生表体end产生行5.Jackson程序设计步骤(P122)分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构(DS)。找出输入DS和输出DS中有对应关系的数据单元。用有关规则从描绘数据结构的Jackson图导出描绘程序结构的Jackson图。列出所有操作和条件(分支条件和循环结束条件),并且把它们分配到程序结构图的适当位置。用Jackson伪代码表示程序。(参见P123实例)三条映射规则为每对有对应关系的数据单元,按照其在数据结构图中的层次在程序结构图的相应层次画一个处理框;根据输入数据结构中剩余的每个数据单元所处的层次在程序结构图的相应层次分别为它们画上对应的处理框。根据输出数据结构中剩余的每个数据单元所处的层次在在程序结构图的相应层次分别为它们画上对应的处理框。一个简单例子一个正文文件由若干个记录组成,每个记录是一个字符串。要求统计每个记录中空格字符的个数,以及文件中空格字符的总个数。要求的输出数据格式是,每复制一行输入字符串之后,另起一行印出其空格数。最后印出整个文件的空格总数。Cont.例如,作为输入数据的正文文件为:Howareyou!Testingisaprocessofexecutingaprogramwiththeintentoffindinganerror.那么,输出结果为:Howareyou!2Testingisaprocessofexecutingaprogramwiththeintentoffindinganerror.1315①分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构空格数输出表格串信息*表格体空格总数字符串空格o非空格o正文文件字符串*字符*②找出输入DS和输出DS中有对应关系的数据单元。③从描绘DS的Jackson图导出描绘PS的Jackson图。首先为每对有对应关系的数据单元,按照其在DS图中的层次在PS图的相应层次画一个处理框;根据输入DS中剩余的每个数据单元所处的层次在PS图的相应层次分别为它们画上对应的处理框。根据输出DS中剩余的每个数据单元所处的层次在PS图的相应层次分别为它们画上对应的处理框。统计空格处理字符串*印空格数程序体印总数印字符串分析字符串分析字符*处理空格o处理非空格o④列出所有的操作和文件停止打开文件读入字符串初始化处理字符串*统计空格印空格数程序体印总数印字符串分析字符串分析字符*处理空格o处理非空格o关闭文件⑤伪码表示统计空格seq打开文件读入字符串初始化totalsum:=0程序体iteruntil文件结束处理字符串seq……处理字符串end程序体end印总数seq关闭文件停止统计空格end基于数据结构设计的问题数据合法性检查和错误处理顺序冲突该方法具有一定的局限性和规模要求六、程序复杂度的定量度量T.McCabe方法(环域复杂度)Halstead方法M.R.Woodward方法(交叉点复杂度)Card和Glass(定义了三个软件体系结构复杂度度量:结构复杂度、数据复杂度和系统复杂度)OO度量(C&k度量、Lorenz和Kidd度量、面向操作的度量等)McCabe方法的基本概念程序图——是“退化了的”程序流动图,即把程序流动图中每个处理符号都退化成一个点,原来连接不同处理符号的箭头变成连接不同点的有向弧。程序
本文标题:第九讲详细设计
链接地址:https://www.777doc.com/doc-3804111 .html