木乃伊->魚化石->非功能需求

今天和兒子去看園藝中心的熱帶魚署海,色彩斑斕枯跑,美不勝收亭枷。

這些游來游去的魚兒讓我想起一件陳年往事旷坦,啟發(fā)了一項(xiàng)軟件工程研究(Yu et al., 2004)掏熬。雖然當(dāng)時(shí)我沒有篇幅在論文里展開陳說,整個(gè)事情追溯起來秒梅,仍歷歷在目旗芬。

那是一個(gè)冬天,多倫多的大街上有些寒冷捆蜀,皇家安大略省博物館卻熱氣騰騰疮丛。原來幔嫂,我們聽說加拿大博物館里發(fā)現(xiàn)的一具木乃伊經(jīng)過考證是埃及的某位法老,因此決定把它(他)隆重歸還祖國(guó)誊薄。在該木乃伊回國(guó)前最后展覽一下履恩,我也有幸參觀了一番。

博物館里的木乃伊包得嚴(yán)嚴(yán)實(shí)實(shí)暇屋,就算是法老也沒有什么大的看頭似袁,反倒是旁邊的一個(gè)小冊(cè)子吸引了我的注意。原來咐刨,一項(xiàng)化石發(fā)現(xiàn)被刊登在了Nature上(Donley et al., 2004)昙衅。文章大致是講不同地質(zhì)年代的魚的流線形狀。照理說定鸟,一條鯊魚而涉,一只恐龍,和一頭鯨分別從屬于魚類联予,爬行類啼县,和哺乳類動(dòng)物,從身體構(gòu)造沸久,血液溫度季眷,到運(yùn)動(dòng)能力都應(yīng)該有著質(zhì)的不同【砜瑁可是子刮,博物學(xué)家發(fā)現(xiàn),從化石復(fù)原的這三個(gè)動(dòng)物具有完全一致的流線型體窑睁,這既在意料之外挺峡,又在情理之中。


水棲捕食動(dòng)物担钮,為了達(dá)到足夠高的游速橱赠,進(jìn)化出來幾乎相同的外觀。這樣結(jié)構(gòu)和外觀上的差異箫津,給了我如下一個(gè)啟發(fā):

軟件工程里面狭姨,我們把軟件產(chǎn)品需求區(qū)分為功能性需求和非功能性需求。

所謂功能性苏遥,是指程序的函數(shù)語義(英文里面函數(shù)和功能是同一個(gè)詞Function),是把一定的輸入轉(zhuǎn)換成為一定的輸出饼拍。用動(dòng)物的類比醉拓,就是吃進(jìn)什么慰丛,排泄什么,一是一蜜自,二是二诫肠,毫不含糊司澎。(老一輩的人看過《決裂》的電影欺缘,對(duì)其中”馬尾巴的功能“一節(jié)一定還有些印象)

所謂非功能性(non-functional),泛指那些不能用簡(jiǎn)單的功能表述挤安,但是又可以感知和度量的質(zhì)量特性谚殊。仍然用動(dòng)物來類比,比如奔跑和游泳的速度快慢蛤铜,體溫的高低嫩絮,體重塊頭的大小等等生理指標(biāo)。在軟件產(chǎn)品領(lǐng)域围肥,我們通常說的軟件質(zhì)量屬性剿干,包括性能,易用性穆刻,安全性等等諸多定性和定量的分類置尔。

問題在于,如何從軟件工程的實(shí)踐中指導(dǎo)程序員去掌握這兩類不同的特性氢伟?一個(gè)直觀的經(jīng)驗(yàn)是榜轿,功能性通過單元測(cè)試可以刻畫得八九不離十,可是非功能特性往往不是體現(xiàn)在某一段代碼上朵锣,而是一個(gè)全局的特性谬盐。

比如“性能”方面,我們常說的80/20規(guī)則诚些,就是說80%的性能問題集中在20%的功能性代碼中飞傀。這個(gè)分布在程序性能分析以前是無法知道的;“安全”方面泣刹,代碼的漏洞也可以分布在程序的任何角落助析,不做徹底的靜態(tài)檢查是沒有把握的犀被。

