大模型下的软件工程:进展与挑战
科普
Tensorflow和PyTorch 深度学习框架
基于深度学习的软件工程技术受到学术界广泛的关注
通用深度学习模型构建流程
数据采集 输入构建 模型测试
——————> ——————>
数据预处理 模型训练 模型应用
深度学习模型在软件任务中的应用
| 特性/模型 | 软件设计 | 软件实现 | 软件测试和缺陷 | 软件维护 | 软件管理 |
|---|---|---|---|---|---|
| 原理 | Autoencoder | DeepCS 代码搜索 | SDAE模型 缺陷预测 | RNN-based 克隆检测 | CRNN 任务评估 |
| 生成方式 | 设计模型识别 | Tree-LSTM API推荐 | DBN模型 语义缺陷检测 | 逐步去噪恢复数据 | FNN-based 注释生成 |
| 生成速度 | RNN/CNN/KNN | Graph-GNN 软件定位 | SRLA模型 漏洞检测 | CoCoNut 程序修复 | DeepTip Github挖掘 |
| 训练稳定性 | GUI建模 | Attention 代码补全 | 稳定但计算开销大 | BGRU模型 CVE检测 | Tree CNN 程序表征 |
| 生成质量 | - | - | - | CNNFL模型 缺陷检测 | CNN-based SATD |
| 潜在空间可解释性 | - | - | - | DeepSQLi模型 测试用例生成 | Deep Review 代码评审 |
RNN(循环神经网络)、CNN(卷积神经网络)和 KNN(K-近邻算法)是机器学习领域中三种不同的模型或算法
是否选择深度学习技术作为智能化软件工程的跟技术?
现阶段面临的挑战:
- 对于任何一个分类问题,总可以找到一个Fine-tuning(微调)的支持向量机(SVM, Support Vector Machine),达到更好的效果
- 同时,针对每一个Fine-tuning的SVM,也总可以调整深度学习模型参数,达到更好的效果
以子之矛攻子之盾: 大模型产生自相矛盾的结果
研究动机: LLMs生成的代码内容有时可能具有较低质量,而且很可能包含Bug。
软件工程任务选定 针对具体任务 大模型 API返回任务执行结果 ChatGPT
与数据获取(代码生成 ——————> 构建Prompt ——————> ChatGPT ——————> 代码 ——————> 自我验证其生成代码
-HumanEval-X)
面向程序理解的AI辅助研发技术
意图引导的AI辅助研发能力
|
|
|
全面、准确的指示:对于任务的理解形成 任务完成明确意图挖掘 全面、精确的上下文
Prompt,利用程序分析技术获取任务上下 (Prompt组装实验) (程序分析增强意图理解)
文,形成全面、精确的指示 领域知识的任务范式 领域知识的提取 单/少样本学习
(专项上下文学习) (领域知识挖掘和组装) (精确的学习范式)
|
|
|
大模型发展迅速、可以快速切换到能力更强的地方。在其他任务场景如代码检视、漏洞管理等方面都有较好的效果
领域知识融感的软件工程大模型
获取领域知识 融入领域知识 激发领域知识
| | |
| | |
LLMs与知识图谱协同的领域知识理解 数据 训练 调优 评估 面向领域专项任务的Prompt增强
Knowledge Graphs (KGs):知识图谱(Knowledge Graphs)是一种用于表示现实世界实体及其相互关系的数据结构。它们广泛应用于搜索引擎、推荐系统和人工智能领域,以提供更智能的数据关联和服务。
