十年前写的某段代码,至今仍被同事辗转找到询问其意图;实现同一功能的代码在企业中已经被写了第六、七遍……调研时,复旦大学计算机科学与技术学院副院长、软件学院副院长彭鑫教授发现这种软件开发知识缺失的现象在产业界非常普遍,包括重复编写的代码、反复揣摩的设计意图、重复犯过的错误等。
“与软件开发的特点相关”
软件开发是一种工程化的过程,更多强调标准化和规范化。如果两个人用不同的方法实现系统的同一功能,那就产生了浪费。“其中一个人一定是重复了相似的思考过程,而这可能要浪费掉几个小时甚至更长的时间。”彭鑫表示:“不像画画,不可能要求两个人画得一摸一样。”
对于软件开发的浪费是如何产生的,彭鑫告诉《中国科学报》:“与软件开发的特点相关。”他进一步解释道,软件开发不同于传统制造业,后者是一个物理加工过程,如原材料的损耗和其形态转换很大程度上是可见的;而前者是一个逻辑的加工过程,其产生的制品和开发过程很大程度上都不可见。
知识是可以沉淀和复用的。以维基百科和搜索引擎为例,当人们遇到什么问题时,上去一查便可解决,不用重复思考。
“如果知识没有得到沉淀,那么后边还会有人再花费很多时间看懂某段代码,看懂之后又没有沉淀……类似的知识浪费在产业界比比皆是。”彭鑫表示,如果把知识都沉淀下来,就可以避免再犯同样的错误。
实际上,软件开发知识研究的中心正是实现智能化的软件开发服务。
彭鑫介绍,软件开发经历了从结构化方法、面向对象方法到网络服务化,逐步向基于互联网的云原生软件开发和运维的方向发展。软件开发工具与环境也是伴随着开发方法不断更替变化,从命令行开发工具到集成化开发环境,再到云化和以DevOps为代表的流水线化,目前正向智能化开发环境方向演进。
要因“地”制宜
新时代带来的技术发展的新环境被看成是软件智能化开发成为热点的关键原因,包括开源及企业软件开发产生大量数据,深度学习和知识图谱等智能化技术的发展提供知识获取的核心支撑,企业领域工程的广泛实践积累大量的领域资源。
然而,作为软件智能化开发基础的软件开发数据具有规模巨大、碎片分散、快速膨胀的特点。
彭鑫认为,实现软件智能化开发支持仍然需要解决一系列基础性的数据采集分析以及知识抽取利用等方面的问题,并以智能推荐、问答等方式提升软件开发工具的智能程度,提高软件开发的质量和效率。
“考虑到软件开发需求与设计的开放性和创造性,以及领域的多样性和差异性问题,智能化软件工程实践落地需要充分考虑软件工程实践以及特定领域的特点,其中很重要的一点就是实现特定领域和特定项目的知识积累和沉淀。”彭鑫告诉《中国科学报》。
因此,能否建立共建、共享与代码持续协同演化的软件开发知识平台?
带着这样的问题,彭鑫及其团队从软件开发质量与效能分析、通用软件开发资源推荐和特定项目业务知识服务等方面展开探索。
以软件开发质量与效能分析为例,彭鑫表示,基于时间和空间维度上的追踪关系建立代码单元及其问题的案例化管理、基于案例化管理实现知识沉淀并支持深度数据分析,“未来需要进一步扩大追踪管理的范围,实现测试、评审、构建、发布等全环节数据的追踪分析”。
“智能化的软件工具可以基于数据和知识向开发人员提供推荐和智能检索,由此形成 ‘人-工具-数据’融合的新一代软件智能化开发技术体系和环境。”彭鑫说。
转载来源:科学网