我們從三個方面來解釋,我們做的時候不只要可執行,而且要想好它往哪個方向去發展,就是要有個藍圖。我們需要架構,這樣會知道它會往哪個方向去發展,有架構但是沒有可執行的方面,更是一種海市蜃樓不可靠的。很多人想架構的時候是紙上談兵,這對我們來說是海市蜃樓,它是虛幻的。另外的情況是,我們今天有很多代碼,它也形成了這樣的系統,但是沒有架構,我的問題是,像這樣的東西你認為是什么?(可執行的代碼,但是沒有架構)就是一些堆積在一起的東西。
所以要關注,要有一個可執行的框架系統,同時要知道它往哪個方向去發展。開始去構造一個骨架系統然后再往下面去加它的肌肉,讓它更有力氣,變大。
價值和原則,你去做架構層的時候不止是畫圖,應該知道它的原則是什么,它的一些基本的核心價值是什么。我覺得做一個軟件系統這三個方面的東西都要有,我們要從這兒開始,而且這不是非常難做的事情。
如何構建軟件工程中的“核”藍圖

這是從美國的西部擴展到美國的東部,這是1976年的事情,那時候發展得更大,現在是無處不在,基礎的東西是骨架系統開始,并且它有一定的自己的原則,基礎性的東西。左下角寫了,當時的Internet發展是有自己的原則性的指導的東西在這里。做事的方式是一樣的,我們有一些基本的原則,包括做任何的系統,酒店的系統、航空系統都會有一些基本的原則,用這些基本的原則引導你后面往正確的方向去發展。
我們怎么去改變你現有的工作方式,從剛剛講的情況來看,后一個例子一般會比前一個例子講得更細致一些,這個例子會有一些更細節的方面。每個開發人員都知道怎么去開發自己的軟件,但是軟件開發作為一個社區和群體我們沒有一個共識應該怎么做。而這個又是非常重要的,有共識這件事對軟件開發非常重要。
軟件工程被一些不成熟的實踐嚴重妨礙了它的進步,主要表現在首先軟件工程行業看起來更像是一個時尚行業,不像是工程的行業。在20年前我很年輕,這樣的面向對方的很流行,27世紀90年代的時候組建化技術也很流行,接下來在20世紀90年代之后大家都開始使用UML,就是UP(統一的過程)。幾年前大家都在談極限編程,現在談得不多,現在大家談敏捷和其他的技術,也許明年會有一個新的東西來,大家是一會兒跟這個,一會兒跟那個,跟的同時把自己原來擅長的東西扔掉了。并不是說所有新的東西都不好,其實都有好的東西,比如說敏捷使我們能夠快速獲得反饋,能夠快速交互,但是有可能在擴展性上存在一些問題。所以把原來所有的東西都扔掉跟時尚行業一樣,這是很愚蠢的做法。
第二點我們缺乏一個正確的被大家所廣泛接受的理論,從過去的一段時間到現在,大概有超過十萬種到五十萬種這樣的方法在市面上流轉。這個數字本身并不是最嚴重的問題,因為我們有不同的人員,不同的競爭力的人,所以需要有不同的方法來應對,問題是在于我們不知道怎么把這些好的東西能夠融合在一起,有一些方法在那有可能你都不知道。
還有一個問題我們的學院派的東西跟實際的應用技術間,有些時候有很大的障礙。剛剛提到可能只有1%的一些東西被在實際中應用到。
剛才講了很多問題,所以我們要去重建軟件工程,它是基于比較可靠的理論,以及被證明過的一些原則和最佳的實踐,這里用到一個非常震撼的詞“革命性”。這里非常關鍵的是我們需要一個“核”,這樣才能抓住問題的本質,把目前很多這樣的方法、理論和一些好的東西,能夠把它們抓到一起。
這是我們在做軟件工程“核”的藍圖,這個“核”中會包含很多基本的東西,大概有20多個這樣的元素,這里我們只提到四個,做軟件工程和軟件開發的方法中必須要用到。我們有很多種可以做需求的方法,但是在所有的軟件開發中做需求這個事是一定會有的。不管用什么樣的開發語言和技術來做軟件開發,你總是希望最后得到一個軟件系統,不管是用敏捷的方式,還是用傳統的方法,還是其他的方式,總是要有一些工作要做。
團隊開發中“核”的重要性
在軟件的開發中需要團隊,盡管有很多種不同的組織的方式,比如說跨功能的方式,但是一定需要團隊來做軟件開發。
我們有這樣的大家達成共識的軟件工程,價值在于我們能用大家所都認可的詞匯來去溝通,這樣可以解釋我們的實踐,不同的實踐可以組裝在一起,也可以用到比較好的實踐。我們把這些我們認為標準的東西放在一起,它就形成了軟件工程的“核”,它不多不少的時候正好就是反應軟件工程的本質。
如圖,有個要圖標,這就是軟件工程方法這個“核”的時候,它是可執行的,有了一個“核”之后,有很多其他的六邊形的,它們很容易組裝在一起,形成一個可以讓大家容易去采用的軟件開發和軟件工程的方法。
我要以打紙片的方式來做軟件的開發,一種卡片是“核”當中的元素卡,元素卡它會描述這個元素不同的狀態。剛才講的“核”的元素卡。這個卡片可以用在做培訓,也可以用在平時的軟件開發中。元素卡中有很多的狀態,我們可以用更小的卡片表示,需求卡,這個狀態要通過怎樣的手段來達到呢?如果都達到了最終的狀態,可以理解為你要做的事情都做完了。剛才我們談的是“核”當中可執行的這部分。
現在給大家介紹一個實例,用軟件工程“核”的方法去組織它的軟件開發方法這樣的例子。這是一家做軟件咨詢的公司,他們也做一些外包開發。在屏幕的左手邊是一個相當于實踐庫,然后可以根據我不同的需求,不同的開發項目,去組裝出開發項目所需要的軟件開發方法,它是由“核”加上它的實踐來的。這里面是兩種不同的項目,一個是老的維護的項目,另外是新的開發項目,雖然有很多實踐是來自于同一個庫,但是它們會組裝成不同的方法來適應不同的項目。
如圖,做再保險的公司,他們有20個實踐,9個“核”,在這個基礎上開發出四套它的軟件開發方法,一個是針對探索性的軟件,比如說一些新的東西,然后有一些標準開發的,有一些是針對維護性的,還有一些是用支持這樣的項目。
現在我們的方法拿出來之后,已經成為在描述工程方法方面的一個標準,就是用“核”的方式來做描述,可能它會有相應的描述的語言會出來,應該在明年會成為一個標準。
在四年前發起的宣言和聲明中,有35個知名人士,16所大學和公司以及1600個開發人員,他們是通過SEMAT網絡把他們聚在一起的,SEMAT的意思是軟件工程方法和理論,SEMAT解決方案創造了一個容器,因為所有的方法它無非都是很多實踐的組裝或是融合。剛才我們提到幾乎有50萬種方法,但是實際上比較常用只有250個實踐,通過這么多實踐,不同的組裝,就形成了很多的方法。我們希望所有的實踐都是用軟件工程“核”提供的語言的描述,這樣大家都達成共識。我們的語言應該是用標準化的方式來描述,到時候不管做什么都可以用到他。
推薦閱讀
2月18日,CSDN(微博)在北京舉行了TUP第19期活動:大數據系列研討會——從12306談起。本次研討會匯集了來自百度、豆瓣(微博)網、搜狗、淘寶、土豆、凡客誠品(微博)、新浪微博、IBM等公司的眾多業內技術高管,就大數據>>>詳細閱讀
本文標題:UML之父Ivar Jacobson:精益思想的復興
地址:http://m.sdlzkt.com/a/kandian/20120305/36942.html