1. 程式人生 > >從實踐者的角度看軟體架構的歷史

從實踐者的角度看軟體架構的歷史

無論什麼東西,套用宋丹丹的話,就是都有它的過去、現在和將(jiǎng)來。因此學習一樣東西,如果能多學一點它的歷史,會讓我們對其為何有如此現狀少一些糾結,同時才有可能對其未來趨勢有靠譜一點點的洞見。昨夜窗外雨聲稀疏,難以入眠,突然想到軟體架構的發展史是怎樣的,於是今晨起來網上逛一圈,邂逅到這篇論文《The History of Software Architecture – In the Eye of the Practitioner》,因此,這是一篇譯文。

小弟不才,沒有能力自己去梳理這麼龐大的論題,因此只能翻譯了。不過我並沒有翻譯這篇論文的全部內容,比如附錄就沒有翻譯。在翻譯的過程中,一度覺得這論文的英文及其拗口,跟我閱讀過的其它英文書比實在是難讀。開弓沒有回頭箭,我還是把要譯的部分譯完了,難免有詞不達意之處,還望海涵。

以下是譯文:

 

1. 目標和動機

那些權威論文把軟體架構當作獨立的學科,一些科技期刊也把架構視角、架構描述語言、架構進化作為他們研究和實踐的基石,從這些角度來看的話,軟體架構正好迎來了它的25週年慶。

隨著基於雲交付的普及,分散式系統的各個部分需要動態整合,商業和社會數字化的曲線越來越陡,使得一個合理的設計決策包含了更大和更復雜的問題空間。軟體架構的重要性前所未有,開展重要專案的組織離不開相應架構實踐的支撐。然而,這25年來,軟體架構的實踐是如何進化的呢?未來又將面臨哪些挑戰?

對軟體架構研究和實踐現狀的總結,曾有過各種不同的嘗試,然而都缺少了從實踐者的角度來看待上面的兩個問題。

為了填補這個空缺,我們首先從5622篇科技論文中抽出10大主題,如圖3。然後我們根據這些主題設計一個線上問卷調查,並由擁有5到20年不等經驗的57位軟體架構實踐者填寫了這份問卷調查。

 

2. 實踐者對過去25年軟體架構及未來之路的看法

這篇論文中,我們的調查聚焦於,在過去25年裡,軟體架構方面最突出的話題有哪些,以及在當下和不久的將來,軟體架構方面的哪些話題會具有最深遠的影響力。

調查問卷包含的問題有:

a) 參與者的背景、經驗和其它一些統計資訊;

b) 目前他們供職的機構,過去幾年接手的專案型別;

c) 過去25年在軟體架構方面的實踐;

d) 最有影響力而且是目前軟體架構趨勢的話題(包括近兩年新興的);

e) 未來工業界可能在軟體架構方向的實踐(未來5年);

基於參與者的回答,我們精編得到以下結果。

過去:圖1.PAST 總結了實踐者們認為的過去25年最有影響力的10個軟體架構話題。我們可以看到:

1.最有影響力的話題屬於“軟體開發流程”、“面向服務的架構(SOA)”、“架構風格”、“物聯網(IoT)”。這些總共佔了38%的比重。

2.SOA就像圖中展示的那樣了,其它的話題則包含更多特定的子話題:“軟體開發流程”包含了敏捷開發、持續交付整合、DevOps、領域驅動設計、需求角色、遺留(系統/程式碼)、風險和質量管理、溝通技能。“架構風格”包含隨著時間而演變的各種不同風格,從C-S和分散式架構,到生產線架構、MVC、多層架構等等。最後,“IoT”包括數字化、Web、網際網路、工業4.0和移動優先。

圖1.PAST 標紅的數字表示它是否出現在圖3中(科學文獻中前10的話題)。同樣的,我們可以看到:

1.工業界前4個話題同樣出現在學術界的前10個話題中,但影響力有些差別:“軟體開發流程”在工業界排第1,但在學術界只排第7,“SOA”在工業界和學術界都排第2,還有很明顯的,“架構風格”在工業界的影響力被認為是大得多,排在第3,而在學術界排第6。

2.真正有大分歧的話題是“架構描述&語言”,這在學術機構排第1,而在實踐者眼中只排到第8。不過這並不奇怪,符號和語言常常作為學術界深愛的研究課題,但工業界真正採用的並不多。不過也好,這正可以作為一個讓研究者和實踐者進行更好描述和高效溝通的契機。

還有一些話題,被實踐者們提及,但是卻不入專業研究者的法眼。最突出的比如:

1.軟體質量(第5):很顯然,質量成為軟體架構的屬性是過去25年的一個重要成果。“質量”有時候又被稱為質量符合性、效能、可擴充套件性、可維護性等等。

2.雲端計算(第6)和微服務(第7):它們被認為非常(每樣14票)的有影響力。作為SOA的衍生品,它們被認為是同屬一個話題—這樣就一共獲得42票,變成了過去25年最有影響力的話題。

現在:圖1.PRESENT 使用同樣的分析方法得到現今軟體架構最有影響力的話題。這個結果中,“架構風格”排在第10(緊挨著“SOA”和“架構設計決策”)。另一方面:

