【软件设计基础 –
软件工程教程】上一章软件工程教程请查看:软件需求
软件设计是将用户的需求转化为某种合适的形式,帮助程序员进行软件编码和实现的过程。
为了评估用户需求,创建了SRS(软件需求规范)文档,而为了编码和实现,则需要软件术语中更具体和详细的需求。该过程的输出可以直接用于编程语言的实现。
软件设计是SDLC(软件设计生命周期)的第一步,它将注意力从问题域转移到解决方案域,它试图指定如何满足SRS中提到的需求。
软件设计水平软件设计产生三个层次的结果:
- 体系结构设计——体系结构设计是系统的最高抽象版本。它将软件标识为一个具有许多相互交互的组件的系统。在这个层次上,设计者得到了被提议的解决方案域的思想。
- 高级设计——高级设计将架构设计的“单一实体-多个组件”概念分解为抽象较少的子系统和模块视图,并描述它们之间的交互。高级设计关注的是如何以模块的形式实现系统及其所有组件。它识别各子系统的模块结构及其相互之间的关系和相互作用。
- 详细设计——详细设计处理前两个设计中被视为系统及其子系统的实现部分。它更详细地介绍了模块及其实现。它定义了每个模块的逻辑结构及其与其他模块通信的接口。
模块化设计无意中遵循了“分而治之”解决问题策略的规则,这是因为软件的模块化设计附带了许多其他好处。
模块化的优势:
- 较小的组件更容易维护
- 程序可以根据功能方面进行划分
- 可以在程序中引入所需的抽象级别
- 具有高内聚的组件可以再次重用
- 可以实现并发执行
- 安全方面的期望
在软件设计中,并发性是通过将软件分割成多个独立的执行单元(如模块)并并行执行来实现的。换句话说,并发性为软件提供了并行执行多个部分代码的能力。
对于程序员和设计人员来说,识别这些可以并行执行的模块是很有必要的。
例子
字处理器中的拼写检查功能是一个软件模块,它与字处理器并行运行。
耦合和内聚当一个软件程序被模块化时,它的任务根据一些特征被分成几个模块。我们知道,模块是为了完成某些任务而组合在一起的指令集。尽管它们被认为是一个单独的实体,但它们可以相互引用以共同工作。模块的设计质量和模块之间的交互可以通过一些度量来度量。这些措施称为耦合和内聚。
内聚内聚是定义模块元素内部可靠性程度的度量。凝聚力越大,程序设计就越好。
衔接有七种类型,即-
- 同时发生的内聚——它是计划外的和随机的内聚,这可能是为了模块化而将程序分解成更小的模块的结果。因为它是计划外的,它可能会使程序员感到困惑,并且通常不被接受。
- 逻辑内聚——将逻辑分类的元素放在一个模块中,称为逻辑内聚。
- 时间内聚——当模块的元素被组织起来,并在类似的时间点进行处理时,就称为时间内聚。
- 过程内聚——当模块的元素被组合在一起,为了执行一个任务而依次执行时,它被称为过程内聚。
- 通信内聚——当模块的元素被分组在一起,按顺序执行并处理相同的数据(信息)时,就称为通信内聚。
- 顺序内聚——当模块的元素被分组,因为一个元素的输出作为另一个元素的输入等等,它被称为顺序内聚。
- 功能衔接——它被认为是最高程度的衔接,人们对它的期望很高。功能内聚中的模块元素被分组,因为它们都对一个定义良好的函数有贡献。它也可以重复使用。
有五层耦合,即-
- 内容耦合——当一个模块可以直接访问、修改或引用另一个模块的内容时,就称为内容级耦合。
- 公共耦合——当多个模块对某些全局数据具有读写访问权限时,就称为公共耦合或全局耦合。
- 控制耦合——如果其中一个模块决定了另一个模块的功能或改变了它的执行流程,那么两个模块就称为控制耦合模块。
- 戳记耦合——当多个模块共享公共数据结构并在其中的不同部分工作时,就称为戳记耦合。
- 数据耦合——数据耦合是指两个模块通过传递数据(作为参数)的方式进行交互。如果一个模块将数据结构作为参数传递,那么接收模块应该使用它的所有组件。
设计验证软件设计过程的输出是设计文档、伪代码、详细的逻辑图、过程图,以及所有功能或非功能需求的详细描述。
下一阶段,即软件的实施,取决于上述所有产出。
在进入下一阶段之前,有必要对输出进行验证。任何错误检测得越早,就越好,否则在产品测试之前可能无法检测到。如果设计阶段的输出是正式的符号形式,那么应该使用它们相关的验证工具,否则可以使用一个完整的设计评审来验证和确认。
通过结构化的验证方法,审稿人可以检测到由于忽略某些条件而可能导致的缺陷。好的设计评审对于好的软件设计、准确性和质量是很重要的。
推荐阅读
- 软件分析和设计工具 – 软件工程教程
- 软件需求 – 软件工程教程
- 软件项目管理 – 软件工程教程
- 软件开发生命周期 – 软件工程教程
- 软件工程概述 – 软件工程教程
- C++实现Rabin-Karp模式搜索算法及其原理解析
- PHP IntlChar charDirection()函数用法介绍
- C++中的栈展开介绍和示例解析
- JavaScript样式指南和编码约定详细指南