1、第9章 程序设计与软件工程基础人人工人工人学生学生教师教师农民农民小学生小学生中学生中学生大学生大学生研究生研究生助教助教讲师讲师教授教授软件的生命周期软件的生命周期数据流名数据流名数据流:数据流:数据处理:数据处理:处理名处理名外部实体:外部实体:文件名:文件名:数据存储:数据存储:外部实体名外部实体名领书单 进书通知 购书单 缺书单 学生教材购销系统书 库保 管员领书单 进书通知 进书通知 购书单缺书单 1销售 2采购书库保管员学生F1教材存量表 F2缺书登记表 1画顶层数据流图画顶层数据流图2画第二层数据流图画第二层数据流图3画第三层数据流图画第三层数据流图步骤:步骤:步骤:步骤:1)设
2、想供选择的方案设想供选择的方案开发人员根据需求分析阶段得到的数据流图所划分的开发人员根据需求分析阶段得到的数据流图所划分的自动化边界自动化边界,一个边界一个边界一个边界一个边界 地设想并且列出供选地设想并且列出供选择的方案。择的方案。2)选取合理的方案选取合理的方案通过对不同方案的比较选取合理的方案。比较主要从通过对不同方案的比较选取合理的方案。比较主要从易于实现性和成本易于实现性和成本/效益分析两方效益分析两方 面进行。推荐最佳面进行。推荐最佳方案方案,并制定出实现这个系统的进度计划。并制定出实现这个系统的进度计划。3)功能分解功能分解功能分解也就是进行结构设计功能分解也就是进行结构设计,确
3、定软件系统确定软件系统都由哪些模块组成都由哪些模块组成,以及这些模块间的以及这些模块间的 相互关相互关系。系。4)设计软件结构设计软件结构设计软件结构是概要设计阶段的核心工作。设计软件结构是概要设计阶段的核心工作。主要应用软件设计的概念和原理主要应用软件设计的概念和原理,采用面采用面 向数向数据流的设计方法据流的设计方法(结构化设计方法结构化设计方法SD)将软件将软件划分层次和结构。划分层次和结构。5)数据库设计数据库设计应用所学的数据库知识应用所学的数据库知识,对软件系统进行数据库设计。对软件系统进行数据库设计。6)制定测试计划制定测试计划在软件开发的早期阶段考虑测试问题在软件开发的早期阶段
4、考虑测试问题,能促使软件设计人能促使软件设计人员在设计时注意提高软件的可测试性。员在设计时注意提高软件的可测试性。7)书写文档书写文档8)审查和复审审查和复审技术审查通过之后技术审查通过之后,再由使用部门的负责人从管理角度进再由使用部门的负责人从管理角度进行复审。行复审。信息沿输入通路进入系统信息沿输入通路进入系统,同时由外部形式变换同时由外部形式变换成内部形式成内部形式,进入系统的信息通过变进入系统的信息通过变 换中心换中心,经经加工处理以后再沿输出通路变换成外部形式离加工处理以后再沿输出通路变换成外部形式离开系统开系统,当数据流图具有这些特当数据流图具有这些特 征时征时,这种信息这种信息流
5、叫变换流。流叫变换流。数据沿输入通路到达一个处理数据沿输入通路到达一个处理,这个处理根据输这个处理根据输入数据的类型在若干个动作序列中选入数据的类型在若干个动作序列中选 出一个来出一个来执行。这一类数据流叫事务流。执行。这一类数据流叫事务流。用户界面的设计:用户界面的设计:1.结构设计结构设计(Strucmre Design)结构设计是界面设计的骨架。通过对用结构设计是界面设计的骨架。通过对用户研究和任务分析户研究和任务分析,制定出产品的整体制定出产品的整体架构。架构。2.交互设计交互设计(Interactive Design)交互设计的目的是使产品让用户能简单使用。任何产品功能的实现都是通交
6、互设计的目的是使产品让用户能简单使用。任何产品功能的实现都是通过人和机器过人和机器 的交互来完成的。因此的交互来完成的。因此,人的因素应作为设计的核心被体现出人的因素应作为设计的核心被体现出来。交互设计的原则如下。来。交互设计的原则如下。 (1)有清楚的错误提示。误操作后有清楚的错误提示。误操作后,系统提供有针对性的提示。系统提供有针对性的提示。(2)让用户控制界面。让用户控制界面。下一步下一步、完成完成,面对不同层次提供多种选择面对不同层次提供多种选择,给不给不同同 层次的用户提供多种可能性。层次的用户提供多种可能性。(3)允许兼用鼠标和键盘。同一种功能允许兼用鼠标和键盘。同一种功能,同时可
7、以用鼠标和键盘同时可以用鼠标和键盘,提供多种可提供多种可能性。能性。 (4)允许工作中断。允许工作中断。(5)使用用户的语言使用用户的语言,而非技术的语言。而非技术的语言。(6)提供快速反馈。给用户心理上的暗示提供快速反馈。给用户心理上的暗示,避免用户焦急。避免用户焦急。(7)方便退出。方便退出。(8)导航功能。随时转移功能导航功能。随时转移功能,很容易从一个功能跳到另外一个功能。很容易从一个功能跳到另外一个功能。 (9)让用户知道自己当前的位置让用户知道自己当前的位置,方便其做出下一步的操作方便其做出下一步的操作3)视觉设计)视觉设计(Visual Design)在结构设计的基础上在结构设计
8、的基础上,参照目标群体的心理模型和任务达成进行视觉设计。包括参照目标群体的心理模型和任务达成进行视觉设计。包括色彩、色彩、 字体、页面等。视觉设计要达到用户愉悦使用的目的。视觉设计的原则字体、页面等。视觉设计要达到用户愉悦使用的目的。视觉设计的原则如下。如下。 (1)界面清晰明了。允许用户定制界面。界面清晰明了。允许用户定制界面。(2)减少短期记忆的负担。让计算机帮助记忆减少短期记忆的负担。让计算机帮助记忆 。(3)依赖认知而非记忆。如打印图标的记忆、下拉菜单列表中的选择。依赖认知而非记忆。如打印图标的记忆、下拉菜单列表中的选择。 (4)提供视觉线索。图形符号的视觉的剌激提供视觉线索。图形符号
9、的视觉的剌激:GUI(图形界面设计图形界面设计)。(5)提供默认提供默认(default)、撤销、撤销(undo)、恢复、恢复(redo的功能。的功能。(6)提供界面的快捷方式。提供界面的快捷方式。(7)尽量使用真实世界的描绘。如尽量使用真实世界的描绘。如:电话、打印机的图标设计电话、打印机的图标设计,尊重用户以往的使尊重用户以往的使用用 经验。经验。(8)完善视觉的清晰度。条理清晰完善视觉的清晰度。条理清晰:图片、文字的布局和隐喻不要让用户去猜。图片、文字的布局和隐喻不要让用户去猜。 (9)界面的协调一致。如手机界面按钮排放界面的协调一致。如手机界面按钮排放,左键肯定左键肯定,右键否定右键否
10、定:或按内容摆放。或按内容摆放。 (10)同样功能用同样的图形。同样功能用同样的图形。(11)色彩与内容。整体软件不超过色彩与内容。整体软件不超过5个色系个色系,尽量少用红色、绿色尽量少用红色、绿色b近似的颜色表近似的颜色表示示 近似的意思。近似的意思。详细设计阶段的主要任务如下。详细设计阶段的主要任务如下。1.模块的逻辑结构设计模块的逻辑结构设计逻辑结构设计是结合所开发项目的具体要求和对每个模逻辑结构设计是结合所开发项目的具体要求和对每个模块规定的功能块规定的功能,开发出模块处开发出模块处 理的详细算法理的详细算法,选择某种适选择某种适当的工具加以精确描述。当的工具加以精确描述。2.模块的数
11、据设计模块的数据设计模块的数据设计是为在需求分析阶段的数据对象定义逻模块的数据设计是为在需求分析阶段的数据对象定义逻辑数据结构辑数据结构,并且对不同的逻并且对不同的逻 辑数据结构进行不同的算辑数据结构进行不同的算法设计法设计,以便选择一个最有效的方案。同时以便选择一个最有效的方案。同时,确定实现逻确定实现逻辑数据辑数据 结构所必需的操作模块结构所必需的操作模块,以便了解数据结构的影以便了解数据结构的影响范围。数据设计包括数据结构设计、数响范围。数据设计包括数据结构设计、数 据库结构设计据库结构设计和文件设计等。和文件设计等。由于数据结构影响程序结构和过程复杂性的直接影响由于数据结构影响程序结构
12、和过程复杂性的直接影响,从从而在很大程度上决定了软件而在很大程度上决定了软件 质量。质量。3.模块的接口设计模块的接口设计接口设计是分析软件各部分之间的联系接口设计是分析软件各部分之间的联系,确定该软件的内部接确定该软件的内部接口和外部接口是否已经口和外部接口是否已经 明确定义。明确定义。4.模块的测试用例设计模块的测试用例设计要为每一个模块设计出一组测试用例要为每一个模块设计出一组测试用例,以便在编码阶段对模块以便在编码阶段对模块代码代码(即程序即程序)进行预定进行预定 的测试的测试,模块的测试用例是软件测试计模块的测试用例是软件测试计划的重要组成部分划的重要组成部分,通常应包括输入数据通常
13、应包括输入数据,期望的期望的 输出数据等内输出数据等内容。容。5.模块的其他设计模块的其他设计根据软件系统的具体的要求根据软件系统的具体的要求,还可能进行以下设计还可能进行以下设计:网络系统设网络系统设计、输入计、输入/输出格式的输出格式的 设计、系统配置的设计等。设计、系统配置的设计等。6.编写编写详细设计说明书详细设计说明书详细设计的原则详细设计的原则1.模块的逻辑描述要清晰易懂、正确可靠模块的逻辑描述要清晰易懂、正确可靠详细设计的结果基本上决定了最终的程序代码的质详细设计的结果基本上决定了最终的程序代码的质量。由于详细设计的蓝图是给后量。由于详细设计的蓝图是给后 续阶段的工作人员续阶段的
14、工作人员看的看的,所以模块的逻辑描述正确可靠所以模块的逻辑描述正确可靠,是软件设计正确是软件设计正确的前提。详细设的前提。详细设 计结果的清晰易懂主要有两个方面计结果的清晰易懂主要有两个方面的作用的作用:一是易于编码的实现一是易于编码的实现,二是易于软件的测试二是易于软件的测试和和 维护。维护。如果详细设计易于理解如果详细设计易于理解,又便于测试和排除所发现的又便于测试和排除所发现的错误错误,就能够有效地在开发期间就能够有效地在开发期间 消除在程序中隐藏的消除在程序中隐藏的绝大多数故障绝大多数故障,使得程序可以短到正确稳定的运行使得程序可以短到正确稳定的运行,极极大地减小运行大地减小运行 期间
15、软件失效的可能性期间软件失效的可能性,大大提高软件大大提高软件的可靠性。的可靠性。2 采用结构化设计方法采用结构化设计方法改善控制结构,降低程序复杂程度,提高程序的可读性改善控制结构,降低程序复杂程度,提高程序的可读性、可测试性和可维护性。采用自顶向下逐步求精的方法、可测试性和可维护性。采用自顶向下逐步求精的方法进行程序设计,一般采用顺序、选择和循环进行程序设计,一般采用顺序、选择和循环3种结构,种结构,确保程序的静态和动态结构执行情况相一致,保证程序确保程序的静态和动态结构执行情况相一致,保证程序的容易理解。的容易理解。3 选择恰当工具进行各模块算法的描述选择恰当工具进行各模块算法的描述程序
16、流程图程序流程图PFC(Program F1ow Chart)NS图图PAD图图判定表判定表判定树判定树PDL详细设计方法的选择详细设计方法的选择在详细设计中在详细设计中,对一个设计方法选择的原则是对一个设计方法选择的原则是:过程描述易于理解、复审和维护过程描述易于理解、复审和维护,进进 而过程描述能够自然地转换成代码而过程描述能够自然地转换成代码,并保证代码与详细设计完全一致。为了达到并保证代码与详细设计完全一致。为了达到这一原则这一原则, 要求选择设计工具时应考虑以下几个方面。要求选择设计工具时应考虑以下几个方面。(1)简洁、易编辑简洁、易编辑:设计描述易学、易用和易读设计描述易学、易用和
17、易读,支持后续设计和维护以及在维护阶支持后续设计和维护以及在维护阶 段对设计进行的修改。段对设计进行的修改。(2)模块化模块化:支持模块化软件的开发支持模块化软件的开发,并提供描述接口的机制。并提供描述接口的机制。 (3)强制结构化强制结构化:详细设计的方法应该能够强制设计者采用结构化构件详细设计的方法应该能够强制设计者采用结构化构件,有助于采用有助于采用 优秀的设计。优秀的设计。(4)数据表示数据表示:详细设计具备表示数据作用范围的能力。详细设计具备表示数据作用范围的能力。(5)机器可读性机器可读性:设计描述能够直接输入设计描述能够直接输入,并且很容易被计算机辅助设计工具识别。并且很容易被计
18、算机辅助设计工具识别。 (6)自动生成报告自动生成报告:设计者通过分析详细设计的结果来改进设计设计者通过分析详细设计的结果来改进设计,通过自动处理器产通过自动处理器产 生有关分析报告生有关分析报告,进而增强设计者在这方面的能力。进而增强设计者在这方面的能力。(7)编码能力编码能力:可编码能力是一种设计描述可编码能力是一种设计描述,研究代码自动转换技术可以提高软件效研究代码自动转换技术可以提高软件效 率和减少出错率。率和减少出错率。(8)逻辑验证逻辑验证:软件测试最高目标是能够自动检验设计逻辑的正确性软件测试最高目标是能够自动检验设计逻辑的正确性,所以设计描述所以设计描述 应易于进行逻辑验证应易
19、于进行逻辑验证,进而增强可测试性。进而增强可测试性。发发现现错错误误的的能能力力 弱弱 强强语句覆盖语句覆盖每条语句至少执行一次每条语句至少执行一次判定覆盖判定覆盖每一判定的每个分支至少执行一次每一判定的每个分支至少执行一次条件覆盖条件覆盖每一判定中的每个条件,分别按每一判定中的每个条件,分别按“真真”、“假假”至少各执行一次至少各执行一次判定判定/条件条件覆盖覆盖同时满足判定复盖和条件复盖的要求同时满足判定复盖和条件复盖的要求条件组合条件组合覆盖覆盖求出判定中所有条件的各种可能组合求出判定中所有条件的各种可能组合值,每一可能的条件组合至少执行一值,每一可能的条件组合至少执行一次次输入数据输入数据有效等价类有效等价类无效等价类无效等价类出生年月出生年月6位数字字符位数字字符有非数字字符有非数字字符少于少于6个数字符个数字符多于多于6个数字符个数字符对应数值对应数值在在196702198603之间之间198603月份对应月份对应数值数值在在112之间之间等于等于“0” 12