一個(gè)是局部的現(xiàn)象椅您,一個(gè)是全局的;一個(gè)是結(jié)構(gòu)功能性的寡键,一個(gè)是非結(jié)構(gòu)非功能性的掀泳。看看程序的函數(shù)調(diào)用圖西轩,再看看這三條流線型的“魚”员舵,再看看程序的數(shù)據(jù)結(jié)構(gòu)類圖 ...... 我的眼睛開始花了,心里卻逐漸清晰藕畔。EurekaB砥А:全局性的非功能質(zhì)量特性正交織在(crosscutting)局部的功能特性里面。有的時(shí)候注服,這種非功能特性是可以單獨(dú)抽取出來韭邓,組成一類交織性的模塊(aspect)措近,得以在另一個(gè)產(chǎn)品功能特性上復(fù)用。Aspect-oriented programming(AOP)的思想早在需求的關(guān)系上就可以體現(xiàn)出來女淑!

有了一個(gè)靈感瞭郑,馬上付諸行動(dòng)。之后鸭你,我用了一些軟件工具(Clustering屈张,Clone Detection),也自己開發(fā)了一些工具(PHP Aspect),對(duì)開源的項(xiàng)目樣本細(xì)致地分析和研究袱巨,直接導(dǎo)致了幾個(gè)重要發(fā)現(xiàn)阁谆,比如:結(jié)合軟件重構(gòu)(Refactoring)和單元測(cè)試提取非功能需求(Yu et al 2005a);以此手段從源代碼出發(fā)直接逆向工程獲得需求模型(Yu et al, 2005b)愉老,從而進(jìn)行質(zhì)量驅(qū)動(dòng)的復(fù)用(Leite et al., 2005)等等笛厦。

參考文獻(xiàn)

Jeanine M. Donley, Chugey A. Sepulveda, Peter Konstantinidis, Sven Gemballa & Robert E. Shadwick. "Convergent evolution in mechanical design of lamnid sharks and tunas". Nature 429, 61-65 (6 May 2004)

Yijun Yu, Julio Cesar Sampaio do Prado Leite, John Mylopoulos: From Goals to Aspects: Discovering Aspects from Requirements Goal Models. RE 2004: 38-47

Yijun Yu, John Mylopoulos, Yiqiao Wang, Sotirios Liaskos, Alexei Lapouchnian, Ying Zou, Martin Littou, Julio Cesar Sampaio do Prado Leite: RETR: Reverse Engineering to Requirements. WCRE 2005: 234

Julio Cesar Sampaio do Prado Leite, Yijun Yu, Lin Liu, Eric S. K. Yu, John Mylopoulos: Quality-Based Software Reuse. CAiSE 2005: 535-550

Yijun Yu, Yiqiao Wang, John Mylopoulos, Sotirios Liaskos, Alexei Lapouchnian, Julio Cesar Sampaio do Prado Leite: "Reverse Engineering Goal Models from Legacy Code". RE 2005: 363-372

Yijun Yu, Nan Niu, Bruno González-Baixauli, William Candillon, John Mylopoulos, Steve M. Easterbrook, Julio Cesar Sampaio do Prado Leite, Gilles Vanwormhoudt: Tracing and Validating Goal Aspects. RE 2007: 53-56

Nan Niu, Steve Easterbrook, Yijun Yu: A Taxonomy of Asymmetric Requirements Aspects. EA@AOSD 2007: 1-18。

Nan Niu, Yijun Yu, Bruno González-Baixauli, Neil A. Ernst, Julio Cesar Sampaio do Prado Leite, John Mylopoulos: “Aspects across Software Life Cycle: A Goal-Driven Approach”. Trans. Aspect-Oriented Software Development 6: 83-110 (2009)

Yijun Yu, Jan Jürjens, John Mylopoulos: “Traceability for the maintenance of secure software”. ICSM 2008: 297-306

