今晚在“智能软件工程”群里讨论得比较热烈,趁着余热,写这篇文章,觉得有必要做出几点澄清。每当新事物、新概念提出了之后,总会遭到一些质疑或误解,实属正常,而且之前也见到过几次类似事情——当事人做出解释(explained),看来,这是必经之路上的一站。
自从去年四月写了“”,软件工程3.0也逐渐被业界慢慢所接受,例如得到了中国信通院、应用现代化产业联盟、华为、腾讯、中兴等组织或公司的认可。之后,我也陆续写过几篇文章和持续的实践(每天在用):
......
虽然文中肯定存在一些不成熟的观点,但终究会走向成熟,正像我从去年开始写《软件工程3.0》这本书,一直没有脱稿,一方面是大模型及其相关技术发展太快了,包括RAG、智能体等技术的兴起与发展;另方面,自己在某些方面也没想得太清楚,需要进一步探索、实践和思考。例如,生产力如何决定生产关系——在大模型大幅提升研发生产力之后,软件组织的生产关系会发生怎样的变化?目前在《软件工程3.0》第2章已写完,试图回答了这样的问题。
现在就开始对“软件工程3.0”做几点关键的解释:
1)软件工程3.0时代就是智能软件工程的时代,软件工程1.0代表“传统的软件工程(以V模型为代表)”、软件工程2.0代表敏捷软件工程(含DevOps)。
2)软件工程3.0不是抛弃软件工程过去五十多年积累下来的优秀方法、实践和工具,而是在已有规范化、服务化、自动化、CI/CD、平台工程等基础上再往前迈出一大步。正如,我们新开发出来的“智能编程助手”会设法和过去的IDE集成起来,开发出来的“基于LLM的代码review工具”会和传统的CI/CD集成起来,LLM运行在云平台上提供推理服务.......等等,软件工程3.0更需要软件工程1.0和2.0积累下来的工程能力的支撑,或者说,有了这些能力,软件工程3.0的开发范式才能更好地发挥作用。
3)即使在软件工程3.0时代,传统软件工程、敏捷软件工程也有其适合应用的场景,和智能软件工程形成共存的局面。例如在软件工程2.0时代,许多企业推行“双态”——敏态(敏捷开发范式)和稳态(传统开发范式);另外,一些需求非常明确的领域,如核工业、航空航天等领域,还是以V模型为主。大模型时代也一样,也有它更适合的一面,包括有相应能力的团队、合适的系统和业务。过去有成功的方法能解决的问题,或小模型能解决的,就无需用大模型等等。
4)软件工程3.0强调新的开发范式:大模型驱动开发、大模型驱动运维,意味着开发思维的转变,也意味着先要建立大模型的能力,然后借助大模型的能力进行智能开发,包含需求文档生成、代码生成、测试生成等关键环节,但从来没有提倡“终结编程”、“代替开发人员”,而是强调“人机交互智能将是一种常态”,即人机结对需求分析、人机结对设计、人机结对编程、人机结对测试会是常态,如所倡导的。人始终是决定的力量,正如我在《》中写道:软件研发的第一性原理:软件研发是人的智力活动,人是决定的因素,所以在软件研发中需要优化与人相关的一切活动,包括个人能力和团队协作。许多情况下,团队用不好V模型、敏捷落地效果也不好,不是V模型的问题、不是敏捷的问题,而是人、团队的问题,包括团队的理念、基本素质、是否掌握了有效的方法和技术等。
5)今天看大模型,同样需要用十年的眼光去看它。敏捷2001年提出来,也是经过十年之后,慢慢被大多数企业所接受。20多年后的今天,许多企业还做不好敏捷;快60年了,许多企业还用不好V模型。“软件工程3.0” 提出来之后,还不到两年,还处在非常早期,不能以现在的状态否认软件工程进入一个新时代——智能软件工程时代,而未来代码生成、代码补全、测试生成等将无处不在。上个世纪90年代,互联网刚兴起的时候,没有几个人能看到今天的局面,只有非常非常少的人预见互联网是一场革命。今天我们每个人是不是见证了“互联网是一场革命”,今天没有互联网,是不是我们很不适应,甚至无法生活、工作?
6)过去也想推“智能软件工程”,恰恰是计算机系统不能理解业务、不能理解需求。今天大模型正是突破这个瓶颈,开始能够理解业务、理解需求。虽然现在许多企业更多精力投入在代码生成、代码补全上,其实在需求分析和定义上,大模型带来的价值和作用更大(这里,我有很好的实践,我会在《软件工程3.0》一书中呈现出来)。借助大模型,人机协同高效细化需求,获得ATDD/BDD的需求输出,然后代码生成、测试生成就可以基于相同的基础(用户故事的验收标准,包括GWT格式等)去展开、去相互博弈,可能是一条更好的实践之路。
7)我也是不是头脑一时发热才提出软件工程3.0,我自己在软件工程领域工作了30多年:在世界一流企业(Cisco)工作过十年,多年教授《软件工程》、《软件构造》、《软件测试》、《软件项目管理》课程,给国内一流大厂做过软件工程的顾问,也一直热衷于研究软件工程。基于长时期的实践经验和软件工程教学与研究,基于自己对软件工程的深刻理解,才提出了“软件工程3.0”。我有时候会说,许多大学教授《软件工程》的老师,其实自己从来没有亲自经历过一个完整的软件生命周期、不知道软件是怎么真正被开发出来的,所以很难教好《软件工程》这门课的。
欢迎各位老师、专家批评指正。