崔亞婷
說(shuō)到軟件工程,想必大家不是很熟悉,那么軟件我想大家一定很熟悉的。想要了解什么是軟件工程,我們就先要了解什么是軟件。
軟件可以說(shuō)在我們的生活中無(wú)處不在,我們的生活現(xiàn)在也離不開(kāi)軟件。計(jì)算機(jī)軟件的概念隨著計(jì)算機(jī)技術(shù)的發(fā)展而發(fā)展。計(jì)算機(jī)發(fā)展初期,軟件就是程序,也就是計(jì)算機(jī)可以識(shí)別的源代碼或機(jī)器可直接執(zhí)行的代碼。隨著計(jì)算機(jī)的發(fā)展,人們也漸漸認(rèn)識(shí)的高質(zhì)量的軟件會(huì)使計(jì)算機(jī)系統(tǒng)的功能和效率大大提高,軟件日益復(fù)雜,規(guī)模日益增大,人們開(kāi)始認(rèn)識(shí)到軟件并不等于程序。全面地講,軟件由三部分組成,分別是:計(jì)算機(jī)程序、數(shù)據(jù)和軟件文檔。
那么下面我們來(lái)詳細(xì)看一下這三大部分。
1.計(jì)算機(jī)程序,就是人們?yōu)榱送瓿商囟ǖ墓δ芏冑|(zhì)的一組指令集,由程序設(shè)計(jì)語(yǔ)言所描述的、能為計(jì)算機(jī)所識(shí)別、理解和處理的語(yǔ)句序列。目前程序設(shè)計(jì)語(yǔ)言主要有幾種類型。面向機(jī)器:如匯編語(yǔ)言、機(jī)器語(yǔ)言等;面向過(guò)程:如Fortran,Pascal,C等等;面向?qū)ο螅喝鏙ava等等;面向問(wèn)題:如結(jié)構(gòu)化查詢語(yǔ)言SQL等等。
2.數(shù)據(jù),就是程序能處理的具有一定數(shù)據(jù)結(jié)構(gòu)的信息。
3.軟件文檔,是與程序的開(kāi)發(fā)、維護(hù)和使用有關(guān)的圖文資料,記錄軟件開(kāi)發(fā)活動(dòng)和階段性成果、理解軟件所必須的闡述性資料需求分析文檔、軟件設(shè)計(jì)文檔、用戶文檔等。編寫文檔有什么作用呢?第一可以促進(jìn)對(duì)軟件的開(kāi)發(fā),管理和維護(hù);第二便于各種人員(用戶,開(kāi)發(fā)人員)的交流。
既然我們知道了什么是軟件,那我們經(jīng)常使用的軟件有什么特點(diǎn)呢?與硬件相比,計(jì)算機(jī)軟件具有以下一些特點(diǎn)。
1.軟件是抽象的。計(jì)算機(jī)硬件是實(shí)物產(chǎn)品,具有明顯的可見(jiàn)性。但是我們無(wú)法直接觀察軟件的物理形態(tài),只能通過(guò)運(yùn)行它來(lái)了解它的功能和特性。
2.軟件無(wú)明顯的制造過(guò)程。計(jì)算機(jī)硬件是實(shí)物產(chǎn)品,我們可以親眼目睹它的整個(gè)生產(chǎn)過(guò)程,而軟件卻沒(méi)有明顯的制造過(guò)程,軟件注重的是開(kāi)發(fā)過(guò)程。
3.軟件無(wú)磨損性。計(jì)算機(jī)硬件存在著磨損和老化現(xiàn)象,就像我們的課桌,我們的板凳都存在著磨損現(xiàn)象。但對(duì)于軟件而言,它不存在磨損和老化,它會(huì)出現(xiàn)老化的狀態(tài),所以軟件需要不定時(shí)的更新和維護(hù)。
4.軟件對(duì)計(jì)算機(jī)硬件有依懶性。軟件的開(kāi)發(fā)和運(yùn)行依賴于特定的計(jì)算機(jī)系統(tǒng)環(huán)境,一般產(chǎn)品是不會(huì)有的,為了減少這種依賴性,軟件開(kāi)發(fā)過(guò)程中提出了軟件的可移植性。
5.軟件還處于手工開(kāi)發(fā)方式。人們?cè)诜治觥⒃O(shè)計(jì)、開(kāi)發(fā)、測(cè)試軟件產(chǎn)品的過(guò)程中,運(yùn)用了大量的腦力勞動(dòng)。
6.軟件本身的復(fù)雜性,軟件本身自帶的一大特點(diǎn),軟件是需要更新和服務(wù)的。
7.軟件的高成本。在開(kāi)發(fā)一個(gè)軟件的過(guò)程當(dāng)中,在編寫、測(cè)試、運(yùn)行和廣告推銷方面,開(kāi)發(fā)成本相當(dāng)昂貴。
我們?cè)撊绾谓o軟件分類呢?
按功能分:
1.系統(tǒng)軟件。操作系統(tǒng)就是最典型的系統(tǒng)軟件,它負(fù)責(zé)管理系統(tǒng)的資源,并為上層軟件的運(yùn)行提供了必備的接口和條件。
2.支撐軟件。我們常用的文本編輯器、繪圖軟件、數(shù)據(jù)庫(kù)管理系統(tǒng)和CASE工具系統(tǒng)等都屬于支撐軟件。
3.應(yīng)用軟件。比如,地理信息系統(tǒng)軟件、航空售票軟件、教務(wù)管理系統(tǒng)軟件和信息管理系統(tǒng)等。
按服務(wù)對(duì)象分:
1.通用軟件。由特定的軟件開(kāi)發(fā)機(jī)構(gòu)開(kāi)發(fā),面向市場(chǎng)公開(kāi)銷售的獨(dú)立運(yùn)行的軟件系統(tǒng),如操作系統(tǒng)、文檔處理系統(tǒng)和圖片處理系統(tǒng)等
2.定制軟件。是面向特定的用戶需求,由軟件開(kāi)發(fā)機(jī)構(gòu)在合同的約束下開(kāi)發(fā)的軟件,如為企業(yè)定制的辦公系統(tǒng)、交通管理系統(tǒng)和飛機(jī)導(dǎo)航系統(tǒng)等。
按工作方式分:計(jì)算機(jī)軟件還可以劃分為實(shí)時(shí)軟件、分時(shí)軟件、交互式軟件和批處理軟件。
按軟件產(chǎn)品規(guī)模分:計(jì)算機(jī)軟件還可以劃分為小型軟件、中型軟件和大型軟件。
這么多的軟件橫空出世,那么他們都成功了嗎?我們以怎樣一個(gè)標(biāo)準(zhǔn)來(lái)衡量軟件是否成功呢?
軟件成功的標(biāo)準(zhǔn)應(yīng)當(dāng)是用戶在用,滿足用戶的需求,服務(wù)于社會(huì)。軟件失敗了也就意味著并沒(méi)有滿足用戶的需求,在軟件開(kāi)發(fā)過(guò)程中出現(xiàn)了一系列的問(wèn)題,我們把軟件開(kāi)發(fā)中出現(xiàn)的問(wèn)題統(tǒng)稱為軟件危機(jī),軟件危機(jī)爆發(fā)于20世紀(jì)60年代中期。這里我們敘述兩個(gè)經(jīng)典案例。
案例一:美國(guó)IBM公司在1963年至1966年開(kāi)大的IBM360機(jī)的操作系統(tǒng)。公約100萬(wàn)條指令,花費(fèi)了5000個(gè)人,經(jīng)費(fèi)達(dá)數(shù)億美元,錯(cuò)誤多達(dá)2000個(gè)以上,系統(tǒng)根本無(wú)法正常運(yùn)行。
這個(gè)項(xiàng)目的負(fù)責(zé)人F.D.Brooks事后總結(jié)了他在組織開(kāi)發(fā)過(guò)程中的沉痛教訓(xùn)時(shí)說(shuō):“...正像一只逃亡的野獸落到泥潭中做垂死掙扎,越是掙扎,陷得越深。最后無(wú)法逃脫滅頂?shù)臑?zāi)難,......程序設(shè)計(jì)工作正像這樣一個(gè)泥潭,......一批批程序員被迫在泥潭中拼命掙扎,......誰(shuí)也沒(méi)有料到竟會(huì)陷入這樣的困境...”
案例二:美國(guó)銀行1982年進(jìn)入信托商業(yè)領(lǐng)域,并規(guī)劃發(fā)展信托軟件系統(tǒng)。項(xiàng)目原定預(yù)算2千萬(wàn)美元,開(kāi)發(fā)時(shí)程9個(gè)月,預(yù)計(jì)1984年12月31日以前完成,后來(lái)至1987年3月都未能完成該系統(tǒng),期間已投入6千萬(wàn)美元。美國(guó)銀行最終因?yàn)榇讼到y(tǒng)不穩(wěn)定而不得不放棄,并將340億美元的信托賬戶轉(zhuǎn)移出去,并失去了6億美元的信托生意商機(jī)。
可見(jiàn)軟件危機(jī)的存在是極其重要的。那么軟件危機(jī)有兩個(gè)方面:第一如何開(kāi)發(fā)軟件,以滿足不斷增長(zhǎng),日趨復(fù)雜的需求。第二如何維護(hù)數(shù)量不斷膨脹的軟件產(chǎn)品。那么我們?nèi)绾谓鉀Q軟件危機(jī)呢?人們逐漸認(rèn)識(shí)到了軟件的特性和軟件產(chǎn)品開(kāi)發(fā)的內(nèi)在規(guī)律,并嘗試用工程化的思想去指導(dǎo)軟件開(kāi)發(fā),于是軟件工程誕生了。
軟件工程一直以來(lái)都缺乏一個(gè)統(tǒng)一的定義。1968年首次提出軟件工程的概念,并將其定義為“為了經(jīng)濟(jì)地獲得可靠的和能在實(shí)際機(jī)器上高效運(yùn)行的軟件,而建立和使用的健全的工程規(guī)則”。這個(gè)定義肯定了工程化思想在軟件工程中的重要性,但是并沒(méi)有提到軟件產(chǎn)品的特殊性。
IEEE在軟件工程術(shù)語(yǔ)匯編中的定義:軟件工程是1.將系統(tǒng)性的、規(guī)范化的、可定量的方法應(yīng)用于軟件的開(kāi)發(fā)、運(yùn)行和維護(hù),即工程化應(yīng)用到軟件上;2.對(duì)1中所述方法的研究。
比較認(rèn)可的一種定義為:軟件工程是研究和應(yīng)用如何以系統(tǒng)性的、規(guī)范化的、可定量的過(guò)程化方法去開(kāi)發(fā)和維護(hù)軟件。以及如何把經(jīng)過(guò)時(shí)間考驗(yàn)而證明正確的管理技術(shù)和當(dāng)前能夠得到的最好的技術(shù)方法結(jié)合起來(lái)。
軟件工程的提出是為了解決軟件危機(jī)所帶來(lái)的各種弊端。那么軟件工程是如何發(fā)展起來(lái)的呢?
軟件開(kāi)發(fā)經(jīng)歷了程序設(shè)計(jì)階段、軟件設(shè)計(jì)階段和軟件工程階段的演變過(guò)程。
程序設(shè)計(jì)階段出現(xiàn)在1946年~1955年。這個(gè)階段還沒(méi)有軟件的概念,程序設(shè)計(jì)主要圍繞硬件進(jìn)行開(kāi)發(fā),規(guī)模很小,工具簡(jiǎn)單,無(wú)明確分工,程序設(shè)計(jì)追求節(jié)省空間和編程技巧,無(wú)文檔資料,主要用于科學(xué)計(jì)算。
軟件設(shè)計(jì)階段出現(xiàn)在1956年~1970年。這個(gè)時(shí)期硬件環(huán)境相對(duì)穩(wěn)定,出現(xiàn)了“軟件作坊”的開(kāi)發(fā)組織形式。開(kāi)始廣泛使用產(chǎn)品軟件,從而有了軟件的概念。隨著計(jì)算機(jī)技術(shù)的發(fā)展和計(jì)算機(jī)應(yīng)用的日益普及,軟件系統(tǒng)的規(guī)模越來(lái)越龐大,高級(jí)編程語(yǔ)言層出不窮,應(yīng)用領(lǐng)域不斷拓寬,開(kāi)發(fā)者和用戶有了明確的分工,社會(huì)對(duì)軟件的需求量劇增。但軟件開(kāi)發(fā)技術(shù)沒(méi)有重大突破,軟件產(chǎn)品的質(zhì)量不高,生產(chǎn)效率比較低,從而導(dǎo)致了“軟件危機(jī)”的產(chǎn)生。
自1970年起,軟件開(kāi)發(fā)進(jìn)入了軟件工程階段。由于“軟件危機(jī)”的產(chǎn)生,迫使人們不得不研究、改變軟件開(kāi)發(fā)的技術(shù)手段和管理方法。從此軟件產(chǎn)生進(jìn)入了軟件工程時(shí)代。這個(gè)階段硬件已向巨型化、微型化、網(wǎng)絡(luò)化和智能化四個(gè)方向發(fā)展,數(shù)據(jù)庫(kù)技術(shù)已成熟并廣泛應(yīng)用。
接下來(lái)我們來(lái)了解一下軟件工程的基本內(nèi)容。軟件工程有三個(gè)要素,即過(guò)程、方法和工具。
軟件工程過(guò)程是指為獲得軟件產(chǎn)品,在軟件工具的支持下由軟件工程師完成的一系列軟件工程活動(dòng)。它是使用適當(dāng)?shù)馁Y源(包括人員,軟硬件資源,時(shí)間等),為開(kāi)發(fā)軟件進(jìn)行的一組開(kāi)發(fā)活動(dòng),在活動(dòng)結(jié)束時(shí)輸入(即用戶的需求)轉(zhuǎn)化為輸出(最終符合用戶需求的軟件產(chǎn)品)。軟件的誕生和它的生命周期統(tǒng)稱為軟件過(guò)程。作為一種工業(yè)化的產(chǎn)品,軟件產(chǎn)品的生命周期是指從設(shè)計(jì)該產(chǎn)品的構(gòu)想開(kāi)始,到軟件需求的確定、軟件設(shè)計(jì)、軟件實(shí)現(xiàn)、產(chǎn)品測(cè)試與驗(yàn)收、投入使用以及產(chǎn)品版本的不斷更新,到最終該產(chǎn)品被市場(chǎng)淘汰的全過(guò)程。生命周期分為三個(gè)階段:定義階段:可行性研究初步項(xiàng)目計(jì)劃、需求分析;開(kāi)發(fā)階段:概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試;運(yùn)行和維護(hù)階段:運(yùn)行、維護(hù)、廢棄。
軟件工程方法包含軟件開(kāi)發(fā)方法、軟件度量方法、軟件管理方法和軟件環(huán)境方法,但是通常把軟件工程方法等同于軟件開(kāi)發(fā)方法,那么目前通常用的軟件開(kāi)發(fā)方法有面向過(guò)程的開(kāi)發(fā)方法、面向?qū)ο蟮拈_(kāi)發(fā)方法、面向數(shù)據(jù)的開(kāi)發(fā)方法和形式化方法。
軟件工具是進(jìn)行軟件開(kāi)發(fā)時(shí)必不可少的部分,是程序員在軟件開(kāi)發(fā)、測(cè)試、維護(hù)過(guò)程中所使用的輔助工具。軟件工具的使用為軟件項(xiàng)目的開(kāi)發(fā)提供了自動(dòng)化的支持,在很大的程度上提高軟件的開(kāi)發(fā)質(zhì)量,降低了軟件的成本,縮短了軟件的開(kāi)發(fā)時(shí)間。
既然提出工程化的思想,那我們就該遵循一定的原則。
著名軟件工程專家B.W.Boehm提出了以下幾項(xiàng)軟件工程的基本原則:將軟件的生命周期劃分為多個(gè)階段,對(duì)各個(gè)階段實(shí)行嚴(yán)格的項(xiàng)目管理;堅(jiān)持階段評(píng)審制度,以確保軟件產(chǎn)品的質(zhì)量;實(shí)施嚴(yán)格的產(chǎn)品控制,以適應(yīng)軟件規(guī)格的變更;采用現(xiàn)代程序設(shè)計(jì)技術(shù)。這是提高軟件開(kāi)發(fā)和維護(hù)效率的關(guān)鍵;開(kāi)發(fā)出來(lái)的軟件產(chǎn)品應(yīng)該能夠清楚地被審查。雖然軟件產(chǎn)品的可見(jiàn)性比較差,但是它的功能和質(zhì)量應(yīng)該能夠被準(zhǔn)確地審查和度量,這樣才能有利于有效的項(xiàng)目管理;合理地安排軟件開(kāi)發(fā)小組的人員,并且開(kāi)發(fā)小組的人員要少而精;不斷地改進(jìn)軟件工程實(shí)踐。
那么軟件工程要實(shí)現(xiàn)怎樣的一個(gè)目標(biāo)呢?
軟件工程的基本目標(biāo):
1.達(dá)到要求的軟件功能
2.取得較好的軟件性能
3.開(kāi)發(fā)出高質(zhì)量的軟件
4.付出較低的開(kāi)發(fā)成本
5.需要較低的維護(hù)費(fèi)用
6.能按時(shí)完成開(kāi)發(fā)工作,及時(shí)交付使用
我們要運(yùn)用工程化的思想達(dá)到軟件工程的基本目標(biāo),開(kāi)發(fā)出高質(zhì)量的滿足用戶需求的有價(jià)值的軟件產(chǎn)品。
我們平常所說(shuō)的計(jì)算機(jī)科學(xué)和軟件工程有什么區(qū)別呢?
科學(xué)是發(fā)現(xiàn)世界上已經(jīng)存在的事物,回答“是什么”和“為什么”的問(wèn)題。工程是創(chuàng)造世界上從未存在的事物,回答“做什么”和“怎么做”的問(wèn)題。計(jì)算機(jī)科學(xué)研究構(gòu)成計(jì)算機(jī)本身的理論和結(jié)構(gòu),諸如硬件設(shè)計(jì)或者算法的理論證明等。軟件工程將計(jì)算機(jī)作為問(wèn)題求解的工具,設(shè)計(jì)和實(shí)施尚未存在的方案用以服務(wù)社會(huì)。
軟件工程的就業(yè)前景不可限量。軟件產(chǎn)業(yè)的發(fā)展已經(jīng)關(guān)系到一個(gè)國(guó)家的政治和未來(lái),軟件產(chǎn)業(yè)將成為21世紀(jì)擁有最大產(chǎn)業(yè)規(guī)模和最廣闊前景的新興產(chǎn)業(yè)之一。軟件領(lǐng)域是一個(gè)包括系統(tǒng)軟件,中間軟件,嵌入式軟件,數(shù)據(jù)庫(kù)軟件,財(cái)務(wù)和企業(yè)管理軟件,教育軟件,游戲軟件等。產(chǎn)品化程度高的公司主要集中在管理軟件,金融行業(yè)軟件,及聚焦于某個(gè)行業(yè)的軟件公司。提升軟件的產(chǎn)品化程度將非常有益于中國(guó)軟件企業(yè)競(jìng)爭(zhēng)力的提高。軟件產(chǎn)業(yè)屬于第三產(chǎn)業(yè)的服務(wù)業(yè),具有高智力投入,高成長(zhǎng),低成本投入,服務(wù)性強(qiáng),全球性強(qiáng),與國(guó)民經(jīng)濟(jì)關(guān)系密切等特點(diǎn),一個(gè)高質(zhì)量的軟件會(huì)給企業(yè)和社會(huì)帶來(lái)很大的便利。所以軟件行業(yè)是一個(gè)發(fā)展前景很好的第三產(chǎn)業(yè)。