

“最让我自己着迷的,就是回顾技术方案的发展历程与前进轨迹。而在开发与计算机进行通信的程序方面,就有着这样一段精彩纷呈的历史。”
Ada Lovelace被公认为第一位程序员,她于十九世纪中叶就编写出第一款以Charles Babbage分析引擎计算伯努利数的程序。在二十世纪,出现了用于Lambda演算的编码语言并基于磁带的图灵计算机。之后,汇编语言、FORTRAN、LISP、COBOL、BASIC、C以及SQL等一系列通用及专用编程语言迅速涌现,这股风潮也一直持续至今。快进到今天,我们已经拥有Python、Java、Rust、Julia、Swift外加一整套专供人类与计算机通信、并用于实现特定结果而设计出的编程语言组合。
虽然编程语言本身得到了巨大发展,但其核心仍然遵循一大共通原则:让计算机以最高效、最不易出错的方式完成目标。现代语言的种种设计特性都在强调降低开发门槛,但我们实际检查各代码行以及保证其无错运行的具体方式却并没出现太大变化。换句话说,我们在提高代码质量、增强性能以及降低运营成本方面一直没有给予足够的重视。
📢 想要了解更多亚马逊云科技最新技术发布和实践创新,敬请关注在上海、北京、深圳三地举办的2021亚马逊云科技中国峰会!点击图片报名吧~
构建与发布规划曾经大大拖慢了开发人员交付新功能的速度,而云计算则通过提供Amazon Step Function的形式努力拉升代码的构建、测试与部署速度。新的函数现在可以在数小时(而非以往的数月乃至数年)内交付,并在确认就绪后立即被转交至最终用户手中。而其中大部分工作的实现基础,正是由IT及软件开发团队探索出的协同交互与构建最佳实践新范式——也就是DevOps。
尽管DevOps技术在过去五年中取得了重大发展,但其中仍有不少挑战性因素。与并发性、安全性或敏感信息处理相关的问题仍然需要专家评估,而且往往无法同代码审查及单元测试等现有机制相抵触。即使在那些有能力组建专业代码审查团队的大型机构当中,极高的软件代码创建速度也必然带来大量难以手动审查的复杂代码。抽样永远属于随机行为,因此无法保证手动过程能够发现所有(甚至大部分)相关错误或性能问题,最终导致技术债务积累、客户体验受损。
携手机器学习“大师”
共同构建与运营
在意识到这些挑战之后,亚马逊云科技决定踏上以最新技术革新DevOps的征程。我们开始将DevOps及其相关工具链视为统一的数据科学问题——通过这样的思考方式,代码、日志以及应用程序指标被瞬间转化为可以通过机器学习(ML)技术加以优化的数据。
以代码审查为例,这项工作对于提高软件质量、增强软件安全性以及推动核心代码库团队知识转移至关重要。Amazon CodeGuru Reviewer于2020年6月正式发布,使用机器学习加自动推理以自动识别出应用程序开发过程中的各关键问题、安全漏洞以及难以发现的bug。

CodeGuru Reviewer还能向开发人员提供各类建议,帮助用户快速修复问题、提高代码质量、显著降低修复bug所需要的时长,最终避免面向客户的应用程序造成难以挽回的实际影响。为了简化使用过程,新方案并不会影响开发者们的常规代码审查流程——团队可以直接将CodeGuru添加到现有开发管道当中,即可节约时间并降低不良代码产生的成本及负担。在这些工具的支持下,客户敏捷度有效提升、创新速度加快,客户体验也得到显著改善。如此一来,开发人员得以专注于处理自己最关注的核心工作——发明与构建。自推出以来,Reviewer已经扫描超过2亿行代码,并为开发人员提供165000条修复建议。
事实上,每天有超过25000名Amazon开发人员使用CodeGuru支持自己的代码审查流程。
实践科学——为您的代码提供有价值见解
那么,这一切在底层究竟是怎么实现的?从高层级上看,CodeGuru Reviewer接纳了来自亚马逊云科技以及Amazon数十年积累得出的最佳实践与经验。我们使用机器学习加自动推理,帮助客户以自动化方式汲取我们对数千套开源及Amazon repo进行几百万次代码审查所得出的洞见结论。
CodeGuru Reviewer还以多种方式应用机器学习技术,包括分析现有代码变更、推理不完整信息以及避免资源泄露的形式构建最佳实践模型。作为单一服务,Reviewer的执行速度超越一切手动代码审查,能够在30分钟之内扫描100万行代码,帮助用户在代码开发流程中节约大量时间。更重要的是,它还能就发现的问题提供相当靠谱的修复建议。
在以下示例中,Reviewer在代码分析中无需引入任何依赖项即可准确识别出丢失的部分,并使用机器学习技术对可能存在资源泄漏的位置做出适当决定。CodeGuru将静态分析与机器学习相结合,能够准确向开发人员发出bug警告,同时极大降低误报几率。传统的纯静态代码分析方案经常出现误报,这是因为分析往往建立在不完整的信息之上(只面向源文件,接触不到代码库中的外部依赖项)而CodeGuru Reviewer中的资源泄漏检测器则将静态代码分析与机器学习模型组合起来,用于推理外部依赖项并提供更准确的建议。


