代码|工赋开发者社区|@所有开发者,重塑云开发生产力的黑科技来了!


关于工赋开发者社区
工业互联网开发者社区是上海市工业互联网研发与转化功能型平台中重要的建设内容 , 由工业互联网创新中心牵头 , 联合上海市工业互联网协会、上海积梦智能、上海电气等单位共同打造、合作运营 。 在上海市科委、市经信委、中国信通院、工业互联网产业联盟指导下 , 于第二届世界人工智能大会工业智能峰会上正式发布 , 将着力建成工业互联网主题的国内主流开源技术社区 。


代码|工赋开发者社区|@所有开发者,重塑云开发生产力的黑科技来了!
文章图片

近日 , 在华为开发者大会(Cloud)上 , 华为云发布了基于华为云 CloudIDE 的智能化编码工具和云原生应用调测工具 。
华为云开发工具和效率首席专家、华为开发工具技术专委会主任王亚伟在“下一代云原生开发工具”主题演讲中 , 介绍了如何基于智能化代码补全技术(SmartAssist)和微服务集群调测技术(CloudDebugger)重塑编码和微服务调测生产力 。 王亚伟表示:“在企业数字化转型的大背景下 , 智能化开发技术将进一步催熟云原生技术和产业 , 成为企业应用现代化改造的助推器 。 ”

代码|工赋开发者社区|@所有开发者,重塑云开发生产力的黑科技来了!
文章图片

华为云开发工具和效率首席专家、华为开发工具技术专委会主任王亚伟介绍 CloudIDE
1
智能 AI 代码补全—SmartAssist
代码补全是软件开发工具最核心的能力之一 , 它能够在开发者输入几个字符的情况下 , 提示补全整个符号如方法调用、类型名、变量名、类字段、关键字等 , 在一些常见上下文下 , 代码补全甚至可以补全整行代码 。 然而 , IDE 自带的代码补全主要基于名字匹配 , 类型匹配和语法分析 , 补全能力比较有限 。 随着近几年 AI 技术的广泛应用 , 基于 AI 的智能代码补全技术也得到了长足的发展 , 出现一批技术领先应用规模巨大的公司 。

代码|工赋开发者社区|@所有开发者,重塑云开发生产力的黑科技来了!
文章图片

王亚伟团队从两年多前开始研究 AI 智能代码补全技术 , 他们认为未来 DevOps 工具的产业机会之一就是开发工具和全流程的智能化 , 同时 , 在企业数字化转型的大背景下 , 智能化开发技术将进一步催熟云原生技术和产业 , 成为企业应用现代化改造的助推器 。
王亚伟介绍道 , 起初考虑到代码补全与自然语言处理有一定的相似性 , 而 RNN 在 NLP 领域应用广泛 , 因此他们也构建了基于 RNN 的代码模型和解决方案 。 该服务上线之后虽然在华为一些产品线规模应用起来 , 但用户的反馈一般 , 主要是补全的准确性和有效性不好 , 推荐结果经常有语法错误或语法正确但不能通过编译 , 让用户体验大打折扣 。
代码补全跟 NLP 问题相似但却完全不同 , 自然语言是序列化的语言 , 所以语言模型可以有效的基于前面的单词预测下一个词(概率);高级编程语言 , 虽然跟自然语言接近 , 但其需要遵循固定的语法结构 , 并且在看似相似的代码片段之中蕴含着复杂的控制和数据流 , 所以用纯粹 NLP 方法来解决代码补全的问题 , 效果必然不好 。
针对之前用户的反馈 , 王亚伟决定探索一种新的架构和方案 。 该方案将智能代码补全问题当做文本分类问题而非文本序列预测问题 – 文本分类问题即根据开发者“意图”对文本进行分类 , 这里的“意图”是通过代码上下文环境体现出来的 。
经过两年的研发 , 王亚伟团队开发了基于深度代码分析和多种特定场景深度学习模型的智能补全技术 - SmartAssist 。 SmartAssist 基本满足项目初期的四大目标:
1)较高的多符号补全准确率;
2)复杂上下文环境的非明显结果推荐如生僻的第三方 API;
3)对过期、弃用甚至危险的 API 和代码模式进行过滤的能力;
4)推荐结果语法正确并且确定能通过编译检查 。
当前 SmartAssist 主要面向 Java 语言提供智能补全 , 王亚伟团队正在开发面向 JavaScript 语言的版本 , 后续会支持所有主流的编程语言和框架 , 让开发者们在华为云 CloudIDE 上开发代码变得更高效 , 开发出的代码更稳定更健壮 。
2
CloudDebugger 如何重塑微服务的调测生产力?
单体架构的软件调测很方便源自于其简单的进程模型 , 开发者只需要通过 IDE 将调试器连接到对应进程 , 即可进行调试 。 微服务开发中的调测就没有这么方便 , 需要开发者通过单元测试对接口进行验证 , 等所有开发者完成本地编码工作之后再统一部署到测试环境中进行联调 。 在这种模式下 , 开发者需要花费大量的时间精力编写单元测试用例 , 而这些测试需要依赖打桩(Mock) , 测试结果不完备造成统一上线联调时问题大规模集中爆发 , 不断返工造成巨大资源浪费 。
王亚伟团队深度参与华为云服务的开发和运维工作 , 深知微服务调测之痛 。 如何解决微服务调测的痛点 , 从而重塑微服务集群调测生产力就是 CloudDebugger 产品 idea 的源头 。
在 HDC.Cloud 主题演讲中 , 王亚伟通过一个典型的多人多版本微服务调测的场景 , 跟大家分享了 CloudDebugger 到底能给开发者带来什么价值?

