摘要:本文首先簡要介紹了PSP的原理,闡述了如何使學生理解從個體軟件開發(fā)過程到軟件產(chǎn)品工程過程,培養(yǎng)學生從開發(fā)簡單小程序的實踐轉(zhuǎn)向開發(fā)大規(guī)模軟件。然后結(jié)合實際的教學環(huán)境對教學策略加以詳細的說明,并對收集到的學生數(shù)據(jù)進行總結(jié)和分析。
關(guān)鍵詞:軟件工程;軟件過程;個體軟件過程;團隊軟件過程;過程性能
中圖分類號:G642文獻標識碼:A
文章編號:1672-5913 (2007) 22-0157-05
眾所周知,管理人員和用戶需要專業(yè)的開發(fā)人員,他們應(yīng)具有可信的、專業(yè)化的能力,能夠完成承諾的工作;同時開發(fā)人員也在尋求更愉快的、有開發(fā)經(jīng)驗回報而又滿足專業(yè)要求的工作。因此教育工作者最應(yīng)該關(guān)注和培養(yǎng)社會需要的這類人才。
個體軟件過程PSP(Personal Software Process)是由美國卡耐基·梅隆大學軟件工程研究所(CMU/SEI)開發(fā)的關(guān)注于個體工程師的過程實施及改進框架。Watts S. Humphrey先生自80年代末開始研究如何指導個體工程師對工作進行改進,并在95年和97年先后針對高校教學出版了兩本著作[1,2]。著作[1]具有很強的學術(shù)性,適合高校本科高年級學生或研究生使用。而[2]作為[1]的精簡版,可供低年級學生或社會工程師學習使用。之后,為進一步在社會上推廣PSP的應(yīng)用,2005年他又針對軟件工程師出版了著作[3],并帶領(lǐng)其團隊開發(fā)了完整的配套教學材料,目前已經(jīng)在SEI網(wǎng)站上已經(jīng)發(fā)布了V4.1的版本。同時SEI推出了PSP知識體(Body of Knowledge,BOK),將PSP的知識主體分為7個能力域,再將每個能力域的內(nèi)容細分為概念和技能兩個部分,使PSP的知識體系更加結(jié)構(gòu)化,更利于學習。同時PSPBOK也作為軟件工程師取得SEI官方PSP Developer資質(zhì)認證的主要參考。
北京航空航天大學軟件工程所自90年代末就已經(jīng)開始了對個體軟件過程的研究和推廣[4],并組織翻譯了多部PSP著作[2,3]。我們的團隊多年來在研究PSP的基礎(chǔ)上,在北京航空航天大學計算機學院開設(shè)個體軟件過程從課程,將教學與實踐相結(jié)合,得到很成功的反饋。同時為軟件企業(yè)提供培訓,以達到產(chǎn)學研最好的結(jié)合效果。在近十年的PSP研究和教學實踐中,總結(jié)了一套更加實用的教學和實驗大綱、課件及練習,同時開發(fā)了配套工具。經(jīng)過教學實驗的結(jié)果分析,這個體系不但適合學校教學也適合對企業(yè)的軟件工程師的培訓,較好地達到產(chǎn)學研結(jié)合的目的和效果,培養(yǎng)了社會需要的人才。
正如Watts S. Humphrey在2005年的PSP著作中講到:在這幾年中,成千上萬的軟件開發(fā)人員接受了PSP課程,成百上千的TSP團隊已經(jīng)在他們的項目中使用了PSP方法。這個結(jié)果已經(jīng)遠遠超出我的預料[3]。
1個體軟件過程PSP簡介
個體軟件過程是一個自我改進的框架,它提供了一個穩(wěn)定、成熟的個體軟件過程,并定義了過程中所用到的表格、標準和規(guī)程,幫助個體軟件工程師控制、管理和改進自己的工作方式,指導工程師估算和計劃自己的工作,滿足承諾,處理不合理的承諾壓力,同時PSP向工程師展示如何收集用于持續(xù)的改進工作的生產(chǎn)率、質(zhì)量和可預測性的數(shù)據(jù),改進個人過程[3]。
PSP通過一個不斷進化的過程來引導學習者學習PSP的工程方法,如圖1所示。學習者通過在每個步驟中編寫一個或多個模塊級別的程序,學習如何對自己的工作進行數(shù)據(jù)的收集和分析,并使用這些結(jié)果來改進個人性能。其中,幾個主要的PSP等級所關(guān)注的問題如下:
●PSP0:建立一個度量的性能基線
●PSP1:制訂規(guī)模、資源和進度計劃
●PSP2:實踐缺陷和效益(yield)管理

