周 勇 黃國興
摘要本文強調(diào)將過程思維與過程控制應(yīng)用于軟件工程教學(xué)實踐,分析并總結(jié)了實踐結(jié)果,表明這一方法對課程教學(xué)有顯著作用。
關(guān)鍵詞過程思維過程控制課程實踐軟件工程
1 問題的提出
今天,越來越多的國內(nèi)軟件開發(fā)企業(yè)認識到軟件過程的重要性。導(dǎo)致軟件項目失敗的原因除了技術(shù)、工具等因素以外,更多的是由于缺乏過程規(guī)范。軟件開發(fā)需要團隊的努力,如果缺少過程規(guī)范,團隊就可能遵循不同的過程。更普遍的情況則是團隊根本就沒有任何經(jīng)過定義的過程。
正如Watts Humphrey認為的那樣,“為了解決軟件問題,重要的第一步就是將整個軟件開發(fā)任務(wù)看作一個可控的、可度量的以及可改進的過程?!?/p>
將已有的軟件過程運用于實踐或在實踐中改進現(xiàn)有軟件過程,需要軟件工程師在學(xué)習(xí)期間接受不同方面的教育,概括來說,一個合格的軟件工程師,他需要具備以下基本素質(zhì):
(1)了解一個或多個開發(fā)過程。
(2)對于自己從事的開發(fā)過程有詳細的了解。
(3)建立起一套改進過程的機制。
(4)對過程改進作出計劃。
(5)找出上述計劃所需的資源。
(6)執(zhí)行上述計劃。
(7)持續(xù)改進過程。
在上述活動中,需要度量和評估。同時,還要給軟件工程師們在其復(fù)雜的工作中提供智能化的工具。
傳統(tǒng)的計算機學(xué)科教學(xué)中,強調(diào)數(shù)學(xué)基礎(chǔ)和按部就班的理論學(xué)習(xí),而伴隨著以程序設(shè)計語言為引導(dǎo)的編程實踐活動通常是以學(xué)生個體為單位進行的,它并沒有充分教授學(xué)生從事軟件開發(fā)所必需的方法和技巧。
現(xiàn)在比較流行的軟件工程教學(xué)方法,是在授課過程中伴隨個體或小組項目開發(fā)。但是,無論是教師還是學(xué)生往往把注意力集中在任務(wù)、工作、人員或者結(jié)構(gòu)之上,而不是集中在過程之上,在項目開發(fā)中采用的還是一貫的基于任務(wù)的思維方式,即將工作劃分為最小的組件再將它們分配給指定人員的方式。
我們在教學(xué)實踐項目中強調(diào)以軟件過程為中心,讓學(xué)生了解并實際看到自己的開發(fā)過程,這一開發(fā)過程通常會貫穿軟件工程實踐領(lǐng)域,包括計劃、分析、設(shè)計、實施、測評以及修改等一系列需要專門技術(shù)的復(fù)雜活動。
認知科學(xué)的研究表明,開發(fā)方法與技巧的掌握,涉及以下三個方面。
(1)明確各類指示和實踐活動。
(2)在一個相關(guān)的環(huán)境中運用此類技巧。
(3)采用結(jié)構(gòu)化的方式開展此類活動。
針對上述三個方面,我們在教學(xué)實踐中采用了項目驅(qū)動、基于過程、小組開發(fā)。其中,項目驅(qū)動對應(yīng)于明確各類指示和實踐活動,小組開發(fā)對應(yīng)于在一個相關(guān)的環(huán)境中運用此類活動,基于過程對應(yīng)于采用結(jié)構(gòu)化的方式開展此類活動。另外,我們在教學(xué)實踐中強調(diào)過程思維和過程控制,有別于一般的小組項目實踐。
2 強調(diào)過程思維和過程控制
在傳統(tǒng)計算機學(xué)科的教學(xué)中,經(jīng)常會忽視軟件過程,這一點從許多的計算機學(xué)科的教學(xué)計劃及教學(xué)大綱中反映出來,一般地,學(xué)生們總是先寫代碼,然后再補寫文檔,對學(xué)生的調(diào)查表明很多學(xué)生在開發(fā)時根本不寫書面的設(shè)計文檔(如圖1所示)。我們在課程實踐中,強化了學(xué)生們的過程思維。
從某種意義上說,過程思維反映了人類的大腦對知識與經(jīng)驗的保存及其使用的方式。根據(jù)加涅提出的學(xué)習(xí)過程的基本模式,學(xué)習(xí)是人的傾向性或能力的變化,這種變化要能保持一定時間,且不能單純歸于生長過程。所謂的“知識”就保存在神經(jīng)元之間的相互連接中,開始時是一種“弱連接”,即我們所說的“弱記憶”,當(dāng)我們獲取了知識并且在實踐中加以運用的話,上述連接就會得到加強,從而形成所謂的“強記憶”。只要你擁有了針對于某一特定領(lǐng)域的知識和經(jīng)驗后,再遇到相同的情況,就會自動運用頭腦中保存的有關(guān)知識,這時你所作出的反應(yīng)就像是自動完成的,過程的執(zhí)行將是自然而然的事??梢哉f,正是由于多次相同的經(jīng)歷和不斷的訓(xùn)練,才導(dǎo)致了我們對知識的掌握,對過程的駕輕就熟。
過程思維和傳統(tǒng)的思維方式大不相同,采用這種方法會導(dǎo)致明顯不同的結(jié)果。這一點對于所有團隊成員都具有相同的目標(biāo)并且在采用過程思維時尤其突出。過程思維會使大家保持行為的一致,從而實現(xiàn)整體能力的提升,獲得更佳的效果。這在強調(diào)團隊精神的軟件開發(fā)中顯得尤其重要。
因此,我們在課程實踐中,要求學(xué)生在以小組為單位的軟件開發(fā)活動中,采用以過程為中心的方法,即要求他們的開發(fā)活動基于過程。這里所涉及的軟件過程在課程的理論部分已經(jīng)明確闡述過,需要學(xué)生們在項目開發(fā)中加以實踐,做到融會貫通。
過程通常體現(xiàn)在三個方面:第一個方面是關(guān)于指定過程的定義,通常是將過程所包含的活動和程序文檔化;第二個方面是過程的學(xué)習(xí),通過人們頭腦中學(xué)到的過程知識來驅(qū)動他們的行為;第三個方面在于過程活動的結(jié)果。所以,過程不僅僅是一堆文檔,除了定義過程,對學(xué)生進行過程培訓(xùn)(結(jié)合理論知識),還需要加強過程的監(jiān)控,通過這種方式確保過程活動是按照已定義的過程文檔內(nèi)容來執(zhí)行并確保最終開發(fā)目標(biāo)的實現(xiàn)。
3 設(shè)計的方法
我們針對學(xué)生開展的項目開發(fā),設(shè)定了一個體系框架,用以支持并控制其開發(fā)過程。這個框架的設(shè)計參考了格拉奇和伊利在1980年提出的設(shè)計過程模式,這一框架在較高的層面列舉了相關(guān)的活動內(nèi)容,包括領(lǐng)域知識、啟發(fā)式的策略、控制的策略、學(xué)習(xí)的策略。
針對上述認知框架,我們總結(jié)了教師的六項基本任務(wù),用以支持和控制基于過程的教學(xué)。
(1)幫助建立任務(wù)模型
針對具體的領(lǐng)域及其實際任務(wù),幫助項目小組制定任務(wù)模型(WBS),在開發(fā)活動中進一步細化相應(yīng)的子任務(wù)。
(2)提供實時指導(dǎo)
教師實時地為項目小組提供指導(dǎo)(參加討論會、專題網(wǎng)站、MSN等),給出提示性意見,評價局部成果,隨時鼓勵學(xué)生。
(3)提供開發(fā)模板
針對學(xué)生缺乏開發(fā)經(jīng)驗的實際情況,提供系統(tǒng)開發(fā)的模板,有助于學(xué)生熟悉開發(fā)過程和內(nèi)容,提高文檔的規(guī)范性。
(4)鼓勵學(xué)生將其學(xué)到的知識和方法付諸實施
這種做法將有利于學(xué)生在實踐中驗證有關(guān)理論知識和方法。
(5)分析學(xué)生開發(fā)過程中反饋的信息
鼓勵學(xué)生評審開發(fā)中的關(guān)鍵活動,分析反饋結(jié)果,對過程改進提出建議和意見。
(6)鼓勵學(xué)生探索
鼓勵學(xué)生在開發(fā)過程中創(chuàng)新,培養(yǎng)發(fā)現(xiàn)問題和獨立解決問題的能力。
為了讓學(xué)生在項目開發(fā)中運用軟件過程更加有效,進一步地,我們設(shè)計了相應(yīng)的角色與機制的配合,包括:
(1)過程所有權(quán)
由教師按照軟件過程課程所教授的有關(guān)理論,結(jié)合項目實際,制定一個標(biāo)準(zhǔn)過程。學(xué)生可以根據(jù)需要提出改進這個過程,但是,需要得到教師的評估確認。
(2)對過程執(zhí)行情況的監(jiān)控
由教師在項目開發(fā)過程中全程監(jiān)控過程的執(zhí)行情況。
(3)過程使用者的反饋
學(xué)生在執(zhí)行過程中按要求反饋其執(zhí)行情況,教師據(jù)此了解和評價學(xué)生的過程執(zhí)行結(jié)果。
(4)評價
教師對最終過程執(zhí)行結(jié)果給出評價。
4 實驗
我們選擇了同一年級同一班級的兩門軟件工程專業(yè)課程進行對比實驗,課程為三年級的“軟件開發(fā)實踐”和“軟件過程”。我們采用的教學(xué)方法就是在課程中配套進行小組項目開發(fā),以小組為單位獨立完成既定的項目,要求參照軟件過程的理論和方法,強調(diào)團隊合作,提倡編寫完整的開發(fā)文檔。
實驗流程如圖1所示,兩個樣本集合分別代表了自由的小組開發(fā)(軟件過程)和受控制的小組開發(fā)(軟件開發(fā)實踐),以此檢驗不同的開發(fā)效果。
實驗的結(jié)果如表1、表2和表3所示。實驗結(jié)果分析如圖2、圖3所示。
5 結(jié)論
從學(xué)生調(diào)查的反饋結(jié)果可以看出,在小組開發(fā)過程中強調(diào)過程思維,并讓教師參與過程控制,大大提高了學(xué)生小組開發(fā)的有效性和規(guī)范性,其項目開發(fā)的結(jié)果評價也得到了明顯的提高。對于受控的開發(fā)小組,其開發(fā)過程中相關(guān)活動的參與率較高,而對于自由的開發(fā)小組方式,其開發(fā)過程中相關(guān)活動的參與率較低。
進一步地,我們希望能改進我們的控制方法,如果能夠建立一個統(tǒng)一的教學(xué)控制平臺,在這個平臺上將項目任務(wù)發(fā)布、項目控制、項目評審、項目資源以及項目討論集成起來,將有效地提高學(xué)生項目小組的開發(fā)效率,加強過程控制,改進軟件過程,從而大大促進軟件工程專業(yè)課程的教學(xué)質(zhì)量。(本文獲“2005年全國青年教師計算機教育優(yōu)秀論文評比”二等獎)
參考文獻
1 Humphrey, W. S.Why Should You Use A Personal Software Process? Software Engineering Notes 20(3), July 1995 :33~36
2 尹俊華等.教育技術(shù)學(xué)導(dǎo)論.北京:高等教育出版社
3 Reder, L. and R. Klatzky . The Effect of Context on Training: Is Learning Situated? CMU/CS-94-TR-187, School of Computer Science, Carnegie Mellon University,1994
4 Moore, M. & C. Potts. (1994) Learning by Doing: Goals and Experiences of Two Software Engineering Project Courses. In J. L. Dìaz-Herrera. (ed.), Software Engineering Education: 7th SEI CSEE Conference. New York: Springer-Verlag:151~164
5 Sami Zahran , Software Process Improvement: Practical Guidelines for Business Success. Pearson Education, 1998