AI在软件工程各阶段如何应用,有哪些好的实践方式,助力企业数智化转型

随着人工智能技术的不断发展,AI在软件工程领域的应用日益广泛,它正以前所未有的速度改变着软件开发的各个环节。从需求分析到设计、编码、测试,再到部署实施和维护,AI技术的引入极大地提高了软件工程的效率和质量。下面将会带大家具体聊聊,AI在软件工程中都是如何应用的,有哪些好的实践方式。


AI助力软件工程


需求分析

1、定义用户需求

AI可以通过分析用户的历史数据和行为,挖掘用户特定需求和偏好,可以使企业更好的了解用户需求,设计和开发出更好的产品。这一部分可以考虑用一些商业的数据分析工具,例如DataChat AI、Kyligence Copilot等,但考虑到企业对数据安全层面的顾虑,也可以考虑企业内部基于RAG + LLM自行搭建数据分析系统。


2生成User Story

AI可以通过分析产品描述或需求文档,更好的生成符合用户行为习惯的User Story,节省产品经理时间。例如,AI可以分析User Story是否符合INVEST原则,提供优化建议,如拆分过大的User Story、完善不够明确的描述等;也可以用AI自动生成Given...When...Then...格式的验收标准,明确用户故事的测试场景和预期结果,方便开发和测试。这里的实践方式,我推荐构筑一个基于AI的问答系统,选择基础能力强的大模型,如果支持多模态就更好了。


3、逆向工程

AI可以分析系统源代码,自动生成文档,增强对遗留系统的理解;也可以分析API调用、内存访问等,识别出恶意行为或系统漏洞等,提高软件的安全性。这里的实践方式,我推荐可以考虑使用一些Code Copilot工具(这部分产品会在下面开发部分说明),通过分析代码更好的理解系统,还有可以考虑用AI去分析日志。


4、一致性分析

利用AI去分析需求文档来检测不一致或重叠的地方,通过发现潜在的问题,从而分析和修改需求,以便更顺利的进行系统开发。


设计

1、概要设计 & 详细设计

AI可以通过分析需求文档,对系统进行业务层面的概要设计和详细设计,这里推荐使用问答系统进行交互,根据AI生成的内容,让其逐步细化。因为每个公司、每个项目的概要设计和详细设计标准和格式不同,所以推荐一些标准和模版性质的内容作为RAG知识库,辅助进行概要设计和详细设计的生成。


2、技术选型 & 定义架构

利用AI进行分析需求、概要设计、详细设计等业务性质文档,让其帮我们做技术选型,辅助定义整体系统架构,再结合公司的现有技术储备等因素,整体决定系统技术要素。这里强调一点,AI只是起到辅助作用,让AI直接去给你生成一个系统架构图现在还达不到我们日常期待的标准,技术不够成熟。整体的实践,还是问答系统为主(这里所指的问答系统均为支持上传文档后进行解析的功能)。


3、生成数据模型

利用AI自动创建实体关系图和数据结构来简化数据建模(例如生成Table Schema,ER图等)。通过分析需求和设计文档,制定最佳模型,确保一致性并减少手动设计工作,从而加速系统开发。这一部分的实践方式,还是使用问答系统,但是生成的格式层面大多数时候难以达到我们的期望,需要调整。


开发