軟件產(chǎn)品規(guī)模日益增大,使得產(chǎn)品的開發(fā)必須由團隊完成。學會PSP后,必然要將PSP應(yīng)用到實際開發(fā)的項目中。SEI開發(fā)了團隊軟件過程TSP(Team Software Process)用于支持在開發(fā)工程中使用PSP,并解決軟件開發(fā)團隊所面臨的承諾、控制、質(zhì)量和團隊合作等問題。
2造就專業(yè)軟件工程師的過程
2.1從個體軟件過程到軟件產(chǎn)品工程過程
軟件產(chǎn)品的質(zhì)量在很大程度上受到軟件產(chǎn)品生產(chǎn)過程的影響。軟件產(chǎn)品工程過程作為軟件產(chǎn)品生產(chǎn)的核心過程,定義和集成了軟件工程中的各項活動。因此,軟件產(chǎn)品工程過程的性能將直接影響軟件生產(chǎn)的效率和產(chǎn)品的質(zhì)量。
個體軟件工程師是軟件產(chǎn)品工程過程中最重要、最不穩(wěn)定的一環(huán)。只有參與過程的每個工程師都了解過程的執(zhí)行并遵循過程進行工作,過程性能才能夠得以保證。PSP是大型軟件工程過程的一個縮影,通過PSP的學習,可以使工程師掌握好抽象、晦澀、不易實踐的軟件工程理念和方法,提高軟件專業(yè)人員的責任感,為成為稱職工程師打下良好的基礎(chǔ)。因此,學習并實踐個體軟件過程是軟件工程師了解、掌握和融入軟件產(chǎn)品工程過程的一條捷徑[5]。
2.2從編寫簡單小程序到開發(fā)大規(guī)模軟件
PSP課程按由淺入深、程序規(guī)模從小到大,從基本度量到綜合分析的策略漸進展開。雖然要完成的練習程序均為代碼行數(shù)僅在幾十到數(shù)百行的小程序,但是PSP所提供的一系列開發(fā)及管理方法,如規(guī)模估算、構(gòu)件重用、進度跟蹤、代碼和設(shè)計評審及度量知識和應(yīng)用等,都是業(yè)界普遍采用的方法。通過完成一些精心編排的小程序,在練習過程中理解和掌握PSP的工程方法,養(yǎng)成良好的工作習慣,可以使學生在參與大型軟件的開發(fā)時能自覺管理好自己的工作,高質(zhì)量地完成任務(wù)。PSP的真正目的是讓使用復雜軟件工程過程的大型軟件開發(fā)團隊中的每一個人都能規(guī)劃和完成好自己的工作,具有穩(wěn)定和高效的個體過程性能,從而使得整個開發(fā)團隊具有穩(wěn)定、高效、受控和可預測的過程能力,最終有能力在可預期的時間內(nèi)開發(fā)出高質(zhì)量的軟件產(chǎn)品。
大量的實際應(yīng)用表明,PSP完全可以勝任實際大型軟件項目的開發(fā)[6,7,8],并具有很好的改進效果。也有研究表明,PSP可以和一些比較新的工程方法結(jié)合使用[9]。PSP誕生已經(jīng)有十余年,在SEI的大力推動和不斷更新下,越來越提高了適用性,并與CMMI中最佳實踐相結(jié)合進行實施產(chǎn)生了令人矚目的成果。
2.3PSP所涉及到的工程方法和規(guī)范
PSP不僅告訴了個體工程師應(yīng)該做什么,還詳細說明了應(yīng)該怎樣做。所以,PSP中包含了大量的工程方法和規(guī)范,它們大多來自業(yè)界的最佳實踐。這些方法在PSP知識體中都有詳細的描述。表1列出了PSP中所涉及到的工程方法和規(guī)范以及引入的PSP等級。

