用户需求
用户需求采用例如采用用例(Use Case)文档或场景(Scenario)等方式说明。
功能需求定义了开发者应提供的软件功能或服务,但不涉及这些功能或服务的实现。
非功能需求则是对功能需求的补充,包括了对系统的各种限制和用户对系统的质量要求。
需求分析常用的分析方法
- 基于瀑布模型的结构化方法,结构化分析方法的分析策略是:自顶向下,逐层分解
- 基于需求动态定义就的原型化方法
- 基于对象的面向对象的方法:UML是软件开发中的一个重要工具
- 基于数据的数据流开发方法
- 面向数据结构设计Jackson方法给出三种结构是. 顺序结构,选择结构,重复结构
- 面向对象的需求分析
1 Booch方法
2 Rumbaugh方法
3 Coad和Yourdon方法
4 Jacobson方法
5 Wirfs―Brock方法
6 UML的OOA方法(现在主流技术基本都使用UML来建模,其他很少使用)
软件设计
传统的结构化方法将软件设计划分为体系结构设计、数据设计、接口设计及过程设计四部分;
结构化分析特点:自顶向下,逐步求精
面向对象方法则将软件设计划分为体系结构设计、类设计∕数据设计、接口设计、构件级设计四部分。
创建良好设计的原则
设计应遵循抽象化的原则,包含数据抽象和过程抽象
设计应当遵循模块化的原则。
设计应遵循信息隐蔽的原则。
模块独立性
高内聚,低耦合
内聚性
内聚是一个模块内部各个元素彼此结合的紧密程度的度量。
(1) 功能内聚
一个模块中各个部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。这种模块就是功能内聚模块。功能内聚模块的模块独立性最强。
(2) 层内聚
相关服务放在一起,并有严格的层次结构,高层服务可访问低层服务,反之不可。如分层结构。
(3) 通信内聚
访问或操作同一数据的过程放在一个类中,这些过程可以互相通信。如某个类设计。
(4) 顺序内聚
存在一系列过程,其中一个过程向另一个过程提供输入,这些过程放在一起,形成顺序内聚。如面向对象系统中的消息序列。
(5) 过程内聚
几个一次调用的操作放在一个模块中,它们是相关的且必须以特定次序执行,则称这个模块为过程内聚模块。但在这种模块内,一个操作的输出不一定是下一个操作的输入。如调用结构。
(6) 时间内聚
程序执行过程中同一阶段内完成的操作放在一起,达到时间内聚。
(7) 实用程序内聚
逻辑上不能纳入其他内聚类型的相关实用程序放在一起,形成实用程序内聚。如可复用的过程或类。
耦合性
耦合是模块间互相连接的紧密程度的度量,它取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。
模块之间的耦合性越高,其模块独立性就越弱。模块的内聚性越高,它与其他模块之间的耦合性就会降低,而模块独立性就越强。
(1) 内容耦合
如果发生下列情形,模块间就是内容耦合: 一个模块直接访问另一个模块的内部数据;
(2) 公共耦合
若一组模块都访问同一个公共数据环境,则它们之间的耦合就是公共耦合。公共数据环境可以是全局变量、全局数据结构、共享的通信区、内存的公共覆盖区等。
(3) 控制耦合
一个过程通过标志、开关或命令显式地控制另一个过程的动作,就产生控制耦合。
(4) 标记耦合
如果一组模块通过参数表传递结构或对象(注意,不是简单变量或结构中的某一分量),就是标记耦合。
(5) 数据耦合
如果模块之间的访问是通过数据参数(不是控制参数、结构或对象参数、公共数据结构)来交换输入、输出信息的,则称这种耦合为数据耦合。
(6) 例程调用耦合
一个程序(或对象的操作)调用另一个程序(或另一个对象的操作),就产生例程调用耦合。
(7) 类型使用耦合
类将实例变量或本地变量声明为另一个类的实例,就产生类型(嵌套)耦合。
(8) 包含/引入耦合
一个构件引入(import)一个包时就产生引入耦合,一个构件包含(include)另一个构件时,就产生包含耦合。
(9) 外部耦合
模块对外部系统,如操作系统、共享库或硬件有依赖关系时就产生外部耦合。可通过信息隐蔽减少这种依赖关系。