定義
軟件,拼音為Ruǎnjiàn,國標(biāo)中對軟件的定義為:與計(jì)算機(jī)系統(tǒng)操作有關(guān)的計(jì)算機(jī)程序、規(guī)程、規(guī)則,以及可能有的文件、文檔及數(shù)據(jù)。
其它定義:
1.運(yùn)行時,能夠提供所要求功能和性能的指令或計(jì)算機(jī)程序集合。
2.程序能夠滿意地處理信息的數(shù)據(jù)結(jié)構(gòu)。
3.描述程序功能需求以及程序如何操作和使用所要求的文檔。
以開發(fā)語言作為描述語言,可以認(rèn)為:軟件=程序+數(shù)據(jù)+文檔
特點(diǎn)
1、無形的,沒有物理形態(tài),只能通過運(yùn)行狀況來了解功能、特性、和質(zhì)量
2、軟件滲透了大量的腦力勞動,人的邏輯思維、智能活動和技術(shù)水平是軟件產(chǎn)品的關(guān)鍵
3、軟件不會像硬件一樣老化磨損,但存在缺陷維護(hù)和技術(shù)更新
4、軟件的開發(fā)和運(yùn)行必須依賴于特定的計(jì)算機(jī)系統(tǒng)環(huán)境,對于硬件有依賴性,為了減少依賴,開發(fā)中提出了軟件的可移植性
5、軟件具有可復(fù)用性,軟件開發(fā)出來很容易被復(fù)制,從而形成多個副本
分類
應(yīng)用類別
按應(yīng)用范圍劃分,一般來講軟件被劃分為系統(tǒng)軟件、應(yīng)用軟件和介于這兩者之間的中間件。
系統(tǒng)軟件
系統(tǒng)軟件為計(jì)算機(jī)使用提供最基本的功能,可分為操作系統(tǒng)和系統(tǒng)軟件,其中操作系統(tǒng)是最基本的軟件。
系統(tǒng)軟件是負(fù)責(zé)管理計(jì)算機(jī)系統(tǒng)中各種獨(dú)立的硬件,使得它們可以協(xié)調(diào)工作。系統(tǒng)軟件使得計(jì)算機(jī)使用者和其他軟件將計(jì)算機(jī)當(dāng)作一個整體而不需要顧及到底層每個硬件是如何工作的。
1.操作系統(tǒng)是一管理計(jì)算機(jī)硬件與軟件資源的程序,同時也是計(jì)算機(jī)系統(tǒng)的內(nèi)核與基石。操作系統(tǒng)身負(fù)諸如管理與配置內(nèi)存、決定系統(tǒng)資源供需的優(yōu)先次序、控制輸入與輸出設(shè)備、操作網(wǎng)絡(luò)與管理文件系統(tǒng)等基本事務(wù)。操作系統(tǒng)也提供一個讓使用者與系統(tǒng)交互的操作接口。
2.支撐軟件是支撐各種軟件的開發(fā)與維護(hù)的軟件,又稱為軟件開發(fā)環(huán)境(SDE)。它主要包括環(huán)境數(shù)據(jù)庫、各種接口軟件和工具組。著名的軟件開發(fā)環(huán)境有IBM公司的WebSphere,微軟公司的等。
包括一系列基本的工具(比如編譯器、數(shù)據(jù)庫管理、存儲器格式化、文件系統(tǒng)管理、用戶身份驗(yàn)證、驅(qū)動管理、網(wǎng)絡(luò)連接等方面的工具)。
應(yīng)用軟件
系統(tǒng)軟件并不針對某一特定應(yīng)用領(lǐng)域,而應(yīng)用軟件則相反,不同的應(yīng)用軟件根據(jù)用戶和所服務(wù)的領(lǐng)域提供不同的功能。
應(yīng)用軟件是為了某種特定的用途而被開發(fā)的軟件。它可以是一個特定的程序,比如一個圖像瀏覽器。也可以是一組功能聯(lián)系緊密,可以互相協(xié)作的程序的集合,比如微軟的Office軟件。也可以是一個由眾多獨(dú)立程序組成的龐大的軟件系統(tǒng),比如數(shù)據(jù)庫管理系統(tǒng)。
如今智能手機(jī)得到了極大的普及,運(yùn)行在手機(jī)上的應(yīng)用軟件簡稱手機(jī)軟件。所謂手機(jī)軟件就是可以安裝在手機(jī)上的軟件,完善原始系統(tǒng)的不足與個性化。隨著科技的發(fā)展,手機(jī)的功能也越來越多,越來越強(qiáng)大。不是像過去的那么簡單死板,發(fā)展到了可以和掌上電腦相媲美。手機(jī)軟件與電腦一樣,下載手機(jī)軟件時還要考慮你購買這一款手機(jī)所安裝的系統(tǒng)來決定要下相對應(yīng)的軟件。手機(jī)主流系統(tǒng)有以下:WindowsPhone、Symbian、iOS、Android。
授權(quán)類別
不同的軟件一般都有對應(yīng)的軟件授權(quán),軟件的用戶必須在同意所使用軟件的許可證的情況下才能夠合法的使用軟件。從另一方面來講,特定軟件的許可條款也不能夠與法律相違背。
依據(jù)許可方式的不同,大致可將軟件區(qū)分為幾類:
專屬軟件:此類授權(quán)通常不允許用戶隨意的復(fù)制、研究、修改或散布該軟件。違反此類授權(quán)通常會有嚴(yán)重的法律責(zé)任。傳統(tǒng)的商業(yè)軟件公司會采用此類授權(quán),例如微軟的Windows和辦公軟件。專屬軟件的源碼通常被公司視為私有財產(chǎn)而予以嚴(yán)密的保護(hù)。
自由軟件:此類授權(quán)正好與專屬軟件相反,賦予用戶復(fù)制、研究、修改和散布該軟件的權(quán)利,并提供源碼供用戶自由使用,僅給予些許的其它限制。以Linux、Firefox和OpenOffice可做為此類軟件的代表。
共享軟件:通??擅赓M(fèi)的取得并使用其試用版,但在功能或使用期間上受到限制。開發(fā)者會鼓勵用戶付費(fèi)以取得功能完整的商業(yè)版本。根據(jù)共享軟件作者的授權(quán),用戶可以從各種渠道免費(fèi)得到它的拷貝,也可以自由傳播它。
免費(fèi)軟件:可免費(fèi)取得和轉(zhuǎn)載,但并不提供源碼,也無法修改。
公共軟件:原作者已放棄權(quán)利,著作權(quán)過期,或作者已經(jīng)不可考究的軟件。使用上無任何限制。
相關(guān)概念
開發(fā)流程
軟件開發(fā)是根據(jù)用戶要求建造出軟件系統(tǒng)或者系統(tǒng)中的軟件部分的過程。軟件開發(fā)是一項(xiàng)包括需求捕捉,需求分析,設(shè)計(jì),實(shí)現(xiàn)和測試的系統(tǒng)工程。軟件一般是用某種程序設(shè)計(jì)語言來實(shí)現(xiàn)的。通常采用軟件開發(fā)工具可以進(jìn)行開發(fā)。
軟件開發(fā)流程即Softwaredevelopmentprocess。
軟件設(shè)計(jì)思路和方法的一般過程,包括設(shè)計(jì)軟件的功能和實(shí)現(xiàn)的算法和方法、軟件的總體結(jié)構(gòu)設(shè)計(jì)和模塊設(shè)計(jì)、編程和調(diào)試、程序聯(lián)調(diào)和測試以及編寫、提交程序。
1相關(guān)系統(tǒng)分析員和用戶初步了解需求,然后列出要開發(fā)的系統(tǒng)的大功能模塊,每個大功能模塊有哪些小功能模塊,對于有些需求比較明確相關(guān)的界面時,在這一步里面可以初步定義好少量的界面。
2系統(tǒng)分析員深入了解和分析需求,根據(jù)自己的經(jīng)驗(yàn)和需求做出一份文檔系統(tǒng)的功能需求文檔。這次的文檔會清楚例用系統(tǒng)大致的大功能模塊,大功能模塊有哪些小功能模塊,并且還例出相關(guān)的界面和界面功能。
3系統(tǒng)分析員和用戶再次確認(rèn)需求。
4系統(tǒng)分析員根據(jù)確認(rèn)的需求文檔所例用的界面和功能需求,用迭代的方式對每個界面或功能做系統(tǒng)的概要設(shè)計(jì)。
5系統(tǒng)分析員把寫好的概要設(shè)計(jì)文檔給程序員,程序員根據(jù)所例出的功能一個一個的編寫。
6測試編寫好的系統(tǒng)。交給用戶使用,用戶使用后一個一個的確認(rèn)每個功能,然后驗(yàn)收。
軟件工程師
一般指從事軟件開發(fā)職業(yè)的人。軟件工程師10余年來一直占據(jù)高薪職業(yè)排行榜的前列,作為高科技行業(yè)的代表,技術(shù)含量很高,職位的爭奪也異常激烈。軟件開發(fā)是一個系統(tǒng)的過程,需要經(jīng)過市場需求分析、軟件代碼編寫、軟件測試、軟件維護(hù)等程序。軟件開發(fā)工程師在整個過程中扮演著非常重要的角色,主要從事根據(jù)需求開發(fā)項(xiàng)目軟件工作。
法律保護(hù)
計(jì)算機(jī)軟件作為一種知識產(chǎn)品,其要獲得法律保護(hù),必須具備以下必要條件:
?。ㄒ唬┰瓌?chuàng)性。即軟件應(yīng)該是開發(fā)者獨(dú)立設(shè)計(jì)、獨(dú)立編制的編碼組合。
?。ǘ┛筛兄?。受保護(hù)的軟件須固定在某種有形物體上,通過客觀手段表達(dá)出來并為人們所知悉。
?。ㄈ┛稍佻F(xiàn)性。即把軟件轉(zhuǎn)載在有形物體上的可能性。
著作權(quán)歸屬
根據(jù)《計(jì)算機(jī)軟件保護(hù)條例》第10條的規(guī)定,計(jì)算機(jī)軟件著作權(quán)歸屬軟件開發(fā)者。因此,確定計(jì)算機(jī)著作權(quán)歸屬的一般原則是“誰開發(fā)誰享有著作權(quán)”。軟件開發(fā)者指實(shí)際組織進(jìn)行開發(fā)工作,提供工作條件完成軟件開發(fā),并對軟件承擔(dān)責(zé)任的法人或者非法人單位,以及依靠自己具有的條件完成軟件開發(fā),并對軟件承擔(dān)責(zé)任的公民。
載體
軟件的載體可以是硬盤、光盤、U盤、軟盤等數(shù)據(jù)存儲設(shè)備。
使用許可
不同的軟件一般都有對應(yīng)的軟件授權(quán),軟件的使用者必須在同意所使用軟件的許可證的情況下才能夠合法的使用軟件。
依據(jù)許可方式的不同,大致可將軟件區(qū)分為幾類:
專屬軟件、自由軟件、共享軟件、免費(fèi)軟件、公共軟件。
生命周期
軟件生命周期是指從軟件定義、開發(fā)、使用、維護(hù)到報廢為止的整個過程,一般包括問題定義、可行性分析、需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、測試和維護(hù)。
問題定義就是確定開發(fā)任務(wù)到底“要解決的問題是什么”,系統(tǒng)分析員通過對用戶的訪問調(diào)查,最后得出一份雙方都滿意的關(guān)于問題性質(zhì)、工程目標(biāo)和規(guī)模的書面報告。
可行性分析就是分析上一個階段所確定的問題到底“可行嗎”,系統(tǒng)分析員對系統(tǒng)要進(jìn)行更進(jìn)一步的分析,更準(zhǔn)確、更具體地確定工程規(guī)模與目標(biāo),論證在經(jīng)濟(jì)上和技術(shù)上是否可行,從而在理解工作范圍和代價的基礎(chǔ)上,做出軟件計(jì)劃。
需求分析即使對用戶要求進(jìn)行具體分析,明確“目標(biāo)系統(tǒng)要做什么”,把用戶對軟件系統(tǒng)的全部要求以需求說明書的形式表達(dá)出來。
總體設(shè)計(jì)就是把軟件的功能轉(zhuǎn)化為所需要的體系結(jié)構(gòu),也就是決定系統(tǒng)的模塊結(jié)構(gòu),并給出模塊的相互調(diào)用關(guān)系、模塊間傳達(dá)的數(shù)據(jù)及每個模塊的功能說明。
詳細(xì)設(shè)計(jì)就是決定模塊內(nèi)部的算法與數(shù)據(jù)結(jié)構(gòu),也是明確“怎么樣具體實(shí)現(xiàn)這個系統(tǒng)”。
編碼就是選取適合的程序設(shè)計(jì)語言對每個模板進(jìn)行編碼,并進(jìn)行模塊調(diào)試。
測試就是通過各種類型的測試使軟件達(dá)到預(yù)定的要求。
維護(hù)就是軟件交付給用戶使用后,對軟件不斷查錯、糾錯和修改,使系統(tǒng)持久地滿足用戶的需求。
軟件的生命周期也可以分為3個大的階段,分別是計(jì)劃階段、開發(fā)階段和維護(hù)階段。
軟件生命周期模型
軟件生命周期模型也稱為軟件過程模型,反映軟件生存周期各個階段的工作如何組織、銜接,常用的有瀑布模型、原型模型、螺旋模型、增量模型、噴泉模型,還有建造-修補(bǔ)模型、MSF過程模型、快速原型模型。[1]
常見的軟件生命周期模型
瀑布模型
有時也稱為V模型,它是一種線型順序模型,是項(xiàng)目自始至終按照一定順序的步驟從需求分析進(jìn)展到系統(tǒng)測試直到提交用戶使用,它提供了一種結(jié)構(gòu)化的、自頂向下的軟件開發(fā)方法,每階段主要工作成果從一個階段傳遞到下一個階段,必須經(jīng)過嚴(yán)格的評審或測試,以判定是否可以開始下一階段工作,各階段相互獨(dú)立、不重疊。瀑布模型是所有軟件生命周期模型的基礎(chǔ)。[1]
原型+瀑布模型
原型模型本身是一個迭代的模型,是為了解決在產(chǎn)品開發(fā)的早期階段存在的不確定性、二義性和不完整性等問題,通過建立原型使開發(fā)者進(jìn)一步確定其應(yīng)開發(fā)的產(chǎn)品,使開發(fā)者的想象更具體化,也更易于被客戶所理解。原型只是真實(shí)系統(tǒng)的一部分或一個模型,完全可能不完成任何有用的事情,通常包括拋棄型和進(jìn)化型兩種,拋棄型指原型建立、分析之后要扔掉,整個系統(tǒng)重新分析和設(shè)計(jì);進(jìn)化型則是對需求的定義較清楚的情形,原型建立之后要保留,作為系逐漸增加的基礎(chǔ),采用進(jìn)化型一定要重視軟件設(shè)計(jì)的系統(tǒng)性和完整性,并且在質(zhì)量要求方面沒有捷徑,因此,對于描述相同的功能,建立進(jìn)化型原型比建立拋棄型原型所花的時間要多。原型建立確認(rèn)需求之后采用瀑布模型的方式完成項(xiàng)目開發(fā)。[1]
增量模型
與建造大廈相同,軟件也是一步一步建造起來的。在增量模型中,軟件被作為一系列的增量構(gòu)件來設(shè)計(jì)、實(shí)現(xiàn)、集成和測試,每一個構(gòu)件是由多種相互作用的模塊所形成的提供特定功能的代碼片段構(gòu)成。增量模型在各個階段并不交付一個可運(yùn)行的完整產(chǎn)品,而是交付滿足客戶需求的一個子集的可運(yùn)行產(chǎn)品。整個產(chǎn)品被分解成若干個構(gòu)件,開發(fā)人員逐個構(gòu)件地交付產(chǎn)品,這樣做的好處是軟件開發(fā)可以較好地適應(yīng)變化,客戶可以不斷地看到所開發(fā)的軟件,從而降低開發(fā)風(fēng)險。
一些大型系統(tǒng)往往需要很多年才能完成或者客戶急于實(shí)現(xiàn)系統(tǒng),各子系統(tǒng)往往采用增量開發(fā)的模式,先實(shí)現(xiàn)核心的產(chǎn)品,即實(shí)現(xiàn)基本的需求,但很多補(bǔ)充的特性(其中一些是已知的,另外一些是未知的)在下一期發(fā)布。增量模型強(qiáng)調(diào)每一個增量均發(fā)布一個可操作產(chǎn)品,每個增量構(gòu)建仍然遵循設(shè)計(jì)-編碼-測試的瀑布模型。[1]
迭代模型
早在20世紀(jì)50年代末期,軟件領(lǐng)域中就出現(xiàn)了迭代模型。最早的迭代過程可能被描述為“分段模型”。迭代,包括產(chǎn)生產(chǎn)品發(fā)布(穩(wěn)定、可執(zhí)行的產(chǎn)品版本)的全部開發(fā)活動和要使用該發(fā)布必需的所有其他外圍元素。所以,在某種程度上,開發(fā)迭代是一次完整地經(jīng)過所有工作流程的過程:(至少包括)需求工作流程、分析設(shè)計(jì)工作流程、實(shí)施工作流程和測試工作流程。
實(shí)質(zhì)上,它類似小型的瀑布式項(xiàng)目。所有的階段(需求及其它)都可以細(xì)分為迭代。每一次的迭代都會產(chǎn)生一個可以發(fā)布的產(chǎn)品,這個產(chǎn)品是最終產(chǎn)品的一個子集。[1]
開發(fā)語言
O語言
O語言是一款中文計(jì)算機(jī)語言(或稱套裝:O匯編語言、O中間語言、O高級語言)
Java語言
作為跨平臺的語言,可以運(yùn)行在Windows和Unix/Linux下面,長期成為用戶的首選。自JDK6.0以來,整體性能得到了極大的提高,市場使用率超過20%??赡芤呀?jīng)達(dá)到了其鼎盛時期了,不知道后面能維持多長時間。
易語言(E語言)
易語言是一個自主開發(fā),適合國情,不同層次不同專業(yè)的人員易學(xué)易用的漢語編程語言。易語言降低了廣大電腦用戶編程的門檻,尤其是根本不懂英文或者英文了解很少的用戶,可以通過使用本語言極其快速地進(jìn)入Windows程序編寫的大門。[2]
C/C++語言
以上2個作為傳統(tǒng)的語言,一直在效率第一的領(lǐng)域發(fā)揮著極大的影響力。像Java這類的語言,其核心都是用C/C++寫的。在高并發(fā)和實(shí)時處理,工控等領(lǐng)域更是首選。
習(xí)語言
習(xí)語言即中文版的C語言
Basic
美國計(jì)算機(jī)科學(xué)家約翰·凱梅尼和托馬斯·庫爾茨于1959年研制的一種“初學(xué)者通用符號指令代碼”,簡稱BASIC。由于BASIC語言易學(xué)易用,它很快就成為流行的計(jì)算機(jī)語言之一。
php
同樣是跨平臺的腳本語言,在網(wǎng)站編程上成為了大家的首選,支持PHP的主機(jī)非常便宜,PHP+Linux+MySQL+Apache的組合簡單有效。
Perl
腳本語言的先驅(qū),其優(yōu)秀的文本處理能力,特別是正則表達(dá)式,成為了以后許多基于網(wǎng)站開發(fā)語言(比如php,java,C#)的這方面的基礎(chǔ)。
Python
是一種面向?qū)ο蟮慕忉屝缘挠?jì)算機(jī)程序設(shè)計(jì)語言,也是一種功能強(qiáng)大而完善的通用型語言,已經(jīng)具有十多年的發(fā)展歷史,成熟且穩(wěn)定。Python具有腳本語言中最豐富和強(qiáng)大的類庫,足以支持絕大多數(shù)日常應(yīng)用。
這種語言具有非常簡捷而清晰的語法特點(diǎn),適合完成各種高層任務(wù),幾乎可以在所有的操作系統(tǒng)中運(yùn)行。
基于這種語言的相關(guān)技術(shù)正在飛速的發(fā)展,用戶數(shù)量急劇擴(kuò)大,相關(guān)的資源非常多。
C#
是微軟公司發(fā)布的一種面向?qū)ο蟮摹⑦\(yùn)行于NETFramework之上的高級程序設(shè)計(jì)語言,并定于在微軟職業(yè)開發(fā)者論壇(PDC)上登臺亮相。C#是微軟公司研究員AndersHejlsberg的最新成果。C#看起來與Java有著驚人的相似;它包括了諸如單一繼承、界面,與Java幾乎同樣的語法,和編譯成中間代碼再運(yùn)行的過程。但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點(diǎn),與COM(組件對象模型)是直接集成的,而且它是微軟公司.NETwindows網(wǎng)絡(luò)框架的主角。
Javascript
Javascript是一種由Netscape的LiveScript發(fā)展而來的腳本語言,主要目的是為了解決服務(wù)器終端語言,比如Perl,遺留的速度問題。當(dāng)時服務(wù)端需要對數(shù)據(jù)進(jìn)行驗(yàn)證,由于網(wǎng)絡(luò)速度相當(dāng)緩慢,只有28.8kbps,驗(yàn)證步驟浪費(fèi)的時間太多。于是Netscape的瀏覽器Navigator加入了Javascript,提供了數(shù)據(jù)驗(yàn)證的基本功能。
Ruby
一種為簡單快捷面向?qū)ο缶幊蹋嫦驅(qū)ο蟪绦蛟O(shè)計(jì))而創(chuàng)的腳本語言,由日本人松本行弘(まつもとゆきひろ,英譯:YukihiroMatsumoto,外號matz)開發(fā),遵守GPL協(xié)議和RubyLicense。Ruby的作者認(rèn)為Ruby>(Smalltalk+Perl)/2,表示Ruby是一個語法像Smalltalk一樣完全面向?qū)ο蟆⒛_本執(zhí)行、又有Perl強(qiáng)大的文字處理功能的編程語言。
Fortran
在科學(xué)計(jì)算軟件領(lǐng)域,F(xiàn)ortran曾經(jīng)是最主要的編程語言。比較有代表性的有Fortran77、WatcomFortran、NDPFortran等。
objectivec
這是一種運(yùn)行在蘋果公司的macosx,iOS操作系統(tǒng)上的語言。這兩種操作系統(tǒng)的上層圖形環(huán)境,應(yīng)用程序編程框架都是使用該語言實(shí)現(xiàn)的。隨著iPhone,iPad的流行,這種語言也開始在全世界流行。
Pascal
Pascal是一種計(jì)算機(jī)通用的高級程序設(shè)計(jì)語言。Pascal的取名是為了紀(jì)念十七世紀(jì)法國著名哲學(xué)家和數(shù)學(xué)家BlaisePascal。它由瑞士NiklausWirth教授于六十年代末設(shè)計(jì)并創(chuàng)立。Pascal語言語法嚴(yán)謹(jǐn),層次分明,程序易寫,具有很強(qiáng)的可讀性,是第一個結(jié)構(gòu)化的編程語言。
Swift
Swift,蘋果于2014年WWDC(蘋果開發(fā)者大會)發(fā)布的新開發(fā)語言,可與Objective-C*共同運(yùn)行于MacOS和iOS平臺,用于搭建基于蘋果平臺的應(yīng)用程序。
內(nèi)容來自百科網(wǎng)