1.“SOA”被“雲”和“微服務”替代:我們認為這是正常的技術進化,作為一種普遍的架構風格,SOA曾被應用到到各個應用領域。

2.“軟體開發流程”仍然保持穩定(第1)。相較於對過去25年的回答,今天“一切都是敏捷”:敏捷之後呢,是DevOps、持續架構(continuous-architecting)。我們注意到,在敏捷開發中,架構扮演更重要角色的意識正在增強。

3.同樣的,“IoT”保持穩定(第4)。然而相比過去,它被認為是有更大的影響力,關注點也從移動應用轉變到基於IoT的架構。這也和Gartner關於2018年重大技術策略趨勢的預測相符,預測中提到的“智慧物件(intelligent things)”,就是將AI與IoT融合。

4.明顯的,“軟體質量”(第6)和“安全性(第7)”的影響力在下降。這或許是架構師們都知道了如何應對這些問題,又或許他們覺得有更重要的話題要關注。

總的來說,現今最有影響力的話題總共佔據了70%的答案。其中,流程、面向服務(雲和微服務)、IoT三者共佔了62%。

而且,在現今的前10個話題中,有一些新名詞引起了我們的注意:

1.“大資料”(第5):稱為大資料,或者AI、機器學習、機器分析。

2.“第三方軟體整合”(第8):在過去25年的部分曾被提及,但排在第14,不過都分別得到了5票。不過從答案中,可以看到軟體架構正從封閉走向開放。

未來:圖 1.FUTURE,我們從調查反饋中看到比較高的不確定性。即使實踐者們認為前4個話題在未來5年仍保持主流,但它們佔據總票數的52%,比現今的影響力要小10%。

圖1.FUTURE 展示了:

1.“軟體開發流程”、“大資料”、“微服務”和“雲端計算”會繼續扮演非常重要的角色,然而:

2.對於“軟體開發流程”,實踐者們更關注如何管理不斷增加的複雜性,可能是跨組織的,並將注意力放到了更高的自動化上。

3.對於“大資料”,提到了AI將扮演的角色和大資料在我們日常生活中進行的各種預測。

4.“微服務”將成熟,新的“雲”將關注點放在基於雲架構的風格/模式,以及如何通過軟體架構來實現XaaS商業模型。

5.“自適應系統”(第5),在過去的幾年裡火熱於學術界,被認為在工業界也變得越來越重要。

6.在新的話題當中,“區塊鏈”也位於前10(不過反應平平,可能出乎你的意料)。

7.其它冒出的新鮮話題、不在前10名單中的有機器人、數字化轉型、智慧互聯、綠色軟體、倫理學。

 

3. 反思與收穫

除了之前呈現的結果以外,我們還要求實踐者們根據自身經歷反饋哪些架構話題在他們過去的25年裡產生過最重大的影響,以每5年為一個週期,如下圖:

圖2 展示了過去(比如client-server架構,從1992-2001年)佔據主流的話題如何被新話題(比如“架構設計決策”、“架構知識體系”,從2002-2011年)超越的,以及最新的一些話題(“資訊物理系統cyber-physical systems”和IoT,從2012-2017年)是如何湧現的。這讓我們得到至少以下的認知:

認知1. 在軟體架構的歷史中,架構的概念從先前的一系列系統結構,變成了處於大型的、複雜的、不斷進化的環境中的軟體系統。然而在這樣的環境中,不只是關乎技術,還包括人員、社交、組織生態和整個社會。軟體架構的實踐者關注的面比研究者們要廣泛,軟體架構實踐者同時追隨其它學科,從AI、IoT、自適應增強,到能源和倫理學。

認知2. “軟體開發流程”贏了。無論是過去,現在還是未來,軟體架構始終關注如何更敏捷的進行開發,怎樣的人員技能可以有助於開發。房間裡的大象(明視訊記憶體在的問題)可以用來形容軟體架構溝通和形式化之間存在的窘境:“架構模型”和“架構設計”常常用來彌補“軟體開發流程”,但卻從來無法達到預期—將架構程式碼化,使得架構可重用並且可靠。

認知3. 對於軟體架構這個話題,不存在革命性的新東西,只有在舊的東西之上默默地演化。比如“軟體開發流程”演化成各種形式的敏捷開發,“架構風格”從“SOA”演化到“微服務”和“雲”,“資訊物理系統”進化融合到“IoT”和“自適應系統”。總的來說,我們討論的是軟體架構的全域性趨勢,通向更便捷性的,可管理更多複雜性。

認知4. 軟體架構的研究和實踐始終保持一致。當我們對比圖3中的前10個研究課題和圖2中工業界的主流話題,我們看到比如“客戶端-伺服器”和“架構風格”在研究和實踐方面有非常類似的趨勢。“軟體架構設計”和“架構設計決策”雖然研究和實踐方面有不同的趨勢,但都保持著重要的地位。最明顯的就是“架構描述&語言”,在研究領域炙手可熱,而實踐中少得多。

最後,我們希望從歷史角度看到的軟體架構演化史能給讀者帶來進一步的思考和靈感。

 

文章最初發表於:從實踐者的角度看軟體架構的