摘要:本文提出了應從學生軟件工程能力和軟件工程素質培養的目標要求進行總體規劃,并就軟件工程能力要求、軟件工程實踐教學對環境的特殊要求,以及軟件工程實踐教學的組織和實施進行了一定的探討。從實施效果證明其有效性。
關鍵詞:軟件工程能力;軟件開發過程;實踐環境;團隊協作
中圖分類號:G642文獻標識碼:B
文章編號:1672-5913 (2007) 22-0126-03
1引言
軟件工程實踐教學既指軟件工程系列課程的實踐教學,也指軟件工程專業學生的軟件工程能力和軟件工程素質培養方面的實踐教學。軟件工程系列課程的實踐教學包括需求分析實踐教學、軟件設計實踐教學、軟件實現實踐教學、人機交互實踐教學、軟件測試實踐教學等。軟件工程的專業實踐教學可以分為兩部分:程序設計能力培養實踐教學和軟件工程能力與素質培養實踐教學。
程序設計能力、軟件工程能力和軟件工程素質這三者既具有各自的內涵,又相互聯系。程序設計能力包括編程能力和程序設計規劃能力。一個不會編程序的人很難體會到編程的艱難,自然難以產生為什么要學習軟件工程和運用軟件工程知識的欲望。如果一個軟件開發人員只能會編程序,不會在軟件開發過程中運用軟件工程的原理和方法作指導,不會成為一個優秀的軟件開發人員。所以培養學生軟件工程能力是培養學生軟件開發能力的自然延伸。在學生軟件工程能力培養過程中,通過軟件工程知識的掌握和軟件工程知識的運用,來領會軟件工程的本質,培養學生軟件工程的素質。因此,在軟件工程專業學生能力培養過程中,一定要對學生程序設計能力的培養和軟件工程能力的培養進行綜合規劃,既要考慮階段性,又要考慮軟件工程知識和軟件工程實踐引入的時機,使學生在提高學生程序設計能力培養過程中逐步培養學生軟件工程能力,在軟件工程能力培養過程中,升華學生軟件開發能力,逐步養成良好的軟件工程素質。
2004年以來,我們遵循這樣一種指導思想,對我校軟件工程專業學生的軟件工程實踐教學進行了一定的探索,取得了一定的效果。
2軟件工程實踐能力培養規劃
軟件工程能力培養不是靠一兩門課程來達到的,它同樣是一項系統工程,需要周密計劃,穩步實施。我們的基本策略是由淺入深,步步提高,通過加大編程的量來提高編程的難度,在難度中尋求降低難度的方法,適時引入軟件工程的原理和方法,并通過“項目”和“團隊”軟件開發來加深對軟件工程的認識,從中領悟軟件工程的內涵。
我們對軟件工程專業學生的能力培養進行了四年規劃:第一學年解決基本的程序設計問題,使學生能夠編寫并調試出150行源代碼程序。第二學年基本解決程序設計問題,能夠用面向對象程序設計語言,按照基本的軟件開發過程開發出一個功能齊全的單機應用程序,并具有一定實用性。基本能夠編寫出從軟件計劃到軟件確認測試的全部文檔,包括技術文檔和過程管理文檔。第三年全面學習軟件工程的知識,并按照軟件工程過程開發出基于B/S模式的網絡應用軟件。第四年通過課程設計和畢業設計進一步加強程序設計能力和軟件工程知識應用能力的培養。
3軟件工程實踐能力培養實施
基本的程序設計能力培養可以通過課程實驗和基本的課程設計來實施。在能力培養規劃中,我們用高級語言程序設計、數據結構和面向對象程序設計課程來完成。而對于軟件工程能力培養需要特定的環境和過程。
3.1軟件工程基本能力
軟件工程基本能力包括:
(1) 軟件工程過程能力。無論采用何種軟件生存周期模型,都可以把一個開發周期分成若干個具有里程碑的階段。每個階段都有明確的輸入和輸出,輸出必須通過文檔的形式進行完整描述,而且其輸出是可驗證的。對于學生而言,要培養軟件過程能力,必須經歷一個從任務接收到交出軟件的完整過程。并且知道每個階段的任務是什么,需要編寫那些文檔,每個階段任務完成的標志是什么。
(2) 文檔編寫能力。軟件工程過程的每個階段都以文檔作為輸入,也以文檔作為輸出。在軟件開發過程中,編寫文檔的時間要比編寫程序代碼的時間長得多。學生必須具備文檔編寫的能力,即每個階段應有那些文檔,文檔的內容、格式、文檔描述語言(文檔核心內容的描述工具,如圖形符號、表格等),會使用文檔描述語言有針對性地描述應用實例。
(3) 團隊協作能力。團隊協作能力在軟件工程能力中是最核心的能力。一個軟件項目不可能由一個人從頭到尾獨立完成,需要多人合作完成。一個軟件項目組的團結協作能力如何,將直接影響著軟件項目的進度、效率和質量。
軟件工程的實質是在規定的時間和成本范圍內開發出用戶可接受的軟件產品。在學生軟件工程能力培養過程中,雖然沒有軟件成本的約束,但可以規定時間約束和質量保證措施。因此,軟件工程能力培養必須在特定的環境下進行,否則這種能力培養達不到應有的效果。
3.2軟件工程能力培養環境
根據對軟件工程能力培養的要求,我們將軟件工程能力培養的環境設定為:
(1) 選定合適的軟件項目。該軟件項目必須來自現實社會,具有真實感,避免學生作業性質的題目。完成項目所需的軟件開發工作量符合教學要求,能夠在規定的時間范圍內完成,但學生必須通過緊張的工作才能完成,不能很輕松地完成。
(2) 學生必須按照一定的組隊原則組成項目組。項目組內按軟件開發階段和任務劃分設置若干個崗位,分工明確、各負其責,又互相協作。
(3) 文檔有規定的模版。文檔必須有一定的格式和內容要求。文檔的模板體現文檔的規范性,避免文檔的隨意性。
(4) 學生必須按照軟件公司的工作方式進行正常的上下班制。使學生真正體驗一個真正的軟件公司是如何開展工作的。
沒有上述環境,軟件工程過程能力和團隊協作能力很難體現出來。在一般的學校實驗室環境下,難以構造這樣的環境。
3.3軟件工程實踐能力培養實施
根據調研,我們選擇四川某信息技術實訓公司作為實習基地。該公司是原拓普公司下屬軟件公司,通過了CMM三級認證,形成了規范化的軟件開發流程和規范化的軟件過程管理機制,具有進行軟件人才培訓的堅實基礎,2003年以來,該公司以原四川托普公司的軟件項目資源為素材,經過提煉后作為實訓項目,為軟件企業提供軟件人才培訓服務。該公司提供的軟件人才培訓服務與我們所期望的軟件工程能力和素質培養具有很大的吻合性,但與我們對學生的培養目標要求又有一定的差距,主要表現在:
(1) 項目組的組織。該公司將實訓學生劃分成一個一個的項目組,按照軟件項目開發的組織形式進行組織和管理,這是值得肯定的一面。但每個組至少15人,有的甚至多達20人。對于在校大學生,要從這些學生中挑選一個項目經理,要對每個人設置不同的崗位,把崗位和職責緊密結合起來,達到相互協調和配合,是很困難的,可能造成一部分學生沒事干或干事太少,達不到培訓的目的,這也不太符合軟件工程原理中相關項目組組成對人數的要求,最好遵循7±2的原理。經過協商,項目組以7~9人為宜。人太多,組織和協調困難;人太少,要在規定的時間內實現規定的項目開發任務同樣有困難。后來的實踐證明,這樣的分組,在項目中每個實訓的學生都有明確的職責和任務,工作量非常飽滿,任何一個學生不努力或不配合,都可能導致任務完成得遲后。對7個學生的項目組與9個人的項目組相比,其進度有明顯的差異。
(2) 軟件開發過程的劃分。在學生實訓過程中不太注意過程的管理,一個項目任務書下達后,只進行最后的驗收,沒有明顯的里程碑階段劃分。而學生的軟件工程能力最重要的是體現在軟件工程過程的組織、管理和控制的能力,必須具有里程碑階段的劃分,通過里程碑階段任務結束、階段成果審查和驗收等環節來體現軟件工程過程管理對于軟件質量保證的重要性,使學生明白軟件質量不是通過測試來保證的,而是通過確保軟件工程過程每一步的質量來保證,軟件需求分析和設計是軟件質量保證的最關鍵步驟。因此在實訓過程中,里程碑階段的劃分和階段成果驗收是保證學生軟件工程實訓質量的基礎。通過相互協商,我們把軟件開發過程分成三個里程碑階段:需求分析階段、概要設計階段和最后驗收階段。每個階段結束后都應有關鍵性的階段報告,并且對階段成果要進行討論和評審,基本通過后才能進行下一階段的工作。通過軟件過程的管理讓學生真正知道軟件工程的本質是什么。
(3) 軟件工程能力培訓的步驟。公司原來只考慮對學生進行1次培訓,安排在大三結束時。我們認為,軟件工程能力和素質的培養需要一個比較長的時間,靠非常短暫的時間來達到培養的目標是不現實的。所以我們計劃進行兩次軟件工程實訓。第四學期安排2個學分的軟件工程課程學習,期末組織第一次軟件工程實習,實訓題目是“綜合程序設計與軟件工程初步實習”,即在學生具備一定程序設計能力基礎上,以綜合程序設計為內容,通過引入軟件工程知識和軟件開發過程管理,讓學生體會真正的軟件開發是怎么回事。盡管學生對按軟件工程要求進行軟件開發還很不習慣,但通過這樣一個過程使他們認識到軟件開發不是只寫代碼,必須按照一定的過程和規范一步一步地進行,否則不能達到預想的目標。在第三學年引入更多的軟件工程類課程,學習更多的軟件工程知識,再進行第二次軟件工程實習,使學生更自覺地運用軟件工程的知識進行軟件開發的嘗試。
3.3實施效果
通過對2004、2005、2006、2007年暑假的軟件工程實習的跟蹤,帶隊老師與實訓公司的不斷交流與協商,公司按照實習的上述相關要求和規范的軟件開發過程組織實習,達到了預期的效果。主要表現為:
(1) 使學生深深認識到軟件開發并不只是編程序。我們每次安排實習時間4周,其中在學校準備1周,給學生補充一些在實習過程中可能要用到的知識;在實訓公司實習兩周,第四周進一步完善在公司的實習內容。在公司的實習的兩周共10個工作日中,理論和規范講解1天,軟件計劃、需求分析和總體設計一般需要4~5天,編碼和測試3~4天,驗收1天。由于我們在學生入學后的頭兩個年狠抓了學生的程序設計能力訓練,學生編程基礎好,程序設計已不是大問題,所以重點放在軟件開發的規劃、需求分析和方案設計方面。最后驗收的講評重點也放在需求分析和設計方面暴露的問題(一般列出的功能要求都能實現)。由于學生非常看重講評的結論和效果,這樣的講評能對學生理解軟件工程收到很好的效果。
(2) 對團隊協同合作有了深刻的認識。對任何一個項目組,如果同學之間不能很好地協調合作,不僅能影響進度,而且影響軟件質量。在時間受限的情況下,同學之間會主動協調相互之間的關系。如果有同學不能很好地與他人合作,項目組會主動進行解決。曾經有同學不習慣且不愿意與項目組協調,項目組同學要求從項目組開除該學生。最后該同學認識到協同合作的重要性,表示愿意積極配合。在學生實習總結中認識最深刻的就是團隊協作的重要性。
(3) 對軟件過程管理有了深刻的認識。軟件過程管理對軟件質量的影響是顯而易見的,在課堂上重復10遍也不會收到好的效果。但通過階段驗收和最后驗收和評審,把驗收質量與項目組的成績及成績分布掛起鉤來,特別是最后的規范化的驗收,軟件過程管理中出現的問題就會暴露出來。曾經有一個組在軟件開發過程中各方面的工作都作得很好,但在最后驗收過程中,因軟件版本拷貝出了問題,軟件演示的程序不是最終版本,而是一個中間版本,出了部分質量上的問題,最后的驗收結論是“原則通過”,分配各種檔次成績的比例明顯偏低。驗收后,該組學生集體抱團痛哭一場。此情此景足以說明軟件過程管理的重要性,任何一個環節不按規范辦事,都會出現意想不到的問題。
4結束語
軟件工程能力和軟件工程素質培養是軟件工程專業學生培養目標的基本要求。軟件工程能力培養和軟件工程素質培養所需要的實踐環境與一般的課程實驗或課程設計相比,具有其特殊性。如何構造實踐環境,讓學生在環境中去感受和體會軟件工程的內涵,具有重要的意義。軟件工程實踐在時間受限、項目組規模恰當和管理規范的條件下,可以得到更好的效果。
作者簡介
周榮輝(1953-),西南交通大學信息科學與技術學院教授,長期參與計算機科學與技術和軟件工程專業建設。