题目:浅谈人工智能软件开发与传统软件开发的区别
关键字:人工智能软件开发、智能化软件、传统软件开发、开发区别
1,介绍
人工智能和软件工程两个学科在过去的几十年中独立发展,没有太多的交叉[1]。因为在人工智能领域关注的重点是提出更好的算法和模型;而软件工程领域则关注于如何提高软件开发的效率以及降低软件维护的成本。由于两者的关注点不同,因此两者很少有交叉内容,但是随着人工智能的发展,人工智能带来的优势也慢慢展现出来,也潜移默化的影响软件工程,更加智能化的软件是现在人们所需要的。一个最显著的例子是:在过去二十年中,将机器学习应用到软件工程的研究取得了巨大的发展,产生了大量软件工程与人工智能交叉方向的会议以及论文[2][5]。但是现有的软件开发模式,如面向对象开发模式等,都无法很好的支持智能化软件的开发,因此软件工程将迎来一场变革。这场变革中,软件工程和人工智能相互作用,最终导致新一代软件开发和实现的规范形成。
人工智能对软件工程来说是重要的。一方面主流软件工程早已采用智能化软件的思想,例如专家系统[3]。另外一方面,传统软件工程需要依赖人工智能来完成一些难以实现的非功能需求,例如自适应性、安全性和可靠性。因此将人工智能融入软件工程,机器学习是研究如何通过经验构建计算机程序,从而提高其在某些任务中的性能[5]。可以极大改善软件工程的现状,促进软件行业的发展,使得软件更具备自动化,信息化和智能化[4]。同时直接影响经济和 会的发展,必须采取足够的注意力和有效的措施和方法来促进这一发展[4]。
人工智能的飞速发展推动着各行各业迈向之软件化和智能化,如智能人脸识别门禁、智能家居、自动化驾驶汽车。而机器学习则是实现人工智能最便捷的手段,机器学习可以通过拟合数据做到高精准的预测分析,在许多领域都被证明存在巨大的实用价值[5]。另一方面,随着大数据时代的到来,互联 产生的数据量以指数级别增长,对机器学习来说将会有更充足更优质的数据用于拟合。与此同时,高算力和大存储硬件的快速发展也使得机器学习无论在拟合数据速度方面或者存储能力方面都有不小的提升。一个显著的变化是显卡从GTX960到GTX3090,以及存储系统从以GB为存储容量到以TB为存储容量。
虽然机器学习近30年的发展取得了巨大的进步,从开始的实验室环境模拟到商业化智能软件的落地实现,可以看出机器学习为我们带来了巨大的成果,其特点如下:
- 安全性问题:智能化时代要求一些原本独立的个体开发,进行数据的共享和学习。比如自动化驾驶需要原本封闭独立的个体汽车开放,使得一个车辆遇到的错误,其他车可以避免[7]。另外,随着边缘节点或云的增加,数据存储或传输的复杂性增大,数据存储中心有可能被恶意攻击,导致数据安全性问题。
- 适应性问题:人工智能软件需要具备自适应,即面对周围环境的改变而主动性的自我调节,这样可尽可能的减少人为干预。比如自动化汽车需要根据前方车辆的速度自动调节速度,一面发生碰撞。自动化汽车可以根据前方车辆的车灯亮度调节自己的车灯亮度等行为都是车辆自适应的体现。
- 自治性问题:自治性现对于适应性来说主要感知智能体内部的情况,进而优化调节;适应性则是面对外部环境的概念而调节自己。自治性的是一个主要体现是算法会根据提供的数据,自主选择最适宜的算法进行拟合并提供服务,由于每次提供的数据不同,每次选择的算法也有所不同。
- 实时性问题:现阶段的人工智能算法普遍需要给予一定量的数据进行模型训练,然后模型才能提供服务。而当遇到特殊情况时。如果不及时训练模型,模型缺乏决策分析标准,进而会产生预测决策的错误。如果此时将数据反馈给服务器中的算法进行训练,则 络上的时间开销以及训练的时间开销将会是很难解决的问题。
本篇论文主要围绕人工智能特点为依据,讨论人工智能软件开发与传统软件开发在实践中以及实际应用中的不同的区别。
2,需求分析阶段
对于传统的软件来说,在需求分析阶段开发者更关注的是软件的功能需求,即软件必须实现的功能。但是需求分析的任务不仅仅限于功能需求,还包括:性能需求、约束、接口以及方便未来可能提出的需求的拓展需求。为了刻划所有的需求,传统软件开发的需求阶段要求需求分析工程师或开发者使用数据流图、用例图、ER图等逻辑模型进行描述。
对于人工智能软件来说,对功能性的需求相对来说则不再那么重要。人工智能软件的核心在于数据和算法,因此在人工智能软件的需求分析阶段则更加注重于数据的需求和算法的需求,根据系统的功能需求确定系统使用的算法模型以及所需的数据集,数据集和算法的确定根据实际情况决定优先级。
另外一点是人工智能软件的功能需求不易确定。因为赋予了软件智能化,则需要做到自适应外部环境,则就需要考虑到外部的所有变化情况。例如,自动化驾驶汽车考虑到自然灾害、意外事件和道理法律问题等不确定性因素,这往往给需求分析带来了不确定性[7]。
不仅在需求上有所不同,在确认需求的方法上也有所区别。对于传统软件来说,常用的方式有:访谈、问卷调查以及会议交流等方式,这些方法对于传统软件确定其需求是最有效的办法。而人工智能软件则需要通过系统的功能需求确定人工智能软件需要完成的任务,进而确定算法模型和算法所需的数据,其中功能需求调研方式与传统软件类似,但是后面模型和数据的确定则需要阅读文献或实际测试进行筛选,力求做到筛选出最合适的模型算法,因此大部分情况下是需要提前测试多个模型的效果,对比之间的不同[8]。
因为需要阶段的差异性,进而造成后续设计阶段的重点不同。
3,软件设计阶段
传统软件的设计阶段需要历经概要设计(总体设计)和详细设计,概要设计阶段需要设计人员构造出软件的整体架构,确认需求分析中的各个功能模块、程序中的数据流程以及总体解决方案。在详细设计过程中则需要进一步拆解概要设计,并画出软件的设计图(界面图、类图和顺序图等)[10],如果传统软件用到数据库,则数据库设计是详细设计中比较重要的一部分。
对于智能化软件,过程则完全不同,不需要详细区分概要设计和详细设计。设计阶段需要给给出数据收集清理方案、提出严谨的数学公式推导并证明模型的有效性(即提出的模型对可以解决需求分析中提出的需求)。在数据集不确定的情况下,对于模型来说则无法通过理论推导模型是适合的,因此这个过程是不断迭代进行的,通常在设计阶段耗费的时间比传统软件设计阶段要更多。也正是因为这样,与传统软件的设计方式的千篇一律相比,对于智能化软件来说则更加灵活,有更广泛的模型和算法可以选择和实现,也有更广泛的数据集来训练模型和测试模型。
总所周知,软件是数据、程序和相关文档等辅助资料组成的。对于传统软件的数据需求则不需要关心数据内部的关系,只需要根据数据的总体格式设计出适合的数据表进行存储即可。对于智能化软件来说,软件的性能取决于数据,我们都知道在机器学习中,数据决定了预测结果的上限,而模型则是做到尽可能逼近这个上限[11]。数据收集方案,数据处理方案以及特征工程都对程序最后的性能有重大的影响。因此在数据处理设计阶段需要投入60%以上,甚至95%的时间用于优化数据[6],为后续模型的训练提供最优的条件。
设计阶段还应该考虑的一个问题是软件的耦合度问题[8]。概要设计要求绘制出软件的模块图,可以看出软件的功能需求之间的耦合程度。对我们来说,软件的耦合度越大,程序功能之间越杂乱,相互之间关联越大,扩展性越差,每当需要扩展时,需要连同耦合的程序一同扩展。一个典型的例子一个人需要一把斧子砍树,在耦合情况下,这个人需要自己学会造斧子,然后造好后砍树;在低内聚的情况下,这个只需要找到商店买一把斧子,然后进行砍树。在Spring中的控制反转就是基于这种准则做到低耦合,高内聚的,但是Spring中的内聚则更低,这个人只需要向空中喊一句话:“我需要斧子”,则天上就会掉下来一把斧子。这就是所谓的“0”耦合,即人和斧子之间没有任何关联。
4,编码实现阶段
虽然人工智能软件的需求和设计阶段的复杂程度远远高于传统软件,进而造成编码阶段的时间比传统软件要多,但是其编码阶段的工作量和难度却小于传统软件。
传统软件的编码由于内容细节的不同,可重用性较低,没有算法模型的可重用性高。对于每次功能需求的不同,大部分情况下都需要重新设计编码。例如,功能不同、数据表结构不同以及程序结构不同。而在编码实现阶段由于在人工智能领域有太多前人提出的优秀算法可供选择和修改,因此大部分情况下不需要重新设计较为复杂的算法,只需要将优秀的算法进行改良和升级,以适应当前任务需要。例如,为了完成分类任务,可以使用SVM算法,如果对于高维度分类来说,可以采用SVM中核算法来完成。但这并不意味着人工智能软件在编码阶段需要完成的任务量较少,前面已经提到,数据对于算法的重要程度相当于汽油对汽车的重要性。数据处理和特征工程则需要尽最大可能做到完美,即没有任何异常数据、数据区间合适、特征选择合理等。
由于人工智能的特殊性,尤其是在深度学习领域。一方面由于需要比较不同模型的性能需要对多个模型进行训练和评价。另一方面模型所需的数据量较大,而且训练过程极其复杂,训练所消耗的时间可能很长,对于一般设备来说,每轮训练可能需要几周时间,而每次训练可能需要好几轮的迭代,训练过程不可以间断。相反传统软件的开发则对硬件设备的要求不是很高,甚至没有要求即可完成开发工作,而且可以间断式的开发,进而造成了人工智能软件的编码时间比传统软件的编码时间要长。
传统软件和人工智能软件的开发目的可能不同。对于传统软件来说,需要开发者一个一个实现设计的功能模块,然后拼合测试,重复这个过程。而对于人工智能软件来说则是需要找到最优的数据集和最优的模型,需要迭代式的寻找,所以说性能调优对人工智能软件来说是必要的。由于模型的透明性,程序运行过程中如果遇到错误则很难进行排查,例如神经 络,一旦发生错误,可能很难找到原因。
5,软件测试阶段
智能化软件测试比传统软件测试将会更加困难[8]。由于算法的透明性,我们无法通过传统的白盒测试对算法进行分析检验。我们只能通过黑盒测试对软件的功能进行测试,验证是否满足某项功能。其次,我们无法利用自动化测试工具对智能化软件进行测试,一方面是测试样例需要特殊的数据,难以收集。另外一方面,不具备智能自动化测试工具无法完成智能化软件的测试工作。例如,完成图片分类任务,以肉眼观察可以快速区分程序是否将猫狗分类正确,但是对于自动化测试工具来说,也需要智能化才能进行测试,而且需要具备更高级别的智能化。
通过测试寻找到的BUG很难定位[10]。在开发过程中不可能一帆风顺,所有的软件开发都或多或少遇到BUG。对于传统软件来说你可以同打断点等方式观察数据在程序中的流动,发现出错的地方,然后进行修正。然而对于人工智能算法来说,大部分都是透明的,我们无法通过传统的方式找到BUG。例如,自动化驾驶汽车的验证工作,在现实中汽车和周围的环境都是瞬态的,如风速、摩擦力、前方行人和车辆的车速等,因而我们无法在模拟环境中进行复现[7]。
另外一方面,传统软件和智能化软件在测试阶段的不同是测试难度和测试结果的可信度[8]。传统软件的测试结果可以说明某些操作可能导致软件失效或崩溃,结果是显而易见的。但通过选定的测试样例对模型进行测试,测试集的不同,导致测试结果的不同。如果测试集和训练集的重复度较高,测试结果是模型预测的较好,但是这样的测试也就失去了意义。如果测试集的覆盖度不够,也可能导致模型的某些BUG没有被发现。所以对于人工智能软件的测试阶段需要认真设计测试过程,做到高精准和全覆盖,尽管难度很大。
6,运营维护阶段
软件发布后,性需要时刻监视软件的各项指标,保证软件不会出错。但是难免会出现软件失效等情况。对传统软件来说,可以采用警 或者自动重启等策略;对于人工智能软件来说则需要一套更加完善的检测和修复机制,上面我们说到人工智能软件的测试是很难定位和复现的,因此监视软件的状态和修复对人工智能软件来说是很困难的。
传统的软件系统后续的维护投入远远比智能化软件要高。传统软件的维护占用整个软件生命周期的60%以上,维护费用是整个软件生命周期最高[5],因为软件发布后需要根据反馈的结果进行修正错误并且有可能重新部分新功能或修改原功能。提高软件的可维护性也是软件工程一直追求的目标之一。对于智能化软件来说,拥有自适应和自治性,可以感知外部和自身的变化。例如发现某些特殊数据,软件会收集这些数据进行训练模型,进而保证软件性能不会大幅下降。
维护过程中智能化软件可能不会有明显的改变。由于智能化软件在更新的过程中可能出现更新后的算法的准确率不如更新前的准确率,可能因为收集的数据出现了误差。这就需要有一个良好的自我评估机制进行抉择。而传统软件则是开发者进行修改测试后的结果,保证了修改后的软件相较于修改前的软件有明显的区别。
7,参考文献
[1] 强新建, 程国建, 肖红. 人工智能与软件工程的交叉领域及其发展趋势[C]// 0.
[2] Rich,C, 林金明. 人工智能与软件工程的交叉[J]. 计算机科学, 1989, 16(002):48-55.
[3] 黄全舟. 人工智能与软件工程的交叉研究[J]. 微机发展, 1997, 7(1):3.
[4] 陈茜. 软件工程中人工智能的运用[J]. 互动软件,2021(4):1155. DOI:10.12277/j.issn.1672-7924.2021.04.1097.
[5] Hamouda A . New Trends in Learning for Software Engineering. 2016.
[6] Bosch J , Crnkovic I , Olsson H H . Engineering AI Systems: A Research Agenda[J]. 2020.
[7] Mallozzi P , Pelliccione P , Knauss A , et al. Autonomous Vehicles: State of the Art, Future Trends, and Challenges[M].
[8] Z. Wan, X. Xia, D. Lo and G. C. Murphy, “How does Machine Learning Change Software Development Practices” in IEEE Transactions on Software Engineering, vol. 47, no. 9, pp. 1857-1871, 1 Sept. 2021, doi: 10.1109/TSE.2019.2937083.
[9] Senthil V S . Introducing Artificial Intelligence Agents to the Empirical Measurement of Design Properties for Aspect Oriented Software Development[C]// 2019 Amity International Conference on Artificial Intelligence (AICAI). Department of Computer Science and Engineering, Amity University, Dubai, UAE, 2019.
[10] 王乾坤. 人工智能思想在软件设计中的应用[J]. 软件导刊, 2007(8):2.
[11]李大中, 王超, 李颖宇. 基于XGBoost算法的风机叶片结冰状态评测[J]. 电力科学与工程, 2019.
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!