PDF下载
基于NLP的需求设计文档辅助代码生成研究

薛文晶 范云龙 陈思卉 王思琦 马志远 冯士德

上海航空工业(集团)有限公司,上海市,200232

摘要: 为了高效率地从需求设计文档转化为可执行的代码问题,本文提出一种基于自然语言处理(Natural Language Processing, NLP)技术实现对文档的信息要素抽取,并通过推理模型对数据对象属性信息进行推断,并最终生成对应的代码的方案。该方案的重点技术包含:从标准模板文档中进行自动的属性抽取、属性类型判定以及前端代码自动生成等。通过实验验证了此方案有效提升了开发效率和质量,并且已经在民机制造运营管理系统开发中进行了运用。
关键词: 自然语言处理(NLP);代码转换;属性抽取;自动生成
DOI:10.12721/ccn.2025.157005
基金资助:
文章地址:

0引言

软件开发是一个复杂而耗时的过程,其中需求设计文档到代码的转换是其中一个重要且占用时间的部分,尤其对于企业管理信息系统而言,业务中存在巨量的表单填写需求。传统软件开发阶段的工作流程中,软件工程师需要自行阅读系统设计文档,理解其内容,根据产品经理设计的原型,并根据文档中的设计建立对应的数据模型,最终将其转化为代码。然而,手动人工解析文档耗时且容易出错,同时需要开发者具备深入的业务领域知识和编程经验,才能正确理解文档的含义,并根据文档中的语义逻辑写出正确的代码。因此,要满足企业软件系统的可维护性、可扩展性和可靠性,对于快速响应业务的需求还需要进一步优化开发的效率和速度。

近年来,随着人工智能技术的飞速发展,自然语言处理(Natural Language Processing, NLP)技术作为其中的一个重要分支,在文本处理和语义理解等方面取得了显著的进展。目前有应用语义及附加语义分析的技术对用自然语言表达的软件需求文本进行领域特定语义注释,实现特定场景下的语义分析[b];也有对于应用NLP在需求工程中的文本分析方法整合来进行文本提取的预处理研究[c],对于或者通过知识推理和强化学习结合实现封闭领域的推理[b];更有基于SVM[f] 或更加智能的ChatGTP[e]等方式来实现代码的及相关注释的自动生成[d]。但是ChatGPT目前对于业务分析的理解能力不够,因此,利用NLP技术辅助实现需求设计文档到软件代码的自动转化、编写基础代码,具有重要的实际意义和应用价值。

1关键技术分析

实现从需求设计文档到代码的转换实质上是由中文文档到英文代码的过程。在此过程中,主要的关键技术包含以下几个步骤:首先从中文的需求设计文档中自动抽取关键属性,理解并结合需求设计文档中对中文属性的类型的约束,生成英文属性名称和推断属性的类型,接下来根据属性类型实现前端代码自动生成,这几个步骤关系如下图所示,包含的关键技术介绍如下:

 图片1.png

图1 代码生成使用的关键技术步骤图

1.1自动属性抽取

自动属性抽取是NLP在需求设计文档到代码生成中的关键技术之一。利用NLP的特征抽取技术,可以从文档中提取出与代码相关的属性信息,包括属性名称、类型名称等。自动属性抽取的方法可以分为基于规则和基于机器学习两种。常见使用较多的方法为通常基于规则的方法,即通过定义一系列过事先定义和编写的规则集合来匹配和抽取属性,这些规则可以是条件语句、逻辑关系或约束,在基于规则的系统中,输入数据被匹配和比较,然后根据规则集合执行相应的操作或生成输出结果。但这种其对文档结构和语法要求较高,对于复杂问题可能需要大量的规则和维护工作。相反,基于人工智能技术的NLP的方法利用大量训练数据来建立模型,通过模型推理进行数据分析和决策来实现属性的抽取。该方法将文档中的文本特征映射到对应的属性类别,从而实现属性的自动抽取,并且相比于基于规则的方法更加灵活和准确。

在工程实践中,对于根据标准模板撰写的需求设计文档,输入的文本数据往往存在一定的标准格式。通过设定统一的规则库,结合中文AI模型的输出,可以得到质量较高的属性抽取结果。

1.2属性名翻译生成

在软件代码中,属性名称具有标识语义的作用。开发过程中开发人员通常会通过人工手动查询后翻译的方式,将中文属性名转化为英文属性名。然而,由于不同开发人员的理解水平和翻译习惯的差异,所生成的属性名称常常没有统一标准存在差异性。通过采用机器翻译模型技术,可以将识别到的属性输出为标准的英文属性名称,从而提高代码的可读性和可维护性。并可消除人为因素对属性名称的影响,确保生成的属性名称符合标准,并且有助于提高代码的一致性和可靠性。

1.3属性类型判断

在代码编写中,属性类型具有重要的信息价值,准确判断属性类型是确保代码正确性的前提。为实现此目标,可以采用自然语言推理技术来判定中文属性[g],并通过分析属性描述信息推断属性所需的数据类型。通过自动分析需求设计文档确定属性类型的方法,可以减轻人工判断的负担。主要实现方式包括基于中文训练模型的方法,并结合自定义的类型判定范围,通过训练数据建立模型,并将其应用判定属性类型。通过这个方法提高属性类型判定的准确性和效率,从而提升代码生成的可靠性和可维护性。

