




已阅读5页,还剩83页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第五章 详细设计 2 第五章详细设计 5 1详细设计的任务5 2结构程序设计5 3人机界面设计5 4过程设计5 5面向数据结构的设计方法5 6程序复杂程度的定量度量 3 为何需要详细设计 谋定而后动 编码的依据 不能让程序员各行其是把概要设计明确化避免编码过程中的与需求的偏差 4 5 1详细设计的任务 详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统 也就是说 经过这个阶段的设计工作 应该得出对目标系统的精确描述 从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序 详细设计阶段的任务还不是具体地编写程序 而是要设计出程序的 蓝图 以后程序员将根据这个蓝图写出实际的程序代码 5 5 1详细设计的任务 详细设计的目标不仅仅是逻辑上正确地实现每个模块的功能 更重要的是设计出的处理过程应该尽可能简明易懂 结构程序设计技术是实现上述目标的关键技术 因此是详细设计的逻辑基础 6 5 2结构程序设计 结构程序设计的概念最早由E W Dijkstra提出 1965年他在一次会议上指出 可以从高级语言中取消GOTO语句 程序的质量与程序中所包含的GOTO语句的数量成反比 1966年Bohm和Jacopini证明了 只用3种基本的控制结构就能实现任何单入口单出口的程序 这3种基本的控制结构是 顺序 选择 和 循环 它们的流程图分别为图 a b 和 c 7 5 2结构程序设计 8 5 2结构程序设计 虽然从理论上说只用上述3种基本控制结构就可以实现任何单入口单出口的程序 但是为了实际使用方便起见 常常还允许使用DO UNTIL和DO CASE两种控制结构 它们的流程图分别是图 a 和图 b 9 5 3人机界面设计 人机界面 HumanComputerInterface 简称HCI 通常也称为用户界面 人机界面设计是接口设计的一个重要的组成部分 对于交互式系统来说 人机界面设计和数据设计 体系结构设计及过程设计一样重要 10 5 3 1界面设计的一般问题 设计任何一个人机界面 一般必须考虑以下四个方面 1 系统响应时间2 用户求助机制联机求助系统有两类 集成式和附加式 3 错误信息处理4 命令交互 11 5 3 2用户界面的风格 用户界面的风格大致经过了四代的演变 1 最早 在图形显示 鼠标 高速工作站等技术出现之前 现实可行的界面方式只能是命令和询问方式 通信完全以正文形式并通过用户命令和用户对系统询问的响应来完成 2 第二代界面是简单的菜单式 这种方式与命令行方式相比不易出错 但使用起来仍然乏味 3 第三代界面是面向窗口的点选界面 也称为WIMP界面 即窗口 windows 图标 icons 菜单 menus 指示器 pointingdevice 四位一体 形成桌面 desktop 的概念 4 最新一代HCI把第三代HCI技术与超文本 多任务概念结合起来 使用户可同时执行多个任务 12 5 3 3界面设计的基本类型 从用户与计算机交互的角度来看 用户界面设计的类型主要有菜单 对话 窗口 问题描述语言 数据表格 图形与图标等 菜单 又称选单 是由系统预先设置好的 显示于屏幕上的一组或几组可供用户选用的命令 对话 也称对话框 是系统在必要时显示于屏幕上的一个矩形区域内的图形和正文信息 窗口 指屏幕上的一个矩形区域 用户可以通过窗口显示 观察其工作领域内的全部或一部分内容 并可以对所显示的内容进行各种系统预先规定好的正文和图形操作 13 5 3 4用户界面设计的黄金准则 界面设计的黄金准则用户撑握控制权不应加重用户的记忆负担界面应一致 14 用户界面设计准则说明3 1 用户掌握控制权不要强迫用户使其没有自由感允许多种输入方式允许一定的操作失误及撤消操作最好能提供 一组操作 的方式提供交互能力 5 3 4用户界面设计的黄金准则 15 用户界面设计准则说明3 2 不要增加不必要的记忆设计的界面直观有 大多数情况下 的默认值按照思维习惯来进行界面的布局提供更多的提示信息减少用户输入次数合理安排快捷键 5 3 4用户界面设计的黄金准则 16 用户界面设计准则说明3 3 一致的界面多个界面设计的时候保持层次感使用相同的设计规则使用标准 例如行业标准 5 3 4用户界面设计的黄金准则 17 用户界面设计的其它方面 美观按照用户的 需要 来设计界面界面的设计应当有次序地进行提供帮助 图形 语音等多种输入在Windows平台上 使用标准控件 18 用户界面设计和评估 5 3 5用户界面设计过程 19 在过程设计阶段 要决定各个模块的实现算法 并精确地表达这些算法 前者涉及所开发项目的具体要求和对每个模块规定的功能 以及算法的设计和评价 后者需要给出适当的算法描述 图形工具 程序流程图 N S PAD HIPO表格工具 判定表语言工具 PDL 5 4过程设计 详细设计 20 1 程序流程图 程序流程图也称为程序框图 有五种基本控制结构 顺序型 选择型 先判断重复型 后判断重复型 多分支选择型 5 4过程设计 详细设计 21 流程图示例 22 程序流程图的主要缺点如下 1 程序流程图本质上不是逐步求精的好工具 它诱使程序员过早地考虑程序的控制流程 而不去考虑程序的全局结构 2 程序流程图中用箭头代表控制流 因此程序员不受任何约束 可以完全不顾结构程序设计的精神 随意转移控制 3 程序流程图不易表示数据结构 23 N S图也叫做盒图 基本控制结构有 2 N S图 5 4过程设计 详细设计 A 调用子程序A 24 N S图 盒图 示例 25 N S图的嵌套定义形式 26 PAD图是由日本日立公司的二村良彦等人于1973年提出的设计详细算法的图式 它用二维树图表示程序流程 是一种具有很强的结构化特征的分析工具 PAD图完全支持结构化设计方法 3 问题分析图 PAD ProblemAnalysisDiagram 5 4过程设计 详细设计 27 PAD也设置了五种基本控制结构的图式 并允许递归使用 28 PAD示例 29 PAD图的主要优点 使用PAD符号设计的程序必然是结构化的程序 PAD图所描绘的程序结构十分清晰 用PAD图表现程序逻辑 易读 易记 易懂 容易将PAD图转换成高级语言源程序 可用软件工具实现自动转换 既可以表示程序逻辑 也可以描绘数据结构 支持自顶向下 逐步求精方法的使用 30 练习 问题 从键盘输入三个数 求三个数中的最大数 并将最大数输出 用PAD图进行设计描述 31 4 判定表 5 4过程设计 详细设计 如果数据流图的加工需要依赖于多个逻辑条件的取值 即完成这一加工的一组动作是由于某一组条件取值的组合而引发的 此时使用判定表来描述比较合适 32 条件区 左上部分 列出各种可能的条件 条件项 右上部分 给出各个条件的条件取值组合 动作区 左下部分 列出所有可能采取的动作 动作项 右下部分 指出在条件项的各种取值的组合情况下应采取的动作 4 判定表 5 4过程设计 详细设计 33 以 检查发货单 为例 34 4 判定表 判定表用于表示程序的静态逻辑在判定表中的条件部分给出所有的两分支判断的列表 动作部分给出相应的处理要求将程序流程图中的多分支判断都改成两分支判断 5 4过程设计 详细设计 35 无多分支判断结构 36 37 判定树也是用来表达加工逻辑的一种工具 有时侯它比判定表更直观 5 判定树 5 4过程设计 详细设计 38 以 检查发货单 为例 39 6 过程设计语言PDL PDL是一种用于描述功能模块的算法设计和加工细节的语言 它是一种伪码 PDL具有严格的关键字外语法 用于定义控制结构和数据结构 同时表示实际操作和条件的内语法可使用自然语言的词汇 5 4过程设计 详细设计 40 举例 读者还书过程 加工逻辑词条描述 加工名 还书加工编号 3简要描述 检验图书是否图书室外借图书输入数据流 图书 借书证 访问信息输出数据流 错误返回 还书信息加工逻辑 IF书号与数据库数据不符THEN发出 错误返回 ELSE发出 还书信息 ENDIF 41 示例2 连接数据库 打开数据库的员工表 执行SQL语句 Select from员工表whileUserName username Password password if 员工表存在相关记录 then转移到主页面 else转移到报错页面 通知用户用户名或秘密错 42 用PDL写出的程序 既可以很抽象 又可以很具体 因此 符合 自上而下 逐步求精 的设计原则 PDL虽不是程序设计语言 但它非常类似于高级程序设计语言 因此它是详细设计阶段很受欢迎的表达工具 PDL描述同自然语言很接近 易于理解 PDL描述可以注释形式嵌在程序中 成为程序的内部文档 PDL描述与程序结构相似 因此比较容易自动产生各种相关开发程序 提高软件生产率 PDL的优点 43 PDL的缺点 不如图形描述形象直观 很容易使人陷入程序的具体细节中去 因此人们常常将PDL描述与具体的图形描述结合起来使用 44 面向数据结构的设计是由英国人M A Jackson首先提出和倡导的 又称为Jackson方法 简称JSD 该方法的基本思想是使程序结构与问题结构相对应 即与数据结构相对应 因此它按输入输出以及内部存储信息的数据结构进行设计 把数据结构的描述变换为对程序结构的描述 5 5面向数据结构的设计方法 45 1 基本思想 许多领域中 问题的结构层次清楚 输入数据 输出数据和内部存储信息的数据结构都有一定的结构关系 Jackson方法利用这些数据结构作为基础来设计模块的处理过程 2 SD方法和JSD方法的异同 面向数据流的设计 SD方法 和面向数据结构的设计 JSD方法 的共同点都是数据信息驱动的 都试图将数据表示转换成软件表示 不同之处在于面向数据结构的设计不利用数据流图 而根据数据结构的表示来设计 5 5面向数据结构的设计方法 46 面向数据结构的设计方法的最终目标是得出对程序处理过程的描述 这种方法适合于在总体设计和详细设计 合二为一 的软件设计 Jackson方法和Warnier方法是最著名的两个面向数据结构的设计方法 5 5面向数据结构的设计方法 47 5 5 1Jackson图 Jackson图是JSD方法的描述工具 在分析 确定问题的数据结构后 用Jackson图来描绘问题的数据结构 虽然程序中实际使用的数据结构种类繁多 但是它们的数据元素彼此间的逻辑关系却只有顺序 选择和重复3类 因此 逻辑数据结构也只有这3类 48 1 顺序结构 顺序结构的数据由一个或多个数据元素组成 每个元素按确定次序出现一次 Aseq B C D Aend 5 5 1Jackson图 49 2 选择结构 选择结构的数据包含两个或多个数据元素 每次使用这个数据时按一定条件从这些数据元素中选择一个 Aselectcond1BAorcond2CAorcond3DAend 5 5 1Jackson图 50 3 重复结构 重复结构的数据 根据使用时的条件由一个数据元素出现零次或多次构成 Aiteruntil 或while 条件 B Aend 5 5 1Jackson图 51 Jackson图的优点 便于表示层次结构 而且是对结构进行自顶向下分解的有力工具 形象直观可读性好 既能表示数据结构也能表示程序结构 因为结构程序设计也只使用上述3种基本控制结构 52 1 分析并确定输入数据和输出数据的逻辑结构 并用Jackson图描绘这些数据结构 2 找出输入数据结构和输出数据结构中有对应关系的数据单元 所谓有对应关系是指有直接的因果关系 在程序中可以同时处理的数据单元 对于重复出现的数据单元必须是重复的次序和次数都相同 才可能有对应关系 5 5 2JSD方法的步骤 53 为每对有对应关系的数据单元 按照它们在数据结构图中的层次和在程序结构图的相应层次画一个处理框 如果这对数据单元在输入数据结构和输出数据结构中所处的层次不同 则和它们对应的处理框在程序结构图中所处的层次与它们之中在数据结构图中层次低的那个对应 根据输入数据结构中剩余的每个数据单元所处的层次 在程序结构图的相应层次分别为它们画上对应的处理框 根据输出数据结构中剩余的每个数据单元所处的层次 在程序结构图的相应层次分别为它们画上对应的处理框 5 5 2JSD方法的步骤 3 用下列3条规则从描绘数据结构的Jackson图导出描绘程序结构的Jackson图 54 4 列出所有操作和条件 包括选择条件和重复结束条件 并把它们分配到程序结构图的适当位置 5 用伪码表示程序 5 5 2JSD方法的步骤 55 1 问题陈述 某仓库存放多种零件 如P1 P2 每个零件的每次进货 发货都有一张卡片作出记录 每月根据这样一叠卡片打印一张月报表 报表每行列出某种零件本月库存量的净变化 用JSD方法对该问题进行设计 JSD方法设计过程举例 56 JSD方法设计过程举例 2 建立输入 输出数据结构 步骤如下 1 输入数据 根据问题陈述 同一种零件的进货 发货状态不同 每月登记有若干张卡片 把同一种零件的卡片放在一起组成一组 所有的卡片组按零件名排序 所以输入数据是由许多零件组组成的文件 每个零件组有许多张卡片 每张卡片上记录着本零件进货或发货的信息 输入数据结构的Jackson图如右图 57 JSD方法设计过程举例 2 输出数据 根据问题陈述 输出数据是一张如图 c 的月报表 它由表头和表体两部分组成 表体中有许多行 一个零件的净变化占一行 其输出数据结构的Jackson图为图 b 58 JSD方法设计过程举例 3 找出输入 输出数据结构中有对应关系的单元 月报表由输入文件产生 有直接的因果关系 因此顶层的数据单元是对应的 表体的每一行数据由输入文件的每一个 零件组 计算而来 行数与组数相同 且行的排列次序与组的排列次序一致 都按零件号排序 因此 零件组 与 行 两个单元对应 以下再无对应的单元 59 图 某仓库系统输入 输出数据结构 a 输入数据结构 b 输出数据结构 c 输出表 JSD方法设计过程举例 60 JSD方法设计过程举例 4 导出程序结构找出对应关系后 根据以下规则导出程序结构 对于输入数据结构与输出数据结构中的数据单元 每对有对应关系的数据单元按照它们所在的层次 在程序结构图适当位置画一个处理框 无对应关系的数据单元 各画一个处理框 在图中的程序结构的第4层增加了一个 处理零件组 的框 因为改进的Jackson图规定顺序执行的处理中不允许混有重复执行和选择执行的处理 增加了这样一个框 使之符合该规定 同时也提高了结构图的易读性 61 某仓库系统程序结构图 JSD方法设计过程举例 62 5 列出并分配操作与条件 为了对程序结构作补充 要列出求解问题的所有操作和条件 然后分配到程序结构图的适当位置 就可得到完整的程序结构图 本问题的基本操作列出如下 A 停止B 打开文件C 关闭文件D 打印字符行E 读一张卡F 产生行结束符G 累计进货量H 累计发货量I 计算净变化J 置零件组开始标志列出条件如下 I 1 输入文件未结束I 2 零件组未结束S 3 进发货标志 将操作与条件分配到适当位置的程序结构图如下图所示 JSD方法设计过程举例 63 图 分配操作后的程序结构图 由输入文件产生月报表 产生表头 产生表体 产生零件名 产生净变化 处理零件组 处理卡片 处理发货 处理进货 由零件组产生输出行 E S 3 G H I 2 D I D F J D J E B C A I 1 A 停止B 打开文件C 关闭文件D 打印字符行E 读一张卡F 产生行结束符G 累计进货量H 累计发货量I 计算净变化J 置零件组开始标志I 1 输入文件未结束I 2 零件组未结束S 3 进发货标志 64 JSD方法设计过程举例 在分配操作时注意 为了能获得重复和选择的条件 Jackson建议至少超前读一个记录 以便使得程序不论在什么时候判定 总有数据已经读入 并做好使用准备 因此在图中 将操作E 读一张卡 放在打开文件之后 同时在处理完一张卡片后再读一次 6 用伪码写出程序 Jackson方法中的伪码与Jackson所示的程序结构图完全对应 用伪码写出程序的过程 实际上就是自顶向下用这些伪码替换Jackson图中每个处理框的过程 每个处理框都看作是下层处理框及分配在上面的操作组成 65 产生月报表seq 打开文件 读一张卡 产生表头seq 打印字符行 产生表头end 置零件组开始标志 产生表体iterwhile输入文件未结束 由零件组产生输出行seq 处理零件组iterwhile零件组未结束处理卡片select进货标志 上图所示的程序结构的伪码为 处理进货seq 累计进货量 处理进货end 处理卡片or发货标志 处理发货seq 累计发货量 处理发货end 66 处理卡片end 读一张卡 处理零件组end 产生零件名seq 打印字符行 产生零件名end 产生净变化seq 计算净变化 打印字符行 产生净变化end 换行 置零件组开始标志 由零件组产生输出行end产生表体end 关闭文件 停止 产生月报表end 67 5 5 4JSD方法小结 JSD方法的优缺点优点 简单 适合于规模不大的系统 建立了问题的数据结构之后 可直接推导出相应的程序结构 局限性 不适合于大系统 当输入数据结构与输出数据结构不相同且无对应关系时 难于应用 当数据结构发生变化时 程序结构也发生变化 一般是总体上用SD方法 局部范围用JSD方法 68 SD方法和JSD方法的异同 面向数据流的设计 SD方法 和面向数据结构的设计 JSD方法 的共同点都是数据信息驱动的 都试图将数据表示转换成软件表示 不同之处在于面向数据结构的设计不利用数据流图 而根据数据结构的表示来设计 5 5 4JSD方法小结 69 5 5 5程序复杂程度的定量度量 详细设计阶段设计出的模块质量如何呢 上一章中曾经讲述了软件设计的基本原理和概念 经过详细设计之后每个模块的内容都非常具体了 因此可以使用这些原理进一步仔细衡量它们的质量 但是 这种衡量毕竟只能是定性的 人们希望能进一步定量度量软件的性质 70 程序复杂性主要指模块内程序的复杂性 它直接关联到软件开发费用的多少 开发周期的长短和软件内部潜伏错误的多少 减少程序复杂性 可提高软件的简单性和可理解性 并使软件开发费用减少 开发周期缩短 软件内部潜藏错误减少 5 5 5程序复杂程度的定量度量 71 一 代码行度量法 统计一个程序的源代码行数 以源程序行数作为程序复杂程度的量度 源程序代码行数越大认为越复杂 源代码行数度量法基于两个前提 程序复杂性随着程序规模的增加而均衡地增长 控制程序规模的方法最好是采用分而治之的办法 将一个大程序分解成若干个简单的可理解的程序段 5 5 5程序复杂程度的定量度量 72 代码行与出错率的关系 设每行代码的出错率为每100行源程序中可能有的错误数目 Thayer曾指出 程序出错率的估算范围是从0 04 7 之间 即每100行源程序中可能存在0 04 7个错误 他还指出 每行代码的出错率与源程序行数之间不存在简单的线性关系 Lipow指出 对于小程序 每行代码出错率为1 3 1 8 对于大程序 每行代码的出错率增加到2 7 3 2 之间 这只是考虑了程序的可执行部分 没有包括程序中的说明部分 Lipow及其他研究者得出一个结论 对于少于100个语句的小程序 源代码行数与出错率是线性相关的 但随着程序的增大 出错率以非线性方式增长 73 二 McCabe度量法 McCabe方法根据程序控制流的复杂程度定量度量程序的复杂程度 这样度量出的结果称为程序的环形复杂度 为了突出表示程序的控制流 通常使用流图 也称为程序图 所谓流图实质上是 退化了的 程序流程图 它仅仅描绘程序的控制流程 完全不表现对数据的具体操作以及分支或循环的具体条件 5 5 5程序复杂程度的定量度量 74 流图的表示 在流图中用圆表示结点 一个圆代表一条或多条语句 程序流程图中的一个顺序的处理框序列和一个菱形判定框 可以映射成流图中的一个结点 流图中的箭头线称为边 它和程序流程图中的箭头线类似 代表控制流 在流图中一条边必须终止于一个结点 即使这个结点并不代表任何语句 实际上相当于一个空语句 由边和结点围成的面积称为区域 当计算区域数时应该包括图外部未被围起来的那个区域 二 McCabe度量法 75 程序流程图 流图 76 二 McCabe度量法 用任何方法表示的过程设计结果 都可以翻译成流图 下图是用PDL表示的处理过程及与之对应的流图 77 当过程设计中包含复合条件时 生成流图的方法稍微复杂一些 所谓复合条件 就是在条件中包含了一个或多个布尔运算符 在这种情况下 应该把复合条件分解为若干个简单条件 每个简单条件对应流图中一个结点 包含条件的结点称为判定节点 从每个判定结点引出两条或多条边 下图是由包含复合条件的PDL片断翻译成的流图 二 McCabe度量法 由包含复合条件的PDL映射成的流图 78 计算环形复杂度的方法可以用下述3种方法中的任何一种来计算环形复杂度 1 流图中的区域数等于环形复杂度 2 流图G的环形复杂度V G E N 2 其中 E是流图中有向边的条数 N是结点数 3 流图G的环形复杂度V G P 1 其中 P是流图中判定结点的数目 二 McCabe度量法 79 环形复杂度的用途 它是对测试难度的一种定量度量 也能对软件最终的可靠性给出某种预测 McCabe研究大量程序后发现 环形复杂度高的程序往往是最困难 最容易出问题的程序 实践表明 模块规模以V G 10为宜 也就是说 V G 10是模块规模的一个更科学更精确的上限 二 McCabe度量法 80 McCabe度量的缺点 对于不同种类的控制流的复杂性不能区分 简单IF语句与循环语句的复杂性同等看待 嵌套IF语句与简单CASE语句的复杂性是一样的 模块间接口当成一个简单分支一样处理 一个具有1000行的顺序程序与一行语句的复杂性相同 二 McCabe度量法 81 练习 1 A 2 2 IF C1ANDC2 3 THEN4 DOWHILEC35 A A 1 ENDDOELSE6 A A 2ENDIF7 OUTPUTA 要求 1 画出程序流图2 根据程序流图映射成流图3 计算环形复杂度 82 三 Halstead方法 采
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 促进维护民族团结课件
- 2025年县打造担当作为干部队伍推进D建引领基层治理经验材料
- 2025年关于规范南宁市幼儿园收费管理的通知
- 2025年违法用地的查处及整改措施
- 2025年公务员考试《常识》测试卷必考附答案详解
- 2025年公卫助理医师考试答案
- 2025年公路水运安全员考试试题及答案
- 2025年公共卫生消毒监测及消毒员岗位技术知识考试题库带答案
- 农业技术指导服务费协议
- 2025年船舶制造项目申请报告
- 提高肋骨骨折影像学诊断
- 东华临床科研数据管理系统解决方案白皮书
- GB 30616-2020食品安全国家标准食品用香精
- GA/T 1343-2016防暴升降式阻车路障
- (推荐下载)家族性结肠息肉病教学课件
- 《材料成型装备及自动化》课程大纲
- 公文写作高频词库
- 临时用电JSA分析表
- DB33-T1217-2020《屋面工程质量验收检查用表标准》
- 固定式压力容器年度检查报告
- (高清版)建筑楼盖结构振动舒适度技术标准JGJ_T 441-2019
评论
0/150
提交评论