大数据

软件质量永恒---质量内建

2017-02-21  本文已影响0人  老余2017

质量综述

随着互联网快速发展,早期的传统软件公司强调工程的严谨性,CMMI,ISO9000格局已经发生变化,逐渐退出历史舞台。前期敏捷理念被迅速的普及。Scrum迎合了产品管理的需求, XP迎合了工程化发展的需求。各自发展都很迅猛,然后逐渐衍生了更深入的CI、CD和DEVOPS等模式。

企业扁平化管理,大质量部模式被打散,为了提高运作效率, QA或者测试工程师团队被逐渐分拆到各个具体业务部门,技术性测试工程师开始逐渐发挥价值。未来随着DEVOPS完善,质量问题将会越来越突出不久的将来可能会出现DEVQA。

根据目前软件发展趋势,软件质量可以分为发布前软件质量和发布后软件质量,发布前软件质量分为软件质量验证和软件质量交互,发布后软件质量可以分为软件质量监控和软件质量运维如下图:

软件质量综述图

质量验证

软件质量验证,具体的说就是软件测试,它分为黑盒测试,灰盒测试,白盒测试,灰度测试。

质量验证及相关内容

在传统软件公司强调工程的严谨性黑盒测试发展很成熟,方式方法也很全面,测试资源投入比较多。这样开发人员可以专心写着优雅的代码,只做单元测试和接口、组件测试就可以了,其他的事情都让测试人员去干。

随着计算机科学专业在大学完善,越来越多的科班生都参与到测试行业,在互联网公司随着开发人员慢慢渗透到测试,自动化测试、白盒测试和灰度测试越来越盛行。流行上面主要原因是分层自动化,测试需求减少,测试人力资源减少越来越专业化,测试、开发比例越来越低,让机器干活,逐渐释放人力,节约成本。下面逐渐开始介绍质量验证,质量验证包括黑盒测试、白盒测试、灰盒测试、灰度测试。

黑盒测试

黑盒测试分功能测试和非功能测试。

常用的功能测试有单元测试、接口/组件测试、冒烟测试、集成测试、系统测试、回归测试、UI测试、α测试、β测试,非功能测试有性能测试、稳定性测试、安全测试、恢复测试这些测试都是一个项目必须要有的方式,但是在时间和人力允许的情况下可以有交叉测试、兼容性测试、可用性测试、比较性测试、探索性测试。然后使用分层自动化测试来提高上面各种测试效率。

黑盒分层自动化可以分为单元测试自动化、集成接口自动化、UI层自动化,单元测试采用框架如java的Junit、testNG,C#的NUnit,python的unittest、pytest等,集成接口自动化框架如SoapUI(改名叫Ready!API)、Postman等,UI层自动化如QTP,Robot Framework、watir、selenium等,具体怎么做分层自动化,具体需求根据具体项目去做。

单元测试、接口/组件测试

冒烟测试

集成测试

系统测试

回归测试

安全测试

性能测试

稳定性测试

UI测试

α测试

β测试

白盒测试

白盒测试常用的测试方式有单元测试、组件测试、系统测试、性能测试、静态代码测试。这里说性能测试和黑盒测试里面性能方式有点不同这里强调的是一个大方法、大函数调用执行1万次所消耗响应时间。

在互联网时代的白盒测试测试人员主要负责代码质量,代码质量包括白盒测试和黑盒测试里面的非功能测试(上面已经介绍了黑盒测试里面的非功能测试这里就不在介绍了)如:静态代码测试(程序风格、程序逻辑、代码安全、程序建状性)及开发人员单元测试、组件测试代码覆盖率,配合开发人员一起完成业务逻辑代码自动化,不能自动化代码分层自动化。完善自动化测试体系。
白盒分层自动化可以分为静态代码扫描(PMD、JOCOCO、Profile)、单元测试(TestNG、junit)、集成测试、安全测试(Fortify+findbugs)、自动化性能测试(jmeter)

单元测试、接口/组件测试

系统测试

静态代码测试

灰盒测试

灰盒测试介于黑盒和白盒之间,它包括恢复测试、安全测试、性能测试,但是目前有很多持续集成中的自动化都是采用灰盒测试用例

灰度测试

灰度测试:把生产环境用户流量引到另外一个互不相干的环境验证系统功能,由A/B测试演变而成,此项测试常用于仿真测试、全链路压力测试,现在好多互联网公司架构,业务改进都向这方面设计,用来保证回归上线用户不丢失。在生产进行灰度测试往往要网络部门进行网络配合,特别适合业务重构,或者业务迁移。常用测试工具如:TCPCOPY、Gor

质量交互

质量交互它指的是软件开发、配置管理、构建管理、持续集成、测试管理、环境管理、部署管理、数据度量和分析层层交互,它从以前的CI、CD、已经逐步演变成DEVOPS如下图:

质量交互

