劉勝艷
(中南財經(jīng)政法大學(xué)武漢學(xué)院,湖北 武漢 430079)
使用PSP對軟件工程師的素質(zhì)影響淺析
劉勝艷
(中南財經(jīng)政法大學(xué)武漢學(xué)院,湖北 武漢 430079)
要成為高績效軟件組織,必須擁有高績效團(tuán)隊,擁有高績效軟件工程師。PSP為個體軟件工程師提供了持續(xù)改善績效的指南,為軟件過程優(yōu)化提供了具體而有效的途徑,告訴接受過PSP培訓(xùn)的工程師如何在高績效團(tuán)隊中有效地工作。PSP對軟件工程師本身的素質(zhì)提高帶來了很大益處。本文對PSP的概念、發(fā)展現(xiàn)狀、內(nèi)容、支持環(huán)境以及PSP的進(jìn)化框架進(jìn)行了介紹,總結(jié)了PSP對軟件工程師的素質(zhì)提高所帶來的相應(yīng)影響。
PSP;軟件工程師;素質(zhì);影響
隨著軟件工程知識的普及,軟件工程師都知道,要開發(fā)高質(zhì)量的軟件,必須改進(jìn)軟件生產(chǎn)的過程。由美國軟件工程研究所SEI(Software Engineering Institute)開發(fā)完成的軟件能力成熟度模型CMM(Capability Maturity Model)是一種協(xié)助企業(yè)改進(jìn)軟件制作質(zhì)量與管理流程并進(jìn)行評估的標(biāo)準(zhǔn)。它是SEI集多年軟件研究的經(jīng)驗所研制的過程標(biāo)準(zhǔn),如今已成為國際上最流行最適用的軟件質(zhì)量改進(jìn)體系,并且CMM已經(jīng)成為事實上的軟件過程工業(yè)標(biāo)準(zhǔn)。
但是,CMM雖然提供了一個有力的軟件過程改進(jìn)框架,卻只告訴我們“應(yīng)該做什么”,而沒有告訴我們“應(yīng)該怎樣做”,并未提供有關(guān)實現(xiàn)關(guān)鍵過程域所需要的具體知識和技能。為了彌補這個欠缺,美國Carnegie Mellon大學(xué)軟件工程研究所又主持開發(fā)了個體軟件過程(Personal Software Process,PSP)。
(一)PSP概述
個體軟件過程(Personal Software Process)于1995年推出,它的推出在軟件工程界引起了極大的轟動,可以說是由定向軟件工程走向定量軟件工程的一個標(biāo)志。PSP是一種可用于控制、管理和改進(jìn)個人工作方式的自我改善過程,是一個包括軟件開發(fā)表格、指南和規(guī)程的結(jié)構(gòu)化框架。PSP為基于個體和小型群組軟件過程的優(yōu)化提供了具體而有效的途徑,例如如何制訂計劃,如何控制質(zhì)量,如何與其他人相互協(xié)作等等。在軟件設(shè)計階段,PSP的著眼點在于軟件缺陷的預(yù)防,其具體辦法是強化設(shè)計結(jié)束準(zhǔn)則,而不是設(shè)計方法的選擇。根據(jù)對參加培訓(xùn)的104位軟件人員的統(tǒng)計數(shù)據(jù)表明,在應(yīng)用了PSP后,軟件中總的差錯減少了58.0%,在測試階段發(fā)現(xiàn)的差錯減少了71.0%,生產(chǎn)效率提高了20.0%。PSP的研究結(jié)果還表明,絕大多數(shù)軟件缺陷是由于對問題的錯誤理解或簡單的失誤所造成的,只有很少一部分是由于技術(shù)問題而產(chǎn)生的。而且根據(jù)多年來的軟件工程統(tǒng)計數(shù)據(jù)表明,如果在設(shè)計階段注入一個差錯,則這個差錯在編碼階段引發(fā)了3~5個新的缺陷,要修復(fù)這些缺陷所花的費用要比修復(fù)這個設(shè)計缺陷所花的費用多一個數(shù)量級。因此,PSP保障軟件產(chǎn)品質(zhì)量的一個重要途徑是提高設(shè)計質(zhì)量。
(二)個體軟件過程PSP的現(xiàn)狀
1.從1993年開始,美國、歐洲、澳大利亞等地已先后有20多所大學(xué)開設(shè)了講授PSP的課程。
2.在工業(yè)界,PSP也先后在Motorola、HP等公司推廣使用。
3.北航軟件工程研究所于1997年開始,在北航計算機科學(xué)與工程系率先講授了PSP課程,并組織了PSP應(yīng)用實驗。
(三)個體軟件過程PSP的內(nèi)容
PSP與具體的技術(shù)(程序設(shè)計語言、工具或者設(shè)計方法)相對獨立,其原則能夠應(yīng)用到幾乎任何的軟件工程任務(wù)之中。PSP能夠:1.說明個體軟件過程的原則;2.幫助軟件工程師作出準(zhǔn)確的計劃;3.確定軟件工程師為改善產(chǎn)品質(zhì)量要采取的步驟;4.建立度量個體軟件過程改善的基準(zhǔn);5.確定過程的改變對軟件工程師能力的影響。
(四)個體軟件過程PSP的支持環(huán)境
北航軟件工程研究所在研制的基于Internet的“個體軟件過程支持環(huán)境”,支持個體軟件過程的定義、運作、度量、分析和優(yōu)化,支持PSP在實際軟件開發(fā)項目中的應(yīng)用,支持PSP概念和方法的推廣普及,支持軟件工作人員軟件工程方面素質(zhì)的提高。
據(jù)統(tǒng)計,軟件項目開發(fā)成本的70%取決于軟件開發(fā)人員個人的技能、經(jīng)驗和工作習(xí)慣。因此,一個單位的軟件開發(fā)人員如能接受PSP培訓(xùn),對該單位軟件能力成熟度的升級是一個有力的保證。CMM側(cè)重于軟件企業(yè)中有關(guān)軟件過程的宏觀管理,面向軟件開發(fā)單位,PSP則側(cè)重于企業(yè)中有關(guān)軟件過程的微觀優(yōu)化,面向軟件開發(fā)人員。
按照PSP規(guī)程,改進(jìn)軟件過程的步驟首先需要明確質(zhì)量目標(biāo),也就是軟件將要在功能和性能上滿足的要求和用戶潛在的需求。接著就是度量產(chǎn)品質(zhì)量,有了目標(biāo)還不行,目標(biāo)只是一個原則性的東西,還不便于實際操作和判斷,因此,必須對目標(biāo)進(jìn)行分解和度量,使軟件質(zhì)量能夠“測量”。然后就是理解當(dāng)前過程,查找問題,并對過程進(jìn)行調(diào)整。最后應(yīng)用調(diào)整后的過程,度量實踐結(jié)果,將結(jié)果與目標(biāo)做比較,找出差距,分析原因,對軟件過程進(jìn)行持續(xù)改進(jìn)。
就像CMM為軟件企業(yè)的能力提供一個階梯式的進(jìn)化框架一樣,PSP為個體的能力也提供了一個階梯式的進(jìn)化框架,以循序漸進(jìn)的方法介紹過程的概念,每一級別都包含了更低一級別中的所有元素,并增加了新的元素。這個進(jìn)化框架是學(xué)習(xí)PSP過程基本概念的好方法,它賦予軟件人員度量和分析工具,使其清楚地認(rèn)識到自己的表現(xiàn)和潛力,從而可以提高自己的技能和水平。
PSP進(jìn)化框架共有四級。每一級都試圖指出過程缺陷并提供解決方法,每個都包括幾個單獨的步驟。
(一)個體度量過程PSP0和PSP0.1
這一過程建立了包括測量和報告格式的基線,對測量進(jìn)展和詳細(xì)說明的基礎(chǔ)提供了一致的根據(jù)。這一步驟記錄了軟件工程師在工程中使用的具有代表性的軟件開發(fā)方法和在當(dāng)前工程中使用的方法。這一級別簡單地接受軟件工程師所使用的獨特的方法列表。這些方法應(yīng)該用對測量有意義的方式表現(xiàn)。例如,方法可以存放在關(guān)系數(shù)據(jù)庫中,增加額外的字段標(biāo)示花了軟件工程師多少時間來編制標(biāo)準(zhǔn)算法,也可有一字段說明軟件工程師使用這些方法的舒適度。
PSP0的目的是建立個體過程基線,通過這一步,學(xué)會使用PSP的各種表格采集過程的有關(guān)數(shù)據(jù),此時執(zhí)行的是該軟件開發(fā)單位的當(dāng)前過程,通常包括計劃、開發(fā)(包括設(shè)計、編碼、編譯和測試)以及后置處理三個階段,并要作一些必要的試題,如測定軟件開發(fā)時間,按照選定的缺陷類型標(biāo)準(zhǔn)、度量引入的缺陷個數(shù)和排除的缺陷個數(shù)等,用作為測量在PSP的過程中進(jìn)步的基準(zhǔn)。
PSP0.1增加了編碼標(biāo)準(zhǔn)、程序規(guī)模度量和過程改善建議等三個關(guān)鍵過程域,其中過程改善建議表格用于隨時記錄過程中存在的問題、解決問題的措施以及改進(jìn)過程的方法,以提高軟件開發(fā)人員的質(zhì)量意識和過程意識。
應(yīng)該強調(diào)指出,在PSP0階段必須理解和學(xué)會使用不合格進(jìn)行規(guī)劃和度量的技術(shù)。設(shè)計一個好的表格并不容易,需要在實踐中積累經(jīng)驗,以準(zhǔn)確地滿足期望的需求,其中最重要的是要保持?jǐn)?shù)據(jù)的一致性、有用性和簡潔性。
一般來講軟件工程師來自不同的背景和擁有不同的軟件開發(fā)風(fēng)格,約束他們的設(shè)計方法,采用由組織規(guī)定的設(shè)計方法學(xué)和編碼標(biāo)準(zhǔn)已被建議。
這一過程在后CASE系統(tǒng)實現(xiàn)的形式是,對設(shè)計過程、開發(fā)過程和設(shè)計語言結(jié)構(gòu)進(jìn)行約束。例如,在C語言的IFTHEN-ELSE語句中使用SWITCH語句不被認(rèn)為是專業(yè)編程,這種方式在后CASE時代被丟棄。同樣地,后CASE工具也對軟件工程師設(shè)計的模塊強行約束。一般地,統(tǒng)一的編碼標(biāo)準(zhǔn)能夠通過后CASE系統(tǒng)使用約束實現(xiàn)。
(二)個體規(guī)劃過程PSP1和PSP1.1
PSP1的重點是個體計劃,引入了基于估計的計劃方法,用自己的歷史數(shù)據(jù)來預(yù)測新程序的大小和需要的開發(fā)時間,并使用線性回歸方法計算估計參數(shù),確定置信區(qū)間以評價預(yù)測的可信程度。PSP1.1增加了對任務(wù)和進(jìn)度的規(guī)劃。
在PSP1階段應(yīng)該學(xué)會編制項目開發(fā)計劃,這不僅對承擔(dān)大型軟件的開發(fā)十分重要,即使是開發(fā)小型軟件也必不可少。因為,只有對自己的能力有客觀的評價,才能作出更加準(zhǔn)確的計劃,才能實事求是地接受和完成客戶(顧客)委托的任務(wù)。
(三)個體質(zhì)量管理過程PSP2和PSP2.1
PSP2的重點是個體質(zhì)量管理,根據(jù)程序的缺陷善建立檢測表,按照檢測表進(jìn)行設(shè)計復(fù)查和代碼復(fù)查(有時也稱“代碼走查”),以便及早發(fā)現(xiàn)缺陷,使修復(fù)缺陷的代價最小。隨著個人經(jīng)驗和技術(shù)的積累,還應(yīng)學(xué)會怎樣改進(jìn)檢測表以適應(yīng)自己的要求。PSP2.1則論述設(shè)計過程和設(shè)計模板,介紹設(shè)計方法,并提供了設(shè)計模板、但PSP并不強調(diào)選用什么設(shè)計方法,而強調(diào)設(shè)計完備性準(zhǔn)則和設(shè)計驗證技術(shù)。
實施PSP的一個重要目標(biāo)就是學(xué)會在開發(fā)軟件的早期實際地、客觀地處理由于人們的疏忽所造成的程序缺陷問題。人們都期盼獲得高質(zhì)量的軟件,但是只有高素質(zhì)的軟件開發(fā)人員并遵循合適的軟件過程,才能開發(fā)出高質(zhì)量的軟件,因此,PSP2引入并著重強調(diào)設(shè)計復(fù)查和代碼復(fù)查技術(shù),一個合格的軟件開發(fā)人員必須掌握這兩項基本技術(shù)。
(四)個體循環(huán)過程PSP3
PSP3的目標(biāo)是把個體開發(fā)小程序所能達(dá)到的生產(chǎn)效率和生產(chǎn)質(zhì)量,延伸到大型程序。其方法是采用螺旋式上升過程,即迭代增量式開發(fā)方法,首先把大型程序分解成小的模塊,然后對每個模塊按照PSP2.1所描述的過程進(jìn)行開發(fā),最后把這些模塊逐步集成為完整的軟件產(chǎn)品。
應(yīng)用PSP3開發(fā)大型軟件系統(tǒng),必須采用增量式開發(fā)方法,并要求每一個增量都具有很高的質(zhì)量。在這樣的前提下,在新一輪開發(fā)循環(huán)中,可以采用回歸測試的方法,集中力量考察新增加的這些增量是否符合要求。因此,要求在PSP2中進(jìn)行嚴(yán)格的設(shè)計復(fù)查和代碼復(fù)查,并在PSP2.1中努力遵循設(shè)計結(jié)束準(zhǔn)則。
從對個體軟件過程框架的概要描述中,可以清楚地看到,如何作好項目規(guī)劃和如何保證產(chǎn)品質(zhì)量,是任何軟件開發(fā)過程中最基本的問題。
開發(fā)小組的人員應(yīng)該少而精。該原則意味著,軟件開發(fā)項目的組成人員的素質(zhì)應(yīng)該好,而人數(shù)則不宜過多。開發(fā)小組人員的素質(zhì)和數(shù)量是影響軟件產(chǎn)品質(zhì)量和開發(fā)效率的重要因素。素質(zhì)高的人員的開發(fā)效率比素質(zhì)低的人員的開發(fā)效率可能高幾倍至幾十倍,而且素質(zhì)高的人員所開發(fā)的軟件中的錯誤明顯少于素質(zhì)低的人員所開發(fā)的軟件。此外,隨著開發(fā)小組人員數(shù)目的增加,因為交流問題而造成的溝通成本也急劇增加。因此,構(gòu)建和維持少而精的開發(fā)團(tuán)隊甚至標(biāo)桿團(tuán)隊是軟件工程的一條基本原理。
軟件工程師的所需要的一個重要能力是軟件工程能力,有了好的技術(shù)功底和設(shè)計知識可以稱其為優(yōu)秀的程序員,可還未必是個好的軟件工程師,好的軟件工程師必須要懂得軟件工程。從PSP入手是個比較好的學(xué)習(xí)方法,學(xué)習(xí)這些輕量級的方法然后再根據(jù)實際條件應(yīng)用到平時開發(fā)中,進(jìn)步就會很快了。個體軟件過程PSP使用自底向上的方法來改進(jìn)過程,向每個軟件工程師表明過程改進(jìn)的原則,使他們能夠明白如何有效地生產(chǎn)出高質(zhì)量的軟件。
PSP為基于個體和小型群組軟件過程的優(yōu)化提供了具體而有效的途徑。如果從儒家經(jīng)典哲學(xué)的角度加以考察,PSP恰似“修身”,聚焦于個人和技能,從個體的角度提升個人的技能。在軟件行業(yè),開發(fā)人員如果不經(jīng)過PSP培訓(xùn),就只能靠在開發(fā)中通過實踐逐步掌握這些技能和方法,這不僅周期很長,要付出很大的代價,而且有越來越大的風(fēng)險。PSP可以幫助軟件工程師在個人的基礎(chǔ)上運用過程的原則,借助于PSP提供的一些度量和分析工具,了解自己的技能水平,控制和管理自己的工作方式,使自己日常工作的評估、計劃和預(yù)測更加準(zhǔn)確、更加有效,進(jìn)而改進(jìn)個人的工作表現(xiàn),提高個人的工作質(zhì)量和產(chǎn)量。
綜上所述,其實PSP就是教你如何指定計劃,如何實施計劃最終成為一個職業(yè)軟件工程師的過程。這才是“素質(zhì)”教育。
[1][美]Watts S.Humphrey.小組軟件開發(fā)過程[M].韓丹,等譯.人民郵電出版社,2001.6.
[2]何新貴,等.軟件能力成熟度模型[M].清華大學(xué)出版社,2000.11.
[3]張海藩.軟件工程導(dǎo)論[M].清華大學(xué)出版社,1992.3.
[4]楊一平.現(xiàn)代軟件工程技術(shù)與CMM的融合[M].人民郵電出版社,2002.11.
[5]呂曉輝.基于CMM/PSP/TSP的軟件過程改進(jìn)[J].計算機工程,2003.1.