關(guān)于軟件重用的幾點(diǎn)思考 重用對(duì)于軟件開發(fā)和測(cè)試都具有普遍意義,每個(gè)軟件人員自覺或不自覺地都在進(jìn)行大量重用工作。不管是編碼還是測(cè)試,不管是寫文檔還是寫幻燈片,甚至起草短短的各類評(píng)審意見,不使用剪切-粘貼操作的幾乎沒有。 毫無疑問,重用給軟件人員帶來極大便利,不光是節(jié)省時(shí)間,更通過繼承過去的經(jīng)驗(yàn)而使新的工作產(chǎn)品質(zhì)量得到保證。今天的軟件人員不僅占有大量的各類模板,大量編碼規(guī)則和標(biāo)準(zhǔn)條款,還會(huì)大量使用搜索工具,真正敲入的文字或代碼比例正在越來越少,大部分代碼或文檔都已經(jīng)在過去的項(xiàng)目中被多次使用、并經(jīng)過反復(fù)驗(yàn)證。我們?cè)趯?shí)際軟件測(cè)試項(xiàng)目工程中,經(jīng)常聽到人家說某段代碼已經(jīng)定型,沒有修改過或只改過很少接口,不需要或只需要少量測(cè)試就可以了。即使是全新的代碼,其中也有很大一部分來自其他類似軟件項(xiàng)目,包括編碼范例、文檔描述、容錯(cuò)處理方法,甚至評(píng)審方法和技術(shù)。 然而給軟引用由于不恰當(dāng)?shù)募羟屑藛T帶來巨大便利的背后是悄悄的巨大風(fēng)險(xiǎn)。據(jù)統(tǒng)計(jì),軟件缺陷的-粘貼的竟占到70%。如果說給軟件質(zhì)量帶來好處的因素總分是800,那么軟件重用占到的比例會(huì)高達(dá)350;反過來,如果影響軟件質(zhì)量的因素總分是1200分,軟件重用會(huì)占到650分,雖然都是權(quán)重第一,但是如果搞不好,給軟件質(zhì)量的消極影響往往會(huì)更大一些。阿麗亞娜5發(fā)射失敗就是一個(gè)慘痛教訓(xùn)。歐空局實(shí)施的過程管理不可謂不嚴(yán),完成的軟件測(cè)試不可謂不充分,層層通過的軟件評(píng)審和評(píng)估不可謂不系統(tǒng),但就是一個(gè)對(duì)型號(hào)4的軟件重用沒有充分考慮硬件變化帶來的影響最終釀成大禍。在系統(tǒng)總結(jié)教訓(xùn)時(shí),有這樣的一條:軟件問題出現(xiàn)的部位,是所有領(lǐng)域?qū)<叶颊J(rèn)為是最保險(xiǎn)、最不可能出錯(cuò)的部位,處理方式的正確性已經(jīng)在領(lǐng)域?qū)<抑行纬啥ㄊ剑瑳]有人提出任何質(zhì)疑、反思。 結(jié)論是,重要評(píng)審僅僅依靠領(lǐng)域?qū)<沂遣粔虻模∏》穷I(lǐng)域?qū)<矣锌赡芴岢龈嘣陬I(lǐng)域?qū)<铱磥砜赡苡行┛尚?、但卻是通過轉(zhuǎn)換思考角度才能發(fā)現(xiàn)的微妙問題。 在現(xiàn)實(shí)中,剪切-粘貼過來的東西往往還要做些替換,往往還與其他部分存在某種不協(xié)調(diào)、不一致而需要調(diào)整,往往還有一些可有可無或多余的部分需要?jiǎng)h除。甚至是很重要的外部評(píng)審幻燈片,即使并不長(zhǎng),細(xì)細(xì)看來,發(fā)現(xiàn)剪切-粘貼帶來的錯(cuò)誤往往并不困難,盡管上會(huì)前這些幻燈片都經(jīng)過反復(fù)審閱。 那么問題的關(guān)鍵就是如何控制軟件重用的質(zhì)量??刂频年P(guān)鍵又在于識(shí)別軟件重用引入問題的機(jī)理、途徑,從而找到解決問題的有效方法。 我認(rèn)為,軟件重用引入問題的關(guān)鍵是由于重用的便利性使得軟件人員忽略了必要的分析工作,多多少少有思維定式,加上一些盲目自信和樂觀,從而不知不覺欠下技術(shù)債。這種債遲早是要償還的,只不過是償還形式不同而已。 具體來說,軟件重用有兩個(gè)只要步驟:重用和集成。重用指面向未來的使用而特意進(jìn)行的專門部件開發(fā)。比如模板,就是針對(duì)以后的多次使用而進(jìn)行的開發(fā)。集成是利用可重用部件合成完整工作產(chǎn)品的過程。而重用和集成都可能引入軟件問題。 首先,可重用部件本身就可能存在問題,即使經(jīng)過測(cè)試、經(jīng)過實(shí)際使用,仍然不能保證驗(yàn)證的充分性,更何況新的使用場(chǎng)景并不一定與老場(chǎng)景完全一致。據(jù)統(tǒng)計(jì),面向重用的可重用部件與非面向重用的部件開發(fā)成本相比要高出4倍,才能滿足重用的質(zhì)量要求,因?yàn)橐坏┲赜貌考嬖谌毕輽z測(cè)起來更加困難、更難處理,因此要盡可能零缺陷。比如如果模板本身存在問題,重用后的影響就會(huì)放大很多。其次,很多時(shí)候被重用部件并沒有考慮某些重用場(chǎng)景,某些特性并不適合無條件重用,有時(shí)又必須補(bǔ)充必要的特性。比如測(cè)試文檔模板可能沒有考慮部分工作外包的特殊性等。 至于集成,引入質(zhì)量問題的可能性就更大了,涉及到可重用組件篩選、匹配,必要的修改,必要的驗(yàn)證等。其中組件篩選和匹配至關(guān)重要。組件功能靜態(tài)描述和行為動(dòng)態(tài)描述是實(shí)施篩選的前提條件。自然語言很難承擔(dān)這個(gè)任務(wù)。基于模型的形式化描述看來是可行的選擇。首先模型能夠準(zhǔn)確地描述組件最核心、最本質(zhì)的內(nèi)容,從而保證篩選的大方向不會(huì)有大的問題。既然模型是對(duì)組件的某種程度抽象,因此不可能表示出所有細(xì)節(jié),特別是一些容錯(cuò)處理的細(xì)節(jié),而這些細(xì)節(jié)對(duì)于組件重用又可能是至關(guān)重要的。 比如某電信交換機(jī)組件,可以比較方便地使用米莉有限狀態(tài)機(jī)描述。但是有些容錯(cuò)處理方式卻很難通過一個(gè)統(tǒng)一模型表述。比如交換機(jī)主叫用戶,回鈴音收到8次轉(zhuǎn)入告知無人接聽狀態(tài)。但是如果收到3次回鈴音后不再收到信號(hào)怎么辦?可以轉(zhuǎn)到超時(shí)等待狀態(tài)再轉(zhuǎn)無人接聽狀態(tài)。如果超時(shí)門限未到,第4個(gè)回鈴音收到,那么是不是該繼續(xù)回鈴音計(jì)數(shù)狀態(tài)?如果第5個(gè)回鈴音又遲遲未到,超時(shí)是繼續(xù)累積還是重新計(jì)算?極端情況是不是迫使主叫等待過長(zhǎng)時(shí)間? 這樣的細(xì)節(jié)建模會(huì)非常繁瑣。測(cè)試用例包可能是一種替代方法,通過預(yù)期輸入與預(yù)期與設(shè)計(jì)、需求約束的符合性,提供篩選依據(jù)。 我認(rèn)為,即使采用了比較完備的形式化描述方法,必要的人工分析都是必不可少的,必須建立與技術(shù)手段和重用風(fēng)險(xiǎn)相匹配的管理過程和活動(dòng)規(guī)范,比如必要的評(píng)審、分析、驗(yàn)證等。 另外要形成軟件重用和集成的規(guī)范,強(qiáng)化面向重用的組件開發(fā),強(qiáng)化集成的分析驗(yàn)證。開發(fā)好的可重用組件,更安全地集成新產(chǎn)品 關(guān)鍵科技 |
|