一、软件生存周期由软件定义、软件开发和软件维护三个时期组成,每个时期又进一步划分成若干个阶段:
1.软件定义时期通常进一步划分成三个阶段,即:
问题定义:“要解决的问题是什么?”提出关于问题性质、工程目标和规模的书面报告。
参与人员:用户、项目负责人、系统分析员
产生文档:可合并项目计划书中
可行性研究:“对于上一个阶段所确定的问题有行得通的解决办法吗?”
探索这个问题是否值得去解,是否有可行的解决办法。
参与人员:用户、项目负责人、系统分析员
产生文档:可行性分析报告、项目计划书
(可行性分析的任务是从技术上、经济上、使用上、法律上分析需解决的问题是否存在可行的解。)
需求分析:“为了解决这个问题,目标系统必须做什么”得出经过用户确认的系统逻辑模型。通常用数据流图、数 据字典和简要的算法描述表示系统的逻辑模型。
参与人员:用户、项目负责人、系统分析员
产生文档:需求规格说明书
2.开发时期具体设计和实现,由四个阶段组成:总体设计,详细设计,编码和 单元测试,综合测试。
总体设计:(概要设计)“概括地说,应该如何解决这个问题?”推荐最佳方案(系统流程图或其他工具)、设计软件 的结构(层次图或结构图)。
参与人员:系统分析员、高级程序员
产生文档:设计说明书、数据说明书、模块开发卷宗
详细设计:“应该怎样具体地实现这个系统呢?”设计出程序的详细规格说明。通常用HIPO图(层次图加输入/处 理/输出图)或PDL语言(过程设计语言)描述详细设计的结果。
参与人员:高级程序员、程序员
产生文档:设计说明书、数据说明书、模块开发卷宗
编码:写出正确的容易理解、容易维护的程序模块(适当的高级程序设计语言)。
参与人员:高级程序员、程序员
产生文档:程序清单
综合测试和单元测试:通过各种类型的测试(及相应的调试)发现软件中的错误,并加以纠正使软件达到预定的要 求 。
参与人员:高级程序员或系统分析员(另一部门或单位)
产生文档:软件测试计划、软件测试用例说明,软件测试报告
3.维护时期:使软件适应外界环境的变化、实现功能的扩充和质量的改善而修改软件是使软件持久地满足用户的需要。
参与人员:维护人员
产生文档:维护计划、维护报告
软件开发模型:瀑布模型,演化模型,螺旋模型,喷泉模型。
二、结构化分析方法:
1.数据模型(理解并描述问题的信息域)
实体-联系图:数据对象(实体)矩形、
属性 椭圆形、
联系(一对一、一对多、多对多)直线。
2.功能模型(定义软件应完成的功能)
数据流图:数据的原点、终点 方形
变换数据的处理 圆
数据存储 =
数据流 ——>
(数据字典:关于数据信息的集合,对数据流图中包含的所有元素的定义)
3.行为模型(描述作为外部事件结果的软件行为)
状态转换图(状态图):状态、事件。
4.对描述信息、功能和行为的模型进行分解,用层次的方式展示细节。
其他图形工具:层次方框图,Warnier图,IPO图
三、模块独立(模块化、抽象、信息隐蔽和局部化概念的直接结果)
内聚:一个模块内的各个元素彼此结合的紧密程度。
耦合:一个软件结构内不同的模块之间互联的程度。
按内聚度从低到高依次有7种内聚种类。
偶然内聚(模块完成的多个任务,任务之间的关系松散)
逻辑内聚(模块完成逻辑相关的一组任务)
瞬时内聚(模块的所有任务必须在同一时间间隔内执行)
过程内聚(模块的处理元素相关而且按照特定的次序执行)
通信内聚(模块的所有元素集中在一个数据结构区域上)
顺序内聚(模块的处理元素相关,必须顺序执行)
功能内聚(模块的所有处理元素属于一个整体,完成单一的功能,各个部分协调工作,而且不可缺少)
耦合度越高则模块的独立性越差。按耦合度从低到高依次有7种耦合方式。
非直接耦合(独立运行)
数据耦合(用参数表传递简单数据)
标记耦合(传递数据结构或者一部分)
控制耦合(传递的信息包括控制模块的信息)
外部耦合(模块与软件之外的环境有关)
公共耦合(多个模块引用同一全局的数据区)
内容耦合(访问内部数据,代码重叠或者多个入口)
四、面向数据流的设计方法
变换流:外部表示——信息流 -输入流、输出流
内部表示——变换流
事务流:事务,事务中心,活动通路。
五、过程设计的工具
程序流程图、盒图(N-S图)、PAD图、判定图、判定表
面向数据结构的设计方法
Jackson图、改进的Jackson图
六、软件测试
软件测试是自底向上,逐步集成的过程,低一级测试为上一级测试准备条件。
白盒测试(结构测试)是根据程序的内部逻辑来设计测试用例,常用的技术是逻辑覆盖,即考察用例测试数据运行被测程序时对程序逻辑的覆盖程度。主要的覆盖标准有6种:
I. 语句覆盖
指选择足够的测试用例,使被测语句的每个语句至少执行一次。
II.判定覆盖
指选择足够的测试用例,使每个判定的所有可能结果至少出现一次。
III.条件覆盖
指选择足够的测试用例,使判定中的每个条件的所有可能结果至少出现一次。
IV. 判定/条件覆盖
指选择足够的测试用例,使判定中的每个条件的所有可能结果至少出现一次,并且每个判定中条件结果的所有可能组合也至少出现一次。
V. 条件组合覆盖
指选择足够的测试用例,使每个判定中条件结果的所有可能组合至少出现一次。
VI. 路径覆盖
指选择足够的测试用例,使流程图中的每条路径至少经过一次。
黑盒测试(功能测试)时根据规格说明所规定的功能来设计测试用例,它不考虑程序的内部结构和处理过程。常用的黑盒测试技术有:
等价类划分
边值划分
错误猜测
软件测试的主要步骤有单元测试、集成测试和确认测试。
单元测试:主要用来发现编码和详细设计中产生的错误,一般在编码阶段,采用白盒测试。
集成测试(也称组装测试):主要用来发现设计阶段产生的错误,是对各模块组装而成的程序进行测试,主要检查模块间的接口和通信,采用 黑盒测试。集成测试按集成方式又可分成非渐增式集成和渐增式集成,而渐增式集成又可分成自顶向下集成和自底向上集成。
确认测试:检查软件的功能、性能和其他特征是否与用户需求一致,它以需求规格说明书作测试为依据,采用黑盒测试.
系统测试:将已经确认的软件、计算机硬件、外设、网络的其他因素结合在一起进行的测试。
(Alpha测试:是在开发者的现场由客户来实施的,从用户角度和环境下进行;
Beta测试: 是在开发者不在现场下测试,由软件最终用户实施;)
七、软件过程能力成熟度模型CMM
初始级、可重复级、已定义级、可管理级和优化级
CMM的目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。