在2008年笔者写的《软件工程导论》一书中,相针对传统软件工程,定义了现代软件工程,那时,笔者没能预见到人工智能今天的巨大力量。
15年后,笔者将受互联网、开源软件运动、敏捷/DevOps研发模式的影响,最后形成的创立在SaaS(Software as a Service,软件即服务)、云之上的软件工程定义为“软件工程2.0”。
无互联网,就无云和SaaS,咱们就不可将软件安排在自己的数据中心,那样连续交付(Continuous Delivery,CD)就无道理,由于咱们没法做到将包装盒形式的软件制品连续交付到客户手中,敏捷、DevOps亦就难以实施,虽然能够在内部实现连续集成(Continuous Integration,CI),但其价值会大大降低。
之后的开源软件运动让咱们首要认识到“软件过程”和“软件管理”并非非常重要,最少不是第1要素,由于第1要素还是人;其次是软件架构,简单且能解耦,如采用SOA(Service-Oriented Architecture,面向服务的架构)、微服务架构来解耦,更具可扩展性;再者是代码的可读性、可测试性,使代码拥有可守护性,而流程和管理虽然拥有价值,但功效不大。
随着市场变化越来越快,不确定性加强、市场竞争更加激烈,客户或用户始终期盼咱们能够按时交付高质量的制品,同期还期盼软件有灵活性,能够拥有随需应变的能力,亦能够经过即时、必要的修改来满足业务的新需要。
除了思虑开源软件运动、市场原因,软件还是一种知识型制品,软件研发活动是智力活动,需要很高的创造性,并依赖每一个研发人员的创造力、主动性等。所有这些都引导人们对软件工程进行新的思考并持续认识软件工程,从而在2001年17位软件研发轻量型流派掌门人联合签署了《敏捷软件研发宣言》,如图2所示。
图2 敏捷联盟官网的《敏捷软件研发宣言》截图
之后逐步形成为了敏捷/DevOps研发模式、精益软件研发模式等,即软件工程进入2.0时代。
软件工程2.0的特征能够简单概括为下列几点。
(1)SaaS:软件更加多的是以一种服务存在。
(2)强调价值交付:只做对用户有价值的事情,加速价值流的流动。
(3)以人为本:个体与协作强过流程和工具,充分发挥个人和团队的创造性与潜能;拥抱变化,敏捷研发或轻量级过程,加速迭代,以不变应万变。
(4)自我管理的团队:像一家初创机构同样运营,拥有主动性并能够承担危害,拥有自治能力,能自主创立目的和制订计划,持续反思,连续改进。
(5)连续性:周期性不知道,连续构建、连续集成、连续测试、连续交付,以时间换空间,消除市场危害。
(6)研发、测试和运维的融合:强调测试与研发融合,研发与运维融合,推崇全栈工程师等。
(7)真正把用户放在第1位:用户、制品经理尽可能参与团队研发过程,注重用户体验,千人千面。
(8)知识管理:将软件工程纳入知识管理的范畴,强调将项目的计划、估算等工作授权给从事详细工作的研发人员,如任务安排再也不由管理者下达任务,而由研发人员自主选取适合自己的任务。
(9)更有乐趣:“史诗故事”、用户故事、站会等让软件研发工作更有趣、更健康。
软件工程3.0
在技术突破和创新办法的推动下,软件工程发展得越来越快,而近期的突破便是GPT-4等人工智能(AI)语言大模型的显现。GPT-4的诞生,大众都很震惊,尤其惊讶于从GPT-3到GPT-4的进化速度。
GPT-4是一种基于RLHF(Reinforcement Learning from Human Feedback,人类反馈的强化学习)和多模态的语言大模型,比其前身GPT-3.5有明显的改进。GPT-4拥有强大的识图能力,文字输入限制提高至2.5万字,问题回答的准确性明显加强。
因此呢,GPT-4能够执行一系列繁杂的任务,如代码生成、错误检测、软件设计等。正如,谷歌工程主管在文案《程序员的职业生涯将在3年内被AIGC终结》中的观点:“ChatGPT和GitHub Copilot预示着编程终结的起始”“这个行业将出现基本性的变化”“当程序员起始被淘汰时,仅有两个角色能够保存:制品经理和代码评审人员”,这篇文案是在GPT-4发布前写的,而真正的GPT-4要强大非常多,对软件研发的影响会更为明显。
思虑到软件工程的发展速度,在不久的将来,乃至从今天起始,AI就起始逐步接手有些软件研发的工作。
随着将GPT-4+(指GPT-4及其未来升级的版本)融入软件研发生命周期中,研发人员的使命将会出现变化,由于GPT-4+重新定义了研发人员构建、守护和改进软件应用程序的方式。之后的软件研发会依赖这种全新的语言交流方式(类似于ChatGPT),让这类工具理解研发人员交代的任务,自主完成软件研发,如理解需要、自动生成UI、自动生成制品代码、自动生成测试脚本等。
此后,研发团队的重点任务再也不是写代码、执行测试,而是训练模型、参数调优、围绕业务主题提问或给出提示。因此呢,咱们说GPT-4将开启“软件工程3.0”新时代,2023年是软件工程3.0的元年,软件工程3个时代的划分如图3所示。
图3 软件工程3个时代的划分
先瞧瞧GPT-4自己是怎样说的,如图4所示。但笔者经过简单的实验,认为它能做的事比它说的要多。
下面展示日前GPT-4在软件研发行业所能做的有些工作,顺着这条思路咱们想象一下软件工程3.0是怎么样的一番景象:有些大厂之前有好几万名研发人员,将来可能仅有几千人;借助其强大的私有云平台,软件研发效能能够真正实现十倍增长,降本增效再也不是机构的核心问题(由于已然得到了彻底处理)。
图4 GPT-4在软件工程上的能力
1)软件需要获取、分析与定义
GPT-4在需要获取、需要挖掘、需要分析和需要定义的各个环节,都能扮演比较重要的角色,能够基于用户评论数据挖掘软件需要和应用场景,帮忙咱们完成需要建模或做出决策,最后生成需要文档,如图5所示。虽然GPT-4不可完全处理需要工程中所有的问题,但能帮忙咱们节省60%以上的工作量。
图5 GPT-4在需要分析上的能力
GPT-4能够基于简单的描述帮咱们完成基本功能分析,如图6所示。
图6 GPT-4基于描述进行基本功能分析
进一步,GPT-4亦能够基于需要生成验收标准,如图7所示。
图7 GPT-4基于需要生成验收标准
还能按照需要验收标准生成BDD(Behavior-Driven Development,行径驱动研发)标准的GWT(Given-When-Then)格式的需要,如图8所示。
图8 基于需要验收标准生成BDD标准的GWT格式的需要
2)软件设计与体系结构
GPT-4经过供给意见、识别设计模式、分析和优化软件体系结构,以及分享最佳实践和框架方面的知识,为软件研发人员(如架构师)供给有价值的帮忙,从而帮忙她们做出明智的决策、选取最佳的体系结构并制定健壮的处理方法,即创建可伸缩、可守护和有效的软件处理方法,以满足软件的特定需要。另外,GPT-4能够促进区别设计选项的评定和比较,保证研发人员选取最合适的演化路径。详细地说,GPT-4在软件架构设计上能够经过以下几种方式帮忙软件研发人员。
(1)供给意见:按照需要和约束等自然语言输入对软件架构供给意见,这些意见能够帮忙研发人员针对待研发软件架构做出明智的决策。
(2)识别设计模式:按照自然语言输入识别软件架构中的平常设计模式,帮忙研发人员识别潜在的问题并改进软件的整体设计。
(3)分析和优化软件架构:经过分析软件架构并按照自然语言输入提出优化意见,帮忙研发人员改进其软件的性能、可伸缩性和可守护性等。
(4)知识共享:供给相关软件体系结构的最佳实践、模式和框架的信息,帮忙研发人员跟上软件体系结构的最新趋势,加强在该行业的整体水平。
随着多模态技术的发展,大模型GPT-4能够直接读入设计草图,或帮忙咱们理解图形用户界面、解答关于UI设计的问题,并供给设计意见,帮忙咱们做出更好的设计。
3)代码生成和优化
在编程上,大模型更善于代码生成、代码补全、代码评审、代码优化等工作。因为开源代码的数据量大、质量高(毕竟要符合代码语法和代码规范),因此呢模型生成内容的质量自然很高,符合“高质量输入、高质量输出”的标准。
GPT-4能按照自然语言输入的需要及其上下文生成代码,况且能够用区别的编程语言生成相应的代码段、API(Application Programming Interface,应用程序接口),乃至全部软件模块。它能够帮忙研发人员容易创建繁杂的应用程序,乃至还能够帮忙她们按敏捷研发模式推崇的TDD(Test-Driven Development,测试驱动研发)方式完成代码的实现,并支持快速原型化和概念验证研发。这般能够极重地减少人工编码所花费的时间和精力。
4)测试用例和测试代码等生成
做为一种人工智能语言模型,GPT能够基于自然语言输入生成测试用例,这些测试用例涵盖了基于所接收到的自然语言输入的广泛场景,乃至能够帮忙识别需要测试的边缘状况和潜在的边界要求,以保证软件能充分地满足需要。虽然它不可保准能生成所有可能的测试用例,但海量的实验显示这方面的效果不错,能够详见在“软件质量报告”公众号上发布的文案《又一次被震惊:从生成和细化需要到应用各样办法设计测试用例》,文案中展示了GPT-4能够基于需要生成测试用例,并经过提示让GPT-4持续弥补或完善测试用例,况且还能够让GPT-4基于区别的设计办法(如等价类划分、边界值分析、决策表、因果图、正交实验法等)生成测试用例。例如,利用正交实验法,列出因子、水平数,选取一个L9(32)正交表,生成8条测试用例。虽然GPT-4不可画因果图,但能正确地运用这种办法生成有效的测试用例,如下所示。
因果图办法是一种测试设计技术,经过分析输入要求和输出结果之间的因果关系来设计测试用例。以下是运用因果图办法为文案发布功能设计的测试用例。
1. 确定输入要求(因子):
1)标题:有效/无效(超过长度限制)
2)摘要:有效/无效(超过长度限制)
3)正文:有效/无效(超过长度限制)
4)标签:有效/无效(超过长度限制)
5)封面照片:有效/无效(非照片格式或超过体积限制)
2. 确定输出结果:
1)发布成功提示信息
2)发布失败提示信息
3)生成的文案详情
3. 分析输入要求与输出结果之间的因果关系,并设计测试用例如下。
测试用例1:正确的标题和正文
● 输入:有效标题,有效正文
● 输出:发布成功提示信息,生成的文案详情
测试用例2:标题超过长度限制
● 输入:无效标题(超过长度限制),有效正文
● 输出:发布失败提示信息
测试用例3:正文超过长度限制
● 输入:有效标题,无效正文(超过长度限制)
● 输出:发布失败提示信息
测试用例4:有效摘要
● 输入:有效标题,有效正文,有效摘要
● 输出:发布成功提示信息,生成的文案详情包括摘要
测试用例5:摘要超过长度限制
● 输入:有效标题,有效正文,无效摘要(超过长度限制)
● 输出:发布失败提示信息
测试用例6:有效标签
● 输入:有效标题,有效正文,有效标签
● 输出:发布成功提示信息,生成的文案详情包括标签
测试用例7:标签超过长度限制
● 输入:有效标题,有效正文,无效标签(超过长度限制)
● 输出:发布失败提示信息
测试用例8:有效封面照片
● 输入:有效标题,有效正文,有效封面照片
● 输出:发布成功提示信息,生成的文案详情包括封面照片
测试用例9:无效封面照片
● 输入:有效标题,有效正文,无效封面照片(非照片格式或超过体积限制)
● 输出:发布失败提示信息
经过基于因果图办法设计的这些测试用例,咱们能够全面地测试文案发布功能。倘若您还有其他需要,请随时告诉我。
生成测试脚本亦是GPT-4的强项,在SauceLabs的文案“ChatGPT for Automated Testing: From Conversation to Code”(《自动化测试运用ChatGPT:从对话到代码》)所介绍的实验中,能够让GPT-4生成谷歌站点测试的脚本。
虽然提示中无知道说明要在网站上测试什么,但ChatGPT仍然生成为了一个脚本来测试谷歌网站的重点功能之一——“搜索功能”,乃至正确识别出谷歌搜索栏的名叫作“q”。进一步,这个实验指示ChatGPT能够为元素定位器运用页面对象模型和类变量,还能够生成与某工具平台(如Sauce Labs)兼容的测试脚本。
最后,ChatGPT能够消除测试脚本中的硬编码(如URL、用户名“username”和秘码“password”),从场景特性文件中获取变量,即参数化脚本(数据驱动脚本),使脚本更易被守护,如图9所示。
将测试脚本从一个平台迁移到另一个平台亦是大模型的强项,如同翻译,例如GPT-4比较容易地完成测试脚本从Cypress 迁移到 Playwright。
图9 ChatGPT写出参数化(数据驱动)的测试脚本
5)错误检测和处理
GPT-4在代码分析和理解方面的能力使其作为检测和处理软件应用程序错误非常有价值的工具。经过仔细检测代码片段和理解上下文,GPT-4能够识别错误并给出最佳处理方法,乃至能够为现有问题生成补丁。这种功能极重地加快了调试过程,并保证软件制品更加靠谱和安全。另外,GPT-4能够与连续集成和连续安排(CI/CD)流水线集成,以加强自动化测试并促进连续地交付软件,如图10所示。
图10 CI/CD集成GPT-4能力的截图
6)协作和知识共享
在当今快节奏和相互相关的研发环境中,协作和知识共享比以往任何时候都更加重要。GPT-4经过在团队讨论、头脑风暴会议和代码审查时期供给实时帮忙,能形成会议纪要和总结,能理清楚规律和发掘问题,并提供有价值的见解和意见的替代办法,乃至能从其庞大的知识库中供给关联示例。这种人工智能驱动的协作加强了团队生产力,培养了团队连续学习的文化,并为创新铺平了道路。
总结:
GPT-4+支持更智能、更有效和协作的研发办法,给软件工程行业带来了革命性的变化。
在进入软件工程3.0后,软件研发的范式亦出现了很大的变化。
软件研发的新范式是模型驱动研发、模型驱动运维,在DevOps两环前面,加一个环形成三环联动,如图11所示,其中设备学习(Machine Learning,ML)中的要素有模型(Model)、数据(Data),而开发经过计划(Plan)、创建(Create)、验证(Verify)、打包(Package)、发布(Release)等环节进入运维,运维有两个关键环节:配置(Configure)和监控(Monitor)。
图11 软件工程3.0研发范式示意图
由此咱们能够看到,在软件工程3.0时代,软件即模型(Software as a Model,SaaM),这个模型区别于过去软件工程1.0 或软件工程2.0时代所谈到的抽象模型[(如UML中的模型、OMG(Object Management Group,对象管理组织)]所提的模型驱动架构(Model Driven Architecture,MDA)中的模型,而是深度神经网络模型、大型语言模型(Large Language Model,LLM)或其他人工通用智能(Artificial General Intelligence,AGI)模型,能够直接给人类供给服务的模型。大型企业通常会选取训练、精调自己行业的AI大模型,中小企业通常会调用专业机构供给的大模型服务接口。
在基于MaaS的软件工程3.0时代,软件以这类AI大模型的形态为用户供给各样各样的服务,况且将来会作为一种常态。
在软件工程3.0时代,新一代的软件研发平台起始能够理解需要、设计、代码等,软件研发从过去的信息化时代进入真正的数字化时代,这亦是一种有重要道理的进步;人机自然对话作为可能,能够告诉新一代软件研发平台咱们想要生成的内容,即人工智能生成内容(Artificial Intelligence Generated Content,AIGC),如软件需要定义文档、需要或用户故事的验收标准、代码、测试用例、测试脚本等,软件研发进入AIGC时代,软件研发过程便是人与计算机自然交互的过程。
在软件工程3.0时代,业务数据和研发过程数据的质量非常重要,能够基于这些数据进行精调,以优化大模型。软件工程3.0在新范式下,有如下两条实践路径。
(1)垂直路径:针对特定行业进行模型的训练或精调,并给出详细的提示文本(序列)集,以帮忙企业快速发布符合市场的制品、获取用户、收集反馈并连续改进。
(2)水平路径:将生成式AI功能引入通用的研发云平台中,实现全新的或重构已有的研发工作流、研发IDE(Integrated Development Environment,集成研发环境)、测试框架与工具、运维工具。
研发人员不仅会致力于提示工程(Prompt Engineering)、服务于大模型和大数据平台,包含模型创建、训练、调优、运用等,况且她们的工作方式亦将出现变化,对她们的需求更加多表现在对业务的深度理解、系统性思维、规律思维等方面。
虽然软件工程2.0已然起始面向CI/CD,但还存在许多阻碍,而在软件工程3.0时代,得益于设计、代码、测试脚本等的生成,能够真正实现连续交付,即即时响应客户需要,交付客户所需的功能特性。
表2-1是对软件工程1.0、软件工程2.0和软件工程3.0的总结。
表2-1 三代软件工程的比较
最后,经过“软件工程3.0宣言”做为对软件工程的将来展望。
软件工程3.0宣言:
人机交互智能 强过 研发人员个体能力
“业务和研发过程”数据 强过 流程和工具
可产生代码的模型 强过 程序代码
提出好的问题 强过 处理问题
笔者相信,经过GPT-4+的力量,能够处理非常多安全、法律、伦理等方面的问题和应对面临的挑战,软件工程的将来尤其值得期待。
本文节选自《软件开发行业创新实战案例解析》,本书旨在经过各个机构在工程创新、管理创新、制品创新、技术创新、效能创新上的最佳实践,以及对案例的分析和总结,为其他机构供给必定的参考和借鉴,以帮忙大众更快速地处理所遇到的问题。
本书共包括22个实战案例,涵盖了开发效能提高、数字化实践、敏捷转型、开发管理、人才培养、AI视觉分析引擎构建等软件开发各个行业的多个方面,适用于软件开发行业中的各类管理人员和从业者。
怎样抽奖?
1.这次一共赠送2人书籍,为上文举荐书籍,取留言点赞数最多的2位小伙伴,包邮到家,留言需关注公众号。
2.中奖名额为2位,开奖时间为2023年9月16日( 周六) 12:00 ,取留言内点赞数最多的2位朋友。
3.兑奖时间于2023年9月17日( 周日) 12:00截止,过期不候。
4.中奖后请联系(微X:cloud288)私发邮寄位置及联系方式。
5.近期6个月已然经过本途径送过书的朋友再也不赠书,无需参与活动,本活动架构师影响力推出,活动解释权归自己所有。 微X将好友放开到了一万,小伙伴能够加我,先到先得;需简单自我介绍下或伴侣圈对等开放。若一条都不满足,拒绝供给好友位,如需加测试讨论群,能够备注,融入圈子,一块成长。
|