1. 前言

​ 人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学,人工智能的概念早在上世纪50年代就已经提出。机器学习是指通过数据训练出能完成一定功能的模型,是实现人工智能的手段之一,也是目前最主流的人工智能实现方法。根据香港中文大学吕荣聪教授提出的《人工智能时代下的软件工程发展趋势》,本文对软件工程生命周期中人工智能应用于需求分析自动化、代码分析自动化、编码自动化、软件测试自动化、故障诊断自动化等领域进行分析。此外,对于软件工程框架设计提出了自己的看法。

2. 人工智能时代下的软件工程发展趋势

2.1 需求分析自动化

2.1.1 问题描述

​ 需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。

​ 在软件需求分析阶段,考虑软件的安全性特征具有重要意义,优点如下:减少缺陷、较早地发现错误、减少改动和标准化的相关成本,以及向利益相关方提供关于安全漏洞和安全要求的技术知识。由于软件需求的理想特性包括准确性、可验证下和无歧义性,因此有必要开发出对安全需求进行分析和评价的技术。

2.1.2 基于机器学习的需求分析自动化方案

​ 为了对软件需求的不完备性和歧义性程度进行识别,搭建软件需求和标准规范之间的桥梁,可以基于自然语言处理NLP)和神经网络建立分析评价模型.首先,从国际标准化组织(ISO),开源Web应用程序安全计划(OWASP)和PCI目录等标准出发,识别出多个安全性规范特征,找到文本蕴涵关系;然后,利用结果以及文本注释来训练神经网络模型,以预测文档中的某个语句是否存在于安全标准中。

2.2 代码分析自动化

2.2.1 问题描述

​ 代码审查是检查瑕疵的最古老和最安全的方法。它校验源代码的连接注意点,并就如何改善提出建议。这个过程会揭露可能导致将来出现更大错误的代码错误或代码片段。程序的执行算法应当直接从程序文本和评论中移除。如果情况并非如此,那么这段代码就需要改良。代码审查往往能够起到很大的作用,因为程序员通常会忽视自己所编写代码中的错误。要了解更多有关代码审查方法的信息,推荐看下Steve McConnell编写的《Code Complete》。
​ 连接代码审查方法的唯一劣势在于其超高的成本,你需要定期聚集多个程序员来审查新代码或重新审查应用过推荐修改方法的代码。程序员也需要定期休息,因为短时间审查大量代码片段会让他们的注意力迅速衰退。如果在疲劳状态下工作,那么代码审查就毫无作用了。
​ 对于这种方法,一方面你需要定期审查代码,另一方面成本又过于昂贵。于是,静态代码分析工具成了种折中的解决方案。它们能够不知疲倦地审查程序的源代码,向程序员建议应当考虑修改的代码片段。

2.2.2 AST——抽象语法树

​ 抽象语法树(abstract syntax code,AST)是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,这所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节,比如说,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现。抽象语法树并不依赖于源语言的语法,也就是说语法分析阶段所采用的上下文无文文法,因为在写文法时,经常会对文法进行等价的转换(消除左递归,回溯,二义性等),这样会给文法分析引入一些多余的成分,对后续阶段造成不利影响,甚至会使合个阶段变得混乱。因些,很多编译器经常要独立地构造语法分析树,为前端,后端建立一个清晰的接口。

2.2.3 代码静态分析

