
希望這篇文章?成為 “軟件工程3.0”?開創性的宣言。為了定義 “軟件工程3.0”,讓我們先定義?“軟件工程1.0”、?“軟件工程2.0” 。先簡單說明一下,用軟件版本號的方式 “1.0、2.0、3.0”?來分別定義第一代、第二代、第三代?軟件工程,符合軟件工程的習慣,而且簡潔明了。
“軟件工程1.0” 即第一代軟件工程,自然是受建筑工程、水利工程等影響的傳統軟件工程,它的誕生可以追溯到1968年。在上個世紀五、六十年代軟件出現危機,大家還記得布魯克斯(Frederick P. Brooks)在《人月神話》一書中所描述的場景:軟件開發被喻為讓眾多史前巨獸痛苦掙扎,卻無力擺脫的焦油坑。軟件危機迫使人們去尋找產生危機的內在原因,進而找出消除危機的解決方案。面對”軟件危機”,人們調查研究了軟件開發的實際情況,逐步認識到采用工程化的方法從事軟件系統的研發和維護的必要性。為了克服這一危機,大家走到一起,共同探討以獲得問題的解決途徑,于是在1968年NATO的計算機科學家在聯邦德國召開國際會議,討論軟件危機問題,正式提出了“軟件工程”(software engineering)這一術語,從此一門新的工程學科誕生了,軟件工程才得以不斷發展,逐漸成熟起來。傳統軟件工程主要向土木工程、工業工程學習,吸收其百年實踐積累下來的實踐方法和經驗、沉淀下來的思想。軟件工程1.0體現了下列一些特征:產品化:交付符合質量標準的組件、構件和系統
- 一環扣一環,相信良好的過程產生良好的產品,關注過程勝過關注人,也非常關注過程評估和過程改進,如CMM(過程成熟度模型)是其典型代表。
- 階段性明確,需求評審通過了,才能開始設計;設計評審通過了,才能開始實施(編程),編程結束了再進行測試等,如瀑布模型是其典型代表。
- 建筑工程的框架結構設計,在軟件工程上表現為以架構設計為中心。
- 注重項目管理:圍繞項目開展管理工作,包括風險預防、里程碑控制和關鍵路徑法等。

在2008年,我寫的《軟件工程導論》中,相對傳統軟件工程,我定義了現代軟件工程,那時,我沒能預見到今天人工智能的巨大力量。15年后,我將受互聯網、開源軟件運動、敏捷/DevOps開發模式所影響并最終形成的、建立在SaaS(軟件即服務)、Cloud之上的軟件工程定義為 “軟件工程2.0”。沒有互聯網(Internet),就沒有Cloud、沒有SaaS,我們對軟件就不能部署在軟件研發公司自己的數據中心,持續交付(CD)就沒有意義,因為無法做到將包裝盒形式的軟件產品持續交付到客戶手中,敏捷、DevOps也就難以實施,雖然可以在內部實現持續集成(CI),其價值會降低不少。開源軟件運動讓我們認識到 “軟件過程”、“軟件管理”不是非常重要,至少不是第一要素,第一要素還是人,其次是軟件架構(微服務、serverless等)和代碼質量,使軟件容易演化(如架構可擴展性、代碼的可維護性)。而且客戶或用戶始終希望我們能夠按時交付高質量的產品,又認可軟件的靈活性,希望軟件能夠具有隨需應變的能力,及時進行必要的修改來滿足業務的新需求。同時,軟件又是一種知識型產品,需要創造性,并依賴每個研發人員的創造力和積極性。所有這些引導人們新的思考,引導人們不斷認識軟件工程,從而在2001年17位軟件開發輕量型流派掌門人聯合簽署了敏捷宣言:
之后逐漸形成了敏捷/DevOps開發模式、精益軟件開發模式等,即讓軟件工程進入2.0時代。軟件工程2.0的特征可以簡單概括為下列幾點:
- SaaS(軟件即服務):軟件更多是以一種服務存在;
- 以人為本:個體與協作勝于流程和工具,充分發揮個人和團隊的創造性和潛力;
- 擁抱變化:敏捷開發或輕量級過程,加速迭代,以不變應萬變。
- 持續性:階段性不明確,持續構建、持續集成、持續測試、持續交付,以時間換空間,消除市場風險;
- 融合:強調測試開發融合,開發與運維融合,推崇全棧工程師等。
- 真正把用戶放在第一位:用戶、產品經理盡可能參與團隊研發過程中,注重用戶體驗,千人千面;
- 強調價值交付:只做對用戶有價值的事情,加速價值流的流動;
- 史詩般故事、用戶故事、站立會議,讓軟件研發工作更有趣、更健康。

在技術突破和創新方法的推動下,軟件工程的世界發展越來越快,而最近的突破就是GPT-4等人工智能(AI)語言大模型的出現。GPT-4出來了,大家都很震驚,尤其驚訝于從GPT-3到GPT-4的進化速度。GPT-4是一種基于RLHF(人類反饋強化學習)?、多模態的語言大模型,它比其前身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、自動生成產品代碼、自動生成測試腳本等。此后,研發團隊的主要任務不是寫代碼、執行測試,而是訓練模型、參數調優、圍繞業務主題提問或給提示(prompt)。因此,我們說GPT-4將開啟 “軟件工程3.0” 新時代,今年是軟件工程3.0元年。先看看 GPT-4自己是如何說的,但經過我簡單的實驗,它能做的事比它自己說的要多。