3教學程序概述
Humphrey在文獻[10]中提到,推廣PSP最有效的途徑就是通過教育系統(tǒng),SEI也在PSP的授課和培訓上做了大量的研究和工作。我們結(jié)合多年P(guān)SP教學研究,參考SEI材料,為北航計算機學院大學三年級的學生設(shè)計了全套的教案。課程共9周,授課18課時,實驗18課時,包括了課程要求、課程講義和作業(yè)說明、評分標準及其他相關(guān)材料,并自主開發(fā)了教學輔助工具,結(jié)合企業(yè)應(yīng)用針對性地教學,在教學過程中跟蹤學習效果,及時總結(jié)和糾正學生學習中的問題,形成了一套精煉而完整的課程體系。
3.1教學策略
PSP教學內(nèi)容包括授課環(huán)節(jié)和實踐環(huán)節(jié)。理論與實際結(jié)合的授課使學生對課程所涉及到的軟件工程知識在應(yīng)用方面有進一步的理解,而豐富和有效的課程實踐更使學生對所學知識在實踐能力方面有進一步的提升。同時通過自己親身的實踐體會,更徹底地認識到以前不良的開發(fā)習慣,提高質(zhì)量意識。
課程教案分兩部分:開發(fā)過程策劃和質(zhì)量管理。第一部分側(cè)重于講授個體過程規(guī)劃,使學生學習軟件的估算與度量方法,還講授如何將統(tǒng)計學方法用于計劃管理和預測,從而使學生提高了解自己、計劃自己和管理自己的能力。第二部分是缺陷管理和質(zhì)量控制方法,講授如何識別和管理缺陷,通過設(shè)計評審策略和方法以及代碼評審的講授,給出軟件質(zhì)量方法在實際應(yīng)用方面的指導,學生通過評審自己的設(shè)計和程序,發(fā)現(xiàn)缺陷,提高個人質(zhì)量的責任感,不斷提高產(chǎn)生無缺陷軟件的能力。與之相配套的8次練習也具有一定的先后次序及重用關(guān)系,使學生在練習的過程中體會如何通過歷史數(shù)據(jù)和重用來更準確地規(guī)劃自己的工作和提高產(chǎn)品質(zhì)量。8次練習之間的層次鮮明,其重用關(guān)系如圖2所示。
與練習相配合,給學生補充一些輕松的小游戲來加深對課程知識的理解,提高學生掌握PSP中的工程方法。如填字游戲,用于講解PROBE估算方法;代碼評審游戲,用于提高學生的代碼評審技能以及對其重要性的認識;情景測驗,選自NASAC的一份月球生存測試,用于輔助學生體驗小組評審的方式和效果。通過課堂游戲和練習,有效活躍了課堂氣氛并鞏固了教學效果。

3.2教學的國際化
PSP開發(fā)者認證是SEI推出的目前唯一針對個體軟件工程師的資質(zhì)認證,自05年至今已有數(shù)千名工程師獲得該認證。我們的教學緊密聯(lián)系認證的指導材料:PSP知識體,對相關(guān)知識點加以重點講解,并鼓勵學生參加認證考試,獲取PSP開發(fā)者資質(zhì),推動國內(nèi)軟件開發(fā)者同國際接軌。
3.3教學輔助工具
在PSP教學中,學生所遇到的最大的困難是諸多數(shù)據(jù)采集任務(wù),加上難于隨時指導,會導致無法方便地得到所采集到的數(shù)據(jù)的直觀反饋[11,12]。由于缺少自動化工具的支持,導致很多學生產(chǎn)生了抵觸情緒而使PSP課程失敗。
針對PSP的教學及應(yīng)用,我們自主開發(fā)了PSP輔助工具PSP CASE Tool(PSPCT),對PSP 0~PSP 2的過程元素提供全面支持,如圖3和圖4所示。PSPCT能夠幫助使用者管理自己的項目,采集過程中的時間、缺陷、規(guī)模數(shù)據(jù),輔助規(guī)模估算和項目計劃,并提供分析支持、過程支持等高級功能。PSPCT大量減少了學生數(shù)據(jù)采集和分析的工作量,及時課后分析授課情況,分析學習效果,有效輔助了教學工作的進行。支持學生自己分析所采集的數(shù)據(jù)發(fā)現(xiàn)和改進個體過程中的問題,有效地預防問題再次發(fā)生,提高了學習興趣和成就感。

