仅供参考 ,不可转载
有任何问题可以留言给小编,谢谢!!!
第一章 绪论
-
每18个月芯片的性能和速度均提高一倍,每隔12年软件生产大约提高一倍。
-
软件:是能够完成预定功能和性能的可执行的计算机诚信度。包括使程序正常执行所需的数据,以及有关描述程序操作和使用的文档。即:软件 = 程序 + 文档
-
软件的特征:
软件的开发不同于硬件设计、不同于硬件制造、不同于硬件维修。 -
软件危机出现的原因:
软件维护费用的急剧上升,直接威胁计算机应用的扩大;
软件生产技术进步缓慢,是家居软件危机的重要原因。 -
软件工程学的范畴:
软件开发技术(软件开发方法学、软件工具、软件工程环境)、软件工程管理(软件管理学、软件经济学、度量学)。 -
软件工程:是指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发与维护软件,目的是为了实现按照预期的进度和经费完成软件生产计划,同时提高软件的生产率和可靠性。
-
软件的发展:大体经历了 程序、软件、软件产品 3个阶段。
-
工具 和 方法 是软件开发技术的2大支柱。
-
3种编程泛型:
过程式编程泛型、面向对象编程泛型、基于构件技术的编程泛型
差异:过程式编程泛型是着眼于程序的过程和基本控制结构,粒度最小。
面向对象编程泛型:着眼于程序对象,粒度较大
基于构件技术的编程泛型:着眼于整个领域的类对象,粒度最大 -
面向对象程序设计中,数据和操作被封装在一个对象中,对象之间则是通过消息相互联系。
-
构件:标准化/规格化的对象类。
-
常用变成力度的大小来比较3种编程泛型的差异。
粒度由小到大依次是:过程式编程范式、面向对象编程范式、基于构件的编程泛型。 -
软件工程的分化(3代):
传统软件工程:结构化分析-》结构化设计-》面向过程编码-》软件测试
面向对象软件工程:OO分析与对象抽取-》对象详细设计-》面向对象的编码与测试
基于构件的软件工程(以可复用构件和测试工具为后盾):
领域分析和测试计划定制-》领域设计-》建立可复用构件库-》按‘构件集成模型’查找与集成构件 -
软件工程的分化:
传统软件工程:结构化分析-》结构化设计-》面向过程编码-》软件测试
面向对象软件工程:OO分析与对象抽取-》对象详细设计-》面向对象的编码与测试
基于构件的软件工程(以可复用构件和测试工具为后盾):
领域分析和测试计划定制-》领域设计-》建立可复用构件库-》按‘构件集成模型’查找与集成构件 -
分析先于设计,设计先于编码,使程序(的结构)适合于问题(的结构)。
第二章 软件生存周期与软件过程 -
软件生存周期:计划、开发、运行3个时期。
需求分析-》软件分析-》软件设计-》编码测试-》软件测试-》运行维护 -
软件生存周期:计划、开发、运行3个时期。
需求分析-》软件分析-》软件设计-》编码测试-》软件测试-》运行维护
需求分析(用户视角):功能需求、性能需求、环境约束、外部接口描述。
软件分析(开发人员视角):建立与需求模型一致的,与实现无关的软件分析模型。
软件设计:总体设计/概要设计、详细设计(确定软件的数据结构和操作)。
编码测试:把设计文档翻译为源程序。单元测试通常与编码同时进行。
软件测试:是提高软件质量的重要手段
软件测试:单元测试、集成测试、系统测试。
运行维护:做好软件维护,使软件在整个生存周期内都能瞒住用户的需求,并延长其使用寿命。 -
单元测试通常与编码同时进行。
-
软件测试:单元测试、集成测试、系统测试。
-
Boehm软件生存周期的划分:系统需求、软件需求、概要设计、详细设计、编码纠错、测试和预运行、系统维护。
-
瀑布模型 特点:阶段间的顺序性和依赖性、推迟实现的观点、保证质量的观点。
-
瀑布模型存在的问题:只有在需求分析准确的前提下,才能得到预期的结果。
快速原型模型:原型系统只包括对未来系统的主要功能以及系统的重要接口。特点:快速开发工具、循环、低成本。种类:渐进型、抛弃型。 -
常见的演化模型(渐增式、迭代式):增量模型、螺旋模型。
-
增量模型:结合瀑布模型的顺序特征与快速原型法的迭代特征。增量:小而可用的软件
一般情况下,第一个增量是软件的核心部分。如(增量一:需求-设计-实现和集成-交付客户) -
螺旋模型(目前最常用):当项目按照顺时针方向沿螺旋线移动时,每轮螺旋包含:计划、风险分析、建立原型、用户评审 4种活动。(高风险的大型软件采用此方法)
-
构件集成模型:适应于面向对象的软件开发。利用预先封装好的构件来构造应用软件系统。
-
软件开发方法可区分:形式化方法、非形式化方法。
-
形式化开发模型:转换模型、净室模型
-
转换模型:是将形式化软件开发和程序自动生成技术相结合的一种软件开发模型。
转换模型的开发过程:确定性实话的需求规格说明书、进行自动化的程序变换、对形式化开发记录进行测试。
转换模型的常用技术:
基于模型的需求规格说明书及其变换技术;
基于代数结构的需求规格说明书及其变换技术;
基于时序逻辑的需求规格说明书及其验证技术以及基于可视化的技术。 -
净室模型:是一种形式化的增量开发模型。力求在分析和设计阶段消除错误。
-
统一过程RUP 包括 4 个阶段:初始、细化、构造、迁移。以用例为驱动, 以系统架构为中心的迭代与增量过程。每个阶段又分为若干次迭代,每次迭代都有一个核心工作流,有5 个活动(需求、分析、设计、实现、测试)。
-
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。
-
敏捷开发的价值观:个体和交互胜过过程和工具、可以工作的软件胜过面面俱到的文档、客户合作胜过合同谈判、响应变化胜过遵循计划。
-
软件可行性研究:经济可行性、技术可行性、运行可行性、法律可行性。
-
可行性研究的步骤:对当前系统进行调查研究、导出新系统的解决方案、提出推荐方案、编写可行性论证报告。
-
可行性论证报告的内容:系统概述、可行性分析、结论意见。
-
软件风险分析包括:风险识别(项目风险、技术风险、商业风险)、风险预测、风险的驾驭和监控。
-
软件计划的7种类型:项目实施计划、质量保证计划、软件测试计划、文档编制计划、用户培训计划、综合支持计划、软件分发计划。
-
风险预测:又称风险估计,一般包括两方面的内容:(1)风险发生的可能性(2)风险发生后所产生的的后果
1> 建立风险可能性尺度
2> 估计对产品和项目的影响
第三章 结构化分析与设计 -
结构化设计 SD ; 结构化分析 SA ; 软件需求规格说明书 SAS ; 结构图 SC ;数据字典 DD ;
状态转换图 STD ; 数据流图 DFD -
瀑布模型的生命周期:需求定义与分析-》总体设计-》详细设计-》编码-》测试-》维护
-
系统的开发流程(SA和SD流程):
结构化分析(工具:DFD,PSPEC) ------》分析模型(分层DFD图)+SRS
结构化设计(工具:SC图) (映射)------》初始设计模型(初始SC图)
初始设计模型(初始SC图) (优化)------》最终设计模型(最终SC图) -
结构化分析的基本步骤:自顶向下,功能分解(分层DFD)、由后向前,定义数据和加工(DD, PSPEC)、根据需要,分析复杂数据和动态模型(E-R图,CFD,CSPEC,STD)、编写软件需求规格说明书SRS。
-
SA需求分析的两项基本任务:建立系统分析模型、编写SRS。
-
分析模型组成:功能模型、数据模型、行为模型 3种。
-
抽象 和 分解 是结构化分析的主要指导思想,细化的实质是分解。分解 和 细化 是软件设计的策略。
-
SD阶段把分析模型中的DFD图转换为 最终SC图。
-
传统软件的开发技术:结构化设计、模块设计。
-
软件设计:总体设计/概要设计(初始SC图、最终SC图)、详细设计(用逐步细化的方法,完成模块的说明)。
-
需求分析的步骤:需求获取、需求提炼、需求描述、需求验证。
-
SA模型的组成
-
SA模型同时覆盖了信息模型、功能模型、行为模型 3种模型。
-
DFD图不能表示程序的控制结构(如选择、循环结构)。
-
加工规格说明通常用结构化语言、判定表、判定树作为描述工具。
-
软件中的数据分为3类:数据项(数据元素)、数据流(多个相关数据项)、数据文件和数据库。
-
数据字典的组成:数据项、数据流、数据存储(文件或数据库)、加工(处理逻辑)、外部项(人、物或其它软件系统)。
-
SD模型是由SA模型映射而来的。
SA模型的数据字典可转换为待开发系统的数据设计
数据流图可转换为体系结构设计(SC图)与接口设计
加工规格说明可转换为模块内部的详细过程设计 -
SD模型的组成:从上到下依次是:过程设计、接口设计、体系结构设计、数据设计。
-
结构化分析的基本步骤:
自顶向下对系统进行功能分解,画出DFD图;由后向前定义系统的数据和加工;编制DD和PEPES;写出SRS。 -
把不需要分解的加工成为基本加工。把逐步分解成为“自顶向下,逐步细化”。
-
DFD的优点:便于实现,便于使用。
-
传统的软件设计可细分为:面向数据流设计(SD方法)、面向数据结构设计(Jackson方法)。
-
用数据流图表示逻辑模型,在设计阶段,按照数据流图的不同类型(变换型、事务型)转换为相应的软件结构。
-
结构化设计通常从DFD图到SC图的映射开始。
-
面向数据流的设计方法:从DFD图到SC图的映射的4个步骤 :
复审DFD图,必要时可再次进行修改或细化;
鉴别DFD图的结构特征:事务?变换?;
按照规则,把DFD图为初始的SC图 ;
改进初始的SC图 。
27. 变换型结构:由输入、变换中心和输出三部分组成。
事务型结构:具有在多种事务中选择执行某类事物的能力。
28. 变换映射的步骤:划分DFD图的边界、建立初始SC图的框架、分解SC图的各个分支。
事务映射的步骤:在DFD图上确定边界、画出SC图框架、分解和细化接受分支和发送分支。
29. 优化结构设计的指导规则:对模块分割、合并和变动调用关系的指导规则、保持高扇入/低扇出的原则、作用域/控制域规则。
30. 模块设计(详细设计)的主要任务是编写软件的模块设计说明书。目的是确定模块采用的算法和块内数据结构。
31. 模块设计的原则:清晰第一的设计风格、结构化的控制结构、逐步细化的实现方法。
32. “结构化”保证程序的清晰、易读,“逐步细化”实现程序的正确、可靠。
33. 结构化程序设计原理和逐步细化的实现方法是完成模块设计的基础。
第四章 面向对象和UML
-
面向对象的基本特征:抽象、封装、集成、多态。
-
面向对象开发的优点:提高软件系统的可复用性、可扩展性、可维护性。
-
元素之间的联系有:关联、泛化、依赖、实现、聚集、组合。
-
UML的4个抽象层次:用户模型、模型、元模型、元元模型。
-
UML的模型元素:1、一类模型元素用于表示模型中的某个概念2、另一类用于表示模型元素之间相互连接的关系。
-
UML的2类图:
静态图(用例图、类图、对象图、构件图、部署图);
动态图(状态图、时序图、协作图、活动图)
5种视图:用例视图、逻辑视图、进程视图、构件视图、部署视图。 -
UML的特点:同意标准、面向对象、表达能力强,可视化。
-
UML模型作为测试阶段的依据:
单元测试使用类图和类规格说明;集成测试使用构件图和协作图;系统测试使用用例图来验证系统行为。 -
UML静态建模机制包括:用例图、类图、对象图构件图、部署图。
用例图有:系统边界、用例、参与者、关联等。用例之间存在的关系:扩展关系、包含关系。
包与包之间的关系有:依赖、泛化。 -
UML动态建模机制包括:状态图、时序图、协作图、活动图。
-
消息:简单消息、同步消息、异步消息。状态图有:初态、终态、中间态。
-
时序图中的消息可以是信号或操作调用。
-
状态图用来描述一个特定对象的所有可能状态以及引起其状态转移的时间。一个状态图包括一系列的状态以及状态之间的转移。(状态、状态转移、事件、在状态图之间发送消息)一个对象 多个对象的使用 《活动图》
-
时序图着重体现交互的时间顺序;协作图着重体现交互对象间的静态链接。
-
时序图和协作图适合描述单个用例中几个对象的行为;活动图适合表现跨越多用例或多线程的复杂行为。
-
构件图可以用来表现、编译、链接、执行时构件间的依赖关系。
-
UML用图表示语法,用元模型表示语义,采用模型来描述系统的结构(静态特征)以及行为(动态特征)。
第五章 需求工程和需求分析 -
软件需求的3个层次:业务需求、用户需求、功能需求。软件项目中40%~60%的问题源自软件需求阶段。
-
软件需求的6个特性:功能性、可用性、可靠性、性能、可支持性、设计约束。
-
功能性:普通功能、全局性功能。
-
软件需求工程:是一门应用有效的技术和方法,合适的工具和符号来确定、管理和描述目标系统及其外部行为特征的学科。
-
需求分析的步骤:需求获取、需求建模、需求描述(编写SRS)、需求验证。
-
需求分析的主要任务:建立需求模型。需求分析是迭代过程。
常见模型有:用例图、数据流图、实体联系图、控制流图、状态转换图。 -
需求建模方法:结构化分析建模方法、面向对象分析建模。
-
结构化需求模型由3部分组成:功能模型(数据流图、加工规格说明书)、数据模型(数据字典、ER图)、行为模型(状态转换图、控制流图、控制规格说明书)。
-
面向对象需求模型:用例模型(用例图、用例规约)、补充规约、术语表。
-
面向对象需求建模的步骤:画用例图、写用例规约、描述补充规约、编写术语表。
-
用例规约文档的内容:简要说明、事件流、特殊需求、前置条件和后置条件。
-
用例规约的检查:功能需求的完备性、模型是否易于理解、是否存在不一致性、避免二义性。
-
软件需求规格说明书SRS的内容:引言、信息描述、功能描述、行为描述、质量保证、接口描述、其他描述。
-
质量保证阐明软件交付前进行功能测试、性能测试。接口描述包括系统用户界面、硬件接口、软件接口、通信接口。
-
需求管理的流程:需求确认(需求评审和需求承诺)、需求跟踪、需求变更。需求跟踪有两种方式,正向跟踪与逆向跟踪。
需求变更的流程:变更申请、审批、更改、更新确认。 -
需求管理的5个特定实践:
-
基线(Baseline) 是软件文档或源码(或其它产出物)的一个稳定版本,它是进一步开发的基础。
-
需求变更管理:需求变更通常按变更申请->审批->更改->重新确认的流程进行
第六章 面向对象分析 -
面向对象分析OOA的建模步骤:需求理解、定义类和对象、标识对象的属性和操作、标识类的结构和层次、建立对象-关系模型、建立对象-行为模型、评审OOA模型。
-
分析类:边界类、控制类、实体类
-
OOA的优点:同时加强了对问题空间和软件系统的理解;改进包括用户在内的软件分析有关的各类人员之间的交流;对需求的变化具有较强的适应性;很好的支持软件复用;确保从需求模型到设计模型的一致性。
-
分析模型(是一种概念模型)的特点:全面覆盖软件的功能需求;分析模型与软件的实现无关;分析模型的表述方法与所采用的分析技术有关。
-
典型的五层次模型:建立类/对象层(抽象出类和对象)、建立属性层(设计静态属性和关系)、建立服务层(定义动态属性和消息通信)、建立结构层(定义层次结构关系)、建立主题层(每个主题构成一个子系统)。
-
OOA方法的共同特征:类和类层次的表示、建立对象-关系模型、建立对象-行为模型。
-
建立对象-行为模型(1、时序图2、协作图3、为分析类分配职责4、状态图)
-
建立对象-关系模型(1、分析类的属性2、分析类的关联3、分析类图4、分析类的合并)
-
面向对象开发的全过程:OOA(分析)、OOD(设计)、OOP(编码)、OOT(测试)。
-
从建立需求到开发软件成品先后要生成分析、设计、实现3种模型。
-
用例模型是面向对象分析最常用的一种模型。
-
用例分析的步骤:补充用例规约、研究用例的事件流,将用例的职责分配给若干分析类、分析类之间的协作。
-
分析类的类型:边界类、控制类、实体类。
-
边界类包括:用户界面类、系统接口类、设备接口类。如事务管理器、资源协调器、错误处理器都可为控制类。
-
为分析类分配职责是OOD的重点。实体类具有持久性。
-
对象-关系模型的内容:分析类的属性、分析类的关联、分析类图、分析类的合并。
-
时序图中的元素有:对象、对象生命线、消息。协作图中的元素有:对象、链接、消息流。
-
面向对象分析的任务是:将需求阶段产生的需求模型 转换为 软件分析模型。
面向对象设计的任务是:将分析阶段建立的分析模型 转换为 软件设计模型。
第七章 面向对象设计 -
软件设计的基本概念:模块(定义输入、输出和特性的程序实体)与构件、抽象与细化、信息隐藏、软件复用。
-
软件设计的基础:分析阶段对目标系统的数据、功能、行为建模。
-
软件设计包括:数据设计、体系结构设计、接口设计、过程设计。
-
分解和模块独立性是实现模块设计的重要指导思想。
-
模块数与开发工作量的关系:
-
概要设计(总体设计):包括软件的结构和接口设计,并编写概要设计文档。详细设计,确定模块内部的算法和数据结构,产生描述各模块程序过程的详细文档。每个阶段完成的文档都必须经过复审。
-
模块的独立性从2个方面度量:模块本身的内聚、模块之间的耦合。
-
内聚分类:低内聚(偶然性内聚、逻辑性内聚、时间性内聚)、中内聚(过程性内聚、通讯性内聚)、高内聚(顺序性内聚、功能性内聚)。
-
高内聚低耦合
-
耦合分类:弱耦合(非直接耦合、数据耦合、特征耦合)、中耦合(控制耦合)、较强耦合(外部耦合、公共耦合)、强耦合(内容耦合)。
-
一个模块,一个功能 是模块化设计的一条准则。
-
OO设计模型由系统架构层、类和对象层、消息层、责任层4个层次组成。
-
面向对象设计中,数据和过程被封装为类/对象的属性和操作;接口被封装为对象间的消息,而体系结构的设计则体现为系统的技术基础设施和具有控制流程的对象间的协作。
-
OOD的软件设计可划分为2个层次:系统架构设计、系统元素设计。
-
系统架构设计的内容:系统高层结构设计、确定设计元素、确定任务管理策略、实现分布式机制、设计数据存储方案、人机界面设计。系统元素设计的内容:子系统设计、分包设计、类/对象设计。
-
软件模式分类(按抽象级别):架构模式、设计模式、习惯用法。
-
常用的架构模式有:层次架构、模型-视图-控制架构、管道-过滤器架构、黑板架构。
-
层次架构的基本原则:将系统划分不同的层次。确定设计元素的主要工作是:确定设计类、子系统、子系统接口。
-
面向并行需求的技术:引进任务管理部件、基于进程和线程的控制。
-
任务管理策略:多处理机方案、操作系统方案、应用程序方案。
-
设计管理并发任务对象的策略:确定任务的特征、定义一个协调者任务和与之关联的对象、集成其它任务和协调者。
-
面向对象设计的任务:1、系统架构设计(指系统主要组成元素的祖师或结构,以及其他全局性决策,组成元素之间通过接口进行交互)6个活动(1、系统高层结构设计2、确定设计元素3、确定任务管理策略4、实现分布式机制5、设计数据存储方案6、人际界面设计)2、系统元素设计(系统元素包括组成系统的类、子系统与接口、包等)设计的内容为:(1、类/对象设计2、子系统设计3、包设计)
-
任务管理部件的设计步骤:识别由事件驱动和时间驱动的任务、识别关键性任务,任务优先级和任务管理类、定义任务、必要时扩充有关任务的类和对象。
-
软件模式的分类:架构模式、设计模式、习惯用法
-
任务管理3中解决方案:1、多处理器方案2、操作系统方案3、应用程序方案
-
分包的原则:将边界类打包、将功能相关的类打包。高内聚-低耦合的原则,包之间的耦合表现为依赖关系。
-
类设计的步骤:创建初始设计类、定义操作、定义方法、定义状态、定义属性、定义依赖关系、定义关联关系、定义泛化关系、处理非功能性需求。
-
子系统设计的具体步骤:将子系统行为分配给子系统元素、描述系统元素和说明子系统依赖关系
-
面向对象设计的任务:系统架构设计,系统高层结构设计、确定设计元素、确定任务管理策略、实现分布式机制、设计数据存储方案、人机界面设计。系统元素设计的内容:子系统设计、分包设计、类/对象设计。
-
软件模式分类(按抽象级别):架构模式、设计模式、习惯用法。
-
任务管理策略:多处理机方案、操作系统方案、应用程序方案。
第八章 编码和测试 -
选择编码语言的标准:应用领域、算法与设计复杂性、数据结构的复杂性、效率的考虑。
-
测试和纠错:
测试(testing)的目的与任务:目的:发现程序的错误;任务:通过执行程序,暴露潜在的错误。
纠错(debugging)的目的与任务:目的:定位和纠正错误;任务:消除软件故障,保证程序的可靠运行。 -
软件:待测软件,包括软件需求规格说明书、设计说明书和源程序代码等文档资料。
测试配置:包括测试计划、测试用例和测试期望结果。
评价:将测试结果和期望的结果相比较,如果不符就意味着错误,需要纠正(纠错)。
可靠性:对测试结果进行收集和评价,得到可靠性的相关指标。 -
如果出现规律性、严重性的错误,软件质量可靠性值得怀疑,需进一步测试;
-
如果软件功能完成较好,出现的错误也易纠正,那么:或者软件质量和可靠性是可以接受的;或者未发现错误,不排除测试配置考虑不周,可能潜伏着的错误。
软件测试的阶段并解释:(生命周期)
一、单元测试
单元测试:单元测试又称模块测试,是就是对程序代码中最小的涉及模块单元进行测试。目的是检测软件模块单元的
测试方法:静态测试、动态测试
单元测试的阶段:模块接口测试 、路径测试、错误处理测试、边界条件测试
二、集成测试
集成测试:集成测试又称组装测试,是将软件产品各个模块组装起来,目的是检验软件接口中是否正确性,以及组装后的整体功能、性能表现。
测试方法:非增式集成方法、增式集成方法(自底向上集成、自顶向下集成、组合方式集成)等策略进行测试,利用黑盒测试为主,白盒测试为辅的测试方法进行测试。
三、系统测试
系统测试:系统测试是对已经集成的好的系统进行彻底的测试,以验证软件系统的正确性和性能是否满足其所指定的要求。
测试方法:黑盒测试
系统测试阶段:
一般系统的主要测试工作都集中系统测试阶段。根据不同的系统,所进行的测试种类也很多。
功能测试: 性能测试:安全测试:兼容测试: 安装卸载测试:
四、验收测试
验收测试:验收测试是部署软件的最后的一个测试操作,验收测测试的目的是确保软件的准备就绪,向软件购买展示软件系统满足其用户的需求。
五、回归测试:
回归测试是在软件维护阶段,对软件进行修改之后进行的测试。其目的是检验对软件进行的修改是否正确。
黑盒测试:只把软件测试看作一个黑盒子,我们不关心盒子的是什么的样子,只关心软件输入的数据和输出的结果。
它只检查程序功能是否按照需求规格说明书的规定正常使用,程序能否接收输入数据而产生正确的输出信息。
黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
白盒测试:把盒子盖子打开,去研究里面的源代码和程序结果 -
模块逻辑中采用单入口、单出口标准结构、避免使用容易引起混淆的结构和语句、嵌套深度不超过3—4层。
-
测试的特性:挑剔型、复杂性、不彻底性、经济型。
-
测试分类:静态分析(静态分析器分析、代码评审(代码会审、走查、办公桌检查));
动态测试(黑盒测试(功能测试)、白盒测试(结构测试))。 -
测试文档内容:测试计划、测试报告。测试计划的主体是测试内容说明:测试项目名称、测试目的、步骤和进度、测试用例设计。测试报告的主题是测试结果:测试项目名称、实测结果和期望结果的比较、发现问题、测试效果。
-
黑盒测试分类:等价类法、边界值法、错误猜测法。
-
白盒测试分类:路经测试(点覆盖、边覆盖、路径覆盖)、逻辑覆盖测试(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖)。
-
路径测试法:1、程序图
-
(2)路经测试的特征:满足结构测试的最低要求、有利于安排循环测试。
-
(3)选择测试路径的原则:1、选择具有功能含义的路径2、尽量用短路径替长路径3、从上一条测试路径到下一条测试路径,应尽量减少变动的部分(包括变动的边和结点)4、由简到繁,如果可能,应考虑不含循环的测试路径,然后补充对循环的测试5、除非不得已(如为了要覆盖某条边),不要选取没有明显功能含义的复杂路径。
-
V(G)=判定结点+1(区域数)
-
测试的层次性(单元测试(编译、静态分析器检查、代码评审、动态测试)、集成测试(目的和任务、策略与步骤(自顶向下测试、有底向上测试、混合方式测试))、高级测试)
-
路经测试的特征:满足结构测试的最低要求、有利于安排循环测试。
-
2种OO集成测试策略:基于线程的测试、基于使用的测试。
题目1:多模块程序的测试有哪些层次?各层测试主要解决什么问题?
解答:
多模块测试的层次 所处时段 解决的问题 涉及测试方法 成果
单元测试/模块测试 编码阶段 1. 对模块代码进行编译,发现并纠正其语法错误; -
进行静态分析,验证模块结构及其内部调用序列是否正确;
-
确定模块的测试策略,并据此设计一组测试用例和必要的测试软件;
-
用选定的测试用例对模块进行测试,直至满足测试终止标准为止;
-
注重执行路径、出错处理路径、局部数据结构、模块的对外接口的测试
-
编制单元测试报告。 黑盒测试——程序外部测试、功能性测试 测试报告
白盒测试——程序内部测试、覆盖测试
集成测试 集成测试阶段 1. 制订集成测试实施策略 -
确定集成测试的实施步骤,设计测试用例
-
逐一地添加模块,进行测试 模块(子系统或小系统)集成测试;训练驱动与桩的设计、组合及集成测试。 已组装软件
高
级
测
试 确认测试 集成测试阶段 1. 进一步验证软件的有效性,即验证软件的功能和性能是否与用户的要求一致 已确认软件
系统测试 验收阶段 1. 测试是否与硬件协调运行
2. 测试是否和原来就有的其它软件协调运行
3. 测试是否完成SRS对它的要求 系统的性能检验和软件系统实时运行状况的测试 可运行的系统
题目1:软件维护有哪些种类?他们的目标分别是什么?
解答:软件维护的种类以及对应目标依次是:
a) 完善性维护
在软件漫长的运行时期中,用户往往会对软件提出新的功能要求与性能要求。为了适应这些变化,应用软件原来的功能和性能需要扩充和增强。这种增加软件功能、增强软件性能、提高软件运行效率而进行的维护活动称为完善性维护。
b) 适应性维护
让软件适应运行环境的改变而进行的一种维护。
c) 纠错性维护
纠正在开发期间未能发现的遗留错误。
d) 预防性维护
为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。
题目2:软件配置管理的主要功能是什么?
解答:系统的管理软件系统中的多重版本;
全面记载系统开发的历史过程,包括为什么修改,谁做了修改,修改了什么;
管理和追踪开发过程中危害软件质量以及影响开发周期的缺陷和变化;
输入数据 有效等价类 无效等价类
地区码 1、 空
2、 3位数字 3、 非空,但有非数字字符
4、 非空,位数小于3位数字
5、 非空,位数多于3位数字
电话号码前三位 6、非‘000’且非‘111’的3位数字 7、空
8、非空,但有非数字字符
9、非空,位数小于3位数字
10、非空,位数多于3位数字
电话号码后四位 11、任意4位数字 12、空
13、非空,但有非数字字符
14、非空,位数小于4位数字
15、非空,位数多于4位数字
对开发过程进行有效的管理和控制。
表7.1 “电话号码”的等价分类
表7.2 有效等价类的测试用例
测试数据 期望结果 测试范围
地区码 号码前三位 号码后四位
NULL 123 4567 输入有效 1、6、11
010 234 5678 输入有效 2、6、11
表7.3 无效等价类的测试用例
测试数据 期望结果 测试范围
地区码 号码前三位 号码后四位
#1* 123 4567 地区码输入无效 3、6、11
01 234 5678 地区码输入无效 4、6、11
0123 258 8888 地区码输入无效 5、6、11
NULL NULL 8888 号码前三位输入无效 1、7、11
010 #1* 6666 号码前三位输入无效 1、8、11
020 45 6688 号码前三位输入无效 1、9、11
NULL 789 8866 号码前三位输入无效 1、10、11
NULL 666 NULL 号码后四位输入无效 2、6、12
010 888 *02# 号码后四位输入无效 2、6、13
020 688 23 号码后四位输入无效 2、6、14
NULL 866 45678 号码后四位输入无效 2、6、15
阅读下列程序:
PROCEDURE SAMPAL (A,B:REAL; VAR X:REAL);
BEGIN
IF (A>3) AND (B=2)
THEN X:=X/A
IF (A=6) OR (X>4)
THEN X:=X+1
END;
为上述程序设计测试用例(参考教材相关例题)。
实验要求:形成相应的实验报告。包括:
1、 画出程序流程图,程序图
2、 实现语句覆盖用例设计
3、 实现判定覆盖用例设计
4、 实现条件覆盖用例设计
5、 实现判定/条件覆盖用例设计
6、 实现条件组合覆盖用例设计
7、 实现路径覆盖用例设计(完全覆盖)。
第一部分:程序流程图、程序图
设本例中的两个判断IF (A>3) AND (B=2) 记为P1,IF (A=6) OR (X>4) 记为P2。
第二部分:语句覆盖用例设计——使程序中每个语句至少执行一次。
测试用例 P1 P2 执行路径
A B X
6 2 36 T T a-c-e
第三部分:判定覆盖用例设计——使每个判定的真假分支都至少执行一次。
测试用例 P1 P2 执行路径
A B X
8 2 32 T F a-c-d
6 0 32 F T a-b-e
第四部分:条件覆盖用例设计——使每个判定的每个条件的可能取值至少执行一次。
测试用例
第一判定表达式 第二判定表达式 执行路径
A B X A>3 B=2 A=6 X>4
3 2 36 -T1 T2 -T3 T4 a-b-e
6 0 24 T1 -T2 T3 -T4 a-b-e
未覆盖c、d分支,不满足判定覆盖的要求。
条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含条件覆盖。
第五部分:判定/条件覆盖用例设计——选取足够多的测试用例,使判断中的每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次。
测试用例 第一判定表达式 第二判定表达式 执行路径
A B X A>3 B=2 A=6 X>4
6 2 36 T1 T2 T3 T4 a-c-e
3 2 36 -T1 T2 -T3 T4 a-b-e
6 0 24 T1 -T2 T3 -T4 a-b-e
6 0 24 -T1 -T2 -T3 -T4 a-b-d
能同时满足判定、条件两种覆盖标准。
第六部分:条件组合覆盖用例设计——所有可能的条件取值组合至少执行一次。
A>3, B=2 ;A>3, B≠2 ;A≯3, B=2 ;A≯3, B≠2
A=6, X>4 ;A=6, X≯4 ;A≠6, X>4 ;A≠6, X≯4
测试用例 第一判定表达式 第二判定表达式 执行路径
A B X A>3 B=2 A=6 X>4
6 2 36 T1 T2 T3 T4 a-c-e
3 2 36 -T1 T2 -T3 T4 a-b-e
6 0 24 T1 -T2 T3 -T4 a-b-e
6 0 24 -T1 -T2 -T3 -T4 a-b-d
第七部分:实现路径覆盖用例设计——覆盖每一个可能的路径。
测试用例 第一判定表达式 第二判定表达式 执行路径
A B X A>3 B=2 A=6 X>4
6 2 36 T1 T2 T3 T4 a-c-e
4 2 16 T1 T2 -T3 -T4 a-c-d
3 0 24 -T1 -T2 -T3 T4 a-b-e
6 0 24 -T1 -T2 -T3 -T4 a-b-d
第一判定表达式:
设条件 A>3 取真 记为 T1
假 -T1
条件 B=2 取真 记为 T2
假 -T2
第二判定表达式:
设条件 A=6 取真 记为 T3
假 -T3
条件 X>4 取真 记为 T4
假 -T4