1.4代码自动生成

软件代码是软件开发过程中的重要输出。在面对大量的业务表单开发需求时,手动编写代码不仅费时,还容易出错。为了提高编码效率,本文提出将自然语言处理(NLP)技术应用于代码自动生成过程中。目前有通过使用语言模型来生成代码的研究[a],因此本文采用基于模板的代码生成方法:通过定义一系列代码模板及其关键词,从设计文档中提取的属性名称和描述信息与这些模板进行匹配,以生成相应的代码片段。如创建一个包含HTML和CSS的模板,将文档中的描述信息嵌入到模板中,从而快速生成格式统一的代码。这种方法能够有效应对不同场景下的业务需求,提高代码生成的质量和效率,推动软件开发过程更加自动化和智能化。

2实验与评估

为了验证自然语言处理(NLP)在需求设计文档到代码生成中的应用有效性和可行性,本研究采用了工程实践的方式进行实验,并比较了人工编写和NLP辅助编写代码两种方式。在某民机制造管理系统中的质量问题管理业务流程场景下,比较了长文本类业务和表单类两种不同业务场景下,实现面向业务专属的属性翻译,数据库表建立,基础代码编写等过程。实验过程中,采用Python语言实现算法的开发。主要过程有设计文档关键部分分词、实体识别、关键词识别等。为此,实验中建立了面向质量问题专业属性词典、基于开源的中文通用自然语言理解模型UniNLU孪生神经网络模型等。经过整合输出和分类结果获得编写代码的输入规则,并最终通过匹配预定义的规则库获得最终的代码。以下是辅助编写的流程示意图。

截图1742175978.png

通过面对同一具体场景下的两种不同方法的实践,获取到以下实验数据。

表1 两种方法的效果对比

截图1742175920.png

注:建立属性项总数为40条

实验结果表明,基于NLP的文档到代码生成方法相比传统的手动转换方法,在效率和准确性上均有显著提升。具体有以下三点表现:

1) 提高编码效率:NLP辅助技术能够快速从设计文档中提取关键信息,并将其转化为代码片段,极大地减少了手动编写代码的时间,尤其对于多参数的业务表单场景下提升明显。

2) 提高代码标准化:由于人工编写代码容易出现疏漏和错误,编写的代码不具有统一标准,而NLP辅助编写代码可以减少这些问题,提高代码的准确性和质量。

3) 灵活适应需求变化:NLP辅助编写代码的方法可以根据不同的设计文档和业务需求生成相应的代码,在不同的场景下只需添加或修改部分规则,具有很强的灵活性和适应性。

3结论

本论文介绍了NLP在需求设计文档到代码生成中的应用,包括自动属性抽取、属性名生成、属性类型判定和前端代码自动生成等方面的研究和实践。通过实验和评估,验证了NLP在这一领域的有效性和其在软件开发领域中的应用前景。然而,NLP在需求设计文档到代码生成中仍然存在一些挑战,如语义理解、模型的泛化能力和训练数据的获取等问题需要进一步研究和解决。相信随着技术的不断发展,NLP在软件开发中的应用将会得到更广泛的推广和应用。

4参考文献:

[1]  Perez L, Ottens L, Viswanathan S. Automatic code generation using  pre-trained language models[J]. arXiv preprint arXiv:2102.10535, 2021.

[2]  Hassan T, Hassan S, Yar M A, et al. Semantic analysis of natural  language software requirement[C]//2016 Sixth International Conference on  Innovative Computing Technology (INTECH). IEEE, 2016: 459-463.

[3]  Kof L. Natural language processing: Mature enough for requirements  documents analysis?[C]//International Conference on Application of  Natural Language to Information Systems. Berlin, Heidelberg: Springer  Berlin Heidelberg, 2005: 91-102.

[4]  Moreno L, Aponte J, Sridhara G, et al.  Automatic generation of natural language summaries for java  classes[C]//2013 21st International conference on program comprehension  (ICPC). IEEE, 2013: 23-32.

[5]  Zhao S, Li A. An Natural Language Processed Web Application that  Interpret and Convert English to Python Code[C]//CS & IT Conference  Proceedings. CS & IT Conference Proceedings, 2023, 13(5).

[6]  Shan, Fangfang,Liu, Jizhao,Wang, Xueyuan,….A Smart Access Control Method for Online Social Networks Based on Support Vector Machine[J].IEEE Access.2020.811096-11103.DOI:10.1109/ACCESS.2020.2963932 .

[7]  张莉, 钱玲飞, 许鑫. 基于核心句及句法关系的评价对象抽取. 中文信息学报, 2011, 25(3): 23-30. https://www.cnki.com.cn/Article/CJFDTOTAL-MESS201103005.htm

[8]  宋浩楠, 赵刚, 孙若莹. 基于深度强化学习的知识推理研究进展综述[J]. Journal of Computer Engineering & Applications, 2022, 58(1).