第四章 软件设计
一、概述
1.《软件设计说明书》 SDS
2.软件设计的两个阶段:总体设计(概要设计,结构设计)
详细设计(过程设计)
3.好的软件设计的基本准则——模块化
模块化采用分治策略
模块化 特征:抽象-à只考虑问题有关,不考虑无关
信息隐藏-à独立的模块间仅交换为完成系统而必须交换的信息
信息隐藏目的是提高模块的独立性,减少修改和维护时的影响面
二、设计描述与建模
1.类图
类之间的关系: 关联
聚集(聚合,类与类之间的关系是整体与部分之间的关系)(共享聚集、组合聚集)
泛化(继承):普通泛化
受限泛化:多重继承
不相交继承
完全继承
不完全继承
2.状态图:一个类对象所可能经历的所有历程的模型图
3.包图:UML为复杂系统建模所提供的模型元素组织与管理的通用机制
(1)包与它所含的模型元素之间的关系是一种组合关系
(2)不同包中的元素可以同名,但同一包中的模型元素不能同名
(3)包可以嵌套,但不能套太多,一般2-3层
包的依赖关系没有传递性
4.构件图 :用来描述代码构建的物理结构及各构件之间的物理关系
5.部署图:描述位于节点实例上的运行构件实例的安排
三、体系结构设计(软件设计的第一步)
根据软件设计开发经验总结而来,且命名的针对某一类型的软件具有通用性和推广价值的设计方案
UML “4+1”视图:
(1) 逻辑架构:整体/模块化结构 MVC
分层架构 三层架构
(2) 进程架构
(3) 开发架构
(4) 物理架构(系统架构)
1) 单机模式
2) C/S架构
3) 多层C/S架构
4) B/S架构
5) C/S与B/S混架
6) 基于组件的软件体系架构
四、人机交互设计
五、业务逻辑层设计
1、领域模型:对真实世界中概念类的表示,而不是软件对象的表示
(1)采用概念类目录列表和从需求中采用名词识别法将所有的备选概念类列出
(2)在那些需要将关系信息保存的地方添加关联
(3)依据信息绣球添加必要的属性
多重性:多重性的指标是在特定的时刻有效关联的实例数量
属性:是对象的逻辑数据值
任何属性都不表示外键
2.系统顺序图:展示了对一个特定的用例外部参与者产生的事件他们的顺序以及系统内的事件
3.设计模式:是一套被反复使用,多数人知晓的,经过分类编目的,系统设计经验的总结。
六、数据存储设计
1.文件 & 数据库
(1)文件
优缺点:1)安装部署不需要其他软件支持
2)易于作为网络数据的交换格式
3)不利于数据的并发访问与共享
(2)数据库
优缺点:1)实现数据共享 2)减少数据冗余度
3)数据的独立性 4)数据实现集中控制
5)故障恢复,备份恢复机制
6)数据安全性,一致性,可靠性
七、软件设计说明书 SDS
八、设计验证
第五章 软件实现
一、 编码风格
1. 源程序文档化
符号名的命名
程序注释:序言,功能等。
标准的书写格式:分层缩进
为了提高程序的可维护性,源代码也需要实现文档化
2. 数据说明
3. 语句结构:结构化,库函数,可读性
4. 输入/输出:友好,方便使用
二、测试驱动开发(TDD)
优点:1)保证编写单元测试
2)使程序员获得满足感
3)有助于澄清接口和行为的细节
4)可证明,可再现,自动的验证
5)改变事物的信心
三、代码管理 又称版本控制
对开发过程中产生的源代码与文档进行管理,保证在同一系统中不同版本代码一致
VSS 版本控制软件
管理内容:可管理源程序,文档,影像,二进制文件等。
第六章 软件测试
一、 测试的基本概念
测试的目的是发现程序中的错误,是为了证明程序有错,而不是证明程序无错
1. 测试阶段的工作步骤
(1) 单元测试:检验每个模块能否单独工作
(2) 集成测试:检验概要设计中模块接口设计问题
(3) 确认测试:以需求规格说明书为检查尺度·
(4) 系统测试:综合检验
(5) 平行运行:新旧两套系统并行运行,对照检验
---à 测试可视为分析、设计、编码三个阶段的最终复审,以保证软件质量
2. 软件测试的对象
软件测试不等于程序测试,软件测试应贯穿于定义与开发的整个期间
3. 测试的基本准则
(1) 开发和测试队伍分别建立
(2) 测试用例(测试用的一组输入数据、环境平台和运行条件)应由输入数据和预期的输出结果两部分组成
(3) 兼顾合理的输入和不合理的输入数据
(4) 应检查程序是否做了不该做的事
(5) 程序修改后要回归调试
(6) 应长期保留测试用例,直到系统废弃
4. 软件错误的分类
功能错、软件结构错、数据错、编码错、软件集成错、测试定义与测试执行错误
5. 软件测试信息流
测试过程需要三类输入:软件配置:需求规格说明书,
软件设计说明书,
被测试程序
测试配置:测试计划
测试用例(测试数据)
测试驱动程序
测试工具、
6. 测试的方法与技术
软件测试的策略和方法:静态测试方法:人工测试方法
计算机辅助静态 分析方法
动态测试方法:白盒测试方法
黑盒测试方法
穷举测试方法
动态测试方法:(1)选取定义域有效值,或定义域外无效值
(2)对已选取值决定预期的结果
(3)用选取值执行程序
(4)执行结果,与(2)相比,不吻合则程序有错
二、测试方法
1)黑盒测试
2)白盒测试
3. 测试步骤
单元测试、集成测试、确认测试、系统测试
4、单元测试重点:
模块接口、局部数据结构、重要的执行通路、出错处理通路、边界条件
5、集成测试
自顶向下集成
自顶向下集成是一种递增的装配软件结构的方法,这种应用方法非常广泛。它需要存根程序,不需要驱动程序。
自底向上集成
自底向上集成是从软件结构最底层模块开始进行组装和测试,它与自顶向下结合方法相反,需要驱动程序,但是不需要存根程序。
6、确认测试
确认测试的两种可能的结果:
功能和性能与用户要求一致,软件是可以接受的
功能和性能与用户要求有差距
8、白盒测试
逻辑覆盖、语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖
点覆盖、边覆盖、路径覆盖
9、 黑盒测试技术
等价划分、边界值分析、错误推断
10、调试
调试过程
调试途径:
蛮干法、回溯法、原因排除法