DevOps是企业内开发、技术运营和质量保障这三方面工作的融合,用于促进开发、技术运营和质保部门之间的沟通、协作与整合。有研究显示,在那些引入了DevOps概念的企业中,开发与运营人员在设计、构建、测试工作中共同在内部应用上进行协作之后,可以将产品开发的效率提升20%,强IT服务绩效的团队比较差IT服务绩效团队的部署频率要快30倍,变更失败率要低50%。如下图

DevOps

配置管理

开发人员从稳定的最新版本中Checkout代码在本地开发新功能,在本地构建(测试、代码检查)Check in在主干上编译、等待持续集成结果。它可以带来以下最佳实践:

构建管理

构建模块间依赖采用二进制构建产物,并按照1-5-10(构建运行的时间,最多容忍10分钟,一般是5分钟,最快是1分钟)法则构建任务重Push改成Pull编译结果推送到产品仓库管理。它的最佳实践:

持续集成

开发人员频繁提交代码到主干持续集成,并执行自动化构建和测试并分级测试快速反馈,如果构建失败立即修复。它的最佳实践:

测试管理

建立分级测试体系,从多个层次和多个验证角度实现质量防护网如下图:

分级测试模型

从上面图分级测试模型根据测试运行时间,不包括写测试用例时间它划分为白盒分层自动化、功能分层自动化、非功能分层自动化、线上仿真测试。

环境管理

基础设施的信息管理是容易被忽视的地方。但是环境的不稳定,造成部署,排错的成本成指数倍增长。它的最佳实践:

部署管理

部署对运维来说是一个体力活,怎么样才能把一个体力活变成一个让机器干的活,这样才能释放运维人员。它的最佳实践:

数据度量和分析

在DEVOPS里面数据度量和分析是重要的部分,要是没有这些数据不能体现效率、质量是否提高。这些数据通常包括构建数据、线下质量验证数据、及线上质量数据。

质量监控和质量运维

随着业务发展,互联网公司更应该重视线上质量,对比传统的软件开发,互联网公司更加没有办法确定需求价值,可以说是在不断的尝试过程,线上质量监控分析和线上质量分析运维越来越被各大互联网公司重视。线上质量可分为线上质量监控和线上质量运维,如下图:

质量监控和质量运维图

质量监控分为性能质量监控、功能质量监控、安全质量监控

性能质量监控

基础监控

cpu/cpuload/mem/jvm mem/iowait/diskbusy/net/spinlock/fullgc/ spinlock(使用自旋锁(spinlock)来实现进程调度的问题)

应用监控

Latency/hit ratio/recursive call/queuesize/thread status/stack/Latency(它表示完全执行一个指令所需的时钟周期)

业务监控

Pv/uv/transaction/
例如:下面是一个TPS统计结果如下图

TPS统计结果图

功能质量监控

1、建立线上拨测功能
2、统计线上用户失败率进行分析优化如:请求超时,是业务超时,还是系统超时如下图:

线上用户失败监控

安全质量监控

线上安全质量监控可以采用WAF防火墙。例如NGINX中的ngx_lua_waf支持 WAF 防护功能。
对上面三大部分只是说的简单的监控,并没有深化,对上面三大监控可以进行持续优化,关于质量运维提到的部分还可以跟踪完善、优化,线上质量运维空间还很大。

附录

名词说明
黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查
灰盒测试:是介于白盒测试与黑盒测试之间的,可以这样理解,灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不象白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。
恢复测试:主要检查系统的容错能力。当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。恢复测试首先要采用各种办法强迫系统失败,然后验证系统是否能尽快恢复。对于自动恢复需验证重新初始化(reinitialization)、检查点(checkpointingmechanisms)、数据恢复(datarecovery)和重新启动(restart)等机制的正确性;对于人工干预的恢复系统,还需估测平均修复时间,确定其是否在可接受的范围内
互联网的特性:我们可以总结为四个字多、快、好、省,1、多就是指用户多,信息量多和服务器也多,在这个庞大的消费群体作用下,有着巨大的利润市场。2、快是指获取信息和传递信息的速度快,这无疑给信息交流和商贸活动提供了快速的通道。3、好是指在互联网上我们可以根据我们的需要,选择我们个性的东西,不需要因为别的因素而耽搁。4、省是指省时、省力、省财、省物、省心、省神,还可以节省很多很多的费用
DevOps****的技术栈与工具链

Everything is Code,DevOps也同样要通过技术工具链完成持续集成、持续交付、用户反馈和系统优化的整合。Elasticbox整理了60+开源工具与分类,其中包括版本控制&协作开发工具、自动化构建和测试工具、持续集成&交付工具、部署工具、维护工具、监控,警告&分析工具等等,
补充了一些国内的服务,可以让你更好的执行实施DevOps工作流。

上一篇下一篇

猜你喜欢

热点阅读