软件工程(五)软件分析和软件设计

软件分析

用户和开发者都会关心软件的需求,都希望通过需求分析弄清楚 “需要软件做什么”,但他们理解问题的角度却各不相同。一般来说,用户只注重软件的外在表现,即软件需求。开发者更加关注软件的内部逻辑,称为软件分析。前者从软件使用者角度出发,而后者则是从软件开发者的角度出发

这里首先介绍以下软件分析这一过程,具体采用什么方式实现这一过程,在之后的文章会给出答案


软件设计

软件设计的任务是将分析阶段建立的分析模型转变为软件设计模型。这一过程需要细化解决方案的可视化设计模型,确保设计模型最终能平滑过渡到程序代码。分析模型强调软件应该做什么,设计模型回答该怎么做的问题

特点

  1. 模块与构件

    模块是一个拥有明确输入、输出和特性的程序实体。如果模块的所有输入都是实现功能必不可少的,所有输出都有动作产生,即成为定义明确的模块。对象也是一种模块,由于对象自我封闭的特点,因而更容易在软件设计中被重复使用,这种可重复使用的软件组件称为软件构件

  2. 抽象与细化

    抽象是控制复杂性的基本策略之一。抽象是分层次的,在软件的抽象层次中,最高层抽象程度最高,若需要系统某部分细节,可移向较低层次的抽象
    软件设计其实就是在不同抽象级别考虑和处理问题的过程。首先在最高级抽象级别上,概括问题解的形式;然后不断具体化,降低抽象级别;最后在最低的抽象级别上给出实现问题的解,即源代码。在由高级抽象到低级抽象转换的过程中,要进行一系列过程抽象和数据抽象,这就是细化
    过程抽象是把完成一个特定功能的动作序列抽象为一个过程名和参数表,然后通过指定过程名和实际参数调用此过程;数据抽象把一个数据对象的定义抽象为一个数据类型名,用此类型名可定义多个具有相同性质的数据对象
    细化的实质就是分解。在逐步细化中,特别强调这种分解的 “逐步” 性质,即每一步分解仅较其前一步增加少量的细节

  3. 信息隐藏

    模块内部的数据和过程,对不需了解的数据和操作进行隐藏。只允许为了完成软件总体功能而必须在模块间交换的信息进行传递

  4. 软件复用

阶段

传统的设计任务通常分两个阶段完成。第一个阶段是概要设计,包括结构设计和接口设计,并编写概要设计文档;第二个阶段是详细设计,确定各个软件部件的数据结构和操作,产生描述各软件部件的详细设计文档。每个阶段完成的文档都必须经过复审

  1. 数据设计

    将分析阶段创建的信息模型转变为软件所需数据结构

  2. 体系结构设计

    定义软件主要组成部件之间的关系

  3. 接口设计

    描述软件内部、软件和接口系统之间以及软件与人之间如何通信

  4. 过程设计

    将软件体系结构的组成部件转变为对软件组件的过程性描述

模块化设计

模块化设计的目的是按照规定原则把大型软件划分为一个个较小的,相对独立但相互关联的模块。分解和模块独立性是实现模块设计的重要指导思想

  1. 分解

    将系统分解成它的组成部分,成为模块、对象或构件

  2. 模块独立性

    独立性可以从两个方面来度量,即模块本身的内聚和模块之间的耦合。前者指模块内部各个成分之间的联系,所以也称块内联系或模块强度;后者指一个模块与其他模块间的联系,所以又称块间联系。模块独立性越好,内聚越强,耦合越弱

    1. 内聚

      内聚是从功能角度对模块内部聚合能力的量度。按照从弱到强可分为七类

      低内聚包括左侧三类模块:偶然性模块、逻辑性模块和时间性模块。偶然性模块,块内各组成成分在功能上互不相关。逻辑性模块,由若干个逻辑功能相似的成分组成。时间性模块,这类模块所包含的成分,是由相同的执行时间而联结在一起的

      中内聚包括第四、第五类模块:过程性模块和通信性模块。当一个模块中包含的一组任务必须按照某一特定的次序执行时,就称为过程性模块。通信性模块,这类模块的标志是,模块内部的各个成分都使用同一种输入数据,或者产生同一个输出数据,它们靠公用数据而联系在一起

      高内聚模块包括最右端的两类:顺序性模块和功能性模块。顺序性模块,这类模块中的各个组成部分是顺序执行的,在通常情况下,上一个处理框的输出就是下一个处理框的输入;功能性模块,在这类模块中,所有的成分结合在一起,用于完成一个单一的功能

    2. 耦合

      耦合是对软件内部块间联系的度量。同样按照从弱到强可分为七类

      弱耦合包括左侧三种情况。如图所示,模块1与2为同级模块,相互之间没有信息传递,属于非直接耦合。模块3、4都是模块1的下属模块。模块1调用它们时,可通过参数表与它们交换数据。如果交换的都是简单变量,便构成数据耦合;如果交换的是数据结构,便构成特征耦合

      控制耦合是中等强度的耦合。此时在模块间传递的信息不是一般的数据,而是用过控制信号的开关值或标志量。因此,控制模块必须知道被控模块的内部逻辑,从而增强模块间的相互依赖

较强耦合外部耦合、公共耦合两类,若允许一组模块访问同一个全局变量,可称它们为外部耦合;若允许一组模块访问同一个全局性的数据结构,则称之为公共耦合

最强的一类耦合是内容耦合。如果一个模块可以直接调用另一模块中的数据,或者允许一个模块直接转移到另一个模块中去,就称它们间的耦合为内容耦合

发布了19 篇原创文章 · 获赞 7 · 访问量 5928

猜你喜欢

转载自blog.csdn.net/CSDN_handsome/article/details/103568564