​ 通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描, 验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。目前静态分析技术向模拟执行的技术发展以能够发现更多传统意义上动态测试才能发现的缺陷,例如符号执行、抽象解释、值依赖分析等等并采用数学约束求解工具进行路径约减或者可达性分析以减少误报增加效率。
​ 具体可以分六步去分析:
(1)词法分析——从左至右一个字符一个字符的读入源程序,对构成源程序的字符流进行扫描,通过使用正则表达式匹配方法将源代码转换为等价的符号(Token)流,生成相关符号列表,Lex为常用词法分析工具。
Lex是LEXical compiler的缩写,是Unix环境下非常著名的工具,主要功能是生成一个词法分析器(scanner)的C源码,描述规则采用正则表达式(regular expression)。
(2)语法分析——判断源程序结构上是否正确,通过使用上下文无关语法将相关符号整理为语法树,Yacc,JavaCC为常用工具。
​ Yacc(Yet Another Compiler Compiler),是一个经典的生成语法分析器的工具。yacc生成的编译器主要是用C语言写成的语法解析器(Parser),需要与词法解析器Lex一起使用,再把两部份产生出来的C程序一并编译。
JavaCC(Java Compiler Compiler)是一个用JAVA开发的受欢迎的语法分析生成器。这个分析生成器工具可以读取上下文无关且有着特殊意义的语法并把它转换成可以识别且匹配该语法的JAVA程序。
(3)控制流分析——生成有向控制流图,用节点表示基本代码块,节点间的有向边代表控制流路径,反向边表示可能存在的循环;还可生成函数调用关系图,表示函数间的嵌套关系。
(4)数据流分析——对控制流图进行遍历,记录变量的初始化点和引用点,保存切片相关数据信息。
(5)污点分析:基于数据流图判断源代码中哪些变量可能受到攻击,是验证程序输入、识别代码表达缺陷的关键。
(6)无效代码分析:根据控制流图可分析孤立的节点部分为无效代码。

2.2.4 静态代码分析的劣势

​ 静态分析对内存泄露和并发错误的诊断较差。要检查此类错误,你需要虚拟化执行部分程序。执行是件很困难的事情。此类算法需要耗费过多的内存和处理器时间。静态分析往往在诊断简单案例时会进行自我限制。使用动态分析工具来检查内存泄露和并发错误会更加有效。
​ 静态分析工具会警告你碎片的存在。事实上,代码是正确的。这种现象称为误报。只有程序员才能理解分析器报告的是真正的错误还是误报。审查误报是必要的,这需要耗费一定的时间和精力,而且会影响解决那些真正存在错误的代码片段的注意力。

2.2.5 总结

​ 静态分析领域正在繁荣发展,新的诊断规则和标准不断产生,同时某些规则被废除。在人工智能高速发展的背景下,通过机器学习建立更优的模型,相信不久后的将来能够实现代码分析自动化。

2.3 编码自动化

2.3.1 循环神经网络(RNN)

​ RNN(Recurrent Neural Network)即循环神经网络,用于解决训练样本输入是连续的序列,且序列的长短不一的问题,比如基于时间序列的问题。基础的神经网络只在层与层之间建立了权连接,RNN最大的不同之处就是在层之间的神经元之间也建立的权连接。
​ 静态分析的主要优点是,它使消除软件瑕疵的成本大幅减少。错误发现得越早,修改所需的成本越小。根据McConnell所著《Code Complete》中提供的数据,在测试阶段修正错误所付出的成本比代码编写阶段多出10倍,静态分析可以迅速在编程阶段检查出大量错误,显著减少整个项目的开发成本。比如,PVS-Studio静态代码分析器能够在编辑完成后于后台运行,将潜在错误告知程序员。
​ 循环神经网络的来源是为了刻画一个序列当前的输出与之前信息的关系。从网络结构上,循环神经网络会记忆之前的信息,并利用之前的信息影响后面结点的输出。即:循环神经网络的隐藏层之间的结点是有连接的,隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。
​ 循环神经网络对于每一个时刻的输入结合当前模型的状态给出一个输出。循环神经网络可以看做同一神经网络被无限复制的结果,出于优化考虑,现实生活中无法做到真正的无限循环。

2.3.2 自动编码器

​ 自编码器是一种可以有效学习数据的表示(叫做编码)的神经网络,学习过程是无监督的,这些编码常常比输入维度更低,自编码器是一种有效的降维方法。但更重要的是,自编码器可以作为强大的特征检测器,它们可以用于无监督的深度神经网络预训练。最后,他们能够随机生成与训练数据非常相似的新数据;这被称为生成模型。