代码|工赋开发者社区|@所有开发者,重塑云开发生产力的黑科技来了!
文章图片

在这样多人多版本微服务集群调测的场景下有三个用户:用户 1、用户 2 和用户 3 。 用户 1 通过 CloudDebugger 发起了调试会话 , 他的调用链条是微服务 A 的 1.0、B 的 1.0 和 D 的 1.0 版本;用户 2 的调试会话调用链是微服务 A 的 2.0、B 的 2.0 和 D 的 2.0 版本;用户 3 在进行微服务 3.0 的开发 , 他不关心其他微服务 , 所以调用链是微服务 A(所有版本)、C(所有版本)和微服务 D 的 3.0 版本 。 在这样一个复杂的场景之下 , CloudDebugger 能给开发者带来什么?第一 , 这三个用户之间的调试会话互相独立 , 互不干扰 。 用户 1 的请求只会触发他在自己 IDE 中设置断点而不会触发其他人设置的断点 , 哪怕他们设在同一个源文件的同一行 。 第二所用户可以像调试单体应用一样调试微服务集群(通过 CloudDebugger 可以定义他们想调试的微服务组及特定版本) , 包括设置断点、单步跟踪、变量查看、调用堆栈等 。 CloudDebugger 还支持服务调用拓扑图 , 它可以动态展示、实时更新微服务之间的调用关系 , 让开发者清楚查看当前调测环境的上下文 。

代码|工赋开发者社区|@所有开发者,重塑云开发生产力的黑科技来了!
文章图片

除此之外 , 用户在微服务调测过程中需要不断修改代码 , 而传统模式下 , 修改代码意味着需要部署新的微服务版本 , 常见的流程是:提交 ->流水线拉取源码 ->编译 ->镜像构建 -> 部署 -> 测试 。 频繁的修改需要部署任务反复执行 , 虽然该过程可以自动完成 , 但是每次调试修改均需要经历该步骤 , 耗时比较长 , 效率很低 。 面对这个痛点 , CloudDebugger 支持代码热替换功能(Code HotSwap) , CloudDebugger 可以做到把每次用户修改的增量代码动态的、无宕机的、一键式更新到远端微服务实例 , 整个过程用户无感知 。

代码|工赋开发者社区|@所有开发者,重塑云开发生产力的黑科技来了!
文章图片

【代码|工赋开发者社区|@所有开发者,重塑云开发生产力的黑科技来了!】王亚伟还介绍了 CloudDebugger 的三大核心技术
第一:独立的调试适配服务 , 用 CloudDebugger 调试一个远端微服务的同时 , 本地的 Debugger 可以调试一个其它的程序 , 比如客户端 GUI 程序 。
第二:智能调试消息路由可以确保多用户的多 IDE 实例和多个微服务实例之间调试消息的可靠和一致性传输 。
第三:独创的基于命名管道的批量消息传输的机制 , 可以确保在租户端的 Agent 可以跟微服务实例之间高性能、高吞吐的消息传输 。 正因为这三点 , CloudDebugger 可以重塑微服务的调测生产力 。 华为持续投入基础软件技术研究 , 华为云 CloudIDE 服务旨在“做最好用的云端 IDE 服务” , 为云原生开发者重塑开发生产力 , 帮助企业数字化转型和落地华为云云原生 2.0 , 真正实现生于云、长于云、立而不破 。

    推荐阅读