大型软件组织的敏捷测试
欧阳辰
内容提要
敏捷开发的演变
敏捷开发带来的测试挑战
大型软件的敏捷测试实践
虚拟化技术(Virtualization)
持续集成(Continuous integration)
集成测试环境(Integration Environment)
软件部署(Deployment)
在产品中进行测试(Test in Product)
敏捷测试的管理实践
敏捷开发的发展
敏捷
“…the ability to move quickly and easily”
灵敏迅速 (汉语词典)
敏捷成为程序员的生活方式
XP: 简单,交流,反馈,尊重,勇气
Scrum: 增量迭代,价值驱动,管理性
小公司,大公司;传统软件,互联网应用
“敏捷”的文化和氛围
XP Testing
All code must have Unit tests ; All code must pass all Unit tests before it can be released. ;When a Bug is found tests are created before the bug is addressed (a bug is not an error in logic, it is a test you forgot to write)
Acceptance tests are run often and the results are published
Visual Studio 2010 : 整个项目的开发就是敏捷开发;另外VS2010中提供了敏捷开发的全面支持;
大部分采用了敏捷开发;所有互联网都是敏捷开发; 包括通信(化为等)
InfoQ采用调查2008年:70%的被采访者,至少在做一个敏捷开发项目
3
敏捷软件开发和测试发展
轻量级
软件开发方法
1991
软件质量
预防
2000
寻找质量缺陷
~1980
敏捷开发普及
(深度,广度)
2010
6Sigma
UML
RUP
XP
SCRUM
CMM
xUnit
New to Agile
Working in Agile but frustrated and make thing worse
Working in Agile and happy and we can achieve more.
4
敏捷时代的测试挑战
敏捷 软件质量可信度
变化 测试进度不可控
简单 很多“设计”缺陷
协作 职责不清楚
测试认同感(identity)降低
个体化 管理难度加大
“80% 的质量问题都是来源于管理层,而不是执行层” 约瑟夫,朱兰
-Pace different
-Customer Relationship Change: Vendor-Supplier Partnership
解析极限编程:拥抱变化 : (KENT Beck):
敏捷个体,管理却不敏捷;管理者的Mindset还是传统的项目管理
5
敏捷时代的测试人员职责
定义质量(Define Quality)
缺陷交流(Communication)
及时反馈(Feedback)
质量信心指数(Quality Confidence)
代表用户体验(User Experience)
“敏捷时代,虽然测试人员可以减少,但是测试活动不能减少”
Lisa Crispan
-Pace different
-Customer Relationship Change: Vendor-Supplier Partnership
解析极限编程:拥抱变化 : (KENT Beck):
敏捷个体,管理却不敏捷;管理者的Mindset还是传统的项目管理
6
质量保证活动的变化
测试人员的数量减少:
互联网企业开发测试比例 3:1 -10:1
部分质量保活动转移到开发人员: 低不确定性
单元测试, 部分功能测试, 部分性能、压力测试
测试人员的质保活动:高不确定,复杂活动
集成测试
验收测试
Bing: 每个月发布新功能,6各月就有比较大的变化。谷歌: 2个星期更新;
7
敏捷开发下的软件质量
满足用户需求的程度(IEEE)
质量属性的集合
质量定义没有变化,变化的是软件需求、使用模式,竞争环境
“软件质量是真正用户的体验,而不是工程师眼中的各种指标”
自动化测试的挑战
自动化测试更为重要
更加频繁的发布
持续集成
快速获得质量反馈
投资回报率(ROI) 和可复用性考虑
不清楚的目标和缺少经验
界面自动化的神话
自动化测试用例是大型软件的重要部分!
“95%的界面自动化测试都是浪费时间”
Alan Pages
Bing: 每个月发布新功能,6各月就有比较大的变化。谷歌: 2个星期更新;
9
敏捷测试的价值观
价值驱动的测试活动 Over 流程驱动
缺陷预防 Over 亡羊补牢
持续质保活动 Over 集中在测试阶段
用户需求导向的测试 Over 指标导向的测试
Bing: 每个月发布新功能,6各月就有比较大的变化。谷歌: 2个星期更新;
10
测试用例金字塔
手动测试
11
敏捷测试实践-持续集成
自动化,自动化,自动化
预构建)
Regular Build
(正常构建)
部署到更多环境
测试
按需运行测试用例
快速反馈
快速反馈
敏捷测试实践-持续集成
频繁,尽早和自动
测试架构支持
构建(Build):
分布式的构建引擎
编译模式(快速,完整)
部署
部署模式 (快速,完整)
测试
并行化测试用例
删除费时的测试用例
让开发人员使用你的用例
长期保持着可以工作的软件
整个过程保持在1-2个小时完成
谷歌有很好的测试基础设施,例如每天5000个CPU进行65K次编译,执行超过100M测试用例。
项目的平均Build和测试时间是4分钟
Build : 160: Build After Sync: 20 Run Test Case: 60 Clean Build 4
13
敏捷测试实践-持续集成
一些好的实践
当构建(Build)失败时候,提供快速回滚功能
速度和简单最为关键
持续集成是一个复杂的工程,接受学习曲线
反馈起着非常大的作用
创造持续集成的氛围,创建报告/通知
测试架构—集成测试环境
投资回报率(ROI)
规划和管理
更新频率
开发&测试
一些好的实践
集成环境变化记录
大规模数据
一次集中一个环境
+
+
集成效果
维护成本
测试架构-虚拟化技术
虚拟化
节省成本
低碳实验室
简化管理
快速部署
失败点调查
硬件模拟
…
168 台式机 被 12个服务器代替
“It is time to move!”
50号大楼内部的这个试验室里,整齐地摆放着许多测试机,948台PC机和119台服务器整齐地在房间里摆成好几列-146 Build /Per month; 63 语言和地区
; 测试机的电源插头均有自己的IP地址,并连接在IP配电器上;不运行的机器,自动关机。
VMWare : Destop虚拟化 50% Cut
16
测试架构—虚拟化
一些好的实践
精心制定网络拓扑图
成本考虑
服务器瓶颈(磁盘,内存网络)
特别需求(USB,显卡,电源管理)
机器软件的License 管理(OS,App and etc)
自动保持长期不用的机器
It is time to move!
敏捷测试实践-部署
大规模软件的部署测试
假定错误发生: 回滚(Rollback) 测试
全自动部署: 从构建(build)到生产系统(Production)中
横向扩展(Scale Out)和 非横向扩展(Scale Up)
诊断工具支持
在生产环境中运行测试用例
基础设施
计算,存储,平台服务
“We’re All in”
Yes, We are in
敏捷测试实践–部署
一些好的实践
统一的部署框架(Deployment Framework)
部署往往成为升级的瓶颈
在不同的数据中的性能考虑
创建产品克隆集成环境
横向扩展的考虑(Scale Out)
19
敏捷测试实践-在生产环境中测试
产品状态监测,统计
A/B 测试
产品状态监测,统计
A/B 测试
敏捷测试实践-在生产环境中测试
发布不是测试结束,而是真正的开始
软件(Software) + 服务(Service)模式
产品状态监测:
对外软件服务的状态
对内软件后台系统的状态
性能,可靠性状态
在产品进行定期测试,内置可测试性
利用生产数据进一步提升测试
找到盲点
21
如何让管理层敏捷起来?
让管理层获得更多的反馈和数据
敏捷团队与管理层保持距离
利用管理层消除组织障碍,优化资源分配
让管理层集中在业务战略和长期技术策略
创建敏捷的团队气氛
敏捷=愉快+效率
给每个人更大的空间和决策权力
快速决策并且快速修正决策
自发而且自由的交流
一线组长的领导力
宽容和开放
Rainier Effect
23
创建质量文化
预防胜于治疗
持续改进缺陷预防能力
80-20原则
让质量成为一种习惯和必须
质量文化≠质保流程
安全
可理解性
可移植性
可测试性
可用性
可靠性
可扩展性
可复用性
可适应性
模块性
高效性
健壮性
复杂性
Numerous definitions
Meaning changed over time
Elite; ‘culture’
Democratic; cultures (subcultures)
However,
culture is shared, learned and symbolic
the notion of culture as a way of life
quality culture is complex
the ‘best’ quality culture is invisible
24
提高软件的可测性
可测性是一种质量属性
让可测性为产品质量服务
好的实践:
推动开发人员编写单位测试
工具: Testability Explorer
总结
敏捷是一种态度和氛围
让敏捷围绕着提升价值,而不是照本宣科
大型软件提高了对自动化测试的深度
实施: 解决一个个问题,没有灵丹妙药
谢谢!