2.3.3 栈式自动编码器

​ 自动编码器可以有多个隐藏层。在这种情况下,它被称为栈式自动编码器(或者深度自动编码器)。增加更多的层帮助自动编码器学习更加复杂的编码。然而,不要让自动编码器变得太强大。想象一下,编码器强大到只是学习将每个输入映射到任意单个数字上。将完美地重建训练数据,但是在这个过程中没有任何有效的数据表示(并且不可能推广到新的实例)。

2.3.4 去噪自动编码器

​ 另一种强制自动编码器学习有用特征的方法是在输入中增加噪音,训练它以恢复原始的无噪音输入。这种方法阻止了自动编码器简单地复制其输入到输出,最终必须找到数据中的模式。噪音可以是添加到输入中的纯高斯噪音,或者是随机打断输入的噪音,如dropout。

2.3.5 稀疏自动编码器

​ 另一种导致良好特征提取的约束是稀疏性:通过在成本函数中增加适当的条件,推动自动编码器减小编码层中活动神经元的数量。例如,使编码层只有平均5%的显著激活神经元。这迫使自动编码器使用少量激活神经元的组合来表示输入。结果编码层的每个神经元都最终代表一个有用特征(如果你每个月只能说几个单词,那么你可能会尝试让它们变得有意义)。 一旦我们对每个神经元进行平均激活,我们希望通过向损失函数添加稀疏损失来惩罚太活跃的神经元。 例如,如果我们测量一个神经元的平均激活值为 0.3,但目标稀疏度为 0.1,那么它必须受到惩罚,才能激活更少。 一种方法可以简单地将平方误差(0.3-0.1)^2添加到损失函数中,但实际上更好的方法是使用 K-L 散度,其具有比均方误差更强的梯度。

2.3.6 变分自编码器(VAE)

​ 最受欢迎的自编码器类型之一:变分自编码器。它们与我们迄今为止讨论的所有自编码器完全不同。它们是概率自编码器,意味着即使在训练之后,它们的输出部分也是偶然确定的(相对于仅在训练过程中使用随机性的自编码器的去噪)。最重要的是,它们是生成自编码器,这意味着它们可以生成看起来像从训练集中采样的新实例。这两个属性使它们与 RBM 非常相似,但它们更容易训练,并且取样过程更快。

2.3.7 结论

​ 除了上述提到的自动编码方式,斯坦福大学Monica Lam教授团队开发的Almond,能够将自然语言转化成机器(安卓等)语言。可以看到,由于人工智能和机器学习的迅速发展,未来对于自动编码的研究将会取得更大的进展,自动编写代码也将成为现实。

2.4软件测试自动化

2.4.1 问题描述

​ 随着软件产业的迅猛发展,软件产业的质量将成为软件企业生存的关键。软件缺陷自软件诞生起也随之出现,软件测试也应运而生。随着软件内容和结构的丰富,软件缺陷也变得多样化,更是引起严重的质量问题。软件测试方法的研究目的是提高软件质量,减少软件的缺陷以及降低实际应用上造成的不良效果。随着人们对软件品质越来越重视,软件测试所扮演的地位也越来越重要。

2.4.2 软件测试的主要方法

(1)黑盒测试。黑盒测试又称为功能测试,可以从软件的功能为起始,根据功能需求说明测试所用的方式,依据该方式的需求来运行被测试的程序。然而,传统的黑盒测试存在着一些缺点,如测试范围不能完全覆盖整个软件,许多测试路径无法测试到;测试用例的生成一般依靠人工,成本高效率低。

(2)白盒测试。白盒测试又称为结构测试。相比于黑盒测试,它侧重于软件内部的逻辑结构,测试的关键点为测试用例的覆盖程序结构的程度。测试人员基于程序内部的逻辑结构去设计测试用例以检验程序的逻辑路径。然而,白盒测试存在着一些缺陷如成本高,此外,白盒测试不验证鬼哥哥的正确性,对于代码中遗漏的路径和数据敏感性错误难以检验。

