摘 要:近年來(lái),隨著社會(huì)經(jīng)濟(jì)的發(fā)展,人們對(duì)高素質(zhì)的軟件人才的需求越來(lái)越旺盛,軟件人才的培養(yǎng)變的尤為重要。同時(shí),出現(xiàn)了許多先進(jìn)的軟件人才培養(yǎng)模式和方法,有力地推動(dòng)了軟件工程學(xué)科的發(fā)展。本文嘗試用哲學(xué)的觀點(diǎn)和原理來(lái)理解軟件工程中的基本技術(shù)和方法,通過(guò)對(duì)軟件工程中幾個(gè)重要知識(shí)點(diǎn)的哲學(xué)分析,使枯燥的軟件工程理論變得通俗易懂、深入淺出。提出了一種以哲學(xué)的觀點(diǎn)來(lái)理解軟件工程的新思想。
關(guān)鍵詞:軟件工程;哲學(xué);人才培養(yǎng)模式
中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A
1 引言(Introduction)
軟件工程,英文名Software Engineering,是一門(mén)研究用工程化方法構(gòu)建和維護(hù)有效的、實(shí)用的和高質(zhì)量的軟件的學(xué)科[1]。軟件產(chǎn)業(yè)的發(fā)展水平,決定了一個(gè)國(guó)家的信息產(chǎn)業(yè)發(fā)展水平及其在國(guó)際市場(chǎng)上的綜合競(jìng)爭(zhēng)力。目前,我國(guó)軟件高級(jí)人才的短缺已經(jīng)成為制約我國(guó)軟件產(chǎn)業(yè)快速發(fā)展的一個(gè)瓶頸。在中國(guó),國(guó)內(nèi)市場(chǎng)對(duì)軟件人才的需求每年高達(dá)80萬(wàn)人,而高校計(jì)算機(jī)畢業(yè)生中的軟件工程人才還很缺乏,尤其是高素質(zhì)的軟件工程人才的極度短缺。盡快培養(yǎng)起適合信息產(chǎn)業(yè)所需要的高素質(zhì)軟件工程人才,已經(jīng)成為信息化工作中的重中之重。
哲學(xué),社會(huì)意識(shí)形態(tài)之一,是關(guān)于世界觀的學(xué)說(shuō)[2]。是理論化、系統(tǒng)化的世界觀,是自然知識(shí)、社會(huì)知識(shí)、思維知識(shí)的概括和總結(jié),是世界觀和方法論的統(tǒng)一。是社會(huì)意識(shí)的具體存在和表現(xiàn)形式,是以追求世界的本源、本質(zhì)、共性或絕對(duì)、終極的形而上者為形式,以確立哲學(xué)世界觀和方法論為內(nèi)容的社會(huì)科學(xué)。愛(ài)因斯坦這樣談?wù)撜軐W(xué):如果把哲學(xué)理解為在最普遍和最廣泛的形式中對(duì)知識(shí)的追求,那么,哲學(xué)顯然就可以被認(rèn)為是全部科學(xué)之母。馬克思也說(shuō)過(guò):真正的哲學(xué)是時(shí)代精神的精華。
馬克思主義哲學(xué)與具體科學(xué)是一般與個(gè)別的關(guān)系,二者之間存在著既相互區(qū)別又相互聯(lián)系的辯證統(tǒng)一關(guān)系。它們之間的區(qū)別表現(xiàn)在:具體科學(xué)以世界某一特殊領(lǐng)域的具體規(guī)律為自己的研究對(duì)象,因而其理論具有個(gè)別性和特殊性;馬克思主義哲學(xué)以包括自然、社會(huì)和人類思維在內(nèi)的整個(gè)世界的最一般規(guī)律作為自己的研究對(duì)象,因而其理論具有一般性和普遍性。它們之間的聯(lián)系表現(xiàn)在:一方面,馬克思主義哲學(xué)以具體科學(xué)為基礎(chǔ),沒(méi)有具體科學(xué)的發(fā)展,馬克思主義哲學(xué)既不可能產(chǎn)生,也不可能發(fā)展;另一方面,具體科學(xué)以馬克思主義哲學(xué)為指導(dǎo),馬克思主義哲學(xué)為具體科學(xué)的研究提供正確的世界觀和方法論。
2 分層DFD體現(xiàn)了抽象和分解的關(guān)系(Hierarchical
DFD embodies the relation between abstraction
and decomposition)
抽象和分解是兩種相互區(qū)別又相互聯(lián)系的思維方式。所謂分解,就是面向高層對(duì)其按某種方式從思維、邏輯或功能上進(jìn)行分解,使其一分為幾個(gè)相對(duì)獨(dú)立的模塊。所謂抽象,是面向底層,隱藏低層的各種差異和復(fù)雜實(shí)現(xiàn),向高層提供一個(gè)統(tǒng)一的平臺(tái)或接口。在生活中,這種分解與抽象的概念也革新了我們的思維習(xí)慣。面對(duì)一個(gè)問(wèn)題,我們現(xiàn)在的習(xí)慣是,把它化成一個(gè)個(gè)小的整體,再分而治之,再歸納總結(jié),找出其中的共性。或者先從一個(gè)基本內(nèi)核做起,再層層抽象擴(kuò)展,最終達(dá)到自己的目標(biāo)。
抽象是指忽略一個(gè)問(wèn)題中與當(dāng)前目標(biāo)無(wú)關(guān)的那些方面,以便更充分地關(guān)注與當(dāng)前目標(biāo)有關(guān)的方面。在求解一個(gè)復(fù)雜問(wèn)題時(shí),可以有許多抽象級(jí)別。例如,欲用計(jì)算機(jī)解決一個(gè)復(fù)雜的應(yīng)用問(wèn)題,開(kāi)發(fā)人員首先將該應(yīng)用問(wèn)題抽象成一個(gè)計(jì)算機(jī)軟件系統(tǒng)。在這個(gè)抽象層次上,可以忽略應(yīng)用問(wèn)題內(nèi)部的復(fù)雜性,只關(guān)注整個(gè)軟件系統(tǒng)與外界的聯(lián)系,即軟件系統(tǒng)的輸入和輸出。然后,將這個(gè)大而復(fù)雜的問(wèn)題分解成若干個(gè)較小的問(wèn)題(如子系統(tǒng)或功能),每個(gè)較小的問(wèn)題又可分解成若干個(gè)更小的問(wèn)題(如功能或子系統(tǒng))。如此自頂向下一層一層地分解下去,直到每個(gè)最底層的問(wèn)題都足夠簡(jiǎn)單為止。這樣,一個(gè)復(fù)雜的問(wèn)題也就迎刃而解了。自頂向下逐層分解充分體現(xiàn)了分解和抽象的原則。隨著分解層數(shù)的增加,抽象級(jí)別也越來(lái)越低,即越接近問(wèn)題的解。自頂向下的過(guò)程是分解的過(guò)程,自底向上的過(guò)程是抽象的過(guò)程。
功能建模的思想就是用抽象模型的概念,按照軟件內(nèi)部數(shù)據(jù)傳遞、變換的關(guān)系,自頂向下逐層分解,直到找到滿足功能要求的所有可實(shí)現(xiàn)的軟件為止[3]。功能模型用數(shù)據(jù)流圖來(lái)描述。對(duì)于稍微復(fù)雜一些的實(shí)際問(wèn)題,在數(shù)據(jù)流圖上常常出現(xiàn)十幾個(gè)甚至幾十個(gè)加工,這樣的數(shù)據(jù)流圖看起來(lái)不直觀,不易理解,分層的數(shù)據(jù)流圖能很好地解決這一問(wèn)題。按照系統(tǒng)的層次結(jié)構(gòu)進(jìn)行逐步分解,并以分層的數(shù)據(jù)流圖反映這種結(jié)構(gòu)關(guān)系,能清楚地表達(dá)和容易理解整個(gè)系統(tǒng)。圖1為數(shù)據(jù)流圖的分層示意圖。對(duì)頂層數(shù)據(jù)流圖中所表示的系統(tǒng)進(jìn)行功能分解得到一層數(shù)據(jù)流圖,對(duì)一層數(shù)據(jù)流圖中的功能進(jìn)一步分解得到二層數(shù)據(jù)流圖,以此類推。
3 分級(jí)表示的CMMI與量變質(zhì)變規(guī)律(The
hierarchical representation of CMMI and the
quantitative and qualitative rhythms)
世界上任何事物都是質(zhì)與量的矛盾統(tǒng)一體,而一切事物又總是處于不斷的運(yùn)動(dòng)、變化和發(fā)展的狀態(tài)中。因此,事物的發(fā)展、變化必然呈現(xiàn)出量變和質(zhì)變兩種狀態(tài)[4]。量變轉(zhuǎn)化為質(zhì)變,質(zhì)變又引起新的量變,如此循環(huán)往復(fù)以至無(wú)窮,把事物推向前進(jìn),這就是事物發(fā)展的一般過(guò)程。
所謂量變就是事物量的規(guī)定性的變化。包括事物在數(shù)量上的增減以及各個(gè)組成成分在空間排列次序上的變化、程度的加強(qiáng)或削弱、結(jié)構(gòu)的復(fù)雜或簡(jiǎn)單、個(gè)別屬性的變化等等。凡是沒(méi)有引起事物根本性質(zhì)改變的一切變化都是量變。量變和質(zhì)變是對(duì)立的范疇,量變就是非質(zhì)變。所謂質(zhì)變就是事物質(zhì)的規(guī)定性的變化,是事物根本性質(zhì)的變化,是漸進(jìn)過(guò)程的中斷,是由一種質(zhì)態(tài)向另一種質(zhì)態(tài)的轉(zhuǎn)化。
量變和質(zhì)變的辯證關(guān)系:①任何事物的變化總是在一定質(zhì)的基礎(chǔ)上先從量變開(kāi)始的。②量變積累到一定程度必然引起質(zhì)變。量變是質(zhì)變的必要準(zhǔn)備,質(zhì)變是量變的必然結(jié)果。③質(zhì)變又會(huì)引起新的量變。一方面,質(zhì)變體現(xiàn)著量變的結(jié)果;另一方面,質(zhì)變又為新的量變開(kāi)辟道路。④量變可以轉(zhuǎn)化為質(zhì)變,質(zhì)變又可以轉(zhuǎn)化為量變。如此循環(huán)往復(fù),以至無(wú)窮,體現(xiàn)著事物的永恒的變化和發(fā)展。
分級(jí)表示的成熟度等級(jí)(Maturity Level,ML)給出了軟件組織按規(guī)定的過(guò)程改進(jìn)如何從成熟度低的等級(jí)逐步向更高的等級(jí)發(fā)展[5],共有五個(gè)組織成熟度等級(jí),這些等級(jí)如圖2所示。五個(gè)等級(jí)均規(guī)定了所包含的過(guò)程域(Process Area,PA)。
分級(jí)表示為實(shí)施過(guò)程改進(jìn)的組織規(guī)定了既定的軟件能力成熟度提升的路徑,即從初始級(jí)開(kāi)始逐級(jí)提升。而每個(gè)等級(jí)均規(guī)定了相關(guān)的一組過(guò)程域,如圖3所示。圖中除第一級(jí)以外,每個(gè)等級(jí)上給出了每一組過(guò)程域名稱的英文字縮寫(xiě)。
軟件組織按CMMI分級(jí)表示規(guī)定的成熟度等級(jí),逐級(jí)攀登就能從低級(jí)到高級(jí)一步步地成熟起來(lái)。每一個(gè)等級(jí)都要經(jīng)歷量變到質(zhì)變的過(guò)程,每個(gè)等級(jí)包含多個(gè)過(guò)程域,每完成一個(gè)過(guò)程域都是量變的積累,完成一個(gè)等級(jí)的所有過(guò)程域就達(dá)到了質(zhì)變的臨界點(diǎn)。軟件組織的軟件開(kāi)發(fā)能力就躍升了一個(gè)級(jí)別,又在一個(gè)新的高度開(kāi)始了量變的積累。
事物的發(fā)展是從低級(jí)到高級(jí)、簡(jiǎn)單到復(fù)雜的新陳代謝的過(guò)程;是由低層次的平衡逐步上升為高層次的平衡的過(guò)程。事物的運(yùn)動(dòng)平衡有低層次的平衡和高層次的平衡之分,實(shí)現(xiàn)由低層次的平衡組合向高層次的平衡組合轉(zhuǎn)化過(guò)程就是事物的發(fā)展過(guò)程。在這個(gè)轉(zhuǎn)化過(guò)程中,事物先由低層次的平衡→不平衡(某一方面進(jìn)步了、或某一部分突破了)→高一層次的平衡(其余方面的遞進(jìn)的相互跟上)→再到不平衡→……更高層次的平衡。
4 黑盒測(cè)試中的因果圖方法與原因和結(jié)果的辯證
關(guān)系(Causality diagram in black box testing and
the dialectical relationship between the cause and
the effect)
原因和結(jié)果是揭示事物的前后相繼、彼此制約的關(guān)系范疇??陀^世界到處都存在著引起與被引起的普遍關(guān)系,唯物辯證法把這種引起與被引起的關(guān)系,稱為因果關(guān)系或因果聯(lián)系。其中,引起某一種現(xiàn)象的現(xiàn)象叫做原因,而被某種現(xiàn)象所引起的現(xiàn)象叫做結(jié)果。
原因和結(jié)果之間的關(guān)系是既對(duì)立又統(tǒng)一的關(guān)系[6]。首先,原因和結(jié)果是對(duì)立的。在具體的因果聯(lián)系中,原因就是原因,結(jié)果就是結(jié)果,二者不能混淆和顛倒。這是原因和結(jié)果區(qū)別的確定性。其次,原因和結(jié)果又是統(tǒng)一的,表現(xiàn)在:第一,原因和結(jié)果是相互依存的。第二,原因和結(jié)果在一定條件下相互轉(zhuǎn)化。第三,原因和結(jié)果是相互作用的。
任何事物都處于因果聯(lián)系之中,原因和結(jié)果既嚴(yán)格區(qū)別,又密切聯(lián)系;因果聯(lián)系具有普遍性、客觀性。這就要求我們?cè)谡J(rèn)識(shí)事物時(shí),既要看到它的產(chǎn)生是有客觀原因的,又要看到它還會(huì)引起一定的結(jié)果。承認(rèn)因果聯(lián)系的普遍性和客觀性,是人們正確認(rèn)識(shí)事物,進(jìn)行科學(xué)研究的前提;正確把握事物的因果聯(lián)系,才能提高人們實(shí)踐活動(dòng)的自覺(jué)性和預(yù)見(jiàn)性。只有找出某一事物或現(xiàn)象產(chǎn)生的原因,才能認(rèn)識(shí)其本質(zhì)和規(guī)律,提出解決問(wèn)題的有效方法。
因果圖方法是一種幫助人們系統(tǒng)地選擇一組高效測(cè)試用例的方法,它既考慮了輸入條件的組合關(guān)系,又考慮了輸出條件對(duì)輸入條件的依賴關(guān)系,即因果關(guān)系,其測(cè)試用例發(fā)現(xiàn)錯(cuò)誤的效率比較高[7]。
用因果圖設(shè)計(jì)測(cè)試用例的步驟:
(1)分割功能說(shuō)明書(shū)。
將輸入條件分成若干組,然后分別對(duì)每個(gè)組使用因果圖,這樣可減少輸入條件組合的數(shù)目。
(2)識(shí)別“原因”和“結(jié)果”,并加以編號(hào)。
“原因”是指輸入條件或輸入條件的等價(jià)類;“結(jié)果”是指輸出條件或系統(tǒng)變換。每個(gè)原因和結(jié)果都對(duì)應(yīng)于因果圖中的一個(gè)結(jié)點(diǎn),當(dāng)原因或結(jié)果成立(或出現(xiàn))時(shí),相應(yīng)的結(jié)點(diǎn)的值為1,否則為0。
(3)根據(jù)功能說(shuō)明中規(guī)定的原因與結(jié)果之間的關(guān)系畫(huà)出因果圖。
圖中左邊的結(jié)點(diǎn)表示原因,右邊的結(jié)點(diǎn)表示結(jié)果。畫(huà)因果圖時(shí)原因在左,結(jié)果在右,由上向下排列,并根據(jù)功能說(shuō)明中規(guī)定的原因和結(jié)果之間的關(guān)系,用上述符號(hào)連接起來(lái)。必要時(shí)還可以引入一些中間結(jié)點(diǎn)。
(4)根據(jù)功能說(shuō)明在因果圖中加上約束條件。
由于原因②與③,④與⑤不能同時(shí)發(fā)生,分別加上約束條件E。
(5)根據(jù)因果圖畫(huà)出判定表。
列出滿足約束條件的所有原因組合,寫(xiě)出每種原因組合下的結(jié)果(如有的話)。
(6)為判定表的每一列設(shè)計(jì)一個(gè)測(cè)試用例。
圖4為飲料自動(dòng)售貨機(jī)因果圖,表1為節(jié)點(diǎn)含義,表2:由因果圖畫(huà)出的判定表。圖中陰影部分表示不可能出現(xiàn)的原因條件組合,此外當(dāng)原因②、③、④、⑤均為0時(shí),表示既沒(méi)有投硬幣也沒(méi)有押按鈕,此時(shí)表示售貨機(jī)處于無(wú)人使用狀態(tài),因此也不必為它們?cè)O(shè)計(jì)測(cè)試用例。
5 項(xiàng)目管理的本質(zhì)與聯(lián)系的普遍性原理(The
essence of project management and the general
principle of contact)
所謂聯(lián)系,就是事物之間以及事物內(nèi)部諸要素之間的相互影響、相互制約和相互作用。聯(lián)系是普遍的。世界上一切事物都與周?chē)渌挛镉兄@樣或那樣的聯(lián)系[8]。世界是一個(gè)普遍聯(lián)系的有機(jī)整體,是一幅由種種聯(lián)系交織起來(lái)的豐富多彩的畫(huà)面,其中沒(méi)有一個(gè)事物是孤立存在的。聯(lián)系的普遍性原理要求我們要用聯(lián)系的觀點(diǎn)看問(wèn)題,既要看到事物之間的聯(lián)系,又要看到事物內(nèi)部諸要素之間的聯(lián)系。
項(xiàng)目管理的目標(biāo),就是以最小的代價(jià)(成本和資源)最大限度地滿足軟件用戶或客戶的需求和期望,也就是協(xié)調(diào)好質(zhì)量、任務(wù)、成本和進(jìn)度等要素相互之間的沖突,獲取平衡。概況地說(shuō),項(xiàng)目管理的本質(zhì),就是在保證質(zhì)量的前提下,尋求任務(wù)、時(shí)間和成本三者之間的最佳平衡[9],如圖5所示。
項(xiàng)目三要素:任務(wù)、時(shí)間和成本之間是相互影響、相互制約和相互作用的關(guān)系。在一個(gè)項(xiàng)目中,一般說(shuō)任務(wù)、時(shí)間和成本中的某項(xiàng)是確定的,其他兩項(xiàng)是可變的。這樣,我們就可控制不變項(xiàng),對(duì)可變項(xiàng)采取措施,保證項(xiàng)目達(dá)到預(yù)期效果。例如,產(chǎn)品質(zhì)量是不變的,要有足夠的時(shí)間和成本投入去保證產(chǎn)品的質(zhì)量。但同時(shí)市場(chǎng)決定產(chǎn)品,時(shí)間受到嚴(yán)格限制,這時(shí),如果要保證產(chǎn)品的功能得到完整的實(shí)現(xiàn),就必須有足夠的成本投入(人力資源、硬件資源等)。如果成本也受到限制,就不得不減少功能,實(shí)現(xiàn)產(chǎn)品的主要功能。
6 結(jié)論(Conclusion)
軟件工程知識(shí)中蘊(yùn)涵了豐富的哲學(xué)思想,讓學(xué)生掌握這些哲學(xué)思想,對(duì)學(xué)生深刻理解并靈活運(yùn)用軟件工程知識(shí),激發(fā)學(xué)生的想象力和創(chuàng)造力,意義重大[10]。本文采擷了軟件工程理論中一些簡(jiǎn)單的現(xiàn)象進(jìn)行哲學(xué)分析,旨在幫助大家進(jìn)一步理解軟件工程理論的思想精髓。其實(shí)軟件工程中許多現(xiàn)象都和哲學(xué)思想相關(guān),如:軟件設(shè)計(jì)方法的改變中體現(xiàn)了唯物辯證法中發(fā)展的觀點(diǎn)。大型軟件開(kāi)發(fā)過(guò)程中資金、開(kāi)發(fā)時(shí)間、開(kāi)發(fā)人員之間的辯證聯(lián)系。需求設(shè)計(jì)和具體編碼是原因和結(jié)果的辯證關(guān)系。軟件維護(hù)過(guò)程中體現(xiàn)矛盾的斗爭(zhēng)性。軟件功能和底層代碼之間是現(xiàn)象和本質(zhì)的關(guān)系等等。這些都將是下一步研究的重點(diǎn)目標(biāo)。從哲學(xué)的角度講,人們更希望用軟件工程理論來(lái)改造世界而不僅僅是認(rèn)識(shí)世界。
參考文獻(xiàn)(References)
[1] 齊治昌,譚慶平,寧洪.軟件工程[M].北京:高等教育出版社,
2004.
[2] 陳先達(dá),楊耕.馬克思主義哲學(xué)原理[M].北京:中國(guó)人民大學(xué)出
版社,2010.
[3] 毋國(guó)慶.軟件需求工程[M].北京:機(jī)械工業(yè)出版社,2008.
[4] 郭貴春.自然辯證法概論[M].北京:高等教育出版社,2013.
[5] 張海藩.軟件工程[M].北京:清華大學(xué)出版社,2010.
[6] 王三可.馬克思主義哲學(xué)教程[M].西安:陜西人民出版社,2013.
[7] 錢(qián)樂(lè)秋,趙文耘,牛軍鈺.軟件工程[M].北京:清華大學(xué)出版社,
2007.
[8] 喬斯坦·賈德.蘇菲的世界[M].北京:作家出版社,2007.
[9] 肖來(lái)元.軟件項(xiàng)目管理與案例分析[M].北京:清華大學(xué)出版社,
2012.
[10] 高禹,馮相忠.軟件工程中的哲學(xué)思想[J].高等理科教育,2008
(4):17-20.
作者簡(jiǎn)介:
王中華(1976-),男,碩士,講師.研究領(lǐng)域:Petri網(wǎng)理論及
應(yīng)用,軟件工程.
汪文彬(1969-),男,碩士,副教授.研究領(lǐng)域:算法分析.