伍永豪 尹朝慶
摘要:介紹工程哲學(xué)和軟件工程教學(xué)融合的可能性,指出軟件工程知識(shí)中的工程哲學(xué)思想,提出改革軟件工程的教學(xué),并將其用于學(xué)生綜合能力的培養(yǎng)中,讓學(xué)生掌握并靈活運(yùn)用軟件工程知識(shí),激發(fā)學(xué)生的想象力和創(chuàng)造力。
關(guān)鍵詞:軟件工程;工程哲學(xué);軟件開發(fā);哲學(xué)思想
0、引言
工程哲學(xué)以工程為研究對(duì)象,它是關(guān)于整個(gè)工程領(lǐng)域的哲學(xué)理論,也是關(guān)于重大工程問(wèn)題和工程共同規(guī)律或一般規(guī)律的哲學(xué)思考。我國(guó)一些專家進(jìn)行了軟件工程學(xué)科的哲學(xué)研究,羅偉剛在《軟件體系結(jié)構(gòu)設(shè)計(jì)原理的哲學(xué)思考》一文中介紹了軟件體系結(jié)構(gòu)的概念以及軟件體系結(jié)構(gòu)中常用的原理,并用自然辯證法中的一些哲學(xué)思想來(lái)說(shuō)明軟件體系結(jié)構(gòu)原理。宋連鵬在《軟件工程與哲學(xué)》一文中從軟件的開發(fā)周期中分析了軟件工程的哲學(xué)思想,但是沒有從軟件工程的整體來(lái)進(jìn)行哲學(xué)思想的探討,也沒有將工程哲學(xué)在軟件工程領(lǐng)域進(jìn)行應(yīng)用研究,因此有一定的研究空白。
從哲學(xué)的視角探討軟件工程的概念與本質(zhì)屬性,將工程哲學(xué)應(yīng)用于軟件工程課程的教學(xué)具有現(xiàn)實(shí)意義。工程哲學(xué)在軟件工程教學(xué)中的應(yīng)用探索研究,既能豐富工程哲學(xué)的理論,也能進(jìn)一步提升軟件工程教學(xué)的質(zhì)量,讓學(xué)生在工程化的思想中得到人文的熏陶。
1、軟件工程教學(xué)中運(yùn)用的工程哲學(xué)思想
1)系統(tǒng)工程思想。
在軟件工程的課程中,要始終把軟件開發(fā)視作一個(gè)整體,從宏觀上把握軟件體系。在軟件開發(fā)的過(guò)程中,注意關(guān)注各個(gè)模塊之間的關(guān)系,全面考慮引起問(wèn)題的各種因素,從系統(tǒng)的角度分析解決問(wèn)題。
2)矛盾論思想。
教學(xué)中會(huì)大量用到矛盾論的取舍,教師在教學(xué)中引入矛盾論,可以加深學(xué)生對(duì)于事物本質(zhì)的把握,知道在實(shí)踐中遇到問(wèn)題時(shí)如何取舍。
3)抽象模型思想。
抽象事物的本質(zhì)是人類具有的一種獨(dú)特能力。我們?cè)谲浖O(shè)計(jì)時(shí),要善于抽象模型,通過(guò)抓主要矛盾抽象事物的本質(zhì),然后具體問(wèn)題具體分析。我們通過(guò)對(duì)事物本質(zhì)的分析,構(gòu)建不同的模型,這樣有利于我們找出事物的潛在規(guī)律,從而解決軟件開發(fā)的實(shí)際問(wèn)題。
4)先整體,后局部的思想。
教師應(yīng)注意教授學(xué)生學(xué)習(xí)方法,當(dāng)面臨較大或者較難問(wèn)題的時(shí)候,要指導(dǎo)學(xué)生善于利用先整體后局部的思想。
5)分層分解和模塊化組裝的思想。
在軟件工程的發(fā)展中,需要學(xué)生能夠?qū)?wèn)題進(jìn)行分解,按照層次結(jié)構(gòu),將復(fù)雜的問(wèn)題通過(guò)分層簡(jiǎn)化,把系統(tǒng)從上而下逐步分解,大問(wèn)題一步步分解成小問(wèn)題。同時(shí),通過(guò)模塊化組裝的思想,把分層以后的模塊集成化組裝,最后合成一個(gè)軟件系統(tǒng)。這種思想在軟件過(guò)程的設(shè)計(jì)中大量存在。
2、工程哲學(xué)在軟件工程應(yīng)用中的意義和應(yīng)用案例
2.1 重要意義
軟件工程作為一門計(jì)算機(jī)專業(yè)的主干課程,除了傳授書本的知識(shí)以外,還需要把一些思考問(wèn)題、處理問(wèn)題的思維方式傳授給學(xué)生。計(jì)算機(jī)是一個(gè)發(fā)展速度非??斓膶W(xué)科,許多技術(shù)從出現(xiàn)到大規(guī)模應(yīng)用往往只需幾個(gè)月,教學(xué)可能遠(yuǎn)遠(yuǎn)滯后于企業(yè)的應(yīng)用技術(shù)。在這樣的大背景下,要求老師在講授軟件工程課程中,重點(diǎn)傳授思想和思維方法。教師在通過(guò)案例教學(xué)等方式讓學(xué)生在學(xué)到知識(shí)的同時(shí),了解軟件的開發(fā)方法,掌握軟件工程的專業(yè)知識(shí),還需要學(xué)生掌握軟件工程所蘊(yùn)含的哲學(xué)思想,使學(xué)生在以后的工程實(shí)踐中能夠運(yùn)用哲學(xué)思想來(lái)解決未來(lái)軟件開發(fā)的實(shí)際問(wèn)題。
(1)學(xué)生掌握軟件工程中的哲學(xué)思想后,能夠進(jìn)一步加深對(duì)軟件工程專業(yè)知識(shí)的理解。由于哲學(xué)是一切學(xué)科的基礎(chǔ)和源頭,我們完全可以相信,如果能夠很好地理解軟件工程所包含的哲學(xué)思想,將更容易使學(xué)生的軟件工程知識(shí)融會(huì)貫通,比如分層分解和模塊化組裝的思想能有利于學(xué)生掌握數(shù)據(jù)流圖模型的構(gòu)建,有利于學(xué)生理解流程圖為什么用一組圖去代替一張圖的方式,讓學(xué)生很好地體會(huì)分層和組合的概念。
(2)學(xué)生掌握軟件工程中的哲學(xué)思想后,能學(xué)會(huì)靈活地處理問(wèn)題,知道利用矛盾論等方法實(shí)事求是地解決實(shí)際問(wèn)題。學(xué)好軟件工程中的工程哲學(xué)理論,有利于學(xué)生在面臨矛盾問(wèn)題時(shí)明白“過(guò)猶不及”的道理,在實(shí)踐中把握度,通過(guò)掌握軟件工程的工具和方法,利用模型方式構(gòu)建現(xiàn)實(shí)世界的邏輯模型,并利用抽象和分層的思想去簡(jiǎn)化現(xiàn)實(shí)世界模型化的難度,最終實(shí)現(xiàn)軟件的設(shè)計(jì)。
(3)學(xué)生掌握軟件工程中的哲學(xué)思想后,能激發(fā)學(xué)生的想象力和創(chuàng)造力,促使學(xué)生主動(dòng)探索新知識(shí)。軟件工程是一門發(fā)展中的學(xué)科,只有不斷地創(chuàng)新才能跟上IT行業(yè)的發(fā)展。軟件工程是許多工程經(jīng)驗(yàn)的總結(jié),隨著計(jì)算機(jī)新技術(shù)的大量運(yùn)用和移動(dòng)互聯(lián)網(wǎng)的飛速發(fā)展,知識(shí)的更新速度不斷加快,我們要通過(guò)開展工程哲學(xué)在軟件工程課程教學(xué)中應(yīng)用探索促使學(xué)生知道自己的不足,努力學(xué)習(xí)新知識(shí),應(yīng)用實(shí)踐軟件工程的理論,同時(shí)總結(jié)自己的經(jīng)驗(yàn)來(lái)提升軟件工程學(xué)科的內(nèi)涵,為促進(jìn)軟件工程學(xué)科的發(fā)展貢獻(xiàn)自己的力量。
2.2 工程哲學(xué)理論在軟件工程教學(xué)中的應(yīng)用案例
2.2.1 系統(tǒng)工程思想在教學(xué)中的應(yīng)用
在講解系統(tǒng)的設(shè)計(jì)部分時(shí),我們首先必須均衡各個(gè)模塊之間的關(guān)系,綜合考慮系統(tǒng)的各類影響因素,并根據(jù)劃分階段,按照一定的順序組織開發(fā),在實(shí)際操作中可能存在部分迭代的過(guò)程,但是總體會(huì)按照模型規(guī)定步驟逐步推進(jìn)。在軟件工程的教學(xué)中,我們要注意合理運(yùn)用系統(tǒng)工程的實(shí)現(xiàn),讓學(xué)生掌握從宏觀著手去思考軟件的開發(fā)過(guò)程,合理運(yùn)用軟件開發(fā)模型,綜合考慮軟件開發(fā)的各種因素。比如學(xué)生在課程設(shè)計(jì)中容易犯直接編碼的錯(cuò)誤,如果沒有設(shè)計(jì)而直接編碼,當(dāng)開發(fā)過(guò)程中引入新的需求的時(shí)候,就需要重新返工,這種重復(fù)工作在課程設(shè)計(jì)中比比皆是。
2.2.2 矛盾論思想在教學(xué)中的應(yīng)用
在軟件需求分析階段,我們講解傳統(tǒng)的需求數(shù)據(jù)模型,提到E-R圖的五范式。在數(shù)據(jù)庫(kù)設(shè)計(jì)中,第五范式從設(shè)計(jì)的角度來(lái)講是最好的設(shè)計(jì),但是它也有弊病,范式級(jí)別越高,存儲(chǔ)同樣數(shù)據(jù)就需要分解成更多張表,“存儲(chǔ)自身”的過(guò)程也就越復(fù)雜。隨著范式級(jí)別的提高,數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)與基于問(wèn)題域的結(jié)構(gòu)間的匹配程度也隨之下降,因此,當(dāng)需求產(chǎn)生變化時(shí),數(shù)據(jù)的穩(wěn)定性較差。范式級(jí)別提高則需要訪問(wèn)的表增多,因此性能(速度)將下降。從實(shí)用角度來(lái)看,在大多數(shù)場(chǎng)合選用第三范式比較恰當(dāng),這個(gè)就是典型矛盾論的選擇。在講解到模塊化時(shí),我們指出模塊化就是把程序劃分成獨(dú)立命名且可獨(dú)立訪問(wèn)的模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊集成起來(lái)構(gòu)成一個(gè)整體,可以完成指定的功能從而滿足用戶的需求,這樣的設(shè)計(jì)并不是模塊化越小越好,當(dāng)模塊小到一定程度時(shí),單個(gè)模塊的成本會(huì)降低,但是模塊間接口成本會(huì)上升,因此要求設(shè)計(jì)者能夠在矛盾論的指導(dǎo)下,選擇最合理的平衡點(diǎn),根據(jù)不同的情況、不同的項(xiàng)目具體問(wèn)題具體分析。endprint
2.2.3 抽象模型思想在教學(xué)中的應(yīng)用
在講解軟件需求時(shí),我們通過(guò)構(gòu)建數(shù)據(jù)模型來(lái)分析系統(tǒng)的靜態(tài)數(shù)據(jù),通過(guò)數(shù)據(jù)流圖來(lái)完成系統(tǒng)的功能模型的設(shè)計(jì),通過(guò)狀態(tài)圖來(lái)完成系統(tǒng)行為模型的構(gòu)建,善于利用模型能夠大大節(jié)約我們的需求獲取時(shí)間,提升軟件設(shè)計(jì)的效率。在傳統(tǒng)的模型基礎(chǔ)上,軟件開發(fā)過(guò)程進(jìn)化到面向?qū)ο蟮臅r(shí)代,在這個(gè)時(shí)代,通過(guò)類模型的構(gòu)建,進(jìn)一步接近人類的思維,更加有利于軟件需求分析師觸及系統(tǒng)的本質(zhì)模型。
在軟件的設(shè)計(jì)階段,統(tǒng)一建模語(yǔ)言(UML)的出現(xiàn),使得系統(tǒng)的模型搭建更加容易,這種圖形化的建模語(yǔ)言,非常便于系統(tǒng)分析員和目標(biāo)用戶的需求交流,通過(guò)圖形化的方式能夠?qū)崿F(xiàn)無(wú)障礙溝通,大大提升了需求分析的效能。同時(shí),由于面向?qū)ο箝_發(fā)方法的持續(xù)性和無(wú)間隙,進(jìn)一步提升了軟件開發(fā)的效率。
2.2.4 先整體,后局部的思想在教學(xué)中的應(yīng)用
講解軟件設(shè)計(jì)時(shí),需要設(shè)計(jì)者能夠從宏觀上把握系統(tǒng),只有這樣才能很好地解決系統(tǒng)的構(gòu)架問(wèn)題。一個(gè)好的構(gòu)架能夠起到事半功倍的作用,通過(guò)滯后解決問(wèn)題的方式,降低系統(tǒng)的開發(fā)難度,把大問(wèn)題分解成小問(wèn)題,然后各個(gè)擊破,這樣能降低系統(tǒng)的開發(fā)難度,減少系統(tǒng)開發(fā)失敗的幾率。在傳統(tǒng)軟件設(shè)計(jì)方法中,經(jīng)常將軟件的設(shè)計(jì)階段劃分為總體設(shè)計(jì)和詳細(xì)設(shè)計(jì),既關(guān)注宏觀也關(guān)注微觀,通過(guò)分步處理的方式來(lái)解決大問(wèn)題??傮w設(shè)計(jì)主要考慮系統(tǒng)各個(gè)模塊之間的結(jié)構(gòu),不去考慮模塊中算法的具體實(shí)施。在詳細(xì)設(shè)計(jì)階段,設(shè)計(jì)者主要考慮模塊內(nèi)部的實(shí)現(xiàn)機(jī)制,當(dāng)模塊設(shè)計(jì)完成的時(shí)候,整個(gè)系統(tǒng)的設(shè)計(jì)也就完成了。
2.2.5 分層分解和模塊化組裝的思想在教學(xué)中的應(yīng)用
在軟件流程圖模型的構(gòu)建中,我們通過(guò)一張高層次的系統(tǒng)流程圖總體描述軟件系統(tǒng)的概況和軟件將提供的關(guān)鍵功能,然后分步驟逐步細(xì)化功能,最后畫在單獨(dú)的一頁(yè)紙上。流程圖模型通過(guò)分層次、分步驟的方法描述目標(biāo)系統(tǒng),這樣的方式有利于閱讀者逐步深入地了解一個(gè)復(fù)雜的系統(tǒng)。
在軟件工程開發(fā)模型中,可以將軟件劃分成一個(gè)個(gè)可重用的軟件成分,通過(guò)提升構(gòu)件的可復(fù)用性來(lái)降低軟件開發(fā)的成本,IBM公司就是通過(guò)構(gòu)建軟件構(gòu)件庫(kù)的方式來(lái)完成對(duì)全球客戶的定制化服務(wù)。這種組裝的思想其實(shí)借鑒了其他行業(yè)的知識(shí),把軟件設(shè)計(jì)變成了和硬件生產(chǎn)一樣的流水線式生產(chǎn)模式,這種思想歸根到底就是分層分解和模塊化組裝思想的體現(xiàn)。
2.3 軟件工程教學(xué)的建議
(1)在軟件工程課程的教學(xué)中,不能只局限于課本知識(shí)。軟件工程課程是實(shí)踐的理論,需要通過(guò)案例的方式將工程哲學(xué)的理論融入課堂,在傳授專業(yè)知識(shí)的同時(shí),傳授哲學(xué)的知識(shí),通過(guò)案例講解讓學(xué)生明白哪些地方是工程哲學(xué)在軟件工程中的應(yīng)用,讓學(xué)生知其然,知其所以然。在講解一些具有代表性的哲學(xué)理論的時(shí)候,老師要講透。
(2)由于工程哲學(xué)在軟件工程教學(xué)的應(yīng)用屬于研究范疇,目前教材配套的習(xí)題基本沒有涉及這個(gè)領(lǐng)域,要求老師能夠設(shè)計(jì)一些開放型思維的題目,讓學(xué)生完成作業(yè)的時(shí)候開動(dòng)腦筋去思索,通過(guò)習(xí)題的方式鞏固所學(xué)知識(shí),加深對(duì)知識(shí)的理解。
(3)教師帶領(lǐng)學(xué)生參與工程實(shí)踐,通過(guò)課程設(shè)計(jì),上崗實(shí)習(xí)等方式讓學(xué)生去參與實(shí)際項(xiàng)目,提升學(xué)生的動(dòng)手能力,讓學(xué)生在實(shí)踐中學(xué)習(xí)。在軟件開發(fā)的實(shí)踐中,學(xué)生會(huì)提高獨(dú)立處理問(wèn)題的能力,也將有機(jī)會(huì)在實(shí)踐過(guò)程中面對(duì)文中提到的哲學(xué)思想,這樣更能加深學(xué)生對(duì)課程的理解,鍛煉學(xué)生運(yùn)用所學(xué)的哲學(xué)思想解決問(wèn)題。
(4)通過(guò)邀請(qǐng)哲學(xué)老師來(lái)有針對(duì)性地給學(xué)生講解一些基本的哲學(xué)思想,讓學(xué)生通過(guò)課外講座的方式了解其他學(xué)科情況,彌補(bǔ)老師在教學(xué)中可能存在的對(duì)于哲學(xué)領(lǐng)域本身的不理解造成的誤讀,進(jìn)一步擴(kuò)寬學(xué)生的知識(shí)面。
3、結(jié)語(yǔ)
軟件工程是工程學(xué)在軟件行業(yè)的應(yīng)用,它在一定程度上具有工程學(xué)的很多共性,軟件工程是解決軟件開發(fā)過(guò)程的所有理論成果的概括和總結(jié),是關(guān)于對(duì)軟件重大工程問(wèn)題和工程共同規(guī)律或一般規(guī)律的總結(jié)思考。從哲學(xué)的視角探討工程哲學(xué)在軟件工程教學(xué)中的應(yīng)用探索,既能豐富工程哲學(xué)的理論,也能進(jìn)一步提升工程哲學(xué)的實(shí)際應(yīng)用。endprint