下面,一方面我會展示GPT-4目前在軟件研發所能做到的一些事情(這里要感謝海外朋友Huan、Christina的幫助),然后我們再順著這條思路想象一下軟件工程3.0是怎樣的一番景象:之前一些大廠有好幾萬的研發人員,未來只有幾千人,但可以借助其強大的私有云平臺,軟件研發效能真正實現10倍增長,降本增效將不再是公司的核心問題(因為已經得到解決了)。1)GPT-4在需求分析上無所不能



你覺得它吹牛嗎?不,它可以基于我們簡單的描述,幫我們完成基本功能分析,也可以基于需求生成驗收標準、生成測試腳本,根據需求驗收標準生成BDD(行為驅動開發)標準的Gven-When-Then格式。這一切有下圖為證。




2)軟件設計與體系結構
GPT-4的強大功能擴展到軟件設計和架構,可以幫助開發人員做出明智的決策并制定健壯的解決方案。通過處理所需應用程序的高級描述,GPT-4可以提出合適的設計模式,推薦最佳實踐,甚至建議最佳的體系結構選擇。此級別的指導使開發人員能夠創建可伸縮、可維護和高效的軟件解決方案,以滿足他們的特定需求。此外,GPT-4可以促進不同設計選項的評估和比較,確保開發人員選擇最合適的演化路徑。



(這部分實驗目前不好做,后續再補充)
GPT-4能根據自然語言輸入的需求及其上下文而生成代碼,而且可以用不同的編程語言生成相應的代碼。這一強大的特性減少了人工編碼所花費的時間和精力,并支持快速原型化和概念驗證開發。此外,GPT-4能夠生成代碼段、api,甚至整個軟件模塊,使開發人員能夠輕松地創建復雜的應用程序,甚至可以幫助我們按敏捷開發模式推崇的TDD來完成代碼的實現(周五會有單獨文章介紹,敬請關注)。
(來自:https://www.youtube.com/watch?v=lomBKUojSIU,這類例子很多)
感謝SauceLabs已經幫我完成這部分實驗(見文章:https://saucelabs.com/resources/blog/chatgpt-automated-testing-conversation-to-code),我們可以讓GPT-4生成Google站點測試的腳本。雖然提示中沒有明確說明要在網站上測試什么,但ChatGPT仍然生成了一個腳本來測試谷歌網站的主要功能 之一“搜索功能”,甚至正確地識別了谷歌搜索欄的名稱“q”。進一步,我們可以指示ChatGPT為元素定位器使用頁面對象模型和類變量,指示ChatGPT可以生成與某工具平臺(如Sauce Labs)兼容的測試腳本。
更進一步,消除測試腳本中的硬編碼(如URL、用戶名“username”和密碼“password”),從場景中的特性文件中獲取變量,使腳本更容易維護,這時可以讓ChatGPT修復這類問題。

5)錯誤檢測和解決
GPT-4在代碼分析和理解方面的能力使其成為檢測和解決軟件應用程序錯誤的、有價值的工具。通過仔細檢查代碼片段和理解上下文,GPT-4可以識別錯誤,建議最佳解決方案,甚至為現有問題生成補丁。這種功能極大地加快了調試過程,并確保軟件產品更加可靠和安全。此外,GPT-4可以與持續集成和持續部署(CI/CD)流水線集成,以增強自動化測試并促進無縫地持續交付軟件。
在當今快節奏和相互關聯的開發環境中,協作和知識共享比以往任何時候都更加重要。GPT-4通過在團隊討論、頭腦風暴會議和代碼審查期間提供實時幫助,形成會議紀要、總結,甚至理清楚邏輯,發現問題,提供有價值的見解,建議替代方法,甚至從其龐大的知識庫中提供相關示例。這種人工智能驅動的協作提高了團隊生產力,培養了持續學習的文化,并為創新鋪平了道路。這類例子,可以在?GPT-4 震撼發布:能看圖、能當律師、更安全、更有創意... 超過了其它大模型?一文中找到。
總之,GPT-4+的引入,從而支持更智能、更高效和協作的開發方法,使軟件工程領域發生革命性的變化。當我們進入軟件工程3.0時,軟件開發的范式將發生很大的變化,軟件研發人員的工作方式發生變化,對軟件人員的要求更多體現在對業務的深度理解、系統性思維、邏輯思維等方面。軟件工程 3.0的體現了下列一些特征:- 數字化:軟件研發平臺開始能夠理解需求、設計、代碼等,軟件研發從過去的信息化進入數字化時代;
- :生成軟件(software)的各種ware:驗收標準、測試用例、UI、代碼、測試腳本等;
- 極致的持續交付:雖然軟件工程2.0開始面向CI/CD,但還存在許多障礙,而在軟件工程3.0,得益于設計、代碼、測試腳本等生成,可以真正實現持續交付,即及時響應客戶需求,交付客戶所需的功能特性;
- 人機交互智能:軟件研發過程就是人與計算機的交互過程;
- 以模型和數據為本:研發人員服務于大模型和大數據平臺,包括模型創建、訓練、調優、使用等;

通過利用GPT-4+的力量,同時解決安全、法律、倫理等方面的問題和挑戰,軟件工程的未來將是光明和創新的。