2.4.3 李群机器学习

​ 李群是群的一部分,并且因为有拓扑结构,有限群的结果可以扩展到紧李群。李群在单位元处的切空间定义了李代数,李代数也是研究非交换代数,非交换几何的重要手段之一。李群的定义和机器学习的定义有着对应的关系,李群本身就是一个非空的集合且是一个系统,学习过程对应一个可微映射,然后通过解析性质来降低数据维数、处理学习问题,从而达到改变系统性能的目的。
​ 尝试将李群机器学习中的覆盖思想引入到软件测试中,基于李群的整体性质、局部性质及生成元、群的线性表示、覆盖群等数学结论可以提出利群机器学习的单联通覆盖算法,通过把李群问题转化为求解覆盖群的问题,从而改善覆盖性差的问题和提高工作效率。
​ 将李群机器学习算法应用于软件测试中,一方面,能够进一步推广李群机器学习的应用领域;另一方面,为软件测试提供了新的方法。

2.4.4 结论

​ 事实上,在人工智能时代下,软件测试迎来了多功能、多用户、多场景的挑战,传统的方法已不能满足随机测试、录放测试、符号执行等需求。如今人工智能应用于软件测试的研究正在快速发展,相信在不久后的将来,我们能够实现软件测试自动化。

2.5故障诊断自动化

2.5.1 问题描述

​ 软件缺陷是影响软件质量的主要因素,及早发现并排除软件缺陷是软件生命周期中重要的环节。随之软件的开发需求日益增长,传统的人工排查在效率、准确度和成本上并不能满足工程上的需求。在人工智能高速发展的背景下,基于机器学习的软件代码缺陷识别技术是一种提高软件可靠性的选择。
​ 定义计算机检查出的缺陷称为检查点,但检测出的缺陷并不是完全准确。有一部分缺陷为误报,另一部分则会引发运行错误(如数组越界,访问空指针等)。一般来说,需要对每个检查点进行检验,判断其真实性。
​ 根据一组案例显示,一个项目组前期对Android4.0的缺陷检测结果,共计算得到3万多个检查点,花费了近四个人一个月的工作量,如表2-1所示。

表3-1 Android4.0的缺陷的检测结果

语言 文件数 代码行 测试时间 测试点 确认缺陷数
Java 25,428 5,336,619 40 7,966 6,856
C 11,899 5,919,784 23 13,811 6,228
C++ 16,748 6,158,454 39 13,516 5,095
合计 54,075 17,414,857 102 35,293 18,179

​ 由此可见,通过机器学习实现代码缺陷识别是十分必要的,能够以更高的效率和更低的成本***产品缺陷分布的可能性,使早期检测出的缺陷具有更高的可信度。

2.5.2 软件缺陷预测与机器学习技术

​ 软件缺陷预测环境是呈增量变化的,主要表现在两个方面:
​ (1)软件开发呈现增量过程
​ 在实际应用中,大型复杂软件产品开发通常使用增量模型。软件的各个阶段产品到最终交付的软件产品呈增量过程。软件缺陷预测通过对各个阶段的原型产品的度量样本集到最终的软件产品所对应的度量样本集也呈增量过程。
​ (2)未知样本经过测试验证后,带标签样本数量呈现增量。
​ 软件测试的过程中,对预测样本结果进行验证,也是对现有的模型的修正过程。训练样本随着未知样本的测试验证,呈现增量特征,需要在线修正软件缺陷预测模型。

2.5.3 基于机器学习的软件缺陷预测方案

基于机器学习的软件缺陷预测过程可以分为以下五个步骤:

(1)选择合适的统计度量元集合;

(2)采集、准备和分析软件产品的统计数据;

(3)构造合适的软件预测模型,即构建核心的训练算法;、

