从QA的角度来谈谈代码质量的改进

Oct 31, 2016| 343 Hits

大部分人看到这个题目时,直接的反应是QA关心代码质量干嘛,能看懂代码吗?怎么给dev feedback?

qa

如果还有人持这样的观点后,那么我只能说too young too simple。
首先我们得谈谈什么是代码质量?
创建优秀的代码涉及到正确性、可维护性甚至优美性。
正确性,最起码你的代码实现的业务逻辑是正确的。
可维护性,公司中其他的小伙伴能看看懂你的代码逻辑,便于修改代码。
优美性,符合各种代码规范,其他人看到代码后惊为天人。
但是要做到以上几点绝非易事,首先你得有高超的编程能力,其次你对前端或后端的代码规范有深刻的理解,但是能有这样能力的人又有多少呢?
我们都知道软件开发是团队合作才能完成的工作。
那么项目的质量与客户的需求才是项目生存下去的关键。
所以怎么才能改进项目代码的质量?我们先看看业界巨头公司都是如何做的?

microsoft怎么做?

microsoft

我们都知道微软是做操作系统出身的,其实微软的测试能力与测试工具都是业界中领先的,以下是两张表展示的是微软如何从visual studio与开发过程中提高代码质量

Visual Studio

标准 描述
使用代码分析工具分析应用程序质量 静态代码分析工具可查找 C++ 和托管代码里的设计、使用、可维护性和样式问题。 其中的许多问题可能导致难以在标准测试环境中重现的 bug。
单元测试代码 “测试资源管理器”可以在开发实践中轻松地集成单元测试。 可以使用 Microsoft 单元测试框架或若干第三方和开源框架之一。
测量托管代码的复杂性和可维护性 代码度量是一组软件度量值,使开发人员可以更好地了解他们正在开发的代码。 度量值包括函数和类的可维护性指数、函数的圈复杂度、类的继承深度和类耦合度的数值。
使用代码克隆检测功能查找重复代码 代码克隆工具可用于在整个 Visual Studio 解决方案内搜索 Visual C# 和 Visual Basic 项目中重复或高度相似的代码。 可以经常重构代码以消除重复代码,从而创建更易于维护的解决方案。
PreEmptive Analytics for Team Foundation Server PreEmptive Analytics for TFS CE 有助于将反馈驱动的开发过程集成到开发工作流中。 当应用程序在执行过程中发生错误时,它会自动将异常报告数据发回给 PreEmptive Analytics 服务。 然后,该服务将根据你定义的规则和阈值创建或更新 Microsoft Team Foundation Server 中的工作项。
PreEmptive Dotfuscator 和 Analytics CE PreEmptive Dotfuscator 是 .NET 模糊处理程序和压缩程序,有助于防止程序遭遇反向工程,同时使程序更小更高效。

开发过程中改进代码质量

标准 描述
设计和代码的检查准则 提供若干帮助进行设计和代码检查的技术,通过让其他同事检查代码来发现 bug 和不正确的假设。
安全代码编写准则 描述编写安全代码的技术和策略。
高质量代码签入准则 列出以不同方式检查代码以确保代码实现您的预期高质量设计目的的准则。
代码分析工具使用准则 提供几条使用代码分析工具的准则。
检测和更正 C/C++ 代码缺陷 描述如何使用用于托管代码的代码分析工具检测和更正代码缺陷。
代码分析签入策略 描述如何创建与 Team Foundation 源控件签入关联的自定义签入策略。
调试准则 提供几条查找代码缺陷的准则。

google 又是怎么做?

google

  • 代码审查。在你提交任何代码改动之前,你得找去代码“主人”签字确认。为了实现,评审者(被鼓励去)建议大修代码,而不是让它成为根本没有经过思考的“图章”代码。

  • 按语言可读性要求坚持代码风格指南(请参阅这里)。除了让我们代码有统一的外观(所以我们能快速识别方法、变了等),我们的风格指南禁止了一些复杂、混乱、易出错的 C++ 特性(比如:class 类型的静态和全局变量)。

  • 整个团队都致力改进我们代码库的质量,维护我们的核心库,不断做出更好的工具。

  • 一个活跃的“code health”课题组。

  • 发布软件时,不对外部期限承担责任。一般而言,这让我们可以正确做事,而非为了期限内完成任务把乱七八糟的代码拼凑起来。
  • “Fix it.” 例如,一个工程师或许说,“我认为我们真应该别再用过时的 Cruft Map 类(class)了。我打算在 1 月 20 日组织一次 Fix it。” 当 1 月 20 日来临时,大家应当暂停其正常运作,把他们代码中的 Cruft Maps 都换掉。在 1 月 21 日,Google 就永远和 Cruft Map 说拜拜了!不过最近,核心库团队已经很优秀了,貌似没有啥东西可再值得类似的 fix it 了。
  • 测试文化。单元测试覆盖率可能接近 100%,我们有持续构建/整合/测试,还有知名的 “Testing on the Toilet” (请参见Google Testing Blog)

