文章編號:1672-5913(2008)10-0079-03
摘要:本文以建構主義理論為基礎,探討了如何設計以建構主義的學習理論為指導的軟件工程教學模式和教學方法,并對建構主義教學模式下的軟件工程教學提出了若干應注意的問題。
關鍵詞:建構主義;軟件工程;教學方法
中圖分類號:G642
文獻標識碼:B
軟件工程是高等學校計算機專業教學計劃中的一門核心課程,工程實踐性非常強,要求學生不僅具有良好的軟件開發能力,而且要具備軟件項目的整體管理概念和團隊合作精神。為了讓學生充分認識到軟件工程課程的重要性,需要任課教師不斷探索、改進教學方法,改變“以教師為中心”的傳統教學模式,使學生從被動學習變為主動學習,為學生自主學習提供豐富的學習資源,從而取得較好的教學效果。這正是現代教學理論——建構主義學習理論所倡導的。
1建構主義理論概述
建構主義理論的核心內容是:以學生為中心,強調學生對知識的主動探索,主動發現和對所學知識意義的主動建構。建構主義教學理論認為,知識主要不是通過教師傳授得到,而是學習者在一定的情景及社會文化背景下,借助他人(包括教師和學習伙伴)的幫助,利用必要的學習資源,通過意義建構的方式而獲得的;學習是學習者主動建構內部心理表征的過程,它不僅包括結構性的知識,而且包括大量的非結構性的經驗背景;學生是信息加工的主體,是意義的主動建構者,而不是外部刺激的被動接受者和被灌輸的對象;教師是意義建構的幫助者、促進者,而不是知識的傳播者和灌輸者;“情境”、“協作”、“會話”、和“意義建構”是學習環境的四大要素。
與建構主義學習理論以及建構主義學習環境相適應的教學模式概括為:“以學生為中心,在整個教學過程中由教師起組織者、指導者、幫助者和促進者的作用,利用情境、協作、會話等學習環境要素充分發揮學生的主動性、積極性和首創精神,最終達到使學生有效地實現對當前所學知識的意義建構的目的。在這種模式中,學生是知識意義的主動建構者;教師是教學過程的組織者、指導者、意義建構的幫助者和促進者;教材所提供的知識不再是教師傳授的內容,而是學生主動建構意義的對象;媒體也不再是幫助教師傳授知識的手段、方法,而是用來創設情境、進行協作學習和會話交流,即作為學生主動學習、協作式探索的認知工具。
在建構主義的教學模式下,比較成熟的教學方法主要有支架式教學、拋錨式教學和隨機進入教學等。
2建構主義學習環境下軟件工程課程教學設計
在建構主義學習環境下,軟件工程課程教學設計內容如下:
(1) 教學內容設計
了解軟件工程這門學科的形成和發展;掌握與大型軟件系統相關的規劃、分析、設計、實現、測試與維護等概念、原理、方法、工具與過程;掌握軟件工程各階段的主要工作,注意吸取教訓;訓練實際軟件工程動手的能力,培養綜合應用能力。
通過學生的個性化學習,增強學生的自信心和意志力。通過教師與學生之間、學生與學生之間的合作學習,增強學生的團隊協作能力。
(2) 情景創設
情景創設是指創設與當前學習主題相關的、盡可能真實的情景。在開始理論教學同時,通過案例研究,向學生提供一個引起典型的軟件案例。由學生根據自己的興趣自由選擇題目,組成項目團隊,一個項目組由5~7名學生組成,分別擔任項目經理、客戶、上級經理、系統分析員,程序員和測試員等角色。由教師為其提供一個虛擬的項目情景和要求。項目組根據項目需求,制定項目計劃,進行分析、設計、編碼和測試,運用學到的知識,分工協同,想辦法,查資料,探尋問題的解決方案,進入實習階段,學生則能夠進行實際軟件項目演練。要求是讓學生體驗軟件工程各階段的主要工作,特別注意吸取教訓;并且學會與他人合作,培養團隊精神,單干戶將得不到成績。從項目實踐開始,學生體驗到的是真實情景,根據項目要求,學生要自己搜集相關資料,使得學習者可以根據自己的學習需要、學習興趣去主動發現、主動探索要掌握的知識。
(3) 信息資源設計
確定學習本課程的每個主題所需的信息資源的種類以及每種資源在主題學習過程中所起的作用。經過分析綜合,為本課程設計了具有不同作用的信息資源:課件和資料;校園網課程教學網站上的學習指導、常見問題解答、參考資料、參考習題等,用于學生的學習或查閱;課程教學網站上的作業系統、答疑系統,用于學生交流和反饋。
此外,教科組成員充分交流教學體會和相關教學資料,參考大量國內外先進的軟件工程理論和應用實例,對教學內容進行了必要的補充和刪改,增加了軟件工程學科發展動向的介紹,加強了包括項目管理、版本控制、建模工具和調試工具在內的各種現代軟件工程開發工具的使用介紹。
(4) 學習效果評價設計
評價包括項目團隊對項目組成員的評價和學生個人的自我評價。此外,在軟件工程教學網站設計了“自測練習系統”,自測練習的內容精心挑選,使之能有效地測試學生對基本概念、基本原理、基本方法的理解和掌握。
3建構主義指導下的軟件工程教學方法
建構主義學習理論強調學習者是認知主體,是意義的主動建構者;同時又不能忽視教師的主導作用,認為教師是意義建構的幫助者、指導者、促進者。
因此,在教學過程中應采取既要發揮學生的主體作用,又要發揮教師的主導作用的策略。在教師的指導下,學生進行主動的思考與探索;教師的主要任務是激發學生的學習興趣,幫助學生形成學習動機,創設符合教學內容需要的多種情景,提示新舊知識之間的聯系,幫助學生進行知識的遷移,組織協作學習,把學生的學習引向深入,并適時給予引導和幫助。
在建構主義教學模式下,我們對軟件工程教學采用了支架式、拋錨式、隨機進入式教學。實踐表明,這些教學方法的運用,大大激發了學生的學習興趣,使學生在教師為其創設的情境中,并在教師的引導下,一步步主動完成知識的意義建構。
(1) 支架式教學
學生獨立解決問題時的發展水平與在教師指導下解決問題時的潛在發展水平之間的差異稱為“最鄰近發展區”。圍繞所學習的主題,按照“最鄰近發展區”的要求,建立概念框架,然后引導學生進入一定的問題情景,讓學生獨立探索,并通過小組協商,最終完成對所學知識的意義建構。
首先,組建項目小組。按不同的知識程度和能力水平來搭配小組成員,也可按學習者的興趣愛好自由組合。每小組應選定一名小組長,負責項目活動的分配、安排以及小組與教師的通信。
第二,各小組選定項目任務。各小組可根據自己的興趣和知識背景選定一個軟件開發項目.教師也可為學生準備一些軟件項目,便于學生選擇。例如,圖書管理系統、游戲軟件、文書編輯系統等,都可以作為小組項目。為掌握軟件開發各個階段的方法,小組任務一般不止一個,從需求分析、系統設計到編碼測試都需完成,同時可以選用結構化開發方法,也可以選用面向對象的開發方法。
第三,分配小組成員任務。確定每個人在小組中完成什么樣的責任,其實施原則是:責任到人,即每個人除了對自己的任務外,同時也要和小組成員合作,對于個人來說,這種任務是相對獨立的。在軟件開發的不同階段,由小組長對組員分配任務。例如,在可行性研究階段,在具體對一個方案進行可行性研究時,可分配成員進行經濟可行性研究、技術可行性研究等任務;在需求分析階段,可分配成員做數據流圖、做數據字典、寫需求規格說明書等等,組長在進行分配任務時要盡可能使小組成員都得到全面充分的鍛煉。
第四,開展探究學習。實際執行課題探究計劃是難點,教師應盡力督促每個小組如期完成計劃。采取小組定期匯報完成任務情況,或上交小組階段性報告的方式來督促任務的具體完成。當然,由于時間的原因,不可能要求每個小組都能實現所選項目的所有功能,但至少要按照軟件工程的指導思想,完成項目的部分工作。
第五,總結報告。將小組項目成員的工作綜合成一個整體,向全班匯報,每組在規定的時間內簡短地匯報自己的任務完成情況,并演示自己的軟件。通過匯報,不僅可使教師清楚地了解各小組的任務完成情況,還可督促各小組按時高質量地完成任務。同時,小組之間可通過這種方式相互學習,共同提高,教師應鼓勵學生盡可能地實現任務,以增強學生的興趣和信心。
(2) 拋錨式教學
拋錨式教學也稱“基于問題的教學”。實際情境中的真實事件或真實問題的確定稱為“拋錨”。這些問題要能引出與所學主題密切相關的基本概念、基本原理,能激發學生的學習動機,激起他們探索、學習的興趣。在解決問題的過程中逐步訓練學生的抽象思維能力和邏輯思維能力。
“模塊化”是軟件工程的重點和難點,學生普遍反映概念抽象、難學。為此,在教學過程中采用“拋錨式教學”,讓學生在真實的問題情境中體會模塊化軟件開發的思想,學會用“模塊”來解決規模較大、復雜的問題。
教師在講解模塊設計原則之前,提出如下實際問題:圖書館管理系統的系統模塊設計。圖書館管理系統的主要功能有:圖書的入庫、圖書借閱與歸還、圖書信息查詢、讀者借閱信息查詢、工作人員權限設置、圖書預約等。為了完成這些功能,實現圖書館的數字化,要求學生結合實際情況,先把圖書館管理系統分成五個模塊:讀者信息管理模塊、書籍信息管理模塊、借閱信息管理模塊、書籍歸還模塊和用戶管理模塊。然后再讓學生根據功能要求逐步細分各個模塊的子模塊,比如讀者管理模塊,可以將該模塊分為讀者信息錄入子模塊和讀者信息更新子模塊,進一步分析各子模塊的具體實現,這樣把復雜的問題采用“分而治之”的方法逐步解決。最后,在計算機上給出完整的程序代碼,并演示程序的運行過程和運行結果。
整個教學過程圍繞建構主義情境、協作、會話和意義建構這幾個認知環節自然展開,學生通過對真實問題的感受、體驗,以及所學知識的意義建構,深刻理解了模塊的概念、原理以及自頂向下的模塊化軟件開發的思想。
(3) 隨機進入式教學
軟件測試是也是軟件開發的重點之一。本部分教學內容采用隨機進入式教學法幫助學生對軟件測試進行多方面的認識與理解。
以白盒測試為例,采用多種測試覆蓋法對圖1的程序流程圖的內容進行測試。