无论是生成业务代码,还是单元测试代码,或是对代码进行优化,还能对代码进行Review,发现代码中潜在问题,现在最好的实践方式是Code Copilot(插件方式),并且技术相对成熟。Code Copilot市面上产品非常多,最强王者是Github Copilot,信息安全级别较高的可以考虑使用Github Copilot Enterprise。如果信息安全级别特别高,完全和外网隔离,可以考虑用Continue Plugin + 私有Code LLM(Code LLM选型可以参考 https://huggingface.co/spaces/bigcode/bigcode-models-leaderboard )的方案。但是关于开发这部分,未来的发展方向是AI程序员 + Code Copilot结合的形式,各大厂商现在也都在发力AI程序员方向,例如之前特别火的世界上第一个AI程序员Devin(后证实视频造假)和 微软的Github Copilot Workspace,不过技术成熟度上还需评估。


AI助力于开发这部分,生成代码层面主要是助力于开发生产性的提高,而对代码进行优化,对代码进行review发现潜在问题是助力于代码品质层面。代码Review过程中AI不单单是可以进行静态检查,也可以针对业务逻辑进行Review,让AI去帮你校验式样书和代码的匹配度,发现代码逻辑不符合业务是样书的地方。


测试

1、生成测试Case

AI可以通过分析软件规范、User Stroy和业务文档等来自动生成测试用例。它预测潜在的边缘情况,确保全面覆盖,并定制测试以验证所有功能,从而增强软件测试阶段。现在核心的实践方式还是问答系统为主,但是一些规范和模版性质的内容,可以考虑利用RAG做生成的增强。测试Case格式大多数时候都是Excel表格形式,而大模型对于Excel的支持性有些场景下还是偏弱,但是AI支持解析和生成Markdown格式,所以关于表格部分可以用Markdown语法绘制表格。


2、生成测试数据

AI可以分析系统的业务逻辑和数据流,自动生成具有代表性的测试数据,并且AI能够模拟各种用户使用场景,生成更贴近真实环境的测试数据。这种智能化测试数据的生成,大幅提高测试数据的覆盖率和代表性。同时也可以让AI去反向Check测试数据是否存在冗余或无效的测试数据,并自动调整数据的比例和组合,提高测试数据的质量。同时,AI还可以根据测试结果,动态调整测试数据的生成策略,不断优化测试数据。而具体的实践方式,还是问答系统为主。


3、自动化测试

现在自动化测试的新技术趋势是RPA+AI相结合。例如使用AI的NLP、OCR等技术,扩展RPA的工作范围,使其能够处理更复杂的任务,如理解自然语言、识别图像中的文本等。AI可以生成指令或内容(如图片、视频),然后由RPA驱动更多应用程序执行后续动作,提高了流程自动化的能力,还增强了业务流程的效率。现在一些好的商业自动化测试RPA工具,并且已经集成了AI,比如UiPath、Automation Anywhere、Blue Prism、Teste.ai、AI-TestOps等,开源的可以考虑Robot Framework、TagUI、RPAStudio等,但是需要自己集成AI。


实施

1、生成Infra脚本 & 项目部署脚本

AI不单单可以助力于在开发阶段提高生产性和保证项目品质,同样可以在Infra构筑和项目部署层面发挥重大作用,我们可以使用AI去生成Infra构筑的脚本,例如微软推出的Github Copilot的衍生品Infra Copilot,可以助力于基础设施专业人员更好的编写代码;也可用AI生成项目的部署脚本,比如可以自动创建针对特定语言和框架(例如 Python、Java 或 Node.js)定制的容器构建脚本,这其中当然也包括一些CI/CD工具的pipline脚本。


2、环境安全保证

利用AI还可以检测和修正Infra Code中潜在的安全漏洞,降低了违规和攻击的风险。还可以让AI自动化执行安全测试,如渗透测试和异常行为检测,可以帮助快速发现和修复系统中的安全漏洞。此外,AI还可以通过学习历史数据来预测潜在的安全威胁,从而提前采取防护措施。


支撑 & 维护

系统监控、分析 & 解决问题

AI可以监控系统的运行状态,预测可能出现的问题,并提前进行修复。在软件维护阶段,AI可以帮助工程师快速定位问题,提供修复建议,甚至自动修复一些常见的问题。例如当AI监控到系统有问题时,会自动触发警报,确保运维团队能够及时响应潜在问题;现在还有一个广泛的应用场景是使用AI对应用日常日志和性能指标等进行分析,发现潜在问题或针对已发生错误定位原因,提出可行的解决方案,指导团队制定有效的解决方案。具体的实践工具层面,可以考虑使用Dynatrace和New Relic等工具利用AI进行实时监控网络性能指标,如带宽利用率、网络延迟等,并通过数据分析找出性能瓶颈,提出优化建议。


--------------------


AI技术在软件工程中的应用前景广阔,它将极大地推动软件行业的发展,虽然有些技术和解决方案现在还不够成熟,使用起来略显繁琐(例如有些场景下利用AI生成内容的质量达不到预期,只能作为辅助和参考;还有些生成内容的格式需要我们进行后续处理才可以使用),但它在重塑软件工程方面的变革力量是不可否认的,它提供了以前无法想象的革命性工具和效率。

(正文完)

更多精彩内容,欢迎扫码加入免费知识星球
极客e家

共同打造极客文化

请使用浏览器的分享功能分享到微信等