facebook 呢? 又有什么不一样

facebook

  • 开发对质量负责: 开发从设计,实现,测试,到部署都要自己做。其它做工具,流程的工程师通过开发工具和流程来帮助开发人员更为简单方便地做测试,做部署和做监控。每个开发人员有自己单独的测试环境,测试环境就是运行在开发本地机器上,部署非常简单快速。测试环境用的是真实的用户数据。
  • 持续集成和测试自动化:每周发布一次。星期天晚上,要发布的构建从主线上分支出来到发布分支,到星期二的中午如果没有大的问题,就可以上线了。所有的测试运行控制在10分钟以内,所以不需要考虑不运行哪些测试用例。运行所有测试用例。 (只是听说,没有经过考证。)
  • 严格实施代码审计:在Facebook 做 code review时间大约占50%,管理者对代码质量负有一定责任 。甚至代码质量高于一切:Facebook Code review是重点KPI考核的对象,实行连坐制,如果因为代码质量问题,那么产生的KPI责任包括领导30%、程序员50%、审核人员20%。 在代码checkin之前,都要由专人进行review。Facebook 创始人兼 CEO 马克扎克伯格会亲自对 News Feed 每个代码更新把关。在 Facebook,所有重大升级的代码都进行强制评估,任何一个改动都至少由一人把关。但是,无论工程师对 News Feed 做出任何改动,都将由扎克伯格亲自把关。
  • 内测 (dog food):发布之前,公司员工使用要发布的功能。2-3天之内可以有几百个或上千个人在使用新功能。负责要发布功能的开发人员在星期天晚上到星期二中午之间会做大量的测试 。
  • 通过灰度发布控制风险:新功能本身质量可能有问题,新功能也可能影响其它现有功能。为了减少或控制这些风险。Facebook开发了一整套完善的发布,控制,监控流程和工具。做到:1.测试通过后,产品质量基本有保证。2.即使有漏测的bug,只会影响很少量的用户。3.及时监控到问题。4.及时修复。
  • 产品监控:通过社区讨论的正负面舆情,及与历史应用数据的对比情况,监控产品的系统的运行状态技术修复。

    thoughtworks 业界以敏捷著称的软件企业又是如何改进的

    thoughtworks

从以上业界代表公司的改进方式,我们可以看出它们都是从以下几点出发的:

  1. 完整的单元测试覆盖率
    UI自动化测试的覆盖率很难被保证,不断的改变的ui,使使用UI测试来验证产品的功能变得十分麻烦,但是单元测试则不同,各种语言都有自己的测试工具以及测试覆盖率工具帮助我们更好的完善我们的代码质量,我们也可以用接口测试与pact测试来保证第三方集成服务的正确性,所以高覆盖率的单元测试时产品的质量的基础。
  2. 严格的代码审查机制
    facebook,google,微软等公司严格的代码审查机制,是确保代码不被破坏的关键点,不会因为团队成员的某次粗心的提交,造成整个项目的失败。
  3. 强大的代码分析工具
    代码级别的规范化,以及动态与静态扫描,进一步的帮助软件开发人员、质量保证人员查找代码中存在的结构性错误、安全漏洞等问题,从而保证软件的整体质量。与CI,CD的集成,能够让我们尽早的发现代码中存在的错误。

  4. 规范化的测试流程
    各个公司规范化的测试流程,保证项目在每一阶段都能够输出高质量的代码。

  5. 完善的风险控制
    完善的风险控制,不仅仅表现的google与Facebook的A/B测试,也表现在当有任何重大问题时,能够随意的切换到旧的版本,保证产品不因为该问题,就造成宕机。
  6. 实时的监控
    这些行业的巨头,都有着非常强大的运维团队,从产品的开发阶段就开始实施了各种监控手段,监控范围包括编译阶段,部署阶段,产品环境,硬件服务器的状态等,帮助项目的中所有成员及时的发现产品中存在的问题,快速跟踪以及定位问题。

最新内容请见作者的GitHub页:http://qaseven.github.io/