(4)将统计数据输入到软件预测模型中;

(5)对预测结果进行评估。

2.5.4 当前软件缺陷预测方案存在的问题

(1)软件缺陷预测数据中正例样本数通常比负例样本数高很多,数据分布很不均衡;

(2)当前软件缺陷预测通常是针对单个软件项目,跨平台预测能力比较弱;

(3)正样本数据集悠闲,建立预测模型的信息缺乏;

(4)误分代价差异较大,将有缺陷倾向的模块标记为无缺陷倾向模块后,需要花费很高的代价进行更正。

3. 人工智能在软件工程的框架结构

​ 目前人工智能在医疗、教育等领域有着广泛的应用,以下我们从人工智能在医学领域的应用出发,思考将人工智能应用于软件工程过程,框架结构的设计方案。

3.1 人工智能在医疗领域应用现状

​ 基于大量数据产生的人工智能算法为医疗服务提供了快捷、优化的途径,人工智能在医疗领域不仅带来了技术上的革新,还使得医疗的服务模式形成了转变。人工智能在医疗健康的各个领域都发挥着巨大的作用,包括医学图像识别、健康管理、疾病预测和药物研发等方向。

3.1.1 医学图像识别

​ 目前,人工智能在医学领域的作用明显,通过人工智能算法和大数据的应用,开发出了眼科图像识别、肺结片影像检测、CT等领域的应用。机器能够在建立起的模型下对已有的图像进行训练,达到对医疗图片的自动判断。
​ 人工智能图像识别技术在提高医生工作效率和医疗效果上具有重大作用,此外人工智能作为医生的助手,能够使得一些医疗条件欠缺的地区也能够进行一些手术和检测。

3.1.2 疾病辅助诊断

​ 通过机器学习对医学数据和专业知识吸收,构建相应的模型对病人的病情进行预测诊断,这部分涉及到了自然语言处理、认知技术和机器学习等技术,能够有效提高医生的诊断效率。通过深度学习医学论文、著作,为多种疾病提供诊治建议服务,在大数据的支撑下具有强大的说服力。

3.1.3 疾病预测

​ 2020年,一场新冠疫情席卷全球,全球不少专家便提出了关于疫情的预测模型,在通过对每天的数据进行偏差修正和学习下,提供较为可靠的疫情走向预测,为疫情的防控提供了有效地帮助,并对病毒的危害程度进行准确定位。早在2008年,谷歌就推出了流感 预0. 测的服务,这些预测能够有效防控公共疫情和提高个人健康。

3.1.4 发展前景

​ 尽管人工智能目前已经在医疗领域有着多方面重要应用,但是仍然有一些突出的问题存在,如数据基础有待加强、存在算法歧视问题、主体责任不清晰、规范标准和法律法规相对滞后、缺乏应用的评估标准、人才短缺等。未来人工智能在医疗上应该针对性地着眼于夯实人工智能应用的数据基础、明确人工智能的发展定位、制定相关法律法规、加强人工智能数据应用的数据安全建设以及推动医学人工智能复合型人才的培养。

3.2 软件工程的框架设计

3.2.1 可行性分析

​ 软件可行性分析是通过对项目的市场需求、资源供应、建设规模、工艺路线、设备选型、环境影响、资金筹措、盈利能力等方面的研究,从技术、经济、工程等角度对项目进行调查研究和分析比较,并对项目建成以后可能取得的财务、经济效益及社会环境影响进行科学预测,为项目决策提供公正、可靠、科学的软件咨询意见。
​ 一般而言,需要从经济、技术、社会环境三个方面去考虑。在软件工程中应用人工智能技术,需要考虑经济上的付出能否带来高效益的汇报,从技术层面上,人工智能在此领域的应用是否可行?在社会环境上,应用于改领域的人工智能技术是否合法?这些都是我们在可行性分析阶段需要思考的问题。
​ 举个例子,人工智能可以分担大量繁琐、重复、单调的工作。某些公平性要求较高的工作如裁判,或者是咨询工作例如客服,人工智能可以胜任,但是在创新和分析方面,目前人工智能是无法做到的,因此在软件工程设计的时候,可行性分析应该重点考察这些方面。

