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