总体设计阶段的软件设计模型:软件体系结构,软件接口,数据模型
体系结构设计:体系结构设计称为模块设计,定义软件模块及其之间关系,设计依据为结构化需求分析阶段的数据流图
接口设计:接口设计包括外部接口和内部接口设计,外部接口描述用户界面,软硬件设备以及其他软件系统的接口,其设计依据为结构化需求分析阶段的顶层数据流内部接口为软件各模块之间的接口,其设计依据为结构化需求分析阶段的数据流图
数据模型设计:主要是根据结构化需求分析阶段所建立的E-R图和数据字典来确定涉及的文件系统的结构及数据库的表结构
过程设计:过程设计的主要工作是确定软件各个模块内的算法及内部数据结构,设计依据是结构化需求分析阶段的数据流图,状态转换图和数据字典
结构化设计原则
模块化:模块化是大型复杂的问题分解为许多容易解决的小问题
高内聚,低耦合
抽象
信息隐藏
一致性:模块之间使用一致性的术语和符号
耦合性由低到高,独立性由高到底
非直接耦合:两模块没有直接关系,联系完全通过主模块的控制和调用
数据耦合:一个模块访问另一个模块时,通过简单数据参数来交换输入,输出信息
标记耦合:一组模块通过参数表传递记录信息,记录是某一数据结构不是简单变量
控制耦合:一个模块通过传送开关,标志,名字等控制参数
外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构
公共耦合:一组模块都访问同一个公共数据环境
内容耦合:一个模块直接访问另一个模块的内部数据
内聚性和独立性由高到底
功能内聚:一个模块中各个部分都是完成某一具体功能必不可少的组成部分
信息内聚:一个模块完成多个功能,各个功能都在同一数结构上操作
通信内聚:模块内各功能部分使用相同的输入数据,或产生相同的输出数据
过程内聚:把大流程图中的某一部分划出组成模块
时间内聚:多个功能在同一时间段内执行
逻辑内聚:把几种相关的功能组合在一起,每次被调用时,由传送给模块的参数确定该模块应该执行哪一种功能
巧合内聚:当几个模块内正好有一段代码是相同的,将他们抽取出来
结构化设计的步骤
设计软件的体系结构图
设计软件的接口
设计软件的数据模型
软件的详细设计
编写结构化设计说明书
软件测试
根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现程序错误的过程
软件测试原则
应当把尽早地和不断地进行软件测试,作为软件开发者的座右铭
测试用例应当测试输入数据和与之对应的预期输出结果这两部分组成
应由第三方人员从事测试工作
在设计测试用例时,应当包括合理的输入条件和不合理的输入条件
注意测试中的错误群集现象
严格执行测试计划,排除测试的随意性
妥善保存测试计划,测试用例,出错统计和分析报告
单元测试:指对软件中的最小可测试单元进行检查和验证
集成测试:是把软件单元按照软件概要设计规格说明组装子系统或系统,测试子系统工作是否达到或实现相应技术指标和要求,测试模块之间的接口,即模块间通信是否正常
系统测试:是将经过集成测试的软件作为计算机系统的一部分,与系统中其他部分组合起来,在实际运行环境下进行一系列严格有效的测试,以发现软件潜在的问题
验收测试:是针对用户需求,业务流程进行的正式的测试,以确定系统是否满足标准,由用户或其他授权机构决定是否接受系统
黑盒测试
等价类划分法:解决如何选择适当的子集,使其尽可能多发现错误,划分有两种情况为有效等价类和无效等价类
边界值分析法:大量的错误往往发生在输入或输出范围的边界上
白盒测试
静态白盒测试
代码检查,代码审查,阅读文档和源代码,以人工输入测试数据,沿着逻辑走查运行以便跟踪走查运行的进程来发现程序的错误
动态白盒测试
根据程序的内部逻辑来设计测试用例,对程序模块的所有独立的执行路径至少执行一次
语句覆盖:是每一个执行语句至少执行一次
判定覆盖:使得程序的每个判断取真分支和取假分支至少经历一次
条件覆盖:使得判断中每个条件的所有可能至少执行一次
判定-条件覆盖:使得判断中每个条件的所有可能都执行一次,同时每个判断本身的所有可能判断结果至少执行一次
条件组合覆盖
路径覆盖:覆盖程序中所有可能的路径
集成测试
计划阶段,设计阶段,实现阶段,执行阶段
计划阶段:确定被测试对象和测试范围,评估集成测试被测试对象的数量及难度,确定好角色分工,标识出测试各阶段的时间,任务,约束等条件
设计阶段:被测对象结构分析,集成测试模块分析,接口分析,策略分析,工具分析
实现阶段:集成测试用例设计
执行阶段:执行集成测试用例
系统测试
将已经集成好的软件系统,与计算机硬件,外设,某些支持软件,数据和人员等其他系统元素结合在一起,在实际运行的环境下,对计算机系统进行一系列的组装测试和确认测试
验收测试
相关用户和独立测试人员根据测试计划和结果对系统进行测试和接收
常用策略:正式验收测试,Alpha测试,Beta测试
Alpha测试:是由某用户在开发环境下进行,或公司内部用户在模拟实际操作环境下进行的,开发者在现场
beta测试:是由软件的多个用户在一个或多个用户的实际使用环境下进行测试,开发者通常不在测试现场,由用户记下遇到的所有问题