3.2.2 需求分析

​ 需求分析也称为软件需求分析、系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能、性能、可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程。
​ 需求分析是介于系统分析和软件设计阶段之间的桥梁。需求分析系统规格说明和项目规划作为分析活动的基本出发点,并从软件角度对它们进行检查与调整。需求规格说明又是软件设计、实现、测试直至维护的主要基础。良好的分析活动有助于避免或尽早剔除早期错误,从而提高软件生产率,降低开发成本,改进软件质量。

3.2.3 软件框架

​ 软件框架通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
​ 框架的功能类似于基础设施,与具体的软件应用无关,但是提供并实现最为基础的软件架构和体系。软件开发者通常依据特定的框架实现更为复杂的商业运用和业务逻辑。这样的软件应用可以在支持同一种框架的软件系统中运行。
​ 一般而言,软件系统的框架有两个要素:它是一个软件系统从整体到部分的最高层次的划分。一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。详细地说,就是要包括架构元件、联结器、任务流。所谓架构元素,也就是组成系统的核心"砖瓦",而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和联结器完成某一项需求。
​ 在建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行详细设计甚至建造,这些决定就很难更改甚至无法更改。显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。

3.2.4 主流框架

​ 目前全球关于人工智能的开源框架众多,主要包括:

​ (1)TensorFlow
​ TensorFlow提供多个API。最低级别的API - TensorFlow Core - 为您提供完整的编程控制。更高级别的API构建在TensorFlow Core之上。与TensorFlow Core相比,这些更高级别的API通常更易于学习和使用。此外,更高级别的API使重复性任务更容易,并且在不同用户之间更加一致。像tf.estimator这样的高级API可以帮助管理数据集,估算器,培训和推理。
​ TensorFlow用于使用数据流图进行数值计算。图中的节点表示数***算,而图表边表示在它们之间传递的多维数据阵列(张量)。灵活的体系结构允许您使用单个API将计算部署到桌面,服务器或移动设备中的一个或多个CPU或GPU。
​ (2)SystemML
​ SystemML框架适合开发者利用大数据进行机器学习,它最大的特点是能够通过R-like和类似Python的语言定制算法。通过数据和集群的特征的自动优化,确保效率和可扩展性。
​ 它可以在Apache Spark之上运行,它可以自动逐行扩展数据,确定您的代码是应该在驱动程序还是Apache Spark集群上运行。未来的SystemML开发包括利用GPU功能进行额外的深度学习,例如导入和运行神经网络架构以及用于训练的预训练模型。
​ (3)Caffe
​ Caffe主要专注于用于计算机视觉应用的卷积神经网络。Caffe鼓励应用和创新,模型和优化由配置定义,无需硬编码。通过设置单个标志在GPU计算机上进行训练,然后部署到商品群集或移动设备,在CPU和GPU之间切换。
​ Caffe的高速使理论实验和实际应用得到了完美的结合。Caffe使用单个NVIDIA K40 GPU每天可处理超过6000万张图像。
​ (4)Deeplearning4j
Deeplearning4j旨在成为顶尖的即拿即用设备,由于操作简单,成为不少机器学习初学者的开发首选框架,使得非专业人员也能够快速的构建模型。 DL4J可以通过Keras(包括TensorFlow,Caffe和Theano)从大多数主要框架中导入神经网络模型,它为数据科学家、数据工程师和DevOps提供了跨团队工具包,弥合了Python生态系统和JVM之间的障碍。

3.2.5 软件工程框架设计

​ 基于上述的人工智能的开源框架特点,我们可以对软件工程的框架设计进行推广:

