AI-大型软件研发效能倍增的银弹

https://www.toutiao.com/a6643669947966816771/

 

2019-01-07 16:32:30

提到软件工程和银弹,人们首先就会想起《人月神话》作者佛瑞德·布鲁克斯在《没有银弹》里边的经典预言:

 

 

 

在民俗传说里,所有能让我们充满梦靥的怪物之中,没有比狼人更可怕的了,因为它们会突然地从一般人变身为恐怖的怪兽,因此人们尝试着查找能够奇迹似地将狼人一枪毙命的银弹。我们熟悉的软件项目也有类似的特质(以一个不懂技术的管理者角度来看),平常看似单纯而率直,但很可能一转眼就变成一只时程延误、预算超支、产品充满瑕疵的怪兽,所以,我们听到了绝望的呼唤,渴望有一种银弹,能够有效降低软件开发的成本,就跟电脑硬件成本能快速下降一样。但是,我们预见,从当前开始的十年之内,将不会看到任何银弹,无论是在技术上或管理上,都不会有任何单一的重大突破,能够保证在生产力、可靠度或简洁性上获得改善,甚至,连一个数量级的改善都不会有。

这是1986年的预言,到今天为止已经过了30多年。确如大师所言,现在的软件项目,尤其是大型的软件项目,依然还是困难重重,质量堪忧。软件的从业人员已经项目的建设方仿佛在焦油坑中挣扎。确实没有找到解决问题的银弹。

2016年3月,阿尔法围棋与围棋世界冠军、职业九段棋手李世石进行围棋人机大战,以4比1的总比分获胜;2016年末2017年初,该程序在中国棋类网站上以“大师”(Master)为注册账号与中日韩数十位围棋高手进行快棋对决,连续60局无一败绩;2017年5月,在中国乌镇围棋峰会上,它与排名世界第一的世界围棋冠军柯洁对战,以3比0的总比分获胜。围棋界公认阿尔法围棋的棋力已经超过人类职业围棋顶尖水平,在GoRatings网站公布的世界职业围棋排名中,其等级分曾超过排名人类第一的棋手柯洁。

 

 

 

这个标志性的事件,引发了人们对人工智能的热潮。人们回过头来才发现,围绕人工智能、大数据、区块链等等领域的技术已经取得了非常显著的进展,而且逐渐在生活的各个领域得到广泛的应用。从人工智能的发展阶段来看,人工智能先后经历了从计算智能到感知智能再到认知智能的三个发展阶段。

在计算智能时代

以神经网络、遗传算法为代表的学习算法,让机器能够帮助人类存储和快速处理海量数据,使得机器开始像人类一样“能说会算”。

在感知智能时代

机器能够开始看懂和听懂,并采取一些行动和听懂语音的音箱,帮助人类高效地完成看和听的相关工作。

在认知智能时代

是人工智能的终极目标,即机器能够像人一样思考,并采取行动,如完全独立驾驶的无人驾驶汽车、自主行动的机器人等,完成全面辅助或替代人类的工作。

 

 

 

以描述实体与实体、实体与属性值为形式化表示的知识图谱目前已是大家耳熟能详的一个概念。知识图谱,是实现认知智能的知识库,是武装认知智能机器人的大脑,这是知识图谱与认知智能的最本质联系,知识图谱,与以深度神经网络为代表的连接主义不同,作为符号主义,从一开始提出就注定了要从知识表示、知识描述、知识计算与推理上不断前行。目前知识图谱在诸如问答、金融、教育、银行、旅游、司法等领域中取得了大规模的运用。

这些技术的发展,是否能运用在软件开发的全过程中,是软件工程领域一直比较关注的话题。 软件生产是一种知识性的工作,尤其是需求、设计过程更具备艺术特征。在这些人为主导的知识过程中,引入人工智能也许是解决软件困境的“银弹”。

现在的金融领域,正在进行更深层次的数字化转型。从而引发了更多、更复杂的大型软件项目,如何以更快、更好的方式方法进行软件生产成为这个领域大家关注的前言。我们结合我们在银行业推进大规模软件生产效能提升的经验以及对人工智能在该领域发挥的作用的思考,对软件工程各个领域中 AI能够发挥的作用,做一个概要论述,以期待能够对这个领域的实践有所启示。

 

 

 

传统的软件过程一般分为两类过程:管理过程和工程工程。首先从工程过程谈起。软件工程过程一般分为:需求、设计、开发、测试、上线、运维几个阶段。

