软件设计是需求工程的后续阶段,他根据项目所描述的需求(功能需求、性能需求、领域需求、数据需求等)的定义,进行数据设计、体系结构设计、界面设计和过程设计。
软件设计主要解决“如何做”的问题,设计的方案最终会影响软件实现的成败。
一般把软件设计分为概要设计和详细设计两个阶段,包括体系结构设计、界面设计、数据设计和过程设计。
1.概要设计:
也称总体设计,主要任务是基于数据流图和数据字典,确定系统的整体软件结构,划分软件的各个子模块,确定他们之间的关系。概要设计是要完成体系结构设计、数据设计和界面设计。
体系结构设计:
确定各子系统模块间的数据传递与调用关系;
界面设计:
包括与系统交互的人机界面设计,以及模块间、系统与外部系统的接口关系;
数据设计:
包括数据库、数据文件和全局数据结构的定义。
2.详细设计
详细设计的任务就是在概要设计的基础上,具体实现各部分的细节,直至系统的所有的内容都有足够详细的过程描述,使得编码的任务就是将详细设计的内容翻译成代码就可以了。详细设计就是完成过程设计。
3.软件设计的原则
a.分而治之
分而治之用于解决大型、复杂度高的问题时所采用的策略。把大问题划分成若干个小问题,把对一个大问题的求解转换为对若干个小问题的解答,这样极大地降低了问题的复杂度;
b.重用设计模式
重用是指同一事物不做修改或者稍作改动就能多次使用的机制,重用的内容是软件的设计模式;
c.可跟踪性
软甲设计的任务之一就是确定软件各部分间的关系。设计系统结构,就是要确定系统各部分、个模块间的相互调用和控制关系,以便在需要修改模块的时,能掌握与修改模块有关的部分,并正确追溯问题的根源;
d.灵活性
设计的灵活性是指设计具有易修改性。会发生修改是因为:一是用户需求发生改变,二是设计存在缺陷,三是设计需要进化,四是设计利用重用。软件设计的灵活性主要是通过系统描述问题的抽象来实现。
e.一致性
一致性在软件设计方法和过程总都有体现。界面试图的一致性保证了用户体验和对系统的忠诚度。用统一的规则和约束规范模块接口定义,确保编码阶段对接口和数据结构的统一操作,减少数据理解的歧义。
aaa