软考小记-软件工程
模块的控制范围包括模块本身及其所有的从属模块。模块的作用范围是指模块一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围.,原则上一个模块的作用范围应该在其控制范围之内,若没有,则可以将判定所在模块合并到父模块中,使判定处于较高层次。
在软件设计中,人们总结了一些启发式原则,根据这些原则进行设计,可以设计出较高质量的软件系统。其中,模块的扇入扇出适中,模块大小适中以及完善模块功能都可以改进设计质量。而将相似功能的模块合并可能会降低模块内聚和提高模块之间的耦合,因此并不能改进设计质量。
软件需求
软件需求包括功能需求、非功能需求和设计约束三个方面的内容。
- 功能需求是所开发的软件必须具备什么样的功能
- 非功能需求是指产品必须具备的属性或品质,如可靠性、性能、响应时间和扩展性等等
- 设计约束通常对解决方案的一些约束说明
“软件产品必须能够在3秒内对用户请求作出响应”主要表述软件的响应时间,属于非功能需求。
软件设计模式
单例Singleton:保证一个类只产生唯一的一个实例。
桥接Bridge:抽象设计和具体实现分离,都可以独立变化。
状态State:一个对象内部状态改变时,调用另一个类的方法改变其行为,使得这个对象看起来修改了其他的类。
适配器Adapter:讲一个类的接口转换为另一个接口,解决接口的不兼容问题。既是类结构模式,又是对象结构模式。
外观Facade:单个对象表示整个子系统,一个复杂子系统提供一个简单接口。
生成器Builder:模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
观察者Observer:一个对象在其状态改变时,通知依赖它的所有对象。
代理Proxy:提供与对象相同的接口来控制对这个对象的访问。
中介者Mediator:用一个中介对象封装一系列的对象交互。
数据流图
数据流图是核心的分析模型,用来描述数据流从输入到输出的变换流程。建立数据流图的过程其实就是理解需求的过程,因此建模时应遵循自顶向下、从抽象到具体的原则,构建一组分层的数据流图。
软件结构
其中,软件结构包括功能结构、功能的通用性、模块的层次性、模块结构和处理过程的结构,
而模块结构包括控制流结构、数据流结构、模块结构与功能结构之间的对应关系。
模块化设计
模块控制域:这个模块本身以及所有直接或间接从属于它的模块的集合。
模块作用域:指受该模块内一个判定所影响的所有模块的集合。
模块的作用域应该在控制域范围之内。
结构化开发方法
结构化开发方法由结构化分析、结构化设计和结构化程序设计构成,是一种面向数据流的开发方法。结构化方法总的指导思想是自顶向下、逐层分解,基本原则是功能的分解与抽象。
它是软件工程中最早出现的开发方法,特别适合于数据处理领域的问题,但是不适合解决大规模的、特别复杂的项目,而且难以适应需求的变化。
结构化分析
结构化分析的输出包括数据流图、数据字典和加工逻辑。确定软件体系结构是在软件设计阶段进行的。
其中数据字典用来描述DFD中的每个数据流、文件以及组成数据流或文件的数据项,包括4类条目:数据流、数据项、数据存储和基本加工。
- 根据加工规格说明和控制规格说明进行过程设计;
- 根据数据字典和实体关系图进行数据设计;
- 根据数据流图进行接口设计;
- 根据数据流图进行体系结构设计。
结构化设计
结构化设计的输出是结构图
结构化设计主要包括:
- 体系结构设计:定义软件的主要结构元素及其关系。
- 数据设计:基于实体联系图确定软件涉及的文件系统的结构及数据库的表结构。
- 接口设计:描述用户界面,软件和其他硬件设备、其他软件系统及使用人员的外部接口,以及各种构件之间的内部接口。
- 过程设计:确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的表达形式来描述各种算法。
结构化开发
- 传入模块:取得数据或输入数据,经过某些处理,再将其传送给其他模块。
- 传出模块:输出数据,在输出 之前可能进行某些处理,数据可能被输出到系统的外部,或者会输出到其他模块进行进一步处理。
- 变换模块:从上级调用模块得到数据,进行特定的处理,转换成其他形式,在将加工结果返回给调用模块。
- 协调模块一般不对数据进行加工,主要是通过调用、协调和管理其他模块来完成特定的功能。
基于构件的软件开发
基于构件的软件开发,主要强调在构建软件系统时复用已有的软件“构件”,在检索到可以使用的构件后,需要针对新系统的需求对构件进行合格性检验、适应性修改,然后集成到新系统中。
模块独立性
本题考查软件设计基础知识。模块独立性是创建良好设计的一个重要原则,一般采用模块间的耦合和模块的内聚两个准则来进行度量。耦合程度越低,内聚程度越高,则模块的独立性越好。
高内聚
模块的内聚是一个模块内部各个元素彼此结合的紧密程度的度量。
- 巧合内聚:指一个模块内的各处理元素之间没有任何联系。
- 逻辑内聚:指模块内执行考干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
- 时间内聚:把需要同时执行的动作组合在一起形成的模块。
- 过程内聚:指一个模块完成多个任务,这些任务必须按指定的过程执行。
- 偶然内聚:指一个模块内的各个处理元素之间没有任何联系。
- 通信内聚:指模块内所有处理元素都在同一个数据结构上操作,或者指各处理使用相同的输入数据或者产生相同的输出数据。
- 功能内聚:是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。
低耦合
存在多种模块之间的耦合类型,从低到高依次为非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合和内容耦合。
软件设计阶段
从工程管理的角度,可以将软件设计分为两个阶段:概要设计阶段和详细设计阶段。
- 结构化设计方法中,概要设计阶段进行软件体系结构的设计、数据设计和接口设计;详细设计阶段进行数据结构和算法的设计。
- 面向对象设计方法中,概要设计阶段进行体系结构设计、初步的类设计/数据设计、结构设计;详细设计阶段进行构件设计。
结构化设计和面向对象设计是两种不同的设计方法,结构化设计根据系统的数据流图进行设计,模块体现为函数、过程及子程序;面向对象设计基于面向对象的基本概念进行,模块体现为类、对象和构件等。