您好,欢迎访问三七文档
第10章软件设计10.1目的软件设计指设计软件的系统结构、用户界面、数据库、功能模块等,在需求与代码之间建立桥梁,指导工作人员开发能够满足用户需求的软件产品。10.2关键活动与流程软件设计的流程如图10-1所示,分为概要设计阶段和详细设计阶段。关键活动是“软件系统设计”、“用户界面设计”、“数据库设计”和“功能模块设计”。用户界面设计师软件开发人员软件开发人员图10-1软件设计的流程该流程的主要工作成果见表10-1。表10-1软件设计流程的主要工作成果关键活动主要工作成果责任人软件系统设计《软件系统设计报告》软件开发人员用户界面设计《用户界面原型》用户界面设计师数据库设计《数据库设计报告》软件开发人员功能模块设计《功能模块设计报告》软件开发人员概要设计阶段详细设计阶段软件系统设计功能模块设计数据库设计用户界面设计10.2.1软件系统设计软件系统设计的一般步骤如图10-2所示。图10-2软件系统设计的步骤第一步设计准备项目经理分配软件设计的任务,包括系统设计、模块设计、用户界面设计、数据库设计等。系统设计人员阅读需求文档,明确设计任务,并准备相关的设计工具(如RationalRose)和资料。第二步确定系统的约束因素软件系统设计人员从《软件需求规格说明书》中提取需求约束,例如:☆本系统应当遵循的标准或规范。☆软件、硬件环境(包括运行环境和开发环境)的约束。☆接口/协议的约束。☆用户界面的约束。☆软件质量的约束,如正确性、健壮性、可靠性、易用性、清晰性、安全性、可扩展性、兼容性、可移植性等等。有一些假设或依赖并没有在需求文档中明确指出,但可能会对系统设计产生影响,设计人员应当尽可能地在此处说明,例如对用户教育程度、计算机技能的一些假设或依赖,对支撑本系统的软件硬件的假设或依赖等。第三步确定设计策略系统设计人员根据产品的需求,以及本产品的发展战略,确定设计策略(DesignStrategy)。例如:☆设计模式:根据本产品的功能性需求和非功能性需求,确定某些设计模式。☆扩展策略:说明为了方便本系统在将来扩展功能,现在有什么措施。☆复用策略:说明本系统在当前“复用什么”以及将来“如何被复用”。☆折中策略:说明当两个目标难以同时被优化时如何折中,例如“时-空”效率折中,复杂性与实用性之间的折中。第四步系统结构设计☆将系统分解为若干子系统,确定每个子系统的功能以及子系统之间的关系。绘制系统的总体结构图(包括物理图和逻辑图)。☆将子系统分解为若干模块,确定每个模块的功能以及模块之间的关系,绘制子系统的结构图。☆确定系统开发、测试、运行所需的软硬件环境。第五步撰写系统设计文档系统设计人员根据指定的模板撰写《软件系统设计报告》,格式参见表10-2。第六步设计评审系统设计人员邀请同行专家、开发人员对该系统设计进行技术评审。设计评审的重点不是“对还是错”,而是要考察系统的综合能力。设计评审的要素视产品特征而定,例如除了“合适性”、“结构稳定性”、“可扩展性”、“可复用性”之外,还要考虑性能、容量、安全性等。Step1.设计准备Step2.确定约束因素Step3.确定设计策略Step4.系统结构设计Step5.撰写文档Step6.设计评审表10-2软件系统设计报告软件系统设计报告1.系统概述提示:(1)说明本系统“是什么”,(2)描述本系统的主要功能。2.设计约束提示:体系结构设计人员从需求文档提取需求约束,并且确定一些隐含约束。3.设计策略提示:体系结构设计人员根据产品需求,确定设计模式、扩展策略、复用策略、折中策略等。4.系统总体结构(1)将系统分解为若干子系统,绘制总体结构图(含物理图和逻辑图),说明各子系统的主要功能。(2)说明“如何”以及“为什么”如此分解系统。(3)说明各子系统如何协调工作,从而实现原系统的功能。5.子系统N的结构与功能(1)将子系统N分解为一些模块,绘制结构图,说明各模块的主要功能。(2)说明“如何”以及“为什么”如此分解子系统N。(3)说明各模块如何协调工作,从而实现子系统N的功能。6.开发环境的配置提示:说明本系统应当在什么样的环境下开发,有什么强制要求和建议。软件硬件设备名称开发环境标准配置开发环境最低配置7.测试环境的配置提示:说明本系统应当在什么样的环境下测试,有什么强制要求和建议。软件硬件设备名称测试环境标准配置测试环境最低配置8.运行环境的配置提示:说明本系统应当在什么样的环境下运行,有什么强制要求和建议/软件硬件设备名称运行环境标准配置运行环境最低配置9.其它10.2.2用户界面设计用户界面设计的一般步骤如图10-2所示。图10-3用户界面设计的步骤第一步界面设计准备项目经理指定开发人员或美工人员从事用户界面设计(以下称为界面设计人员)。界面设计人员详细阅读《软件需求规格说明书》,了解用户的需求。再与用户交流,了解用户的工作习惯和他们对界面的看法。界面设计人员学习本公司的《用户界面设计指南》(如果存在的话),进一步商定本软件的用户界面设计规则。第二步界面原型设计界面设计人员先创作界面原型,一般方式:(1)在纸上徒手画,或者用Visio等工具绘制界面的视图;(2)用软件开发工具实现可以运行的原型。第三步体验与细化界面设计人员邀请用户和同行体验界面原型,收集意见,及时改进。之后界面设计人员细化界面原型,例如美工处理,添加细节等。第四步用户界面评审本软件的用户界面设计定型后,项目经理邀请用户和同行对界面进行评审,尽最大努力使界面变得更加美观、易用。之后,开发人员编写界面的代码,并和用户一起通过各种途径测试界面,从而不断地完善用户界面。需求分析界面设计准备界面原型设计体验与细化用户界面评审10.2.3数据库设计数据库设计的一般步骤如图10-4所示。迭代图10-4数据库设计的步骤第一步设计准备☆数据设计人员阅读需求文档和体系结构设计文档,明确数据库设计任务。☆数据库设计人员准备相关的设计工具和资料。☆数据库设计人员确定本软件的数据库设计规则(或指南),例如数据库命名规则。第二步数据库设计数据库设计一般要经历“逻辑设计→物理设计→安全性设计→性能优化”等步骤,通常要迭代进行。☆[Step2.1]逻辑设计数据库设计人员根据需求文档,创建与数据库相关的那部分实体关系图(ERD:EntityRelationshipDiagram)。如果采用面向对象设计方法,那么“实体”相当于类(class)。☆[Step2.2]物理设计按照第三范式设计表结构(即规范化处理)。一般地,实体对应于表,实体的属性对应于表的列,实体之间的关系成为表的约束。逻辑设计中的实体大部分可以转换成物理设计中的表,但是它们并不是一一对应的。☆[Step2.3]安全性设计提高软件系统的安全性应当从“管理”和“技术”两方面着手。这里仅考虑技术手段(因为安全管理超出了软件工程范畴),一般原则如下:△用户只能用给定的用户名登录到应用软件,通过应用软件访问数据库,而没有其它途径可以操作数据库。△对用户的密码进行加密处理,确保在任何地方都不会出现密码的明文。△确定每个角色对数据库表的操作权限,如创建、检索、更新、删除等。每个角色拥有刚好能够完成任务的权限,不多也不少。在应用时再为用户分配角色,则每个用户的权限等于他所有角色的权限累加。☆[Step2.4]性能优化数据库性能化一般有两种途径:△优化表结构本身。例如对第三范式的表结构进行反规范化处理,允许表中存在冗余数据,从而减少多个表链接操作,达到提高性能的目的。△优化数据库的环境参数。例如提高硬件设施,调整表的空间尽量减少数据碎片等。Step2.数据库设计2.1逻辑设计2.2物理设计2.3安全性设计2.4性能优化Step1.设计准备Step4.设计评审Step3.撰写文档第三步撰写数据库设计文档☆数据库设计人员根据指定的模板撰写《数据库设计报告》,格式参见表10-3。第四步设计评审数据库设计人员邀请同行专家、开发人员对数据库进行技术评审,数据库的主要评审要素包括:(1)正确性、完整性、一致性;(2)安全性;(3)性能。表10-3数据库设计报告数据库设计报告1.数据库环境说明提示:(1)说明所采用的数据库系统,设计工具,编程工具等;(2)说明详细配置。2.数据库命名规则提示:完整并且清楚地说明本数据库的命名规则3.逻辑设计提示:数据库设计人员根据需求文档,创建与数据库相关的那部分实体关系图(ERD)。4.物理设计4.0表汇总表名功能说明表A表B表C4.n表n表名列名数据类型(精度范围)空/非空约束条件补充说明5.安全性设计5.1账号与密码管理提示:用户只能用账号登录到应用软件,通过应用软件访问数据库,而没有其它途径操作数据库。5.2密码加密方法提示:对用户密码进行加密处理,确保在任何地方都不会出现密码的明文。5.3角色与权限提示:确定每个角色对数据库表的操作权限,如创建、更新、删除等。每个角色拥有刚好能够完成任务的权限,不多也不少。在应用时再为用户分配角色,则每个用户的权限等于他所兼角色的权限之和。角色可以访问的表操作权限角色A角色B6.性能优化方法优先级优化对象方法、措施7.数据库管理与维护说明提示:在设计数据库的时候,及时给出管理与维护本数据库的方法,有助于将来撰写出正确完备的用户手册。10.2.4功能模块设计模块设计的核心工作是“接口设计”和“数据结构与算法设计”。前者是模块的外部特征,应当公开,而后者是模块的内部特征,应当隐藏。模块设计的一般步骤如图10-5所示。迭代图10-5模块设计的步骤第一步设计准备☆模块设计人员阅读需求文档和体系结构设计文档,明确模块设计任务。☆模块设计人员准备相关的设计工具和资料。☆模块设计人员确定本软件的编程规范,确保模块设计文档的风格与代码的风格保持一致。第二步模块设计☆[Step2.1]接口设计模块设计人员设计每个模块的主要接口。☆[Step2.2]数据结构与算法设计模块设计人员设计每个模块的数据结构与算法。一般步骤如下:△数据结构与算法有全局和局部之分,先设计全局的,后设计局部的(通常在模块设计时进行)。△根据问题的特征,先查找已经存在的数据结构与算法,挑选最合适的(并不一定是最先进的)。如果没有现成的,那么自己设计。△设计并且编写代码之后,要进行测试。如果不满足性能要求,那么要进一步优化数据结构和算法。第三步撰写模块设计文档☆模块设计人员根据指定的模板撰写《模块设计报告》,格式参见表10-4。第四步设计评审☆模块设计人员邀请同行专家、开发人员对模块进行技术评审。Step2.模块设计2.1接口设计2.2数据结构与算法设计Step1.设计准备Step4.设计评审Step3.撰写文档表10-4模块设计报告模块设计报告1.模块命名规则提示:模块设计人员确定本软件的模块命名规则(例如类、函数、变量等),确保模块设计文档的风格与代码的风格保持一致。可以从机构的编程规范中摘取或引用(如果存在的话)。2.模块汇总子系统A模块名称功能简述子系统B模块名称功能简述3.模块关系图提示:参考《系统设计报告》,绘图说明模块之间的关系。4.模块A的设计模块名称功能描述接口说明功能、输入参数、输出参数、返回值等。数据结构与算法提示:不论是采用经典的还是专用的数据结构与算法,都应该作必要的描述。不仅用于指导程序的实现,还可以让人们清楚地了解该对象类是如何设计的。其它说明5.附件10.3常见问题解答和实施建议10.3.1如何评价系统设计的优劣软件系统设计好不好,可以用“合适性、结构稳定性、可扩展性、可复用性”这4个因素来评估。合适性:指软件系统适合于“功能性需求”和“非功能性需求”。对于软件系统而言,能够满足需求的设计方案可能有很多种,究竟该选哪一种?此时商业目标是决策依据,即选择能够为开发方和客户方带来最大利益的那个设计方案。大部分软件开发人员天生有使用新技术的倾向,而这种倾向对开发商业产品而言可能是不利的。高水平的设计师能够“设计出恰好满足客户需求的软件,并且使开发方和客户方获取最大的利益,而不是不惜代价设计出最先进的软件。结构稳定性:指系统结构一旦设计完成,应当在一定的时间内保持稳定不变,只
本文标题:第十章软件设计
链接地址:https://www.777doc.com/doc-2166129 .html