面向側(cè)面(Aspect-orientation)的本質(zhì)是逆向思維俺夕,把依附于功能(皮)的非功能特性(毛)拔出來裳凸,重新整理一番,倒過來看那些功能性的地方也需要這些非功能特性劝贸,再類似地去改造一番姨谷。從被支配的從屬地位,一躍成為支配的主體地位映九。大家想想是不是這樣梦湘?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市件甥,隨后出現(xiàn)的幾起案子捌议,更是在濱河造成了極大的恐慌,老刑警劉巖引有,帶你破解...
    沈念sama閱讀 211,496評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓣颅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡譬正,警方通過查閱死者的電腦和手機(jī)宫补,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來曾我,“玉大人粉怕,你說我怎么就攤上這事∈愠玻” “怎么了贫贝?”我有些...
    開封第一講書人閱讀 157,091評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蛉谜。 經(jīng)常有香客問我稚晚,道長(zhǎng)凤优,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,458評(píng)論 1 283
  • 正文 為了忘掉前任蜈彼,我火速辦了婚禮筑辨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幸逆。我一直安慰自己棍辕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,542評(píng)論 6 385
  • 文/花漫 我一把揭開白布还绘。 她就那樣靜靜地躺著楚昭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拍顷。 梳的紋絲不亂的頭發(fā)上抚太,一...
    開封第一講書人閱讀 49,802評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音昔案,去河邊找鬼尿贫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛踏揣,可吹牛的內(nèi)容都是我干的庆亡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,945評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼捞稿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼又谋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起娱局,我...
    開封第一講書人閱讀 37,709評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤彰亥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后衰齐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體任斋,經(jīng)...
    沈念sama閱讀 44,158評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,502評(píng)論 2 327
  • 正文 我和宋清朗相戀三年娇斩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仁卷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穴翩。...
    茶點(diǎn)故事閱讀 38,637評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡犬第,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芒帕,到底是詐尸還是另有隱情歉嗓,我是刑警寧澤,帶...
    沈念sama閱讀 34,300評(píng)論 4 329
  • 正文 年R本政府宣布背蟆,位于F島的核電站鉴分,受9級(jí)特大地震影響哮幢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜志珍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,911評(píng)論 3 313
  • 文/蒙蒙 一橙垢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伦糯,春花似錦柜某、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至淤翔,卻和暖如春翰绊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背旁壮。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工监嗜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抡谐。 一個(gè)月前我還...
    沈念sama閱讀 46,344評(píng)論 2 360
  • 正文 我出身青樓秤茅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親童叠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子框喳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,500評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載請(qǐng)聲明出處。到這里才發(fā)現(xiàn)簡(jiǎn)書不支持Mathjax厦坛,真蛋疼五垮,要看公式的話還是到我的博客上看,留言就在這里留吧杜秸,我...
    TonLP閱讀 2,694評(píng)論 0 6
  • 本文轉(zhuǎn)自中國(guó)中文信息學(xué)會(huì)青年工作委員會(huì)作者:李林琳放仗,趙世奇(注:本文的第一部分主要內(nèi)容基于“Review of s...
    MiracleJQ閱讀 3,916評(píng)論 0 4
  • 我只是怕 怕你像倦鳥只顧新的天空 卻忘記了 承載你的深林從不忍日曬狂風(fēng) 別不知?dú)w林 因?yàn)槭睾蛞卜执合那锒?若誤了韶...
    1個(gè)呆婷閱讀 133評(píng)論 3 2
  • 蒼山如黛洱水碧,縉云深處殘陽血撬碟。無邊往事憑誰問诞挨,九朝宮闕掩翠立。
    紫氣東來0812閱讀 158評(píng)論 0 0
  • 有一個(gè)朋友A君银室,原來是他們公司市場(chǎng)部營(yíng)銷組主管,前陣子他們公司市場(chǎng)部一把手和二把手一起跳槽,導(dǎo)致部門領(lǐng)導(dǎo)位子出現(xiàn)空...
    駿少的宅院閱讀 270評(píng)論 6 6