敏捷和架構設計分道而行,又最終擁抱彼此成為朋友

2021-09-17 05:16:19 字數 2432 閱讀 4519

《程式設計師必讀之軟體架構》一書的作者simon brown說:由於對敏捷宣言的誤解,人們認為不再有必要定義軟體架構或者做軟體設計。很多軟體開發者沒有足夠的工具箱,而且軟體業界缺乏共同的軟體架構詞彙表。乙個好的架構使得敏捷性成為可能,因為足夠的預先設計,為設定未來的方向打下穩固的基礎。

\\ 在swanseacon 2016的開幕演講上,brown談了敏捷和架構設計是如何分道而行,又是如何最終成為好朋友。swanseacon 016在南威爾斯舉行,是第二屆敏捷開發和軟體技藝會議,參與的人包括軟體開發者、軟體架構師、專案經理、分析師和諮詢師。infoq通過問\u0026amp;答、總結和文章的方式全程報道了該會議。

\\ brown說,瀑布模型目標是優化那些你可以在早期獲知的事情。開發前期花費的時間能夠有效降低後期的開銷。作為示例,他提到了結構化系統分析和設計方法 (ssadm),乙個基於瀑布模型的軟體開發方法。它採用系統管理的概念為軟體設計提供端到端的生命週期管理。brown也提到了統一軟體管理流程(rup),乙個增量迭代的框架。採用rup時,應該根據實際專案做定製,但是沒有人這麼做,所以大家認為rup流程太大了。

\\ 瀑布模型的主要問題是反饋週期太長。瀑布模型的結構化和嚴謹性有助於開發乙個高質量的產品,但是如果沒有及時的反饋,會帶來開發錯誤產品的風險。 \

敏捷宣言宣告了流程和工具重要,而個人和互動的價值更高。但是很多人錯誤地解讀了敏捷宣言,認為不再需要流程。敏捷宣言也宣告了「有效的軟體產品比全面的文件重要」,這也使得人們認為沒有必要做架構和軟體設計。brown說,這導致了敏捷和架構設計的衝突。

\\ 第乙個衝突是關於團隊的結構,問題是我們是否需要乙個專職的軟體架構師,或者團隊中的每乙個人都是架構師?敏捷宣言第11條宣告了「最好的架構、需求和設計源於自組織的團隊」。brown說,好訊息是宣告裡確實提到了架構和設計。他看到過成功地把架構師的角色延展開的團隊,但是也看到了沒有人負責架構和設計的團隊,在這樣的團隊裡,每個人都認為架構設計是別人的事情。

\\ 第二個衝突與流程有關。brown說,歷史上,曾經出現過預先進行大量設計(bduf)的趨勢,人們嘗試理解所有的事情,從而預先繪製一本藍圖。人們想知道敏捷是否允許進行一些預先設計。演化論設計方法嘗試提供一套可以做一些預先設計的解決方案,但是當架構設計不正確的時候,軟體修改變得很困難,重構的開銷巨大。brown說,如果一開始就著手構建,核心功能模組更可能執行到最好的狀態。

\\ brown不贊同測試驅動開發(tdd)不需要架構的觀點。他建議預先確定架構,這樣tdd可以在設定的界限內工作。同時,brown強烈反對在「最後負責任時刻」才確定架構,因為這很可能被解讀為「任何時候都不要做決定」。

\\ brown說,為了解決架構方面的問題,我們需要理解敏捷的真正意義。他提出的核心定義是:

\\

\

快速行動,擁抱變化,經常發布軟體,獲取反饋。

\

\\

敏捷是一種輕量級的軟體交付方法,它基於持續提高的想法和文化。brown說,真正地做敏捷,而不是形式上敏捷,這很重要。但是敏捷宣言的措辭容易讓人誤解,「x勝於y」的表述常常被錯誤地解讀為y不重要。

\\ 宣言第九條宣告「持續關注技術上的卓越和優秀的設計增強了敏捷性」。brown說,乙個好的架構使得敏捷成為可能。按照他的說法,敏捷性是乙個「非功能的」,或者說是「質量」的需求。採用敏捷,你需要平衡多快地行動,以及多高的軟體質量。

\\ brown質疑是否有軟體設計復興,因為紀律化的敏捷交付(dsdm)和大規模敏捷框架(saf)等方法都有軟體設計的元素在裡面。他說:

\\

\

這不是說要創造乙個完美的最終狀態、框架、或者乙個完備的架構。你需要為團隊以及你所構建的東西設定乙個起點,使得你們可以在正確的方向上,作為乙個團隊合力前進。

\

\\

精益和敏捷都以增值和移除浪費為目標。定義乙個起點是很價值的,你需要適當的預先設計打造堅固的基礎,設定正確的方向。

\\ brown說維基百科中定義的軟體技藝太專注於**。很多軟體開發者沒有足夠的工具箱。有許多書寫軟體文件的方法,但是人們常常不知道它們。如果你問他們是如何進行軟體設計的,他們說一些諸如「我們使用白板」,以及「我們畫乙個方框代表元件」。他所經歷的是很多人不知道怎麼元件化,用什麼標準分解元件,例如有的人沒有聽說過類-責任-協作(crc)。

\\

\

某種意義上說,我們是一種工程學規範,但是我們的實踐還不能持續地達到一定的水準,以確保計算系統的質量能夠滿足工程學相關的社會契約。我們需要繼續把科學的、已經被纂寫好的知識引進到軟體設計和分析領域中。

\

\\

brown說,儘管敏捷和架構設計在過去的一段時間裡曾經分道而行,但是在15年之後,他們終於又成為了朋友。他說:「讓我們不要忽略過去的經驗,而是從中學習」。

\\檢視英文原文:how agile and architecture parted and finally became friends

\\ 感謝夏雪對本文的審校。

\

敏捷和架構設計分道而行,又最終擁抱彼此成為朋友

程式設計師必讀之軟體架構 一書的作者simon brown說 由於對敏捷宣言的誤解,人們認為不再有必要定義軟體架構或者做軟體設計。很多軟體開發者沒有足夠的工具箱,而且軟體業界缺乏共同的軟體架構詞彙表。乙個好的架構使得敏捷性成為可能,因為足夠的預先設計,為設定未來的方向打下穩固的基礎。在swansea...

Web API應用架構設計分析(1)

web api 是一種應用介面框架,它能夠構建http服務以支撐更廣泛的客戶端 包括瀏覽器,手機和平板電腦等移動裝置 的框架,asp.net web api 是一種用於在 net framework 上構建 restful 應用程式的理想平台。本文主要以asp.net web api 的框架實現來介...

Web API應用架構設計分析(1)

web api 是一種應用介面框架,它能夠構建http服務以支撐更廣泛的客戶端 包括瀏覽器,手機和平板電腦等移動裝置 的框架,asp.net web api 是一種用於在 net framework 上構建 restful 應用程式的理想平台。本文主要以asp.net web api 的框架實現來介...