QA seven's blog相关推荐

  1. 数据库性能测试方案示例

    前言 :   究竟怎样进行数据库性能测试,数据库性能测试需要做些什么?大多数产品线的RD和QA也比较迷茫,经常过来咨询.   一般说来,做数据库性能测试需要如下几个步骤: 1:明确测试目的 2:设计测 ...

  2. mysql数据库性能测试实例_数据库性能测试方案示例

    究竟怎样进行数据库性能测试,数据库性能测试需要做些什么?大多数产品线的RD和QA也比较迷茫,经常过来咨询. 一般说来,做数据库性能测试需要如下几个步骤: 1:明确测试目的 2:设计测试模型 (即压力模 ...

  3. 利用python画折线图

    Get一个使用python制作矢量图的新技能: 前言: Matplotlib远比我们想象的强大,而这只是众多python强大的包中的一个,不愧是群英荟萃. 绘图后端我们一般是看不见的,matplotl ...

  4. jmeter,TCPCopy,loadrunner 等测试压测工具使用教程

    2.JMeter环境设置 – Jmeter中文网 Apache JMeter - User's Manual: Getting Started JMeter学习(一)工具简单介绍 - 阳光温暖了心情 ...

  5. 使用Python处理Word文件

    使用Python处理Word文件 安装外部模块python-docx pip install python-docx 1. 从Python看Word文件结构 在python-docx模块中,将Word ...

  6. 服务端客户端QA:协作对接沟通流程及优化

    2019独角兽企业重金招聘Python工程师标准>>> 测试覆盖分工 1.     C端主要覆盖服务端接口逻辑,保证接口功能正常,NA端主要负责App 功能流程及兼容性测试,C端QA ...

  7. 技术QA:在 Outlook 2000 里为何不能取消“对已读回执的请求的使用”?

    引子: 目前还有很多企业还在使用比较旧版本的Office以及Windows,因为早期版本的设计问题可能会引出一些使用上的限制.另外,Windows 2000和Outlook 2000的相关产品已过微软 ...

  8. 技术QA:如何把EXE转成MSI?

    引子: 在我们使用组策略来安装部署应用软件时,最常碰到的问题就是:活动目录中软件分发只能分发MSI文件,不能分发exe文件. 虽然使用SMS可以分发exe和msi文件,但在我们企业的生产环境中可能没有 ...

  9. 采访Jesús Fernandes(QA主管)

    为什么80%的码农都做不了架构师?>>>    Jesús Fernandes是软件测试质量保证方面的专家. 他拥有美国佛罗里达大学信息系统和运营管理学士学位,及西班牙和葡萄牙大学I ...

最新文章

  1. 【初阶】unity3d官方案例_太空射击SpacingShooter 学习笔记 显示分数时,如何让函数之间相互交流...
  2. ViewPager,TabLayout,Fragment实现tabs滑动
  3. Python基础(1) - 初识Python
  4. 用matlab画三维凸起,求助大牛MATLAB画三维等势面
  5. 服务器负载不高 响应慢_京东面试官问我什么是负载均衡,兄弟们我这样说对嘛?...
  6. [云炬学英语]每日一句2020.9.3
  7. C++ 关键字new
  8. JAVA基础知识系列---进程、线程安全
  9. element-ui介绍
  10. python迭代-可迭代对象与迭代器对象
  11. JavaBean规范、EL、JSTL、
  12. 【python函数】函数
  13. Test for open live write
  14. 如何使用ITEXTSHARP将HTML代码字符串写进PDF
  15. 超分20220218讨论
  16. Windows程序设计的第一个实例
  17. QTP10.0的下载安装及所遇问题
  18. 计算机中缺少qt5quick.dll,qt5quick.dll
  19. 浙大 PAT 甲级 1075 PAT Judge
  20. 读书 -- 个人购书经验总结

热门文章

  1. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
  2. 规模化敏捷框架(SAFe)的原则
  3. Flutter:删除所有已保存的shared_preferences首选项
  4. java基础知识讲解(一)数据类型和运算符
  5. 汇编语言的程序设计方法(循环结构和分支结构)
  6. 3、Docker容器操作
  7. idea 用iterm 终端_帅气逼人的终端环境
  8. 单片机中灯泡显示miss_单片机实例分享,如何设计八路抢答器
  9. 神策数据荣获 36 氪 「2020 中国新经济之王」之「最具影响力企业」和「最具竞争力企业」双奖 !...
  10. CEO 赠书 | 讲述创新背后不为人知的故事,改变世界的 Ta 们做对了什么?