软件设计必要性的分析
一、 概述:
以软件设计的目标与任务为主线逐步展开分析,说明软件设计的方法、步骤及其相关的软件工具,阐述软件设计对于一个系统或项目的意义和必要性。
二、 软件设计的定义:
1、 定义:
软件设计是一个需求转换为某种软件表达方式的过程。基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务。
2、 图解:
软件设计定义
三、 软件设计原则:
1、 可靠性:
用软件系统规模越做越大越复杂,其可靠性越来越难保证。应用本身对系统运行的可靠性要求越来越高,软件系统的可靠性也直接关系到设计自身的声誉和生存发展竞争能力。意味着该软件在测试运行过程中避免可能发生故障的能力,且一旦发生故障后,具有解脱和排除故障的能力。软件可靠性和硬件可靠性本质区别在于:后者为物理机理的衰变和老化所致,而前者是由于设计和实现的错误所致。故软件的可靠性必须在设计阶段就确定,在生产和测试阶段再考虑就困难了。
2、 健壮性:
健壮性又称,是指软件对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。软件是一个比较模糊的概念,但是却是非常重要的软件外部量度标准。软件设计的健壮与否直接反应了分析设计和编码人员的水平。
3、 可修改性:
要求以科学的方法设计软件,使之有良好的结构和完备的文档,系统性能易于调整。
4、 容易理解:
软件的可理解性是其可靠性和可修改性的前提。它并不仅仅是文档清晰可读的问题,更要求软件本身具有简单明了的结构。这在很大程度上取决于设计者的洞察力和创造性,以及对设计对象掌握得透彻程度,当然它还依赖于设计工具和方法的适当运用。
5、 程序简便;
6、 可测试性:
可测试性就是设计一个适当的数据集合,用来测试所建立的系统,并保证系统得到全面的检验。
7、 效率性:
软件的效率性一般用程序的执行时间和所占用的内存容量来度量。在达到原理要求功能指标的前提下,程序运行所需时间愈短和占用存储容量愈小,则效率愈高。
8、 标准化原则:
在结构上实现开放,基于业界开放式标准,符合国家和信息产业部的规范。
9、 先进性:
满足客户需求,系统性能可靠,易于维护。
10、 可扩展性:
软件设计完要留有升级接口和升级空间。对扩展开放,对修改关闭。
11、 安全性:
安全性要求系统能够保持用户信息、操作等多方面的安全要求,同时系统本身也要能够及时修复、处理各种安全漏洞,以提升安全性能。
四、 软件设计的分类:
1、 从工程管理的角度进行分类:
a) 概要设计(高层设计或者总体设计):
即将软件需求转化为数据结构和软件体系结构的过程,同时还要确定系统级接口、全局数据结构或数据库模式;
b) 详细设计(低层设计):
确定每个模块的实现算法、局部数据结构,用适当的方法表示算法和数据结构的细节。
2、 从技术管理的角度分类:
a) 数据设计:
数据设计侧重于数据结构的定义;
b) 系统结构设计:
定义软件系统各主要成份之间的关系;
c) 过程设计:
把结构成份转换成为软件的过程性描述。在编码阶段,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。
五、 软件设计的工作任务:
1、 概要设计的工作任务:
a) 制定规范;
b) 完成软件总体设计:将复杂系统按功能划分为模块的层次结构,然后确定模块的功能,以及模块间的调用关系和组成关系;
c) 处理方式设计:包括算法、性能、周转时间、响应时间、吞吐量和精度等;
d) 数据结构设计;
e) 可靠性设计;
f) 编写概要设计阶段的文档;
2、 详细设计的工作任务:
a) 确定软件各个组成部分内的算法以及各部分的内部数据组织;
b) 选定过程的表达形式来描述各种算法。可选用的过程表达形式有:流程图、盒图(N-S图)、PAD图等;
c) 编写详细设计说明书;
d) 制定单元测试计划;
e) 进行详细设计评审;
六、 软件设计的具体说明:
1、 软件设计的目标:
a) 软件结构设计:开发一个模块化的程序结构,并表示模块间的控制关系。将程序结构和数据结构组合,定义数据在程序中流动的接口;
b)数据结构设计:将分析时创建的信息域模型变换成现实软件所需的数据结构;
c)人机界面设计(接口设计);
d) 过程设计;
2、 人机界面设计(接口设计):
a) 定义:
描述软件内部。软件和协作系统之间,以及软件与用户之间如何通信。人机界面设计要实现的内容包括一般交互,信息显示,数据输入;
b) 设计内容:
i. 设计软件模块之间的接口;
ii. 设计模块和其他非人的信息生产者和消费者之间的接口;
iii. 设计用户和计算机间的接口;
3、 结构化设计:
a) 定义:
结构化设计包括架构设计,接口设计,数据设计和过程设计。它是一种面向数据流的设计方法。以结构化分析阶段所产生的成果为基础,进一步自顶而下,逐步求精和模块化的过程。
b) 要求:
i. 抽象化;
ii. 自顶向下,逐步求精;
iii. 信息隐蔽:通常会将困难的抉择、可能修改的决策、数据结构的内部链接,以及对它们所做的操作细节、内部特征码、与计算机硬件有关的细节隐蔽起来。信息隐蔽可以提高软件的可修改性,可测试性,和可移植性;
iv. 模块独立:每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系最简单。设计的目标是"高内聚,低耦合";
4、 模块化设计:
a) 注意事项:
i. 保持模块的大小适中;
ii. 尽可能减少深度;
iii. 直接调用该模块的次数应该尽量多,但调用其他模块的次数则不宜过多;
iv. 保证模块是单入口、单出口;
v. 模块的作用域应该在模块之内;
vi. 应该是可预测的;
b) 模块的特性:
i. 模块的内聚:
内聚性是一个模块内部各个元素彼此结合的紧密程度的度量。模块内聚按照模块独立性由高到低的顺序叙述如图。
模块的内聚类型
ii. 模块的耦合:
耦合性是模块间相互连接的紧密程度的度量。它取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。模块间的耦合按照模块独立性由高到低的顺序列举如图。
模块的耦合类型
七、 常用软件:
1、 普通软件:
a) 说明:
i. Word:用于编写概要和详细设计文档,以及其他文字较多的文档;
ii. Excel:用于编写功能点实现描述文档、单元测试用例、数据导入导出模板等等;
iii. PPT:用于编写设计评审或功能演示文档等等演示类文档;
iv. Visio:用于处理各种图形的绘制;
v. Project:用于各种计划的制订与跟踪;
b) 软件截图:
i. Visio:
Visio
ii. Project:
Project
2、 专业软件:
a) Axure:用于编写页面或UI的原型设计文档;
Axure
b) Mindjet MindManager:用于绘制思维导图、整理相关人员的思路(头脑风暴)或制订阶段性工作计划;
Mindjet MindManager
c) Power Designer:用于UML或数据库建模、专用图形的绘制(例如类图、E-R图、时序图等等);
Power Designer