孫小兵 朱俊武 李斌 章永龍


摘要:軟件測試課程是軟件工程專業的一門必修課程,但傳統的以教師為主的教學方式所產生的教學效果并不是很好,學生學完該課程后感覺比較空洞。文章提出一種雙語研究性教學方法并介紹該教學方法的實施過程,說明其特色和教學效果。
關鍵詞:自主學習;外文文獻研讀;軟件測試;雙語研究性教學
0、引言
軟件測試是從事計算機軟件開發和維護專業的人員應該掌握的一門技術。軟件測試是軟件工程中的關鍵活動之一,是保證軟件質量的重要手段,其工作量通常占軟件開發總工作量的50%以上,而對于某些可靠性要求極高的軟件系統,如航天、銀行等領域的軟件系統,軟件測試占軟件開發總工作量的比例甚至達到60%~80%。軟件測試的目的是發現軟件中的錯誤,并及時修正這些軟件錯誤,以減少軟件在發布后出現錯誤,提高軟件產品質量。軟件測試是一項需要專業技能的工作,它包含許多理論和實踐。如果缺少這些理論知識和實踐經驗,測試的深度和廣度就不夠,測試質量也就無法保證,從而導致軟件質量達不到要求,影響軟件的可信性。
由于國內軟件產業的現狀所致,很多的軟件公司屬于軟件外包型公司,這些公司以軟件開發為主。這樣,軟件工程專業很大一部分學生畢業后通常從事軟件開發或者程序員工作,這也影響著學校對軟件工程專業的設置。因此,當前高校在軟件工程專業課程設置上往往將很大一部分精力放在軟件開發課程的設置上,如各種語言的學習、軟件開發方法的學習等。但是,軟件工程不僅包括軟件開發,還包括軟件測試以及軟件維護。大部分國外大型軟件公司,如微軟、IBM等公司,這些公司對軟件測試非常重視。在這些公司內部,軟件測試人員數量并不比軟件開發人員少,因為一個優秀的軟件產品最終是通過不斷的軟件測試進行驗證和評價的。隨著軟件工程課程的不斷完善,當前軟件測試的重要性已逐漸得到重視,很多高校已將軟件測試課程作為軟件工程專業課程中的必修課程。該課程是軟件工程的核心組成部分,是連接軟件開發和軟件發布的紐帶。通過本課程的學習,學生要了解軟件測試及其管理的重要性,掌握軟件測試基本理論、技術和方法,具備研究設計測試用例和使用自動化測試工具的基本方法和實踐能力,能將測試驅動的理念融入軟件開發、維護的研究與應用中,從工程化角度提高和培養學生從事大型軟件的測試技術和能力。
盡管軟件測試課程已作為軟件工程專業的必修課程,但從教師和學生兩個角度對該課程的調查反饋發現,教師覺得該課程不好教,教學效果不好;而學生感覺該課程較空洞,沒有發現其在實際軟件開發中有多大的應用。這主要因為在傳統的軟件測試教學中,學生只是被動地參與,聽教師授課,聽教師講授各種軟件測試概念和方法,但學生并沒有真正學到這些理念,并沒有對這些方法進行應用。所以這種傳統的軟件測試教學方法效果很難令人滿意。
揚州大學信息工程學院將軟件測試課程作為一門雙語研究性課程進行試點改革,探討如何更好地進行軟件測試課程的教與學。本文將以該學院軟件工程專業軟件測試課程為例,探討學生自主學習的軟件測試雙語研究性教學方法。筆者作為該課程的授課人實施了本文的軟件測試教學方法,其目的是研究如何促進學生進行雙語研究性教學,促進學生主動學習軟件測試新技術,從而讓學生學到軟件測試課程中的一些測試理念,讓他們了解軟件測試在整個軟件開發過程中的重要性。
1、軟件測試雙語研究性教學
軟件測試雙語研究性教學主要包括三方面內容:教學、研究、實踐。這三者在軟件測試雙語研究性教學中的關系是:以教學為本學習,以研究為重點突破,以實踐為輔助訓練。下面分別介紹這三方面的內容:
1)教學方面。
軟件測試雙語研究性教學和傳統的軟件測試教學一樣,根據軟件測試教學大綱進行教學,主要包括軟件測試基本概念、軟件測試基本方法、白盒測試、黑盒測試等。由于研究性教學過程中加入了研究,所以教學是以基本的測試理論和技術為主。另外,在教學過程中,由于本課程屬于雙語課程,所以教學過程中采用英文PPT,中文授課方式進行教學。另外,教學主要以啟發式教學為主,讓學生更多參與課堂討論,由于本文主要討論研究方面,所以這里對教學不做詳細討論。
2)研究方面。
本課程采用的是研究性教學,因此研究是本課程的重點和特色。本課程所采取的研究方式主要以學生自主學習為主,采用閱讀文獻的方式。由于本課程是雙語教學,研究過程中所提供的文獻材料全部是英文論文,這些材料都是從當年軟件工程領域頂級國際會議中選取的有關軟件測試方面的最新技術和方法,這樣有助于學生開闊視野,了解最新的軟件測試技術、方法,及軟件測試發展的方向。這一部分的實施方法將在第3節進行詳細介紹。
3)實踐方面。
軟件工程是實踐性很強的專業,同樣,軟件測試也是如此。需要通過不斷的實踐才能理解和掌握軟件測試技術,將測試理念貫穿到軟件工程項目中。本課程軟件測試實踐主要包括三方面內容:一是驗證性實踐,熟悉已有測試工具,學會使用這些工具,并利用已有測試工具生成測試用例;二是自己開發軟件測試工具,主要根據研讀的論文進行工具的設計和開發;三是軟件測試工具的驗證和評估,主要是對自己開發的工具進行驗證和評估。一方面利用已有測試工具來驗證當前軟件測試工具,另一方面,利用已有軟件測試知識評估測試工具在故障識別方面的效率,這有助于學生更深地掌握軟件測試技術,了解什么樣的測試技術是好的測試技術或者方法,是有效的測試工具。這一部分也不是本文的重點,因此不詳細展開討論。
2、軟件測試雙語研究性教學特色
本課程作為揚州大學軟件工程專業的試點課程,采用雙語研究性教學方式進行課程的授課和學習。對于雙語性教學,主要采用英文材料,中文授課;而對于研究性教學,主要是讓學生進行自主學習最新的軟件測試技術和方法,研讀相關的英文論文,進行專題報告和討論,并鼓勵學生開發實現這些技術。因此,在本課程的教學過程中,主要體現了5個特性。endprint
(1)自主性:讓學生從給定的英文材料中自主選擇學習材料,自主組建團隊,自主與英文材料作者聯系、溝通、交流和討論。
(2)協作性:學生必須要組建團隊,團隊成員數量由2~4人構成,團隊之間相互協作、配合,共同完成整個研究性學習過程。
(3)互動性:在學習過程中,必須要與論文作者溝通和交流,真正把握論文作者的真正意圖,并嘗試提出自己的見解,與論文作者進行討論。
(4)實踐性:要能夠實現論文材料中的軟件測試方法,在工具開發過程中,鼓勵學生采取測試驅動的開發方法,并利用所掌握的軟件測試技術去測試自己的工具。
(5)研究性:在研讀論文過程中,要對論文進行深入的討論和研究,特別是對作者的思想以及未來工作、論文中的不足進行研究,提出可能的解決方案。
3、軟件測試雙語研究性教學實施
筆者主要針對軟件測試雙語研究性教學過程中的研究過程的實施進行討論。在本課程中,研究主要是采用學生閱讀文獻的方式進行自主學習的研究,主要針對當前最新的軟件測試技術進行學習和研究。研究性教學具體的實施過程如圖1所示。
首先,教師從當年軟件工程頂級國際會議中選取軟件測試相關的研究技術論文放入文獻庫中。這樣的文獻庫主要用于學生對當前軟件測試的學習和研究。對于本科學生來說,獨立地去研讀這些最新技術還有一些難度,而且時間上也緊張。因此,研究性學習主要采取團隊方式一起研究,這樣學生進行自由分組,并且每個小組指派一名學生作為小組組長負責該小組的研究性學習進展。
有了文獻庫以及學生分組后,就進入自由選題階段,即各個小組從文獻庫中選取自己感興趣的論文。在各小組確定自己的研究論文后,進行論文的研讀。在論文研讀過程中,要求每個小組每周至少討論一次,討論各小組的分工任務完成情況,對原文的理解情況,以及對遇到的問題進行討論,并且項目小組要及時記錄這些討論記錄,每周發送給任課教師。另外,在研讀論文過程中,每個小組要用英文與論文作者進行溝通與交流(如果作者沒有回復,可以選擇與課程教師進行交流),并將交流過程中的對話記錄下來作為課程成績考核的依據。
在論文研讀后,需專門安排幾節課進行專題報告和討論,主要用于檢查各小組對原文的理解情況。專題討論內容包括三方面:一是學生對論文內容的理解;二是學生需要提出對論文的見解和觀點,挖掘論文可能存在的問題或對論文中的未來工作部分提出見解;三是本小組研讀論文的體會分享。在專題報告中,我們還邀請了學院的一些其他教師參與進來與學生們一起討論,一方面,教師對各個論文本身進行點評;另一方面,教師對各個小組的表現進行點評。另外,在專題報告中,強調學生的參與,就是大家要多提問,多討論。
專題討論后,各小組要對原文中軟件測試技術進行實現。其中,在軟件測試技術實現過程中,鼓勵采用測試驅動的軟件開發方法;另外,需使用已有的軟件測試技術和工具進行測試。在完成開發軟件測試工具后,需要選擇一些例子進行軟件測試技術的驗證。最后,各個小組需要提交一份總結報告,主要是關于技術實現進行總結,包括這幾方面內容:對論文原文的理解或技術改進,采用的測試技術和工具,技術改進效果的驗證和評估。
4、實施效果
該課程已在2012-2013年秋學期的揚州大學軟件工程專業的一個班按照本文教學方式進行實踐。該班學生40人,我們從2012年ICSE(International Conference on Software Engineering)、FSE(Symposium on the Foundations of Software)、ISSTA(Symposium on the Foundations of Soft-ware)、ICST(Intemational Conference on Sottware Testing,Verification and Validation)、ICSM(Inter-national Conference on Software Maintenance)等國際頂級會議上選取了44篇軟件測試相關的論文作為學生學習的資料庫。然后讓學生自由組隊,每組2~4人一起研讀論文。最后組隊15組,選擇了15篇論文進行學習和討論。在研讀論文過程中,建議學生自己與論文作者用英文進行交流和討論,討論論文中不能理解的內容;在研讀完論文后,我們組織了專題報告,報告主要包括三方面:一是論文主要內容;二是學生對論文的看法以及學生自己的想法;最后就是分享研讀過程中的體會。另外,我們鼓勵學生用英文進行報告(其中一組采用英文進行報告)。專題報告過程中我們還邀請軟件工程系相關教師一起進行點評。
通過這樣的學習,大部分小組完成得較好,基本能理解論文內容,也提出一些想法和改進措施。在研讀論文后,學生對論文內容和自己的想法進行實踐,實現相關技術并進行實驗驗證。幾個月的學習后,大部分學生對這門課的研究性教學方式比較認可。我們以問卷的方式對學生進行了調查分析,調查主要包括對課程教學方式的認可,對自己收獲的認可等。發放調查問卷40份,收回有效調查結果28份。該調查問卷由11個問題組成。前10個是選擇題,如表1所示,是對當前教學方式和教學效果的同意或支持程度,由1~5這5個選項構成,其中1表示非常支持(同意),2表示支持,3表示無所謂,4表示不支持,5表示嚴重不支持。統計結果如表1所示。最后一個調查問題是關于這門課程的建議。從表1中可見,學生還是比較渴望學習新的知識,比較認可這種學習方式;另外,學生對自己的學習效果也比較認可。最后,無論從考試效果,還是學生的反響來看,這門課所采用的教學和學習方式是比較成功的。該教學方式也得到學院的認可,所采用的教學方式也得到科技日報、新華報業網等主流媒體的廣泛關注和報道。
5、結語
軟件測試課程是軟件工程專業的必修課之一,如何讓這樣一門課程不再停留在基本理論上的填鴨式教育是該課程教師必須要解決的問題。通過讓學生合作、自主閱讀和研究當前最新的軟件測試技術論文,并嘗試實現和應用這些測試技術,可調動學生的主動性,讓學生更好地協作、溝通,從而提高對軟件測試的理解和把握。endprint