摘 要:提出了在軟件開發類畢業設計中采用敏捷技術進行過程控制的方法,從實際效果中可以看出,這種方法較好地解決了軟件開發類畢業設計中遇到的各種問題,能夠有效提高軟件開發類畢業設計的質量,使學生在畢業設計中得到充分的鍛煉和提高。
關鍵詞:畢業設計;敏捷軟件開發;極限編程;軟件質量
0 引言
畢業設計是本科教學中非常重要的一個教學環節,是對學生所學知識的檢驗和總結,是培養學生獨立分析和解決問題能力的重要手段,也是學生進入工作崗位前的最后一次實戰演習;并且,它是本科教學水平評估指標體系的重要指標之一,是考核學校本科教學水平和質量的重要內容。
軟件開發是計算機專業畢業設計中一個重要組成部分。學生開發的軟件質量直接反映出畢業設計質量,而指導教師的指導和監控對學生開發軟件的質量高低有很大影響。本文首先介紹了軟件類畢業設計的特點、遇到的問題及其原因分析,然后將敏捷軟件開發技術應用于指導和監控軟件類畢業設計,最后通過具體的實踐對其進行總結。
1 目前狀況及問題
1.1 軟件開發類畢業設計的特點
本科計算機專業畢業設計中,軟件開發占很大比重。而軟件開發類畢業設計與其他專業的畢業設計以及商業化軟件開發又有很大不同,主要體現在:
(1)設計的最終目的是要生成可運行的、實現一定功能的、錯誤率較低的實際軟件產品,而不僅僅是提交一份文檔報告。
(2)設計小組成員分工合作,要將各人的成果整合,形成完整的軟件;小組每個成員不是完全孤立的,每個人的工作都與其他人息息相關。
(3)項目小組一般只包括一個人或幾個人,人數較少,遠少于一般商業化軟件開發項目小組的人數。
(4)小組成員沒有足夠的團隊意識,沒有足夠的軟件工程經驗,一般沒有作為一個團隊的成員共同開發過軟件產品。
(5)項目開發過程不完全,編碼的結束即意味著項目的結束。項目不要求有完整的工程化的分析和設計文檔。
(6)有些軟件開發沒有與商業項目掛鉤,也就沒有真實客戶的需求對其進行功能和性能上的監控。
1.2 遇到的問題及原因分析
根據上面的特點可以看出,普通畢業設計的指導方式或是工程化的控制手段,并不能適應軟件開發類畢業設計,最終會導致畢業設計質量低下,學生得不到真正鍛煉。比較突出的問題主要表現在以下幾個方面:
(1)項目組成員各人任務不明確,能力參差不齊,并且有時沒有充分地交流設計思想,最后導致軟件各個功能模塊無法有效整合。
(2)項目需求因為各種原因不斷改變,軟件不斷修改,最終完成的軟件產品達不到設計要求。
(3)編碼開始后,軟件的錯誤和缺陷不斷涌現、不斷累積,最終無法控制。
這些問題的產生,固然與設計選題、學生能力、實驗環境以及教師的指導力度分不開,最重要的還是與教師的指導和監控方式有關。應當采用恰當的指導和監控方式,最大化地促進學生能力的提高,最有效地根據各個學生的特點,推動學生逐步達到畢業設計軟件質量和功能的要求。
2 敏捷軟件開發技術的應用
采用適當的指導和監控方式,實際就是要求教師對學生軟件開發應用適當的軟件過程模型,也就是軟件開發的工程化控制手段。
2.1 敏捷軟件開發簡介
傳統的軟件工程方法中的架構設計與程序開發在時間上是先后分離的,這種分離常常導致一些脫離實際的設計和脫離設計構想的編程,導致最終軟件開發的不理想甚至是失敗。鑒于以上問題,敏捷軟件開發技術應運而生。
敏捷軟件開發以交付而不是以構造為核心,它強調的是交付對客戶有價值的軟件,而不是用戶需求中所描述的軟件。簡言之,就是把一個大項目分為多個相互聯系,但也可獨立運行的小項目,并分別完成,在此過程中軟件一直處于可使用狀態。敏捷軟件開發方法提倡采用先進的技術和高水平的小型團隊,并輔以人性化的管理,充分發揮軟件開發者的才華,建立暢通的交流機制,使軟件開發團隊水平和軟件質量共同提高。
敏捷式開發采用適應性方法,而傳統的軟件工程學采用的是預測性方法。敏捷式開發是以人為主的,而傳統的工程學是以過程為主的。二者的主要區別存在于它們對軟件開發過程的描述中,也就是說,敏捷開發實現當前最需要的功能,然后根據變化來修正和改進;而傳統軟件工程學一開始就將軟件的各種架構預測好,然后采用固定的過程來實現這種架構。軟件開發中的變化是不可避免的(通常傳統軟件開發的失敗主要原因就是不能很好適應這種不可預知的變化),因此就要找到一種新的方法能夠更有效地適應變化,這其實也就是敏捷式開發方法所要達到的效果。
可以看出,上述的敏捷軟件開發的許多特點正是與軟件開發類畢業設計的許多特點不謀而合,例如,小型的開發小組,適應性(適應不可預測變化)的開發機制,短期的交付(畢業設計一般都在半年甚至更短時間內完成軟件的交付),充分發揮小組成員的特點,建立暢通的交流機制等等。因此,將敏捷開發思想引入畢業設計中的軟件開發,不失為解決后者諸多問題的很好嘗試。
2.2 敏捷軟件開發應用 敏捷軟件開發技術包含若干的價值觀、原則和實踐方法。將其用于畢業設計的指導和監控,主要應包含如下原則的應用:
2.2.1 增量式開發
傳統軟件類畢業設計采用傳統軟件工程學指導方法,先進行需求分析,然后根據需求進行功能模塊劃分,接著開始編程。如果最初階段不能很好地完成分析和設計任務,后面的軟件開發將出現嚴重問題。
而在敏捷軟件中,采用的是增量式開發,對于難度較大的軟件設計,不是一步吃透功能,而是逐步添加功能,在改進的過程中促進學生能力的提高。在筆者指導的一項畢業設計中,要求學生用Java編制網絡實時通訊軟件。采用增量式開發方法,先要求學生實現基本功能,即發送字符串到另外一臺計算機,使用Windows的超級終端作為接收機進行測試;接下來要求學生實現程序互相發送和接收字符信息;然后,實現聊天室的多人聊天的線程控制;進一步可以實現數據庫存儲登錄用戶信息,并進行驗證;最后,實現其他功能,例如網絡硬盤,文件傳輸等等。在開發過程中,增量式設計能夠讓學生逐步進入高層次的內容,而不是一開始就進行高難度的開發。并且,通過逐步修改代碼,可以提高學生閱讀代碼和優化代碼的能力,學生的編程水平得到很好的提高。
2.2.2 可持續的開發速度
敏捷開發技術不要求團隊一開始就盡全力完成任務,而是盡量保持一種穩定的、可持續的開發速度;團隊的成員必須始終保持旺盛的精力和警覺的思想。
在很多畢業設計中,一開始學生就以極高的熱情和全力以赴的狀態去工作,然而隨著進度的延緩,錯誤不斷增多,以及越來越復雜的需求變化,學生的熱情迅速減退,最終影響設計成果。因此,指導老師必須充分調動學生的積極性,又不能讓學生的精力過早地消耗,要保持一個穩定的進度。
2.2.3 簡單
敏捷軟件開發方法采用最簡單的方式實現當前最需要的功能。在畢業設計中,針對某一個功能,采用盡量簡單的方式去實現,不需要考慮為了將來的功能而進行“提前的準備”。因為這種“提前的準備”往往會讓學生考慮問題過多,反而忽略了當前最重要的內容。
然而,簡單并不代表著功能的縮減,當某些功能的實現成為必須的時候,敏捷軟件開發方法采用在代碼上改進的方式來完成,并且以此為機遇,充分進行反省,讓學生在改進中得到進一步提高。
2.2.4 結對編程
結對編程是敏捷開發和極限編程(XP)的重要實踐,它是指兩個程序員結對使用同一臺計算機完成編碼——其中一位控制鍵盤并輸入代碼,另一位觀察輸入的代碼并尋找著代碼中的錯誤和可以改進的地方。這種方式能極大地促進知識在團隊中的傳播,并有效降低代碼的錯誤率。
在畢業設計中,根據學生的特點,采用結對編程方式,可以讓學生充分交流,互補所短,互用所長,互相學習。例如,在網頁制作類的軟件開發中,ASP腳本編程人員和界面設計人員結對,能夠充分利用二者的特點,將腳本程序和網頁界面元素有機地結合起來,形成功能完善,界面美觀的動態網頁。
2.2.5 適應改變
敏捷開發的一個重要特點就是它能夠很好地適應改變,并且歡迎改變。這里的改變主要是指功能需求方面的改變。而敏捷開發對改變的適應,主要是通過增量開發,持續交付以及不斷地改進與反省來實現的。
在畢業設計中,設計題目一經給出,主要方向不能變。然而選擇題目的學生是變化的,個體能力有時候有很大差別,并且在開發中會碰到很多不能預知的技術問題。采用敏捷開發中的過程控制手段,可以有效地讓畢業設計小組更好地應對各種變化,不會因為突發因素導致軟件開發的失敗。
2.2.6 個體激勵和交流
畢業設計的重要目的是促進學生各方面能力的提高,采用的手段可以有很多。在敏捷設計中,強調個人能力在團隊中的充分展示。把這種思想應用于畢業設計指導中,可以采取定期召開小型交流會議的方式,讓每一個組員充分發揮自己的能力,以“頭腦風暴”的形式對系統當前狀態和改進方式進行暢所欲言的交談。通過這種形式的交流,能夠充分調動整個小組成員的積極性,及時發現系統開發過程中的各種問題,增強整個小組的凝聚力,有效提高學生的團隊協作能力。
2.2.7 反省
好的團隊并不只是埋頭工作,他們會思考如何工作和為什么工作。在畢業設計指導過程中,指導教師應當在適當的時機提醒學生對開發工作中各項內容進行反省,讓學生能夠有機會去辨別可能或已經發生的錯誤。反省不僅僅是簡單的思考過程,反省的后面應該緊跟著行動,學習是反省的行為,要能夠將錯誤造成的危害盡早地阻止,并從中學習,以免同樣錯誤的再次發生。
2.2.8 其他原則
敏捷軟件開發技術還包含其他一些原則,在設計中包含了面向對象設計的一些基本原則,例如單一職責原則(SRP)、開放一封閉原則(OCP)等等。要將這些設計原則應用到具體的軟件開發中,需要學生熟悉面向對象程序設計的相關概念和技術。
將敏捷軟件開發技術應用到畢業設計的指導過程中,需要指導教師本身對它有較為深刻的理解,并且勇于進行大膽的嘗試一畢竟敏捷開發的很多實踐是與傳統軟件工程學方法相悖的。指導教師可以先在某一門程序設計課的課程設計中采用這種思想,然后進行相應的調整,再將其應用于畢業設計的指導工作。
3 結束語
將敏捷軟件開發技術應用于指導畢業設計,能夠充分適應軟件類畢業設計的特點。在實際采用這種方法對我校的兩組畢業設計小組進行指導的過程中,可以看出,這兩組同學在對語言工具和相關知識不是很熟悉的情況下,采用漸進的方式,逐步實現設計要求的功能,并且不斷對代碼進行改進,軟件完成的質量比其他小組明顯要高。畢業答辯中,小組成員能夠很清晰地闡述其軟件開發進程以及相關知識的學習過程。并且,小組成員通過畢業設計加深了交流,團隊協作能力有了大幅度的提高,小組成員個人的精神面貌也有了較大的改變。