同現(xiàn)有其他工具[11,13],PSPCT具有更強的教學指導作用,更具有開放性,對環(huán)境和使用者的要求更低,并且具有投入商業(yè)化應(yīng)用的潛力。
4教學效果分析
在教學過程中以及教學過程結(jié)束后,對教學所產(chǎn)生的結(jié)果進行總結(jié)和分析,能夠有效地指導學生糾正理論及實踐上的錯誤,及時對自己過程進行改進,同時也使得授課人員能夠了解學生們的狀態(tài),發(fā)現(xiàn)存在的問題,從而及時對教學過程進行調(diào)整,并在課程結(jié)束后對自身的教學過程加以改進。圖5為近兩年教學所采集到的學生數(shù)據(jù)。從圖中可以看出:隨著課程的進行,學生的工作效率\\產(chǎn)品質(zhì)量和估算準確度等方面都有明顯的提高。表2顯示了學員在各方面的提高情況。可以看出,經(jīng)過PSP培訓后,學生的改進是顯而易見的。


5結(jié)論
大量的數(shù)據(jù)證明,對大學高年級學生和企業(yè)的軟件開發(fā)工程師進行PSP訓練,是塑造合格的、專業(yè)化的軟件工程師的有效途徑,也為建造高效的軟件開發(fā)團隊培養(yǎng)人才,從而滿足軟件企業(yè)的人才需要和業(yè)務(wù)目標的需要,達到縮短軟件產(chǎn)品開發(fā)周期、降低成本和改善軟件產(chǎn)品質(zhì)量的目的。這將對于提高軟件產(chǎn)業(yè)化、加速與國際接軌、建造名牌產(chǎn)品具有重大意義。
在下一步的教學工作中,我們會繼續(xù)改進教學方法和過程,爭取組織學生集中完成實踐環(huán)節(jié)以給予即時的指導和反饋,并把重點放到如何將PSP與實際項目結(jié)合起來,研究如何以TSP為切入點,把PSP和項目管理方法進行有效的整合,給予學生更加實際的工程指導,使PSP教學的效果最大限度地得以發(fā)揮。
Training qualified individual software engineer using PSP
ChaoYing Wu, Chao Cheng
Abstract: This article briefly introduces PSP principle and methods, and illuminates how to teach students from personal process to software engineering process, and how to get a foundation of large-scale software development by practicing module-sized programs in detail. Then it analyzes the student data collected during our teaching activity. The result reveals that PSP method is of benefit for student’s engineering practices, and is capable of improving student’s personal process. At last, this article gives a summary to results and findings, and points out the future works.
Keywords: Software Engineering, Software Process, Personal Software Process, Team Software Process, Process Performance
參考文獻
[1] Humphrey W. S. A Discipline for Software Engineering[M]. Addison Wesley, 1995.
[2] 吳超英等譯著. 個體軟件過程[M]. 北京:人民郵電出版社, 2001.
[3] 吳超英等譯著. PSP:軟件工程師的自我改進過程[M]. 北京:人民郵電出版社, 2006.
[4] 車向東等. 個體軟件過程實驗研究[J]. 北京航空航天大學學報, 1998, 8(24): 426-429.
[5] 程超等. 個體軟件過程實驗及分析[J]. 計算機科學, 2007, 34 (9A):119-123.
[6] Morisio M. Applying the PSP in Industry[J]. Software, IEEE Vol. 17, Issue 6, 2000 P.90 – 95.
[7] Kamatar J, Hayes W. An experience report on the personal software process[J]. Software, IEEE Vol. 17, Issue 6, 2000, P.85 – 89.
[8] Stark J. A, Crocker R. Trends in software process the PSP and agile methods[J]. Software, IEEE Vol. 20, Issue 3, 2003 P.89 – 91.
[9] Babar A. Adapting the Personal Software Process (PSP) to Formal Methods[J]. Proceedings of the 2005 Australian Software Engineering Conference, 2005.
[10] Humphrey, W. S. The Personal Software Process: Status and Trends[J]. Software, IEEE Vol. 17, Issue 6, 2000, P.71 – 75.
[11] Syu L, Salimi A. A web-based system for automating a disciplined personal software process (PSP) [J]. Software Engineering Education Training. Tenth Conference, 1997.
[12] Abrahamsson, P. The personal software process experiences from Denmark[J]. Proceedings of the 28 th Euromicro Conference, 2002.
Sison R. Personal software process (PSP) assistant[J]. Proceedings of the 12th Asia-Pacific Software Engineering Conference, 2005.