(1)人工智能软件工程框架结构通常需要有良好的可移植性,在不同平台和不同的开发语言上能够提供相应的接口进行扩展。此外,这些框架都应该便于使用。人工智能作为一个入门难度相对较高的研究领域,通常需要开发者花费大量时间去学习相关知识,作为开发工具,提供相对简单的使用方式能够有效降低开发者的时间。
(2)钟育彬老师曾经在课堂上提到知识表示与人工智能紧密相连,人工智能中应用知识表示能够有效提高效率,过程表示法是用程序来表示知识的,可以避免选择和匹配无关的知识,不需要跟踪不必要的路径,从而提高了系统的运行效率。控制系统容易实现:控制机制已嵌入到程序中,控制系统比较容易设计。设计一个专门用于知识表示的框架。程序设计是开展知识表示方面新工作的主要动力,这是软件工程设计阶段重点内容,利用人工智能技术,设计知识表示框架,对于软件工程具有重要的意义。
(3)软件工程设计中,通常需要对其他优秀作品进行学习,在人工智能的背景下,通过构建机器学习模型,设计出用于软件测试的框架, 通过学习大量项目开发的案例不断完善模型,再根据现今项目的具体情况,设计出相应的测试方案。

4.总结

​ 在人工智能的时代下,人工智能的技术被广泛应用于软件工程的生命周期和医疗等领域中,并且扮演着越来越重要的角色,大大提高了开发效率并且节约了成本。虽然现在部分技术还未成熟,许多领域研究还处在初级阶段,但是整个人工智能的研究领域所呈现出的欣欣向荣景象令我们期待。许多框架的提出为人工智能的开发提供了便捷,未来的人工智能时代必将带给我们更多惊喜。

参考文献

[1] 张海藩, 牟永敏. 软件工程导论(第6版)[M]// 软件工程导论(第6版). 清华大学出版社, 2013.

[2] 廉师友. 人工智能技术导论[M]. 西安电子科技大学出版社, 2002.

[3] 曹晖, 顾佳毅. 人工智能医疗给外科医生带来的挑战、机遇与思考[J]. 中国实用外科杂志, 2018, 038(001):28-33.

[4] 刘婷婷. 人工智能医疗不应只是机器人和智能影像管理[J]. 现代养生, 2017(18):7-8.

[5] 刘伶俐, 贺一墨, 刘祥德. 患者对人工智能医疗的认知及信任度调查[J]. 中国医学伦理学, 2019(8).

[6] 斯颖航, 汤少梁. 基于决策模型的人工智能医疗行业治理措施研究[J]. 医学与社会, 2019.

[7] 赵湉, 倪蓉. 浅析“注意假设”理论在人工智能教育领域的应用[J]. 海外英语, 2019.

[8] 赵素琴, 海川. 人工智能在教育领域的应用[J]. 新经济导刊, 2017(7).

[9] 韩宏峰, 罗羿隆, 相克磊,等. 基于机器学习的软件缺陷识别的必要性[J]. 电脑知识与技术, 2017(25).

[10] Marie des Jardins. Artificial Intelligence: Machine Learning[M]// Van Nostrand's Scientific Encyclopedia. John Wiley & Sons, Inc. 2005.

[11] Trishan, Panch, Peter,等. Artificial intelligence, machine learning and health systems.[J]. Journal of global health, 2018.

[12] Thomas Glen Dietterich. Constraint propagation techniques for theory-driven data interpretation (artificial intelligence, machine learning)[M]. Stanford University, 1985.

[13] 韦良芬. 基于机器学习的软件缺陷预测技术研究[J]. 长春大学学报(自然科学版), 2017, 027(005):7-9,13.

[14] 农东乐. 浅析人工智能在软件工程的应用[J]. 中国高新区, 2019, 000(003):52,124.

[15] 王海星, 田雪晴, 游茂,等. 人工智能在医疗领域应用现状、问题及建议[J]. 卫生软科学, 2018, 032(005):3-5,9.