個人軟件過程(Personal Software Process,PSP)是一種可用于控制、管理和改進個人工作方式的自我持續(xù)改進過程,是一個包括軟件開發(fā)表格、指南和規(guī)程的結(jié)構(gòu)化框架。PSP與具體的技術(shù)(程序設(shè)計語言、工具或者設(shè)計方法)相對獨立,其原則能夠應(yīng)用到幾乎任何的軟件工程任務(wù)之中。PSP能夠說明個體軟件過程的原則; 幫助軟件工程師作出準(zhǔn)確的計劃;確定軟件工程師為改善產(chǎn)品質(zhì)量要采取的步驟;建立度量個體軟件過程改善的基準(zhǔn);確定過程的改變對軟件工程師能力的影響。
隨著軟件工程知識的普及,軟件工程師都知道,要開發(fā)高質(zhì)量的軟件,必須改進軟件生產(chǎn)的過程。目前,業(yè)界公認由CMU/SEI開發(fā)的軟件能力成熟度模型SW-CMM是當(dāng)前好的軟件過程,并且CMM已經(jīng)成為事實上的軟件過程工業(yè)標(biāo)準(zhǔn)。但是,CMM雖然提供了一個有力的軟件過程改進框架,卻只告訴我們"應(yīng)該做什么",而沒有告訴我們"應(yīng)該怎樣做",并未提供有關(guān)實現(xiàn)關(guān)鍵過程域所需要的具體知識和技能。為了彌補這個欠缺,Humphrey又主持開發(fā)了個體軟件過程(Personal Software Process,PSP)。
在CMM1.1版本的18個關(guān)鍵過程域中有12個與PSP有關(guān),據(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ī)程,改進軟件過程的步驟首先需要明確質(zhì)量目標(biāo),也就是軟件將要在功能和性能上滿足的要求和用戶潛在的需求。接著就是度量產(chǎn)品質(zhì)量,有了目標(biāo)還不行,目標(biāo)只是一個原則性的東西,還不便于實際操作和判斷,因此,必須對目標(biāo)進行分解和度量,使軟件質(zhì)量能夠"測量"。然后就是理解當(dāng)前過程,查找問題,并對過程進行調(diào)整。后應(yīng)用調(diào)整后的過程,度量實踐結(jié)果,將結(jié)果與目標(biāo)做比較,找出差距,分析原因,對軟件過程進行持續(xù)改進。
就象CMM為軟件企業(yè)的能力提供一個階梯式的進化框架一樣,PSP為個體的能力也提供了一個階梯式的進化框架,以循序漸進的方法介紹過程的概念,每一級別都包含了更低一級別中的所有元素,并增加了新的元素。這個進化框架是學(xué)習(xí)PSP過程基本概念的好方法,它賦予軟件人員度量和分析工具,使其清楚地認識到自己的表現(xiàn)和潛力,從而可以提高自己的技能和水平。
一、個體度量過程PSP0和PSP0.1
PSP0的目的是建立個體過程基線,通過這一步,學(xué)會使用PSP的各種表格采集過程的有關(guān)數(shù)據(jù),此時執(zhí)行的是該軟件開發(fā)單位的當(dāng)前過程,通常包括計劃、開發(fā)(包括設(shè)計、編碼、編譯和測試)以及后置處理三個階段,并要作一些必要的試題,如測定軟件開發(fā)時間,按照選定的缺陷類型標(biāo)準(zhǔn)、度量引入的缺陷個數(shù)和排除的缺陷個數(shù)等,用作為測量在PSP的過程中進步的基準(zhǔn)。
PSP0.1增加了編碼標(biāo)準(zhǔn)、程序規(guī)模度量和過程改善建議等三個關(guān)鍵過程域,其中過程改善建議表格用于隨時記錄過程中存在的問題、解決問題的措施以及改進過程的方法,以提高軟件開發(fā)人員的質(zhì)量意識和過程意識。
應(yīng)該強調(diào)指出,在PSP0階段必須理解和學(xué)會使用不合格進行規(guī)劃和度量的技術(shù)。設(shè)計一個好的表格并不容易,需要在實踐中積累經(jīng)驗,以準(zhǔn)確地滿足期望的需求,其中重要的是要保持數(shù)據(jù)的一致性、有用性和簡潔性。
二、個體規(guī)劃過程PSP1和PSP1.1
PSP1的重點是個體計劃,引入了基于估計的計劃方法PROBE(PROxy BASed EStimating),用自己的歷史數(shù)據(jù)來預(yù)測新程序的大小和需要的開發(fā)時間,并使用線性回歸方法計算估計參數(shù),確定置信區(qū)間以評價預(yù)測的可信程度。PSP1.1增加了對任務(wù)和進度的規(guī)劃。
在PSP1階段應(yīng)該學(xué)會編制項目開發(fā)計劃,這不僅對承擔(dān)大型軟件的開發(fā)十分重要,即使是開發(fā)小型軟件也必不可少。因為,只有對自己的能力有客觀的評價,才能作出更加準(zhǔn)確的計劃,才能實事求是地接受和完成客戶(顧客)委托的任務(wù)。
三、個體質(zhì)量管理過程PSP2和PSP2.1
PSP2的重點是個體質(zhì)量管理,根據(jù)程序的缺陷善建立檢測表,按照檢測表進行設(shè)計復(fù)查和代碼復(fù)查(有時也稱"代碼走查"),以便及早發(fā)現(xiàn)缺陷,使修復(fù)缺陷的代價小。隨著個人經(jīng)驗和技術(shù)的積累,還應(yīng)學(xué)會怎樣改進檢測表以適應(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ā)小程序所能達到的生產(chǎn)效率和生產(chǎn)質(zhì)量,延伸到大型程序;其方法是采用螺旋式上升過程,即迭代增量式開發(fā)方法,首先把大型程序分解成小的模塊,然后對每個模塊按照PSP2.1所描述的過程進行開發(fā),后把這些模塊逐步集成為完整的軟件產(chǎn)品。
隨著軟件工程知識的普及,軟件工程師都知道,要開發(fā)高質(zhì)量的軟件,必須改進軟件生產(chǎn)的過程。目前,業(yè)界公認由CMU/SEI開發(fā)的軟件能力成熟度模型SW-CMM是當(dāng)前好的軟件過程,并且CMM已經(jīng)成為事實上的軟件過程工業(yè)標(biāo)準(zhǔn)。但是,CMM雖然提供了一個有力的軟件過程改進框架,卻只告訴我們"應(yīng)該做什么",而沒有告訴我們"應(yīng)該怎樣做",并未提供有關(guān)實現(xiàn)關(guān)鍵過程域所需要的具體知識和技能。為了彌補這個欠缺,Humphrey又主持開發(fā)了個體軟件過程(Personal Software Process,PSP)。
在CMM1.1版本的18個關(guān)鍵過程域中有12個與PSP有關(guān),據(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ī)程,改進軟件過程的步驟首先需要明確質(zhì)量目標(biāo),也就是軟件將要在功能和性能上滿足的要求和用戶潛在的需求。接著就是度量產(chǎn)品質(zhì)量,有了目標(biāo)還不行,目標(biāo)只是一個原則性的東西,還不便于實際操作和判斷,因此,必須對目標(biāo)進行分解和度量,使軟件質(zhì)量能夠"測量"。然后就是理解當(dāng)前過程,查找問題,并對過程進行調(diào)整。后應(yīng)用調(diào)整后的過程,度量實踐結(jié)果,將結(jié)果與目標(biāo)做比較,找出差距,分析原因,對軟件過程進行持續(xù)改進。
就象CMM為軟件企業(yè)的能力提供一個階梯式的進化框架一樣,PSP為個體的能力也提供了一個階梯式的進化框架,以循序漸進的方法介紹過程的概念,每一級別都包含了更低一級別中的所有元素,并增加了新的元素。這個進化框架是學(xué)習(xí)PSP過程基本概念的好方法,它賦予軟件人員度量和分析工具,使其清楚地認識到自己的表現(xiàn)和潛力,從而可以提高自己的技能和水平。
一、個體度量過程PSP0和PSP0.1
PSP0的目的是建立個體過程基線,通過這一步,學(xué)會使用PSP的各種表格采集過程的有關(guān)數(shù)據(jù),此時執(zhí)行的是該軟件開發(fā)單位的當(dāng)前過程,通常包括計劃、開發(fā)(包括設(shè)計、編碼、編譯和測試)以及后置處理三個階段,并要作一些必要的試題,如測定軟件開發(fā)時間,按照選定的缺陷類型標(biāo)準(zhǔn)、度量引入的缺陷個數(shù)和排除的缺陷個數(shù)等,用作為測量在PSP的過程中進步的基準(zhǔn)。
PSP0.1增加了編碼標(biāo)準(zhǔn)、程序規(guī)模度量和過程改善建議等三個關(guān)鍵過程域,其中過程改善建議表格用于隨時記錄過程中存在的問題、解決問題的措施以及改進過程的方法,以提高軟件開發(fā)人員的質(zhì)量意識和過程意識。
應(yīng)該強調(diào)指出,在PSP0階段必須理解和學(xué)會使用不合格進行規(guī)劃和度量的技術(shù)。設(shè)計一個好的表格并不容易,需要在實踐中積累經(jīng)驗,以準(zhǔn)確地滿足期望的需求,其中重要的是要保持數(shù)據(jù)的一致性、有用性和簡潔性。
二、個體規(guī)劃過程PSP1和PSP1.1
PSP1的重點是個體計劃,引入了基于估計的計劃方法PROBE(PROxy BASed EStimating),用自己的歷史數(shù)據(jù)來預(yù)測新程序的大小和需要的開發(fā)時間,并使用線性回歸方法計算估計參數(shù),確定置信區(qū)間以評價預(yù)測的可信程度。PSP1.1增加了對任務(wù)和進度的規(guī)劃。
在PSP1階段應(yīng)該學(xué)會編制項目開發(fā)計劃,這不僅對承擔(dān)大型軟件的開發(fā)十分重要,即使是開發(fā)小型軟件也必不可少。因為,只有對自己的能力有客觀的評價,才能作出更加準(zhǔn)確的計劃,才能實事求是地接受和完成客戶(顧客)委托的任務(wù)。
三、個體質(zhì)量管理過程PSP2和PSP2.1
PSP2的重點是個體質(zhì)量管理,根據(jù)程序的缺陷善建立檢測表,按照檢測表進行設(shè)計復(fù)查和代碼復(fù)查(有時也稱"代碼走查"),以便及早發(fā)現(xiàn)缺陷,使修復(fù)缺陷的代價小。隨著個人經(jīng)驗和技術(shù)的積累,還應(yīng)學(xué)會怎樣改進檢測表以適應(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ā)小程序所能達到的生產(chǎn)效率和生產(chǎn)質(zhì)量,延伸到大型程序;其方法是采用螺旋式上升過程,即迭代增量式開發(fā)方法,首先把大型程序分解成小的模塊,然后對每個模塊按照PSP2.1所描述的過程進行開發(fā),后把這些模塊逐步集成為完整的軟件產(chǎn)品。