需求阶段是软件的首要环节。该阶段通常是以文档的方式,记录业务对IT的要求。这个过程涉及很多业务领域知识、科技领域知识,同时还有自然语言表达模糊性的问题等等,使得需求往往是软件生产中问题最集中的而环节。据统计,50%左右的项目失败是和需求有密切关系。但需求也是最难的一个环节。需求的形成往往需要经过:调研、分析、验证、确认等环节。在需求采集过程中,多媒体的采用将改变原有的需求模式,利用人工智能对多媒体的信息的处理,将大大减轻需求分析中文档的工作量。利用文本的自动识别和深度学习技术,可以对大量的现有文档的分析,是进行现状分析,建立现状模型的快捷有效的方法。银行领域业务的复杂性,对业务分析师的业务领域知识有较高的要求,而利用知识图谱技术建立的领域知识模型,可以很大程度上降低对人员业务知识的要求。同时也可以帮助建立业务领域的规范结构。利用文本分析技术对资料的学习,可以在接口数据标准的采用上起到关键作用。

设计阶段的成果无多数是以文档方式存在的,这样就会出现不同层级的架构的不一致以及和代码的不一致性。利用人工智能和大数据技术,通过对文档、代码的分析,可以建立应用架构、技术架构的的拓扑图,是我们分析现状架构的非常有用的方法。同时通过接口文件的分析,是自动建立交易路径的可行方法之一。通过对接口文档、数据库文件的分析,可以帮助进行自动的企业级数据字典的一致性检查。对于大型软件系统的维护性工作,影响分析一直是困扰我们的难题,通过文档、程序代码的智能分析系统,可以帮助我们识别关联,更精确地进行范围分析。

开发阶段,大家首先想到的是自动化代码生成。原则上代码自动生成不属于人工智能范畴,目前多数采用的是利用模型自动生成代码框架,包括利用前端设计的框架,自动生产页面代码等等。还有一块影响效率的部分是 版本管理和代码的自动化构建。但在大规模软件的生产过程中,需要对各种环境、接口、组件进行智能化辅助信息提示,将大大提升程序员的开发效率。智能的DevOps将在开发过程中,更高的提升软件生产线的自动化程度。

测试阶段面临最大的问题是自动化测试的推进非常困难,面对众多的测试案例、测试数据如何选取有效的测试案例、如何批量准备具备一定关联性的数据、如何自动调度测试执行、如何重复使用自动化测试脚本、如何管理日益复杂的测试环境成为影响测试效率的重要方面。我们在某股份制银行尝试的生产仿真测试技术,就是利用大批量的生产数据,利用人工智能的算法恢复业务场景和交易路径,从而实现大批量数据的自动化回归测试,极大提升了测试的效率。当然还有在众多流程、场景中,如何识别有效测试用例也是我们困惑的难点。利用人工智能技术、大数据技术的分析也许能够帮助我们更有效的进行测试分析。

在运维领域,大家都在提AIOps概念。清华大学裴丹教授对对AIOps的解释为:AIOps的英文释义成为Artificial Intelligence for IT Operations,是将人工智能应用于运维领域,基于已有的运维数据(日志、监控信息、应用信息等),通过机器学习的方式来进一步解决自动化运维没办法解决的问题。AIOps 不依赖于人为指定规则。主张由机器学习算法自动地从海量运维数据中不断地学习,不断地提炼并总结规则。

 

 

 

在整个软件生命周期,从需求到维护,再回到需求,整个过程不断循环往复、演进提升。在金融组织的大型系统的建设、运维过程中,积累了大量的文档和代码,这些资产的组织整理以及重复利用对于手工方式基本上是不可能完成的任务。如果利用机器学习的技术从海量文档、代码中重构组织资产,将对软件生产方式产生非常重大的影响。也就是我们提出的基于数字资产的软件再生产成为可能。我们在某银行进行的利用业务需求文档自动学习,形成某领域业务架构的探索,初步取得一定效果。

软件全生命周期属于管理域,是一个具有一定时间,涉及各种角色的相互协作的过程。对全生命周期的管理是我们科技部门重要的工作。传统的管理方法最大的难题是管理数据的获取不准确,不关联,不及时。但难度最大的还是量化管理。我们在利用文本识别技术进行软件功能点估算的尝试,初步取得一些成果,为进一步进行量化管理进行了有益的尝试。

随着人工智能技术的日益成熟和在软件工程领域的不断尝试,也许AI能够成为我们解开困扰软件行业的难题的银弹。

你可能感兴趣的:(人工智能,AI,大型软件,银弹)