这还只是CodeGuru Reviewer帮助开发人员实现审查流程自动化的其中一种方式。它也可以在您将代码实际部署到生产环境之前,对安全漏洞、语法错误以及其他可能引发严重后果的bug做出全面检测。
找出应用程序中
资源耗用量最大的代码行
代码审查当然只是DevOps故事中的一小部分。最佳实践的另一方面,在于测试及生产阶段下的应用程序分析。对性能问题的故障排查、发现及查明异常状况、捕捉耗用大量计算资源的非必要代码行等以往都属于高度手动而且极为耗时的过程。
另外,传统应用程序分析工具也经常遗漏某些难以发现的代码块,而不少严重问题也许就在这些块中。CodeGuru Profiler能够帮助开发人员理解其应用程序的运行时行为、识别并消除代码效率低下因素、提高性能并降低计算成本,同时充分运用CodeGuru Reviewer提供的补充性自动化代码审查功能。简而言之,CodeGuru Profiler能帮助您发现资源成本最昂贵的代码行。Amazon内部团队已经将Amazon CodeGuru Profiler应用于3万多款生产级应用程序,借此节约下数造成美元的计算与基础设施成本。

我们为CodeGuru项目制定的发展目标,是通过机器学习技术引入一种新的DevOps思维方式,由此全面超越手动代码审查与传统应用程序分析方法。CodeGuru将帮助开发人员主动(而非被动)地利用由机器学习提供的洞察见解,由此建立起能够不断学习的持续反馈循环,最终提升自身的开发水平与工作效率。如此一来,开发人员也能降低部署风险、加快新功能交付速度,更好地维护起高质量的客户体验。
与所有亚马逊云科技服务一样,我们也在不断改进CodeGuru、扩大语言支持范围并深化它能向开发者用户提供的调整建议。最近,我们还引入一种全新计费结构,以帮助客户根据项目规模及部署计划为代码审查整理出可靠的预算及扩展范围。在不久的未来,CodeGuru还将迎来更多振奋人
新时代展望:DevOps的功能扩展
借助CodeGuru,我们深入研究了代码审查与应用程序分析的自动化可能性。但除此之外,我们还需要做出更多探索以推进DevOps转型。近期,我们发布了Amazon DevOps Guru,这项服务运行在基础设施层级之上,负责进一步增强及自动化DevOps流程。该服务能够分析应用程序指标、日志、事件及跟踪等数据,据此构建基准运营行为,而后使用机器学习技术检测一切异常状况。DevOps Guru的伟大之处在于,它总结出的既定行为基准并非静态存在,而是可以纵观多种完全不同的指标、发现其中的异常,并预先判断出应用程序所受到的可用性及性能影响(例如延迟及传入请求)。该服务使用预训练机器学习模型,可识别出应用程序请求中的峰值,而后将各项指标关联并组合起来以理解不同要素间的根本关系。在这样的基础之上,DevOps Guru才能准确判断何时有必要发出警报、哪些状况属于正常波动。

我很明白凌晨2点被警报惊醒,但研究了半天发现只是误报的那种痛苦。事情本不用这样的,DevOps Guru正是我们为了解决这类问题做出的尝试——减少误报、以高置信度方式识别问题,并在事态变得难以挽回(严重宕机、漫长的宕机时长以及糟糕的客户体验等)之前给出问题解决建议。
与CodeGuru一样,DevOps Guru的一大核心亮点,在于其使用过程不需要任何机器学习专业知识。它会提供明确的建议,甚至是关于解决方法的说明文档链接,就是这么轻松易用。
DevOps的下一阶段
借助CodeGuru与DevOps Guru,我们对DevOps的全新发展阶段、特别是通过机器学习功能增强开发者专业知识所带来的无限可能性感到兴奋不已。我们已经看到来自不同行业的客户着手采用这些技术,以更坚定的信心构建自己需要的程序成果。而新兴技术的加持,也让他们相信自己的应用程序将安全、高性能、无bug。借助由机器学习加持的DevOps工具,客户将节约下更多时间和精力,真正用于创新探索并为客户提供出色的使用体验。
将ML应用于DevOps将是一个游戏规则的改变者。我们才刚刚开始。


听说,点完下面4个按钮
就不会碰到bug了!






