官术网_书友最值得收藏!

2.2 軟件工程2.0

在2008年筆者寫的《軟件工程導論》一書中,相對于傳統軟件工程,定義了現代軟件工程,那時,筆者沒能預見到人工智能今天的巨大力量。15年后,筆者將受互聯網、開源軟件運動、敏捷/DevOps 開發模式的影響,最終形成的建立在 SaaS (Software as a Service,軟件即服務)、云之上的軟件工程定義為“軟件工程2.0”。

沒有互聯網,就沒有云和SaaS,我們就不能將軟件部署在自己的數據中心,那么持續交付(Continuous Delivery,CD)就沒有意義,因為我們無法做到將包裝盒形式的軟件產品持續交付到客戶手中,敏捷、DevOps也就難以實施,雖然可以在內部實現持續集成(Continuous Integration,CI),但其價值會大大降低。

之后的開源軟件運動讓我們首先認識到“軟件過程”和“軟件管理”并非非常重要,至少不是第一要素,因為第一要素還是人;其次是軟件架構,簡單且能解耦,如采用SOA(Service-Oriented Architecture,面向服務的架構)、微服務架構來解耦,更具可擴展性;再者是代碼的可讀性、可測試性,使代碼具有可維護性,而流程和管理雖然具有價值,但作用不大。

隨著市場變化越來越快,不確定性增強、市場競爭更加激烈,客戶或用戶始終希望我們能夠按時交付高質量的產品,同時還希望軟件有靈活性,能夠具有隨需應變的能力,也能夠通過及時、必要的修改來滿足業務的新需求。

除了考慮開源軟件運動、市場因素,軟件還是一種知識型產品,軟件開發活動是智力活動,需要很高的創造性,并依賴每個開發人員的創造力、主動性等。所有這些都引導人們對軟件工程進行新的思考并不斷認識軟件工程,從而在2001年17位軟件開發輕量型流派掌門人聯合簽署了《敏捷軟件開發宣言》,如圖2-2所示。

圖2-2 敏捷聯盟官網的《敏捷軟件開發宣言》截圖

之后逐漸形成了敏捷/DevOps 開發模式、精益軟件開發模式等,即軟件工程進入2.0時代。軟件工程2.0的特征可以簡單概括為下列幾點。

(1)SaaS:軟件更多的是以一種服務存在。

(2)強調價值交付:只做對用戶有價值的事情,加速價值流的流動。

(3)以人為本:個體與協作勝于流程和工具,充分發揮個人和團隊的創造性與潛力;擁抱變化,敏捷開發或輕量級過程,加速迭代,以不變應萬變。

(4)自我管理的團隊:像一家初創公司一樣運營,具有主動性并能夠承擔風險,具有自治能力,能自主建立目標和制訂計劃,不斷反思,持續改進。

(5)持續性:階段性不明確,持續構建、持續集成、持續測試、持續交付,以時間換空間,消除市場風險。

(6)開發、測試和運維的融合:強調測試與開發融合,開發與運維融合,推崇全棧工程師等。

(7)真正把用戶放在第一位:用戶、產品經理盡可能參與團隊開發過程,注重用戶體驗,千人千面。

(8)知識管理:將軟件工程納入知識管理的范疇,強調將項目的計劃、估算等工作授權給從事具體工作的開發人員,如任務安排不再由管理者下達任務,而由開發人員自主選擇適合自己的任務。

(9)更有樂趣:“史詩故事”、用戶故事、站會等讓軟件開發工作更有趣、更健康。

主站蜘蛛池模板: 定远县| 扎鲁特旗| 淮南市| 丹东市| 本溪| 建湖县| 望城县| 丽江市| 西宁市| 阿拉善右旗| 深州市| 望江县| 稻城县| 厦门市| 辉县市| 瓦房店市| 琼中| 乐至县| 永胜县| 莆田市| 搜索| 砚山县| 和林格尔县| 江达县| 文成县| 金川县| 怀安县| 宜良县| 商城县| 云阳县| 武川县| 云南省| 龙游县| 南乐县| 张掖市| 泰来县| 含山县| 枝江市| 南城县| 志丹县| 迁安市|