软件设计是将用户需求转化为某种合适形式的过程,有助于程序员进行软件编码和实现。
为评估用户需求,创建了 SRS(软件需求规范)文档,而对于编码和实施,需要在软件方面有更具体和详细地需求。这个过程的输出可以直接用于编程语言的实现。
软件设计是 SDLC(软件设计生命周期)的第一步,它将注意力从问题域转移到解决方案域。它视图指定如何满足 SRS 中提到的要求。
软件设计产生三个层面的结果:
模块化是一种将软件系统划分为多个离散且独立的模块的技术,这些模块有望独立执行任务。这些模块可以作为整个软件的基本结构。设计人员倾向于设计模块,以便它们可以单独和独立地执行或者编译。
模块化设计无意中遵循了“分而治之”的问题解决策略的规则,这是因为软件的模块化设计还有许多其他好处。
模块化的优势:
回到过去,所有软件都应该按顺序执行。通过顺序执行,我们的意思是编码指令将一个接一个地执行,这意味着在任何给定时间只有一部分程序被激活。比如说,一个软件有多个模块,那么在任何时候执行时只能发现所有模块中的一个是活动的。
在软件设计中,并发是通过将软件拆分为多个独立地执行单元(如模块)并并行执行来实现的。换句话说,并发为软件提供了并行执行多个代码部分的能力。
程序员和设计师有必要识别那些可以并行执行的模块。
文字处理器中的拼写检查功能是一个软件模块,它与文字处理器本身一起运行。
当一个软件程序被模块化时,它的任务根据一些特性被分成几个模块。众所周知,模块是为了完成某些任务而组合在一起的指令集。不过,它们被视为单个实体,但可以相互引用以协同工作。有一些方法可以用衡量模块设计的质量以及它们之间的交互。这些措施称为耦合和内聚。
内聚力是一种度量,用于定义模块元素内的内部依赖性程度。内距离越大,程序设计就越好。
有七种类型的内聚:
耦合是一种定义程序模块之间相互依赖程度的度量。它告诉模块在什么级别相互干扰和交互。耦合度越低,程序越好。
有五个级别的耦合:
理想情况下,没有耦合被认为是最好的。
软件设计过程的输出是设计文档、伪代码、详细地逻辑图、流程图以及所有功能或非功能需求的详细描述。
下一阶段,即软件的实施,取决于上述所有输出。
在进入下一阶段之前,有必要验证输出。任何错误发现越早越好,否则在产品测试之前可能不会被发现。如果设计阶段的输出采用正式的符号形式,则应使用其相关的验证工具,否则可使用彻底的设计审查进行验证和确认。
通过结构化的验证方法,审查者可以发现由于忽略某些条件而可能导致的缺陷。良好的设计审查对于良好的软件设计、准确性和质量非常重要。