第一章 敏捷测试的定义程序员
敏捷方法:Scrum(迭代式增量软件开发过程)、极限编程(XP)、Crystal、动态系统开发方法(DSDM)或特性驱动开发(FDD)等。web
敏捷是迭代的和增量的。算法
极限编程是一个轻量级的、灵巧的软件开发方法;同时它也是一个很是严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目均可以从四个方面入手进行改善:增强交流;从简单作起;寻求反馈;敢于实事求是。极限编程和传统方法学的本质不一样在于它更强调可适应性而不是可预测性。 数据库
敏捷软件开发宣言:编程
敏捷测试人员的十条法则设计模式
提供持续反馈、为客户创造价值、进行面对面的沟通、勇气、简单化、持续改进、响应变化、自我组织、关注人、享受乐趣浏览器
支持团队的面向技术测试安全
单元测试验证代码段的行为。组件测试经过测试类和方法间的交互帮助巩固系统的一个可部署部分的总体设计。服务器
可靠的源码控制、配置管理和持续集成是从指导开发的程序员测试中获取价值的要素。架构
持续集成是敏捷团队的核心实践。
单元测试的工具
Java的Junit、 .NET的NUnit、Perl和Ruby的Test::Unit、Python的PyUnit
为了帮助支持团队的面向技术测试,敏捷团队须要例如源代码控制、测试自动化、IDE和构建管理工具等。
支持团队的面向业务测试
面向业务的测试同时基于示例和使用编程语言描述需求。
第一象限的活动确保内部质量,最优化项目生产力,减小技术性负债。第二象限测试定义和验证外部质量,同时帮助咱们了解什么时候完成。`
核对如下内容以解决需求问题:
面向业务测试工具包
面向业务测试的目标是促进客户和开发人员之间的沟通和协做,确保团队在每一次迭代中都产生真正的价值。
做为一名(角色),我须要(功能),所以(业务价值)。
Windows NetMeeting和VNC这样的工具使不一样地区的两位同事可以结对测试。 视频会议工具如WebEx和Skype支持远程团队和客户之间的协做和演示。在线白板(如Scriblink)和交互式白板(Mimeo)方便了分散式的白板讨论。
行为驱动开发(BDD)是测试驱动开发的变种。它与领域驱动设计有关,关注领域而不是技术。一些BDD工具包括:用于Java平台的easyb和JBehave、用于.NET的NBehave和Nspec、用于Ruby的RSpec。
Fit(集成测试框架)。可经过http://fit.c2.com了解Fit。
FitNesse是一个基于Fit的Web服务器、Wiki、软件测试开源工具。FitNesse和Fit之间的主要区别在于FitNesse的测试经过Wiki标记符而不是HTML表格编写。它也支持在电子表格中建立测试并导入到测试中。
可经过http://www.fitnesse.org了解FitNesse。
测试Web服务
敏捷开源测试工具(GUI测试)
Watir——Watir(Ruby测试Web应用)是一款开源Ruby库,用于自动化Windows上的IE浏览器。还提供对其它浏览器的支持,包括FireWatir(用于Firefox)和SafariWatir(用于Safari)。
Selenium——测试工具集,开源,用于测试Web应用。测试能够写成HTML表格形式或者经过经常使用编程语言编写,而且能够运行于大多数浏览器。名为Selenium IDE的Firefox插件提供了快速学习该工具的途径。
Canoo WebTest——在WebTest脚本中,测试在XML文件中以“步骤”描述,模仿了用户对web界面的操做。WebTest不像Selenium和Watir那样驱动真实的浏览器,它使用HTML模拟须要的浏览器。WebTest支持测试PDF文件和Excel文件。
如何有效使用工具编写面向业务测试的策略?
1. 增量构建测试
首先确保最明显的用例是正常工做的。编写一个简单、经常使用路径的自动化测试来证实代码完成了最基本的功能。在测试经过后,再开始考虑其它状况。编写面向业务测试是一种迭代过程。
讨论测试会让开发人员意识到他忽略或者误解了某个需求。
2. 确保测试经过
每当测试在持续集成和构建过程当中失败时,全队的最高优先级(除了关键的生产问题)应该是让构建经过测试。
3. 使用合适的测试设计模式
4. 构建/操做/检查 (搭建/执行/验证)
依据测试的目的在内存或者数据库中构建输入数据;调用产品代码来操做这些输入;检查运算结果。
使用真实数据库的测试能够帮助测试那些数据访问层和业务逻辑层没法轻易分离的遗留代码。
5. 基于时间的、活动和事件模式
6. 了解更多
业务逻辑和算法应该可以被测试模块访问,而不须要经过用户界面或者批处理过程。这保证了测试驱动开发,也会生成可测试的架构。
7. 关键词和数据驱动测试
可测试性
o 代码设计和测试设计
o 自动化与手动第二象限测试
o 测试管理
团队须要正确的工具来启发需求和示例,从全局到细节,包括核对表、思惟导图、电子表格、模型、流程图和各类软件工具。
第10章 评价产品的面向业务测试
敏捷开发增量迭代的特性带来了一个在开发软件的同时演示其业务价值的机会。
探索测试(ET)——同时进行的测试设计、测试执行和学习。探索测试自己不是一种测试技术,而是一种能够应用于任何测试技术的方式或态度。探索强调我的和交互而不是过程和工具。
做为一个研究性工具,是用户故事测试和自动化回归集的重要补充。探索测试并非经过详尽的测试来评估软件,它的一个反作用是增长了测试人员对被测系统的了解。它揭示了产品中能够更多地使用自动化测试的区域,并能引出很多对于新特性的想法,而这些新特性每每会演变成新的故事。
可用性测试
o 用户需求和角色测试
o 导航
o 研究竞争对手
API(应用程序编程接口)是能够被其它软件应用或构件执行的一组功能。
o 改变输入参数
o 改变调用顺序
探索测试辅助工具
o 设置测试数据
PerlClip能够用不一样类型的输入数据测试文本输入框。从http://www.satisfice.com免费获取。
o 帮助评估测试会话的输出
LogWatch用于监控日志文件中的错误信息。
o 模拟器——用于为系统生成具备关键特征和行为的,相似于真实数据的工具。
o 仿真器——仿真器能复制一个系统的功能,从而与被测的系统行为一致。当要测试系统中与其它系统或设备的接口代码时,仿真器十分有用。
第11章 利用面向技术的测试评价产品
非功能性需求包括配置、安全、性能、内存管理、各类ility(好比可靠性、交互性以及可伸缩性)、恢复,甚至还有数据转换。
可靠性(PSR)测试
如何完成安全性测试任务?
1. 采用持续集成(CI)周期性地运行自动化测试套集。
2. 学习使用开源的静态代码分析工具,将其加到CI中。
3. 安装自动化安全漏洞检测工具,如Nessus(http://www.nessus.org/nessus/)。能够在非GUI模式的命令行中运行Nessus,这样就能够将其集成到CI工具中了。
4. 学习使用开源的fuzzing工具,将其加到CI中。
详情参见https://en.wikipedia.org/wiki/Buffer_overflow和https://en.wikipedia.org/wiki/Uncontrolled_format_string
关于可用于静态代码分析的工具列表,参见https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
可维护性
传统项目经过完整的代码审查或是检测来实现。敏捷团队常用结对编程,这自己就包含了持续的代码审查。此外还需:
交互性——不一样系统和组织协同工做与分享信息的能力。交互性测试会检查两个或多个通讯系统之间端到端的功能。
兼容性
项目类型代表了须要进行多少兼容性测试。
可靠性——软件的可靠性是指系统在常规与意外环境下执行和保持其功能的能力。
一些用于度量可靠性的统计数据有:
性能、负载、压力以及可伸缩性测试
可伸缩性——可伸缩性测试验证应用在多用户访问的状况下是否依旧可靠。重要的是要考虑整个系统而非应用自己。
一般性能测试的目的是肯定系统中的瓶颈或是创建基准以供将来测试所用。此外,它还会确保系统符合性能目标和需求并帮助负责人就应用的总体质量作出决策。
负载测试用于在愈来愈多的用户同时访问时评估系统的行为。压力测试用于在负载超出预期的状况下评估应用的健壮性。
性能与负载测试工具:
开源: Apache Jmeter、Grinder、Pounder、ftptt以及OpenWebLoad
付费: NeoLoad、WebLoad、eValid、LoadTest、LoadRunner以及OSATest
敏捷回顾也是每次迭代计划会议的一部分。
测试自动化前期须要:适当的辅导、充足的时间和强大的管理支持。
将单元测试自动化与持续集成放在首要位置。
测试矩阵是以被测试的功能为纵轴,测试条件为横轴而造成的矩形图表。
有用的迭代度量
测试人员经历的一个迭代
1. 发布或主题计划阶段:
2. 迭代前的准备
3. 迭代开始(是确保故事可测试并提供充足测试数据的最后机会)
4. 编码和测试
5. 迭代结束时的收尾:
用户验收测试(UAT)
敏捷测试成功的7个要素:
1. 使用全队参与方法
2. 利用敏捷测试思惟
3. 自动化回归测试
4. 提供和得到反馈
5. 构建核心实践的基础(持续集成、可控的测试环境、管理技术债务、增量工做)
6. 与客户协做
7. 保持大局观