




已阅读5页,还剩164页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程第六章详细设计 第六章详细设计 6 1详细设计概述6 2结构程序设计6 3人机界面设计 重点 设计问题设计过程与设计任务人机界面设计基本类型用户界面 输入和输出设计 见补充资料 用户界面的设计的原则输入界面设计显示界面设计6 4过程设计工具6 5面向数据结构的设计方法 自学 6 6程序复杂程度的定量度量 6 1详细设计概述 详细设计应在数据库设计 总体设计完成之后进行 详细设计还不是具体地编写程序 是要设计出程序的 蓝图 以后程序员将根据这个蓝图写出实际的程序代码 详细设计主要是界面设计和过程设计两个阶段 界面设计的结果是软件的脸面 外在质量 过程设计的结果基本上决定了最终的程序代码的质量 软件的内在质量 过程设计中 考虑程序代码的质量时必须注意 程序的 读者 有两个 那就是计算机和人 在软件的生命周期中 设计测试方案 诊断程序错误 修改和改进程序等都必须首先读懂程序 实际上对于长期使用的软件系统而言 人读程序的时间可能比写程序的时间还要长得多 因此 衡量程序的质量不仅要看它的逻辑是否正确 性能是否满足要求 更主要的是要看它是否容易阅读和理解 过程设计的目标不仅仅是逻辑上正确地实现每个模块的功能 更重要的是设计出的处理过程应该尽可能简明易懂 6 2结构程序设计 结构程序设计技术是实现详细设计目标的关健技术 因此是过程设计的逻辑基础 狭义的结构程序设计定义为如果一个程序的代码块仅仅通过顺序 选择和循环这三种控制结构进行连接 并且每个代码块只有一个入口和一个出口 则称这个程序是结构化的 6 2结构程序设计 广义的结构程序设计定义如下 在编写程序时 强调使用几种基本控制结构 通过组合嵌套 形成程序的控制结构 尽可能避免使用GOTO语句 在程序设计过程中 尽量采用自顶向下和逐步细化的原则 由粗到细 一步步展开 最好仅在检测出错误时才使用GOTO语句 而且应该总是使用前向GOTO语句 结构化程序设计的主要原则使用语言中的顺序 选择 重复等有限的基本控制结构表示程序逻辑 选用的控制结构只准许有一个入口和一个出口 程序语句组成容易识别的块 每块只有一个入口和一个出口 复杂结构应该用基本控制结构进行组合嵌套来实现 语言中没有的控制结构 可用一段等价的程序段模拟 但要求该程序段在整个系统中应前后一致 严格控制GOTO语句 仅在下列情形才可使用 用一个非结构化的程序设计语言去实现一个结构化的构造 若不使用GOTO语句就会使程序功能模糊 在某种可以改善而不是损害程序可读性的情况下 6 2结构程序设计 也可以把结构程序设计技术具体地划分为下述3种类型 如果只允许使用顺序 IF THEN ELSE型分支和DO WHILE型循环这3种基本控制结构 则称为经典的结构程序设计如果除了上述3种基本控制结构之外 还允许使用DO CASE型多分支结构和DO UNTIL型循环结构 则称为扩展的结构程序设计如果再加上允许使用LEAVE 或BREAK 结构 则称为修正的结构程序设计 6 2结构程序设计 6 2结构程序设计 6 3人机界面设计 设计问题 人机界面也称为用户界面 对于交互式系统来说 人机界面设计和数据设计 体系结构设计 过程设计一样重要 人机界面的设计质量 直接影响用户对软件产品的评价 从而影响软件产品的竞争力和使用权用寿命 因此 必须对人机界面设计给予足够重视 由于对人机界面的评价 在很大程度上由人的主观因素决定 因此 使用基于原型的系统化的设计策略 是成功地设计人机界面的关键 人机界面设计中应考虑 可使用性简单性术语标准化和一致性HELP功能 集成帮助 设计中设计的 和附加帮助 事后设计的 用户手册 系统响应快和低的系统成本 长度 尽量稳定 和易变性用户界面应具有容错能力 出错信息的处理 6 3人机界面设计 设计问题 交互式系统给出的出错信息或警告信息 应该具有下述属性 信息应该以用户可以理解的术语描述问题信息应该提供有助于从错误中恢复的建设性意见信息应该指出错误可能导致哪些负面后果 例如 破坏数据文件 以便用户检查是否出现了这些问题 并在确实出现问题时予以改正信息应该伴随着听觉上或视觉上的提示 也就是说 在显示信息时应该同时发出警告声 或者信息用闪烁方式显示 或者信息用明显表示出错的颜色显示 信息不能带有指责色彩 也就是说 不能责怪用户 当确实出现了问题的时候 有效的出错信息能够提高交互式系统的质量 减少用户的挫折感 灵活性算法的可隐可显性用户可以根据需要制定和修改界面方式能够按照用户的希望和需要 提供不同详细程度的系统响应信息与其它软件系统应有标准的界面复杂性和可靠性界面的规模和组织的复杂程度就是界面的复杂性界面越简单越好 成线性序列界面不一定简单用户界面的可靠性是指无故障使用的间隔时间 保证用户正确 可靠地使用系统 数据的安全性代价 降低软件系统的运行效率 6 3人机界面设计 设计问题 命令交互命令行曾经是用户和系统软件交互的最常用方式 而且也曾经广泛地用于各种应用软件中 现在 面向窗口的 点击和拾取方式的界面已经减少了用户对命令行的依赖但是 许多高级用户仍然偏爱面向命令的交互方式在多数情况下 用户既可以从菜单中选择软件功能也可以通过键盘命令序列调用软件功能最好在设计人机界面的初期就把这些问题作为得要的设计问题来考虑 这时修改比较容易 代价也低 6 3人机界面设计 设计问题 用户界面设计是一个迭代的过程 也就是说 通常先创建设计模型再用原型实现这个设计模型并由用户试用和评估然后根据用户的意见进行修改直至满意为止用户界面设计应与软件系统的需求分析同步进行 有如下任务 用户特性分析用户工作分析记录有关系统的概念和术语确定界面类型 6 3人机界面设计 设计过程与设计任务 1 用户特性分析用户类型 外行型 初学型 熟练型 专家型用户类型并不是一成不变 选择适合大多数用户使用用户特性度量 用户特性的度量与用户使用模式及观测到的用户群体能力有关 用户使用的频度用户是否能够自由选用界面用户对计算机的熟悉程度用户知识用户思维能力用户的生理能力和技能 人的视觉 听觉 记忆用户群体的度量可以用打分的办法来简单地度量 平均值反映了用户群体的平均特性 标准偏差反映了用户群体的差异大小 6 3人机界面设计 设计过程 用户特性表 6 3人机界面设计 设计过程 2 用户工作分析 任务分析 与需求分析中结构化分析的方法类似 采用自顶向下 逐步进行功能分解 所有的系统任务 包括与人相关的活动 都要考虑根据以上分析得到的度量表明 应当选择一种不太复杂的对话界面 3 记录有关系统的概念和术语4 选择界面类型 6 3人机界面设计 设计过程 1 界面设计类型考虑使用的难易程度 初次使用学习的难易程度操作速度 操作步骤 击键和反应时间等效率复杂程度控制 人机交互时 是由计算机还是由人发起和控制对话 开发的难易程度及开发工作量 6 3人机界面设计 界面设计类型 2 菜单 menu 界面的设计按照显示的形象或样式来分类正文菜单 首字符匹配方式 序号匹配方式 亮条匹配方式图标菜单 图标菜单 正文和图标混合的菜单按屏幕位置和操作风格来分类固定位置菜单 浮动位置菜单 弹出式菜单 下拉式菜单 嵌入式菜单 混在应用之中 右键 6 3人机界面设计 界面设计类型 序号匹配方式 2 图像 图像的隐蔽和再现图案的显示 动画 屏幕的滚动3 对话对话 对话框 必须回答式无需回答式警告式4 窗口 6 3人机界面设计 界面设计类型 6 3 1数据输入界面设计一般交互指南 涉及信息显示 数据输入和系统的整体控制 是全局性的 忽略它们将冒较大风险 主要有 保持一致性提供有意义的反馈在执行有较大破坏性的动作之前要求用户确认允许取消绝大多数操作减少在两次操作之间必须记忆的信息量提高对话 鼠标移动和思考的效率允许用户犯错误按功能对动作分类 并据此设计屏幕布局提供对工作内容敏感的帮助设施用简单动作或动词短语作为命令 6 3人机界面设计 界面设计指南 6 3 1数据输入界面设计1 数据输入的规则尽量简化用户工作 尽可能地减少输入的出错率 对共同的输入内容设置默认值 缺省值 使用代码和缩写 动填入已输入过的内容或需要重复输入的内容 如果输入内容是来自一个有限的备选集 可以采用列表选择或指点方式 数据输入屏幕应设计成输入格式相匹配 手工界面 根据使用频率 重要性 输入次序进行组织明确的输入 设计确认键避免误操作明确的动作 表格项用TAB或回车键控制表格项间移动 6 3人机界面设计 界面设计指南 明确的取消 确认删除 提供反馈 允许编辑 提供复原 Undo 自动格式化 提示输入的范围2 输入表格设计数据验证 致命错误 警告 建议 屏幕设计 屏幕划分为数据输入 命令与出错处理三个区域 应用不同的底色来区别各个区域 数据输入区内各个输入项应左侧对齐 在空间允许时 最好一行仅对应一个输入 错误报信 错误出在何处 是什么错误 为什么错了 以及要修改错误应当采取措施 不应使用专业术语数据输入对话控制 6 3人机界面设计 界面设计指南 6 3人机界面设计 界面设计指南 3 其它数据输入的方法菜单选择输入关键词数据输入 助记符 摘要词组 光学标记 识别 OMR 光学字符识别 OCR 模式比较 扫描仪 磁性墨水字符识别 MICR 银行支票条形码 BarCode 声音数据输入 6 3人机界面设计 界面设计指南 6 3人机界面设计 界面设计指南 6 3 2输出设计 信息显示界面设计 1 信息显示的规则系统输出的形式是多种多样的 例如 作为其它系统的输入打印的报表屏幕显示数据文件 Word文件 Excel文件等 6 3人机界面设计 界面设计指南 6 3人机界面设计 界面设计指南 6 3人机界面设计 界面设计指南 6 3人机界面设计 界面设计指南 2 输出信息的规则只输出 显示 必需的当前工作内容有关 用户执行任务 的信息在一起使用的信息应输出 显示 在一起 高效率地使用显示屏 每一屏信息的数量 包括标题 栏题等等 不应超过整个屏幕面积的30 用便于用户迅速地吸取信息的方式来显示数据 使用一致的标记 标准的缩写和可预知的颜色 允许用户保持可视化的语境 产生有意义的出错信息 使用大小写 缩进和文本分组来帮助理解 使用窗口分隔不同类型的信息 使用 模拟 方式显示信息 6 3人机界面设计 界面设计指南 3 屏幕布局 使每屏划分若干个子区域少用代码和缩写使用统一的格式 提供明了的标题 栏题以及其它提示信息 遵循用户的习惯 使用用户的术语 采用颜色 大小 下划线 字体等强化重要数据4 字符数据的显示纯正文的显示 英文避免连续用大写字母 文字左对齐 数字右对齐列表和表格 横排 有助计算总和显示不一定和输出格式一致控制显示 滚动速度 5 图形显示 6 3人机界面设计 界面设计指南 6 3人机界面设计 界面设计指南 6 报告 报表 报告分类 文宗报告 订货单 发货单 发票 帐单等 信息报告 异常报告 监控和分析报告 管理总结报告等 6 3人机界面设计 界面设计指南 历史和档案报告 浏览报告按种类分 列表报告 块结构报告 组结构报告具体布局确定所需的打印字符数目字符左侧对齐 数字右侧对齐 有小数点则对齐小数点 负号放在前面会使数列变得不规整 可把负号放在后面 各列之间的间隔至少用三个空格 标题应安排在列的正中 可用粗体字 不同的字体 下划线或不同的色彩等来强调重要的部分 给每页加页码和名称 每次要给报告加上日期和时间 6 3人机界面设计 界面设计指南 6 3 3控制界面的设计 一般交互指南 一般交互指南 涉及信息显示 数据输入和系统的整体控制 是全局性的 忽略它们将冒较大风险 主要有 保持一致性提供有意义的反馈在执行有较大破坏性的动作之前要求用户确认允许取消绝大多数操作减少在两次操作之间必须记忆的信息量提高对话 鼠标移动和思考的效率允许用户犯错误按功能对动作分类 并据此设计屏幕布局提供对工作内容敏感的帮助设施用简单动作或动词短语作为命令 6 3人机界面设计 界面设计指南 主要交互方式设计方法 控制对话 菜单 功能键 图标 直接指点 窗口 命令语言和自然语言等 1 控制对话选择操作命令简单问答形式 Y N复杂对话形式 菜单系统每次只能有一个提问 避免多个询问 需要几个关联的回答时 应重新显示上一个回答 保持提问的顺序与原文档或用户模型一致 2 菜单界面进行控制热键 E 表示 edit 用 E 表示 exit 鼠标器按钮 光标移动键多级菜单结构对于多级菜单的深度和宽度 需要权衡 默任菜单 6 3人机界面设计 界面设计指南 3 功能键定义操作命令 功能键是与选择菜单等效的硬件 节省屏幕空间 F2 删除一个字 帮助 4 图标表示对象或命令让用户来确认图标的含义 使得图标尽可能逼真 图标应有一个清晰的轮廓 以利于辨认 当显示命令时 要给出在此命令下操作对象的具体表象 微注释5 直接操纵 图标 指点6 用窗口划分屏幕 砖状的窗口 重叠的窗口7 命令语言 节省屏幕空间 速度快设计一个词典和一个语法 简短 截尾或缩写DELETE 被删文件名 DELete DISplay DIRectory REName使用2字母命令或3字母命令 以节省敲键时间 6 3人机界面设计 界面设计指南 输入的是垃圾 输出的必然是垃圾 6 3人机界面设计 输入设计细则 正确的输入才有正确的输出输入界面是系统与用户交流的纽带在正确的前提下 应做到输入方法简单 迅速 经济 方便 6 3人机界面设计 输入设计细则 6 3人机界面设计 输入设计细则 输入设计的原则 6 3人机界面设计 输入设计细则 原则 输入量越小 出错的机会越少 花费的时间越少 数据的一致性越好 由于数据录入工作一般需要人的参与 数据输入速度与计算机处理比较起来相对缓慢 系统在大多数时间都处于等待状态 效率显著降低 增加系统的运行成本 因此 在输入设计中 应在满足处理要求的前提下使输入量最小 6 3人机界面设计 输入设计细则 原则 输入数据的速度往往成为提高信息系统运行效率的瓶颈 为减少延迟 可采用周转文件 批量输入等方式 6 3人机界面设计 输入设计细则 原则 输入设计中应采用多种输入校验方法和有效性验证技术 减少输入错误 6 3人机界面设计 输入设计细则 原则 在输入设计时 应尽量避免不必要的输入步骤 当步骤不能省略时 应仔细验证现有步骤是否完备 高效 6 3人机界面设计 输入设计细则 原则 输入设计在为用户提供纠错和输入校验的同时 必须保证输入过程简单易用 不能因为查错 纠错而使输入复杂化 增加用户负担 6 3人机界面设计 输入设计细则 原则 6 3人机界面设计 输入设计细则 设计 数据输入设计 6 3人机界面设计 输入设计细则 设计 6 3人机界面设计 输入设计细则 设计 目前常用的输入设备有以下几种 1 读卡机 2 键盘 磁盘输入装置 3 光电阅读器 手持扫描仪 6 3人机界面设计 输入设计细则 选择设备 4 终端输入 5 声音识别仪 6 3人机界面设计 输入设计细则 选择设备 6 3人机界面设计 输入设计细则 校验 数据采集过程中发生的错误 如原始凭证丢失 填写不准确 凭证传递延误等 这些主要依靠建立严格的凭证管理制度来解决 录入数据阶段产生的错误 如录入员的错读 漏读 误操作等原因引起的数据错误 对这类错误 可以采用校验方法来解决 6 3人机界面设计 输入设计细则 校验 1 重复校验 将相同的内容重复输入多次 比较其结果 如设置或修改密码的操作 一般要求用户输入两次 2 视觉校验 数据输入的同时 有计算机显示或打印输入的数据 然后与原始单据进行比较 3 校验位校验 6 3人机界面设计 输入设计细则 校验 4 控制总数校验 工作人员先用手工求出数据的总值 然后在输入过程中由计算机程序累计总值 将两者对比较验 5 逻辑校验 根据业务上数据的逻辑性 检查有无错误 如月份最大不会超过12 否则出错 6 3人机界面设计 输入设计细则 校验 6 界限校验 检查某项输入数据的内容是否在规定的范围之内 如商品的单价规定在50元至1000元范围内 若检查出存在超出此范围的数据 则出错 7 顺序校验 即检查记录的顺序 6 3人机界面设计 输入设计细则 校验 8 记录计数校验 通过计算记录个数来检查记录是否遗漏和重复 9 平衡校验 校验相互有关的相反数据项之间是否平衡 如会计系统中 凭证的借 贷科目分别求和 若相等 则账目平衡 否则账目中必然有错 6 3人机界面设计 输入设计细则 校验 6 3人机界面设计 输入设计细则 格式 输入数据的记录格式既要便于操作人员录入 又要便于填表人员 现场工作人员填写 设计原始单据的原则是 1 便于填写 原始单据的设计要保证填写得迅速 正确 全面 简易和节约 具体地说应做到 填写量小 版面排列简明 易懂 2 便于归档 单据大小要标准化 预留装订位置 标明传票的流动路径 3 单据的格式应能保证输入精度 6 3人机界面设计 输入设计细则 格式 6 3人机界面设计 输入设计细则 屏幕 屏幕是用户与系统的界面 即人和机器的接口 也是控制和选择信息输入输出的主要途径 在屏幕设计时 应遵循以下基本原则 1 屏幕设计要充分考虑用户需求 2 将数据录入到屏幕上时 字段的安排要尽量与原始资料的安排保持一致 3 设计时应注意使录入窗口简洁明了 6 3人机界面设计 输入设计细则 屏幕 简列式 表格式 全屏幕编辑方式 6 3人机界面设计 输入设计细则 屏幕 把一组相关的数据项 按顺序排成几列 输入时只要按顺序逐个地键入数据 完成一组数据的输入 格式简单 直观 易用程序实现 适用于输入数据项不多的情况 6 3人机界面设计 输入设计细则 屏幕 6 3人机界面设计 输入设计细则 屏幕 把一组输入的数据项排列成一张空白表的格式 操作员象填表一样输入数据 该方式称为 表格式输入方式 符合人们日常习惯 受欢迎 但要注意和安排屏幕 尽量与数据载体的格式一样 输入操作会觉得亲切自如 不易出错 6 3人机界面设计 输入设计细则 屏幕 职工人事信息卡录入 6 3人机界面设计 输入设计细则 屏幕 全屏幕编辑功能 即在屏幕上造出一张与数据库文件相一致的二维关系表 能够实现记录的追加 修改和删除等操作 6 3人机界面设计 输入设计细则 屏幕 6 3人机界面设计 输入设计细则 屏幕 6 3人机界面设计 用户界面设计细则 软件主界面设计是用户界面设计中最重要也是最难的工作 良好的软件主界面有如下特性 用户很容易理解界面的意图 基本上无需翻阅手册和询问别人所有用户很容易理解界面的意图 元素的布局合理 符合逻辑 符合工作流程 操作方式符合大众用户的习惯 具有高度一致性主界面清晰美观 用户不会厌烦 6 3人机界面设计 用户界面 主界面 Windows客户端软件的主界面模式是非常成功的 这种模式已经被世界上大多数的计算机用户接纳 Windows客户端软件的主界面一般有5个区域 1 菜单区 2 工具栏区 3 功能树或者功能面板 可选区域 4 工作区 5 状态信息区 6 3人机界面设计 用户界面 主界面 结构模型如下 1 菜单区 2 工具栏区 5 状态信息区 3 功能树或者功能面板 可选区域 4 工作区 6 3人机界面设计 用户界面 主界面 Word软件的主界面示例 金算盘8e ERP软件的主界面示例 速达3000软件的主界面示例 6 3人机界面设计 用户界面 基本窗口 下面给出的是 JavaLookandFeelGuidlines Sun1999 第93页 中的内容 基本窗口是用户与数据或者文档进行交互的主要地方 一个应用程序可以使用任意多个基本窗口 它们可以被独立地打开 关闭 最小化或者调整大小 6 3人机界面设计 用户界面 基本窗口 在菜单栏的最右边菜单上有Help 帮助 菜单可以选择地包含一个工具栏 其中的按钮代表菜单栏中菜单命令的一个子集 或者是常用命令有完整的窗口修饰命令集 包括最小化按钮 最大化按钮和可调整边框有Close 关闭 命令 如果它不是应用程序的主窗口 或在最左边的菜单底部有Exit 退出 命令 如果它是应用程序的主窗口 在底部或右边没有窗口控件按钮 6 3人机界面设计 用户界面 基本窗口 设置系统的基础数据的窗口 如部门信息 供应商资料 客户资料信息设置窗口等等 6 3人机界面设计 用户界面 基本窗口 物料 信息设置 进行基本业务资料设置的窗口 如采购订单的录入 凭证的录入等等 6 3人机界面设计 用户界面 基本窗口 6 3人机界面设计 用户界面 基本窗口 进行信息查询的窗口 如明细账的查询 进货信息的查询等等 6 3人机界面设计 用户界面 基本窗口 标题 标题 6 3人机界面设计 用户界面 对话框 下面给出的是 JavaLookandFeelGuidlines Sun1999 第93页 中的内容 对话框是一个用来提供支持的窗口 它依赖于一个基本窗口 或者其他的次级窗口 在对话框中 用户可以查看和提供基本窗口的动作或者对象的附加信息 6 3人机界面设计 用户界面 对话框 对话框具有如下特征 不能最小化成一个桌面图标或任务按钮 通常是短时间显示 如设置正在执行命令的属性或者浏览 更改一个对象的属性能模式化通常是临时的 也就是说 显示它只是为了支持特定操作 随后就消失通常不能调整大小具有一个Close 关闭 命令或者Cancel 取消 的动作按钮 6 3人机界面设计 用户界面 对话框 1 新增对话框 出现 物料 新增 对话框 6 3人机界面设计 用户界面 对话框 从软件开发的工程化观点来看 在使用程序设计语言编制程序以前 需要对所采用算法的逻辑关系进行分析 设计出全部必要的过程细节 并给予清晰的表达 这就是过程设计的任务 在过程设计阶段 要决定各个模块的实现算法 并精确地表达这些算法 表达过程规格说明的工具叫做详细设计工具 它可以分为以下三类 图形工具 表格工具 语言工具 程序流程图 不论是哪类工具 对其基本要求都是 能提供对设计的无歧义的描述也就是应该能指明控制流程 处理功能 数据组织以及其他方面的实现细节从而在编码阶段能把对设计的描述直接翻译成程序代码此外 应该尽可能的形象直观 应该易学 易懂1 程序流程图也称为程序框图 是历史最悠久 使用最广泛的描述过程设计的方法 然而也是用得最混乱的一种方法 五种基本控制结构 6 4过程设计及工具 示例 程序流程图的标准符号 循环的标准符号注解的使用 6 4过程设计及工具 程序框流程图 多出口判断 6 4过程设计及工具 程序框流程图 盒图 出于要有一种不允许违背结构程序设计精神的图形工具的考虑 Nassi和Shneiderman发明了盒图 又称为N S图 没有箭头 因此不能够随意转移控制 坚持使用盒图作为过程设计的工具 可以使程序员逐步养成用结构化的方式思考问题 解决问题的习惯 6 4过程设计及工具 N S图 示例 N S图的嵌套定义形式 6 4过程设计及工具 N S图 PAD图称为问题分析图 problemanalysisdiagram 用二维树形结构的图来表示程序的控制流将这种图翻译成程序代码比较容易PAD也设置了五种基本控制结构的图式 并允许递归使用 6 4过程设计及工具 PAD图 使用PAD图提供的定义功能来逐步求精的例子 6 4过程设计及工具 PAD图 对应于增量型循环结构fori n1ton2stepn3do在PAD中有相应的循环控制结构 PAD的扩充控制结构 6 4过程设计及工具 PAD图 当算法中包含多重嵌套的条件选择时 用程序流程图 盒图 PAD图或后面即将介绍的过程设计语言 PDL 都不易清楚地描述 然而判定表却能够清晰地表示复杂的条件组合与应做的动作之间的对应关系 判定表用于表示程序的静态逻辑在判定表中的条件部分给出所有的两分支判断的列表 动作部分给出相应的处理要求将程序流程图中的多分支判断都改成两分支判断 6 4过程设计及工具 判定表 无多分支判断结构 一张判定表由四部分组成 左上部列出所有条件左下部是所有可能做的动作右上部是表示各种组合的一个矩阵右下部是和每种条件组合相对应的动作判定表右半部的每一列实质上是一条规则 规定了与特定的条件组合相对应的动作 虽然能清晰地表示复杂的条件组合与应做的动作之间的对应关系 但其含义却不是一眼就能看出来的 初次接触这种工具的人要理解它需要有一个熟悉过程 6 4过程设计及工具 判定表 建立判定表的步骤列出与一个具体过程 或模块 有关的所有处理 列出过程执行期间的所有条件 或所有判断 将特定条件取值组合与特定的处理相匹配 消去不可能发生的条件取值组合 将右部每一纵列规定为一个处理规则 即对于某一条件取值组合将有什么动作 例 以行李托运费的算法为例说明判定表的组织方法 假设某航空公司规定 乘客可以免费托运重量不超过30公斤的行李 当行李重量超过30公斤时 对头等舱的国内乘客超重部分每公斤收费4元 对其他舱的国内乘客超重部分每公斤收费6元 对外国乘客超重部分每公斤收费比国内乘客多一倍 对残疾乘客超重部分每公斤收费比正常乘客少一半 用判定表可以清楚地表示与上述每种条件组合相对应的动作 算法 6 4过程设计及工具 判定表 判定树判定表的变种 也能清晰地表示复杂的条件组合与应做的动作之间的对应关系 优点 它的形式简单到不需要任何说明 一眼就可以看出其含义 因此易于掌握和使用 多年来判定树一直受到人们的重视 是一种比较常用的系统分析和设计的工具 6 4过程设计及工具 判定树 6 4过程设计及工具 判定树 PDL ProgramDesignLanguage 是一种用于描述功能模块的算法设计和加工细节的语言 称为过程设计语言 它是一种伪码 现在有许多种不同的过程设计语言在使用 它是用正文形式表示数据和处理过程的设计工具伪码的语法规则分为 外语法 和 内语法 PDL具有严格的关键字外语法 用于定义控制结构和数据结构 同时它的表示实际操作和条件的内语法可使用自然语言的词汇 通常有是灵活自由的 以便可以适应各种工程项目的需要 因此 一般说来PDL是一种 混杂 的语言 它使用一种语言 通常是某种自然语言 的词汇 同时却使用另一种语言 某种结构化的程序设计语言 的语法 6 4过程设计及工具 PDL语言 示例 拼词检查程序 PROCEDUREspellcheckISBEGINsplitdocumentintosinglewordsloodupwordsindictionarydisplaywordswhicharenotindictionarycreateanewdictionaryENDspellcheck 6 4过程设计及工具 PDL语言 PDL的特点 提供全部结构化控制结构 数据说明和模块特征 能对PDL正文进行结构分割 使之变得易于理解 为了区别关键字 规定关键字一律大写 其它单词一律小写 或者规定关键字加下划线 或者规定它们为黑体字 6 4过程设计及工具 PDL语言 内语法使用自然语言来描述处理特性 内语法比较灵活 只要写清楚就可以 不必考虑语法错 以利于人们可把主要精力放在描述算法的逻辑上 有数据说明机制 包括简单的 如标量和数组 与复杂的 如链表和层次结构 的数据结构 有子程序定义与调用机制 用以表达各种方式的接口说明 6 4过程设计及工具 PDL语言 使用PDL语言 逐步求精 PROCEDUREspellcheckBEGIN splitdocumentintosinglewordsLOOPgetnextwordaddwordtowordlistinsortorderEXITWHENallwordsprocessedENDLOOP lookupwordsindictionaryLOOPgetwordfromwordlist 6 4过程设计及工具 PDL语言 IFwordnotindictionaryTHEN displaywordsnotindictionarydisplaywordpromptonuserterminalIFuserresponsesayswordOKTHENaddwordtogoodwordlistELSEaddwordtobadwordlistENDIFENDIFEXITWHENallwordsprocessedENDLOOP 6 4过程设计及工具 PDL语言 createanewwordsdictionarydictionary mergedictionaryandgoodwordlistENDspellcheck 6 4过程设计及工具 PDL语言 计算机软件本质上是信息处理系统 因此 可以根据软件所处理的信息的特征来软件 前面曾经讨论了面向数据流的设计方法 也就是根据数据流确定软件结构的方法 本节将讨论面向数据结构的设计方法 也就是根据数据结构设计程序处理过程的方法 在许多应用领域中信息都有清楚的层次结构 输入数据 内部存储的信息 数据库或文件 以及输出数据都可能有独特的结构 数据结构既影响程序的结构又影响程序的处理过程 重复出现的数据通常由具有循环控制结构的程序来处理 选择数据 即 可能出现也可能不出现的信息 要用带有分支控制结构的程序来处理 层次的数据组织通常和使用这些数据的程序的层次结构十分相似 6 5面向数据结构的设计方法 面向数据结构的设计方法的最终目标是得出对程序处理过程的描述 这种设计方法并不明显地使用软件结构的概念 模块是设计过程的副产品 对于模块独立原理也没有给予应有的重视 因此 这种方法最适合于在详细设计阶段使用 也就是说 在完成了软件结构设计之后 可以使用面向数据结构的方法来设计每个模块的处理过程Jackson结构程序设计方法是典型的面向数据结构的设计方法 它由下述5个步骤组成 第1步 分析并确定输入数据和输出数据的逻辑结构 并用Jackson图描绘这些数据结构 6 5面向数据结构的设计方法 6 5面向数据结构的设计方法 A由B C D3个元素顺序组成 根据条件A是B或C或D中的某一个 A由B出现N次 N 0 组成 改进的Jackson图 第2步 找出输入数据结构和输出数据结构中有对应关系的数据单元 所谓有对应关系是指有直接的因果关系 在程序中可以同时处理的数据单元 对于重复出现的数据单元必须重复的次序和第3步 用下述三条规则从描绘数据结构的Jackson图导出描绘程序结构的Jackson图 为每对有对应关系的数据单元 按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框 如果这对数据单元在输入数据结构和输出数据结构中所处的层次不同 则和它们对应的处理框在程序结构图中所处的层次与它们之中在数据结构图中层次低的那个对应 根据输入数据结构中剩余的每个数据单元所处的层次 在程序结构图的相应层次分别为它们画上对应的处理框根据输出数据中剩余的每个数据单元所处的层次 在程序结构图的相应层次分别为它们画上对应的处理框次数都相同才可能有对应关系 6 5面向数据结构的设计方法 总之 描绘程序结构的Jackson图应该综合输入输入数据结构和输出结构的层次关系而导出来 在导出程序结构图的过程中 由于改进的Jackson图规定在构成顺序结构的元素中不能有重复出现或选择出现的元素 因此可能需要增加中间层次处理框 第4步 列出所有操作和条件 包括分支条件和循环结束条件 并且把它们分配到程序结构图的适当位置 第5步 用伪码表示程序 6 5面向数据结构的设计方法 6 5面向数据结构的设计方法 表示输入输出数据结构的Jackson图 6 5面向数据结构的设计方法 描绘统计空格程序结构的Jackson图 6 5面向数据结构的设计方法 把操作和条件分配到程序结构图的适当位置 程序复杂性主要指模块内程序的复杂性 它直接关联到软件开发费用多少 开发周期长短和软件内部潜伏错误的多少 减少程序复杂性 可提高软件的简单性和可理解性 并使软件开发费用减少 开发周期缩短 软件内部潜藏错误减少 把程序的复杂程度乘以适当常数即可估算出软件中错误的数量以及开发该软件需要用的工作量 因此定量度量的结果可以用来比较两个不同的设计或两个不同算法的优劣 定量复杂度可以作为模块规模的精确限度 1 复杂性度量需要满足的假设为了度量程序复杂性 要求 它可以用来计算任何一个程序的复杂性 对于不合理的程序 例如对于长度动态增长的程序 或者对于原则上无法排错的程序 不应当使用它进行复杂性计算 6 6程序复杂程度的定量度量 如果程序中指令条数 附加存储量 计算时间增多 不会减少程序的复杂性 2 代码行度量法源代码行数度量法基于两个前提 程序复杂性随着程序规模的增加不均衡地增长 控制程序规模的方法最好是采用分而治之的办法 将一个大程序分解成若干个简单的可理解的程序段 方法的基本考虑是统计一个程序模块的源代码行数目 并以源代码行数做为程序复杂性的度量 设每行代码的出错率为每100行源程序中可能有的错误数目 Thayer曾指出 程序出错率的估算范围是从0 04 7 之间 即每100行源程序中可能存在0 04 7个错误 他还指出 每行代码的出错率与源程序行数之间不存在简单的线性关系 6 6程序复杂程度的定量度量 Lipow指出 对于小程序 每行代码出错率为1 3 1 8 对于大程序 每行代码的出错率增加到2 7 3 2 之间 这只是考虑了程序的可执行部分 没有包括程序中的说明部分 Lipow及其他研究者得出一个结论 对于少于100个语句的小程序 源代码行数与出错率是线性相关的 随着程序的增大 出错率以非线性方式增长 3 McCabe度量法McCabe度量法 又称环路复杂性度量 是一种基于程序控制流的复杂性度量方法 它基于一个程序模块的程序图中环路的个数 因此计算它先要画出程序图 程序图是退化的程序流程图 流程图中每个处理都退化成一个结点 流线变成连接不同结点的有向弧 6 6程序复杂程度的定量度量 程序图仅描述程序内部的控制流程 完全不表现对数据的具体操作 以及分支和循环的具体条件 在流图中用圆点表示结点 一个圆代表一条或多条语句 程序流程图一个顺序执行的处理框序列和一个菱形判定框 可以映射成流图中的一个结点 流图中的箭头线称为边 代表控制流 在流图中一条必须终止于一个结点 即使这个结点并不代表可执行的语句 相当于一个空语句 由边和结点围成的面积称为区域 当计算区域数时应该包括图外部没被围起来的那个区域 6 6程序复杂程度的定量度量 6 6程序复杂程度的定量度量 由PDL翻译成的流图 6 6程序复杂程度的定量度量 由包含复合条件的PDL映射成的流图 当过程设计的结果中包含复合条件时 应该把复合条件分解为若干个简单条件 每个简单条件对应流图中一个方法 计算环路复杂性的方法 方法一 根据图论 在一个强连通的有向图G中 环的个数由以下公式给出 V G E n p其中 V G 是有向图G中环路个数 E是图G中弧数 边数 n是图G中结点数 p是图G中的强连通分量个数 Myers建议 对于复合判定 例如 A 0 C D X A 算做三个判定 为使图成为强连通图 从图的入口点到出口点加一条用虚线表示的有向边 使图成为强连通图 这样就可以使用上式计算环路复杂性 对强连通图 强连通分量p 1 否则p 1在例示中 结点数n 11 弧数m 13 p 1 则有V G m n p 13 11 1 3 6 6程序复杂程度的定量度量 方法二 等于程序图中弧所封闭的区域数 方法三 流图G的环形复杂度V G p 1其中p是程序中判断的数目 在源代码中IF语句 WHILE循环或FOR循环都相当于1个判断 而CASE语句或其他多分支语句相当的判断数等于可能的分支数减1 4 几点说明环路复杂度取决于程序控制结构的复杂度 当程序的分支数目或循环数目增加时其复杂度也增加 环路复杂度与程序中覆盖的路径条数有关 环路复杂度是可加的 例如 模块A的复杂度为3 模块B的复杂度为4 则模块A与模块B的复杂度是7 6 6程序复杂程度的定量度量 McCabe建议 对于复杂度超过10的程序 应分成几个小程序 以减少程序中的错误 Walsh用实例证实了这个建议的正确性 在McCabe复杂度为10的附近 存在出错率的间断跃变 McCabe环路复杂度隐含的前提是 错误与程序的判定加上例行子程序的调用数目成正比 加工复杂性 数据结构 录入与打乱输入卡片的错误可以忽略不计 这种度量的缺点是 对于不同种类的控制流的复杂性不能区分简单IF语句与循环语句的复杂性同等看待嵌套IF语句与简单CASE语句的复杂性是一样的模块间接口当成一个简单分支一样处理一个具有1000行的顺序程序与一行语句的复杂性相同 6 6程序复杂程度的定量度量 5 Halstead方法Halstead软件科学研究确定计算机软件开发中的一些定量规律 它采用以下一组基本的度量值 这些度量值通常在程序产生之后得出 或者在设计完成之后估算出 Halstead法根据程序中运算符和操作数的总数来度量程序的复杂程度 程序长度 预测的Halstead长度 令n1表示详细设计结果中不同运算符 包括保留字 的个数 令n2表示程序中不同运算对象的个数 操作数 令H表示 程序长度 则有H n1 log2n1 n2 log2n2这里 H是程序长度的预测值 它不等于程序中语句个数 6 6程序复杂程度的定量度量 在定义中 运算符包括 算术运算符赋值符 或 逻辑运算符分界符 或 或 关系运算符括号运算符子程序调用符数组操作符循环操作符等 特别地 成对的运算符 例如 begin end for to repeat until while do if then else 等都当做单一运算符 运算对象包括变量名和常数 6 6程序复杂程度的定量度量 实际的Halstead长度设N1为程序中实际出现的运算符总个数 N2为程序中实际出现的运算对象总个数 N为实际的Halstead长度 则有N N1 N2程序的词汇表Halstead定义程序的词汇表为不同的运算符种类数n1和不同的运算对象种类数n2的总和 若令n为程序的词汇表 则有n n1 n2 6 6程序复杂程度的定量度量 例如 用FORTRAN语言写出的交换排序的例子SUBROUTINESORT X N DIMENSIONX N IF N LT 2 RETURNDO20I 2 NDO10J 1 IIF X I GE X J GOTO10SAVE X I X I X J X J SAVE10CONTINUE20CONTINUERETURNEND 6 6程序复杂程度的定量度量 6 6程序复杂程度的定量度量 程序量程序量V可用下式得到V N log2n它表明了程序在词汇上的复杂性 其最小值为V 2 n2 log2 2 n2 V这里 2表明程序中至少有两个运算符 赋值符 和函数调用符f n2 表示输入 输出变量个数 对于上面的例子 利用n1 N1 n2 N2 可以计算得H 10 log210 7 log27 52 87N 28 22 50V 28 22 log2 10 7 204等效的汇编语言程序的V 328 这说明汇编语言比FORTRAN语言需要更多的信息量 以bit表示 6 6程序复杂程度的定量度量 程序量比率 语言的抽象级别 L V V或L 2 n1 n2 N2 它表明了一个程序的最紧凑形式的程序量与实际程序量之比 反映了程序的效率 其倒数D 1 L表明了实现算法的困难程度 程序员工作量E V L程序的潜在错误Halstead度量可以用来预测程序中的错误 预测公式为B N1 N2 log2 n1 n2 3000 6 6程序复杂程度的定量度量 B为该程序的错误数 它表明程序中可能存在的差错B应与程序量V成正比 例如 一个程序对75个数据库项共访问1300次 对150个运算符共使用了1200次 那么预测该程序的错误数 B 1200 1300 log2 75 150 3000 6 5即预测该程序中可能包含6 7个错误Halstead的重要结论程序的实际Halstead长度N可以由词汇表n算出 即使程序还未编制完成 也能预先算出程序的实际Halstead长度N 虽然它没有明确指出程序中到底有多少个语句 6 6程序复杂程度的定量度
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 21754-2025化学品28天(亚急性)吸入毒性试验方法
- 基于VRAR的虚拟实验室在科学教育中的构建-洞察及研究
- 企业全球化竞争力评估-洞察及研究
- 石油天然气行业监管改革-洞察及研究
- 船舶能效评估方法改进-洞察及研究
- 智能设备选矿应用-洞察及研究
- 江苏2025安全b证考试题库及答案解析
- 2026届西藏拉萨市达孜县中学数学七上期末统考模拟试题含解析
- 江汉区部分学校2026届八年级数学第一学期期末考试试题含解析
- 山西省九级2026届数学八上期末联考模拟试题含解析
- 2025年机械工程师职称考试题及参考答案
- 统编版2025-2026学年语文五年级上册期中阶段培优情境卷试题(有答案)
- EHS风险管理监测规范制定
- 2025-2026学年上学期七年级历史第一次月考卷(含答案)
- 广东省深圳市龙岗区2024-2025学年七年级上学期语文第一次月考试卷(含答案)
- BIM技术在工程造价动态控制的创新应用
- 供配电站建设项目可行性研究报告
- 2025至2030年中国赛车主题公园行业发展前景预测及投资战略研究报告
- 2024新型电力负荷管理系统建设典型设计宣贯
- 人人享有心理健康
- 2025年信息系统工程师职业资格考试试题及答案
评论
0/150
提交评论