圖1 程序流程圖
語句覆蓋
1) 主要特點:語句覆蓋是最起碼的結構覆蓋要求,語句覆蓋要求設計足夠多的測試用例,使得程序中每條語句至少被執行一次。
2) 用例設計(如果此時將A路徑上的語句1—〉T去掉,那么用例如下):
X Y 路徑
1 50 50 OBDE
2 90 70 OBCE
3) 優點:可以很直觀地從源代碼得到測試用例,無須細分每條判定表達式。
4) 缺點:由于這種測試方法僅僅針對程序邏輯中顯式存在的語句,對于隱藏的條件和可能到達的隱式邏輯分支無法測試。在本例中去掉了語句1—〉T去掉,那么就少了一條測試路徑。在if結構中若源代碼沒有給出else后面的執行分支,語句覆蓋測試就不會考慮這種情況。但是我們不能排除這種以外的分支不會被執行,而這種錯誤往往會經常出現。再如,在Do-While結構中,語句覆蓋執行其中某一個條件分支。顯然,語句覆蓋對于多分支的邏輯運算是無法全面反映的,它只在乎運行一次,而不考慮其他情況。
判定覆蓋
1) 主要特點:判定覆蓋又稱為分支覆蓋,它要求設計足夠多的測試用例,使得程序中每個判定至少有一次為真值,有一次為假值,即:程序中的每個分支至少執行一次。
2) 用例設計:
X Y 路徑
1 90 90 OAE
2 50 50 OBDE
3 90 70 OBCE
3) 優點:判定覆蓋比語句覆蓋要多幾乎一倍的測試路徑,具有比語句覆蓋更強的測試能力。判定覆蓋和語句覆蓋一樣較為簡單,無須細分每個判定就可以得到測試用例。
4) 缺點:往往大部分的判定語句是由多個邏輯條件組合而成(如判定語句中包含AND、OR、CASE),若僅僅判斷其整個最終結果,而忽略每個條件的取值情況,必然會遺漏部分測試路徑。
組合覆蓋
1) 主要特點:要求設計足夠多的測試用例,使得每個判定中條件結果的所有可能組合至少出現一次。
2) 用例設計:
X Y 路徑
1 90 90 OAE
2 90 70 OBCE
3 90 30 OBDE
4 70 90 OBCE
5 30 90 OBDE
6 70 70 OBDE
7 50 50 OBDE
3) 優點:多重條件覆蓋準則滿判定/條件覆蓋準則。更改的判定/條件覆蓋要求設計足夠多的測試用例,使得判定中每個條件的所有可能結果至少出現一次,每個判定本身的所有可能結果也至少出現一次。并且每個條件都顯示能單獨影響判定結果。
4) 缺點:線性地增加了測試用例的數量。
此外還有條件覆蓋、路徑覆蓋等方法,這些覆蓋方法都涉及到的白盒測試開發的共性問題:如何發現算法中的重復性動作,覆蓋方法中涉及哪些路徑,白盒測試路徑的如何確定?什么情況下覆蓋方法應該繼續或中止?或者選用哪個覆蓋方法來實現測試等。無論學生選擇哪一個情境去學習,都能達到發現問題——解決問題——意義建構的目的。
4 建構主義教學模式下的軟件開發教學中應注意的問題
(1) 綜合運用多種教學方法。每一種教學方法有其局限性,如拋錨式教學以問題為中心,使用不當,會影響學生系統的掌握知識。在實際教學中,不一定采用某種單一的教學方法,針對具體教學任務,可以將兩種以上的方法結合在一起,靈活運用。
(2) 不要片面強調學生的中心地位,而忽視了教師的主導作用。
(3) 加強學習資源的建設。
參考文獻
[1] 何克抗. 建構主義學習理論與建構主義學習環境[J]. 教育傳播與技術,1996,(3).
[2] 陳琦,張建偉. 建構主義與教學改革[J]. 教育研究與實驗,1998,(3).
[3] 薛國鳳,王亞暉. 當代西方建構主義教學理論評析[J]. 高等教育研究,2003,(1).
[4] 沈備軍,顧春華. 軟件工程教學模式的研究和實踐[J]. 計算機教育,2005,(1).