張 麗, 趙衛(wèi)東,馮超男,鄭永果
(山東科技大學 信息科學與工程學院,山東 青島 266590)
基于PSP的程序設計語言類課程工程化教學改革
張 麗, 趙衛(wèi)東,馮超男,鄭永果
(山東科技大學 信息科學與工程學院,山東 青島 266590)
針對目前高校程序設計語言類課程教學存在的問題,借助PSP的過程要求,提出程序設計語言類課程工程化教學的內(nèi)涵與目標,以及基于PSP的工程化教學的改革方案。
PSP;程序設計語言;工程化教學;教學改革
程序設計語言類課程主要包括C、C++、Java等,是計算機相關專業(yè)的入門課程,這些課程不僅是學習后續(xù)專業(yè)課程的基礎,更是培養(yǎng)和訓練編程工程技能和素養(yǎng)的關鍵。為此,各高校都非常重視程序設計語言類課程的教學改革,并取得了良好的教學效果,學生的實際編程能力得到了一定的提高,但大部分高校在程序設計語言類課程教學過程中,并沒有很好地貫徹執(zhí)行CDIO教育理念,教學的各個環(huán)節(jié)忽視了對學生規(guī)范化工程技能和素養(yǎng)的培養(yǎng)和訓練,使學生從一開始就養(yǎng)成了很多后期難以改正的錯誤觀念和習慣,例如隨心所欲的編程過程、不規(guī)范的編程風格等。學生編程的過程能力和工程素養(yǎng)與軟件工程的實際要求相去甚遠。
PSP(personal software process,個體軟件過程)是幫助程序員改善個人編程能力的組織過程,是指導程序員培養(yǎng)工程素養(yǎng)和提高過程能力的系統(tǒng)化方法。筆者通過將PSP的相關理論和方法融合到程序設計語言類課程教學過程中,系統(tǒng)改革程序設計語言類課程的教學內(nèi)容和教學方法,以全面貫徹落實CDIO的教學理念,強化學生編程過程能力和工程素養(yǎng)的培養(yǎng)和訓練。
2.1 工程化教學的內(nèi)涵和目標
CDIO工程化教育模式實現(xiàn)了知識、能力和素質(zhì)的協(xié)調(diào)發(fā)展[1],代表的是構(gòu)思、設計、實現(xiàn)和運作的教學理念,它倡導的是“做中學”,并且是“基于項目的教育和學習”[2]。進行工程化教學就是將CDIO的理念融入到程序語言類課程的教學設計上,從軟件工程對編程的工程化和規(guī)范化要求出發(fā),加強對學生編程過程能力和規(guī)范化工程素養(yǎng)的培養(yǎng)和訓練,使其從一開始就養(yǎng)成正確和良好的編程工作方式和習慣。實施工程化教學的目標是讓學生以主動的、課程間有機聯(lián)系的、實踐的方式進行工程化學習,培養(yǎng)成熟、完整、有思想的程序設計開發(fā)人員,使其發(fā)展成為有技術、有素養(yǎng)的個體。
2.2 基于PSP的工程化教學改革
對現(xiàn)有的教學方式進行分析,發(fā)現(xiàn)存在一些問題不能滿足工程化教學的要求。其一,教師教學方式的問題,教學內(nèi)容設計不夠合理,在教學過程中教師只注重語言本身知識的傳授,把大部分的時間用在講授語法和程序設計上,忽略對學生編程過程的指導和培養(yǎng);其二,學生學習方式的問題,學生只注重編寫正確的程序,不重視編寫的過程和工程經(jīng)驗的積累,表現(xiàn)在隨心所欲、缺少計劃和總結(jié)等。長此以往,學生雖能編寫程序,卻沒有形成良好的編程工作習慣和規(guī)范的編碼風格,其編程的效率和質(zhì)量遠遠達不到軟件工程的要求。
PSP是基于軟件技術、工程思想和專業(yè)方法幫助軟件工程師改善個人編程能力的組織過程[3]。它由一系列的表格、方法和腳本組成,主要目的就是幫助軟件工程師提高編程能力,進而管理軟件開發(fā)的質(zhì)量。圖1為PSP的過程框架[4],該框架描述了從需求開始,經(jīng)過計劃、設計、編碼、編譯、測試到總結(jié)的整個開發(fā)過程,過程中以計劃腳本為指導,并隨時產(chǎn)生時間記錄日志、缺陷記錄日志等,在項目結(jié)束時把記錄的時間、缺陷等問題進行總結(jié),最后將其寫入計劃總結(jié)報告中。因此,將PSP的思想和方法融合到程序設計語言類課程教學過程中,對教學內(nèi)容和教學方法進行系統(tǒng)化改革,符合工程化的教學思想,有利于學生編程過程能力和工程素養(yǎng)的培養(yǎng)和提高。
圖1 PSP的過程框架圖
為了實施課程的工程化教學,教學內(nèi)容的設計是至關重要的環(huán)節(jié)之一,按照PSP過程框架的要求,結(jié)合程序設計語言類課程工程化教學目標,通過融入CDIO的理念,對課程教學內(nèi)容設計如下。
3.1 課堂教學內(nèi)容
根據(jù)PSP過程框架的要求,課堂教學增加程序質(zhì)量、編碼規(guī)范、編程計劃、設計、測試、總結(jié)等內(nèi)容,引導并培養(yǎng)學生按照科學的過程和規(guī)范的工程化要求進行編程,改變隨心所欲的編程方式。其中,程序質(zhì)量主要講授正確性、可靠性、可維護性、安全性、可擴展性等質(zhì)量要素,使學生清楚什么才是高質(zhì)量的程序;編碼規(guī)范主要講授一套通用的編程規(guī)范,如通過標識符規(guī)范、備注規(guī)范等來提高程序的可讀性;編程計劃和設計主要講授如何進行程序設計以及如何制定程序設計計劃等,以保證程序設計按照預想的步驟進行;測試主要講授如何進行單元測試,重點講授白盒測試技術來保證程序設計的正確性,提高程序質(zhì)量;總結(jié)主要是講授如何借助表格來統(tǒng)計程序設計的數(shù)據(jù)以及如何對統(tǒng)計的數(shù)據(jù)進行分析等。
3.2 實踐教學內(nèi)容
良好的編程習慣和工程素養(yǎng)必須通過反復的實踐訓練才能逐步形成。為此,必須依據(jù)PSP規(guī)范流程對傳統(tǒng)程序設計上機實驗的流程進行變革。首先,要培養(yǎng)學生的計劃能力,讓學生自己確定在編寫代碼前干什么,如何去干,然后再開展工作,檢查工作并且確保工作的正確性,即上機實驗之前要制定一份計劃,這份計劃要包括程序設計的目的、要求、流程、編程用時估計等。當計劃制定完成之后,還需要對其進行檢查,確保沒有遺漏重要的事項,甚至還要檢查相關信息的填寫是否正確。其次,在實踐過程中,學生要依據(jù)PSP的規(guī)范制定相應的表格來統(tǒng)計編程的相關數(shù)據(jù),表格的樣式見4.1部分。最后,學生在提交實踐報告時,要進行總結(jié),將實踐計劃、實踐數(shù)據(jù)的相關統(tǒng)計信息、程序測試的測試用例、測試結(jié)果寫在實踐報告中,便于以后進行查看。
PSP能幫助程序設計者積累編程過程數(shù)據(jù),根據(jù)積累的數(shù)據(jù),識別程序設計過程中的優(yōu)勢和不足。個體過程是用來指導軟件開發(fā)的指南,為適應程序設計語言的教學,本文結(jié)合CDIO理念,對PSP過程進行簡化和重定義,設計適合語言教學的基于PSP的教學方法。
4.1 程序設計教學過程數(shù)據(jù)采集
在軟件過程中實現(xiàn)“做中學”。首先,對于程序設計語言基礎知識的講授,要采用與實際應用相結(jié)合的方法,用實戰(zhàn)項目進行演練,并將復雜或者規(guī)模較大的任務模塊變成結(jié)構(gòu)可分析的對象。其次,在實踐演練中,讓學生靈活運用PSP中的相關約束規(guī)范,主要是遵循PSP的設計原則,對于實踐中的數(shù)據(jù)進行統(tǒng)計分析,體現(xiàn)在教學上就是設計合理的表格,幫助學生進行個人數(shù)據(jù)的管理。
參照PSP過程框架(見圖1)可知程序設計要經(jīng)歷4個階段:設計、編碼、編譯和測試,在每個階段都需要用相應的表格對程序設計中的數(shù)據(jù)進行統(tǒng)計,統(tǒng)計的主要內(nèi)容包括程序的規(guī)模(可用代碼行數(shù)進行計數(shù))、整個程序從設計到完成的用時和在設計過程中出現(xiàn)的缺陷等。因此,表格設計是否合理直接影響數(shù)據(jù)統(tǒng)計的有效性、實用性和數(shù)據(jù)分析的準確性。針對程序設計時間和缺陷統(tǒng)計設計相應的表格,供教學參考。
1)程序設計時間記錄。
編程時間是衡量一個程序大小及編程者能力的重要元素之一,傳統(tǒng)程序設計語言的教學往往不注重時間的統(tǒng)計。恰好PSP提供了時間記錄日志,對編程時間進行統(tǒng)計,若將其用于程序設計語言類課程的教學中,就能達到統(tǒng)計編程時間、積累原始數(shù)據(jù)的目的。為此,根據(jù)PSP提供的程序時間記錄日志設計出能應用于教學實踐的個人時間記錄日志,包括項目、階段、中斷時間、結(jié)束日期及時間、凈時間和注釋。
在對設計的每個小程序進行編程用時統(tǒng)計之后,學生可以在程序時間記錄的基礎上,用表1進行個人歷史數(shù)據(jù)的總結(jié)統(tǒng)計,其中的單元即為程序的代碼規(guī)模(可用代碼行數(shù)來統(tǒng)計)。在進行分析統(tǒng)計后,可以得到個人編程的單位時間(即平均值)、最大值以及最小值。
表1 個人程序歷史數(shù)據(jù)總結(jié)表
2)程序設計缺陷記錄。
從以往的軟件開發(fā)經(jīng)驗可以看出,在任何軟件開發(fā)過程中,都不可避免出現(xiàn)各種各樣的錯誤。針對此問題,PSP程序設計框架也提出了相應的解決措施,提供指導軟件工程師對缺陷進行有效跟蹤和管理的方法。同樣,在程序設計語言類課程的教學中,也會遇到各種各樣的錯誤,如果在教學過程中能夠提供一種有效的方法對錯誤進行統(tǒng)計,分析造成錯誤的原因,那么將能大大提高學生的編程水平,降低同類錯誤的出錯率。
基于以上情況,首先,對于程序設計中可能遇到的錯誤進行統(tǒng)計,主要可以分為以下幾種:拼寫錯誤、聲明錯誤、名稱類型錯誤、標點符號說明錯誤、指令格式錯誤、賦值錯誤、功能錯誤(邏輯、指針、循環(huán)等)、系統(tǒng)錯誤(配置、內(nèi)存)等。然后,針對可能出現(xiàn)的錯誤,設計好表格(見表2)對其進行統(tǒng)計。最后,對同一種類型錯誤出現(xiàn)的次數(shù)進行統(tǒng)計,分析出錯的原因。這樣,在以后出現(xiàn)類似的程序設計時,可以避免出現(xiàn)類似的錯誤。
4.2 基于數(shù)據(jù)分析的教學過程改進
有了歷史數(shù)據(jù)的積累,教師可以更好地安排教學,并針對出現(xiàn)較多的程序錯誤進行分析講解,避免學生出現(xiàn)類似的錯誤。學生也可以對自己的編程能力有一個清晰的認識,對于相似規(guī)模的程序,可以更加準確地制定時間計劃。
根據(jù)個人程序紀錄日志,可以清楚地看到某個程序的開始時間、結(jié)束時間和中斷時間,并通過計算得到每個程序的所用凈時間。應用這樣的表格對編程用時進行統(tǒng)計,得到個人的第一個比較準確的時間數(shù)據(jù)。根據(jù)這份統(tǒng)計的數(shù)據(jù),教師可以清楚地看到每個學生的編程用時,在以后安排類似的程序設計題目時,教師可以根據(jù)每個人的不同掌握程度進行指導。學生個體也可以用這份數(shù)據(jù)得到自己的中斷時間和凈編程用時,數(shù)據(jù)積累之后,可以比較自己哪個程序設計用時較長,然后針對用時較長的項目進行分析,找到自己學習的薄弱點。學生還能依據(jù)這份數(shù)據(jù)對以后類似的程序設計進行用時估計。
表2 錯誤統(tǒng)計表
在表1中,從平均值的變化可以清晰地看出個人編程能力的變化,如果平均值整體上變小,說明單位模塊的程序設計用時減小,個人編程能力呈上升趨勢;若相反,就要分析造成這種情況的原因,并采取相關措施改善這種狀況。對于程序設計過程中出現(xiàn)的異常值(數(shù)值偏大或者偏?。?,分析其造成原因。長此以往,就能大大改善學生的編程能力及編程習慣,并能對下次估計編程時間和規(guī)模提供參考數(shù)據(jù)。
除此之外,學生對于程序設計中遇到的缺陷,要找到盡可能合理的方法對缺陷進行預防。以下給出缺陷分析步驟:①對出現(xiàn)的某個缺陷進行分析;②找到出現(xiàn)缺陷的原因,是拼寫錯誤、聲明錯誤,還是其他錯誤等;③對于缺陷原因,可使用魚骨圖[5]來標明錯誤注入的先后順序(見圖2);④找出缺陷中較普遍問題的趨勢,一些潛在的原因是不合理的溝通、拼寫錯誤、理解偏差或者不完整的過程等;⑤通過以上分析,設計出預防這些問題的方法;⑥分析過去有效的方法,確保在過程修正中能將有效的方法結(jié)合到程序設計中;⑦重復以上步驟,直到?jīng)]有更多的想法。
將軟件工程師的自我改進過程應用到程序語言類課程的教學中,將大大改善傳統(tǒng)的教學模式,遵照PSP規(guī)范過程教學的學生將會在編碼規(guī)范、時間管理、程序設計速度、代碼正確率、軟件開發(fā)能力等方面有明顯的提高。這將有利于提高學生的工程素養(yǎng),在程序設計語言類課程學習時就養(yǎng)成良好的個人軟件開發(fā)規(guī)范,能更好地適應當今快速變化的軟件開發(fā)形式,避免低質(zhì)量軟件的產(chǎn)生。
圖2 錯誤分析魚骨圖
基于PSP的程序設計語言類課程工程化教學改革方案,主要涉及如何在程序設計語言類課程的教學上規(guī)范化PSP,教學并沒有涉及個人循環(huán)過程,下一步研究將針對高年級的實訓過程,開發(fā)出基于 PSP的個人循環(huán)過程的工程化教學,從而完善程序設計語言類課程的教學改革,使學生真正全面接受個體軟件工程化的培訓過程,達到軟件開發(fā)人員的基本素質(zhì)要求。
[1] 鐘壽仙, 張瑛, 郭紹輝. MPC-CDIO教育教學模式的探索與實踐[J]. 高等工程教育研究, 2015(2): 169-175.
[2] 李善壽.“CDIO”工程教學模式在實踐教學中的實施方法研究[J]. 重慶科技學院學報(社會科學版), 2010, 25(20): 164-166.
[3] 楊麗娜. 基于過程控制的個體軟件質(zhì)量管理: PSP[J]. 計算機系統(tǒng)應用, 2002, 11(1): 4-7.
[4] Humphrey W. PSP(sm): A self-improvement process for software engineers[M]. 北京: 人民郵電出版社, 2006: 8-169.
[5] 皮圣雷. 綜合魚骨圖及其在項目管理中的應用研究[J]. 中國軟科學, 2009(4): 92-97.
[6] 任永昌, 朱萍. 軟件項目進度計劃控制的過程與方法[J]. 計算機技術與發(fā)展, 2012, 22(11): 97-99.
(編輯:史志偉)
1672-5913(2017)03-0119-05
G642
山東科技大學優(yōu)秀教學團隊建設計劃資助項目(JXTD20160506)。
張麗,女,在讀碩士生,研究方向為軟件工程,zzgw0005@163.com。