軟件
軟件(software,中國大陸、香港譯軟件,台灣譯軟體)是一系列按照特定順序組織的電腦數據和指令,是電腦中的非有形部分。電腦中的有形部分稱為硬件,由電腦的外殼及各零件及電路所組成。電腦軟件需有硬件才能運作,反之亦然,軟件和硬件都無法在不互相配合的情形下進行實際的運作。
一般來說,電腦軟件劃分為程式語言、系統軟件、應用軟件和介於這兩者之間的中介軟體。其中系統軟件為電腦使用提供最基本的功能,但是並不針對某一特定應用領域。而應用軟件則恰好相反,不同的應用軟件根據用戶和所服務的領域提供不同的功能。
軟件套件括所有在電腦執行的程式,和其架構無關,例如執行檔、函式庫及手稿語言都屬於軟件。軟件不分架構,有其共通的特性,在執行後可以讓硬件執行依設計時要求的機能。軟件儲存在記憶體中,軟件不是可以碰觸到的實體,可以碰觸到的都只是儲存軟件的零件(記憶體)或是媒介(光碟或磁片等)。
軟件並不一定只包括可以在電腦上執行的電腦程式,有些定義中,與電腦程式相關的文件,一般也被認為是軟件的一部分。簡單的說軟件就是程式加文件的集合體。軟件被應用於世界的各個領域,對人們的生活和工作都產生了深遠的影響。
程式語言
[編輯]以最低階的角度來看,執行檔中包括了針對特定微處理器(一般會是CPU)的機械碼,機械碼包括了一連串二進位的數值,使處理器從目前的狀態變換到下一個狀態。例如指令可能會修改電腦內一特定位置中的數值,其效果是用戶無法直接觀測到的,指令也可能讓螢幕上顯示特定資料,這種狀態變換是用戶可以看到的。處理器會依照順序處理收到的指令,不過處理器的處理也可能受到中斷,或是因為流程控制指令而改變其要處理的指令。
機械碼是許多二進位的數值,不方便工程師閱讀及開發程式,因此有匯編語言,將機械碼轉換為人可以看懂的助憶碼。不過現在多半的軟件是用高階語言撰寫,比較類似自然語言,對人類而言比機械碼或匯編語言要簡單,方便人類使用[1]。高階語言一般會用直譯或編譯的方式,將軟件的原始碼轉換為機械碼。
原始碼是指以程式語言所撰寫的一系列人類可閱讀的電腦指令,以實作出軟件的行為和功能。
分類
[編輯]軟件的分類方式有很多種,可以依軟件的目的分為以下幾種:
系統軟件
[編輯]系統軟件負責管理電腦系統中各種獨立的硬件,使得它們可以協調工作,提供基本的功能,並為正在運行的應用軟件提供平台[2]。系統軟件使得電腦用戶和其他軟件將電腦當作一個整體而不需要顧及到底層每個硬件是如何工作的。而各個硬件工作的細節則由驅動程式處理。
一般來說,系統軟件套件括作業系統(例如BSD、DOS、Linux、macOS、iOS、OS/2、QNX、Unix、Windows等)和一系列基本的工具(比如編譯器,資料庫管理,記憶體格式化,檔案系統管理,作業系統管理,用戶身份驗證,驅動管理,網絡連接等方面的工具)。
應用軟件
[編輯]應用軟件是為了某種特定的用途而被開發的軟件。它可以是一個特定的程式,比如一個圖片檢視器。也可以是一組功能聯絡緊密,可以互相協同運作的程式的集合,比如微軟的Office軟件。也可以是一個由眾多獨立程式組成的龐大的軟件系統,比如資料庫管理系統。
較常見的有:
- 文書處理軟件如Microsoft Office、GNOME Office、 KOffice、LibreOffice、Google Docs、WPS Office
- 關聯式資料庫如Oracle Database資料庫、SQL Server資料庫
- 電腦輔助設計如CATIA、AutoCAD、FreeCAD
- 電腦程式設計如C/C++、匯編語言、BASIC 、 Swift、JavaScript、Java
- P2P軟件如BitTorrent、 µTorrent 、Foxy、比特精靈、Vuze、 Free Download Manager
- 影像處理軟件如Photoshop、CorelDRAW、Corel painter、GIMP、MAYA、Softimage、3ds Max、Blender、xsi、lightwave、Cinema 4D、Houdini、Krita
- 動態圖形和視覺特效如After Effects、shake
- 網頁瀏覽軟件如Internet Explorer、Edge、Firefox、Chrome、Safari、Opera、Konqueror
- 網絡通訊軟件如Line、ICQ、Windows Live Messenger、UUcall、Skype、Yahoo! Messenger、QQ、AOL Instant Messenger
- 媒體播放器如MPC-HC、MPlayer、RealPlayer、GOM、VLC、WMP、暴風影音、風雷影音、Winamp、Foobar2000
- 下載管理軟件如Free Download Manager、IDM
- 電子郵件如Outlook.com、Windows Live Mail、Outlook Express、Foxmail、ThunderBird、Dreammail、KMail
- 資訊保安軟件如ESET、360安全衛士、德國小紅傘、卡巴斯基、PC-cillin、諾頓防毒、BitDefender、瑞星防毒、金山毒霸
- 虛擬機器如VMware、VirtualBox、Microsoft Virtual PC、Bochs
- 輸入法軟件如新酷音輸入法、谷歌拼音輸入法
- 實時控制系統
- 教育軟件
惡意軟件
[編輯]惡意軟件是發展到危害和破壞計算機的計算機軟件,因此,惡意軟件是不受歡迎的。惡意軟件與計算機相關的犯罪相關聯,儘管一些惡意程式可能被設計為用於惡作劇。
相關主題
[編輯]軟件架構
[編輯]用戶常會看到一些程式設計者不會注意的事物。使用現代通用型電腦(相對於嵌入式系統、模擬電腦或超級電腦)的用戶常會用以下三層的軟件架構來進行不同的任務:系統平台、應用程式及用戶軟件。
- 應用軟件:應用軟件也就是大部分用戶認為的軟件,常見的例子包括辦公室套件及遊戲等。應用軟件一般會和硬件分開來販售,偶爾會和硬件一起販售。應用軟件多半是獨立於系統平台的軟件,只是在設計時仍會針對某些特定的系統平台開發,有些人則將像編輯器、資料庫等「系統軟件」也視為是應用軟件。
- 用戶撰寫的軟件:終端用戶開發目的是讓軟件符合用戶等特定的需求,一般包括試算表及文字處理器的範本或巨集,甚至連郵件的過濾器也可以視為是一種用戶撰寫的軟件。依照用戶撰寫的軟件整合到預設應用軟件的程度不同,其他用戶可能不會知道哪些是應用軟件原有的機能,哪些是用戶擴充的機能。
軟件執行
[編輯]軟件在載入到電腦的數據存貯器(例如硬碟或記憶體)後,電腦就可以執行該軟件。「執行」指的是將指令集由軟件移到電腦硬件中,硬件會處理指令集對應的機械碼。每一個指令都會讓電腦執行特定的動作,包括搬移資料、執行運算或是改變控制流程。
資料搬移一般會由記憶體的一個位置移到另一個位置,有時資料搬移會用到中央處理器中允許較快速資料處理的暫存器。大量的資料搬移會用去不少的系統資源,因此有時會用「指標」來處理資料。執行運算的範圍很廣,簡單的可以包括將某位置的資料加一,複雜的可能包括許多資料及對應的處理。
軟件的執行多半是一個指令接一個指令的循序進行,但有時會需要改變軟件中指令執行的順序,例如有可以使某一段程式執行數次的迴圈,或是依特定條件執行兩段程式中的一段的分支指令,甚至是可以執行子程式,執行完成後再回到原來程式,而有些語言也支援無條件的跳躍指令。
軟件可以以許多不同的方式運作,包括執行檔、原始碼、指令碼及電腦組態。
質素及可靠度
[編輯]軟件的質素有一定的重要性,尤其在像Microsoft Office、Microsoft Windows 及Linux等商用軟件或系統軟件更是如此。若軟件無法正確執行,可能會刪除用戶工作的成果,使電腦死機或是出現其他無預期的情形,這類情形稱為程式錯誤,俗稱bug。軟件也會受到軟件退化的影響,也就是因為許多未發現的程式錯誤造成的效能退化。藉由軟件測試可以找出並消除許多的程式錯誤,不過軟件測試很少可以完全消除程式錯誤。很多大型的軟件公司,例如微軟、Novell及太陽電腦等,會有專門的軟件測試部門,其主要工作就是測試軟件。軟件可以用單元測試、回歸測試及其他方式進行測試。測試可能用人工進行,若是大型的程式,更常見的是用電腦自動測試。像NASA就針對其作業系統及其通訊程式有特別嚴謹的測試流程。
使用許可
[編輯]不同的軟件一般都有對應的軟件授權,軟件的用戶必須在同意所使用軟件的許可證的情況下才能夠合法的使用軟件。從另一方面來講,特定軟件的許可條款也不能夠與法律相牴觸。
依據許可方式的不同,大致可將軟件區分為幾類:
- 專有軟件:此類授權通常不允許用戶隨意的複製、研究、修改或散佈該軟件。違反此類授權通常會有嚴重的法律責任。傳統的商業軟件公司會採用此類授權,例如微軟的Windows和辦公軟件。專屬軟件的原始碼通常被公司視為私有財產而予以嚴密的保護。
- 自由軟件:此類授權正好與專屬軟件相反,賦予用戶複製、研究、修改和散佈該軟件的權利,並提供原始碼供用戶自由使用,僅給予些許的其它限制。以Linux、Firefox和OpenOffice可做為此類軟件的代表。
- 共享軟體:通常可免費的取得並使用其試用版,但在功能或使用期間上受到限制。開發者會鼓勵用戶付費以取得功能完整的商業版本。
- 免費軟件:可免費的取得和散佈,但並不提供原始碼,也無法修改。
- 公共軟件:原作者已放棄權利,著作權過期,或作者已不可考的軟件。使用上無任何限制。
專利
[編輯]有些國家可以申請軟件專利,有些國家不行,而是用著作權的觀點保護軟件[3]。不過在軟件產業中,軟件專利是個爭議性高的議題,各方人士有不同的立場。軟件專利爭議的主要爭議點是在軟件專利中,受保護不得複製的部分是其演算法還是其用到的技術。
開發
[編輯]軟件開發是根據用戶要求建造出軟件系統或者系統中的軟件部分的過程。軟件開發是一項包括需求捕捉,需求分析,設計,實現和測試的系統工程,其中可能包括研究、新的開發工作、修改、復用、重新設計(再工程)、維護,或者任何最終獲得軟件產品的其他活動[4]。
軟件開發過程是指軟件從起始到完成過程中如何進行計劃、控制和監控的模型。有以下不同的幾種:
- 瀑布模型:依需求分析,設計,實現,測試 (確認), 整合,和維護這樣的步驟依序進行。
- 迭代式開發:將開發工作被組織為一系列的短小的、固定長度(如3周)的小項目,被稱為一系列的疊代。在每一次疊代中進行需求分析、設計、實現與測試。
- 敏捷軟件開發:應對快速變化需求的軟件開發方式,強調設計師團隊與業務專家之間的協作、面對面的溝通、頻繁交付軟件版本、適應變化的代碼編寫等特點。
- 極限編程:敏捷軟件開發的一種,引入基本價值、原則、方法等概念來達到降低變更成本的目的,其主要目的是快速應用程式開發。
- 快速應用程式開發,以最小幅度的規劃並迅速地將原形完成的軟件發展方法論,其軟件開發的規劃是和撰寫軟件本身交錯同時進行。
- 螺旋模型:兼顧了快速原型的迭代特徵以及瀑布模型的系統化與嚴格監控,並且加入了其他模型不具備的風險分析,使軟件在無法排除重大風險時有機會停止,以減小損失。
編程工具
[編輯]軟件開發工具指的是軟件開發人員用來創建、除錯、維護或以其他方式支援的軟件程式或應用程式的形式。
軟件由一種或多種程式語言所寫成。現在存在有很多種程式語言,並且每種都具有至少一種編寫的方式,其中包括它自己的一套編程工具。這些工具包含相對獨立自足的程式,如編譯器,除錯器,直譯器,連結器和文字編輯器,可以結合共同完成一個任務,很像一個人可以使用多個手握工具來固定一個物理對象。
這套工具也有可能是一個整合開發環境(IDE),它結合了許多這種工具或它們的全部功能。無論是通過調用程式設計師等有關人士的工具,或通過以一種新的方式重新實現它們的功能,IDE可以做到這一點。幾乎所有的程式語言為編寫提供了使用單獨的工具,而不是一個IDE,因為有些程式設計師由於各種原因不喜歡使用IDE,或是因為IDE通常需要更長的時間才能發展形成一個可接受的標準,而不是一個個人工具。事實上,新的程式語言最初通常不會提供他們的IDE 。
產業及組織
[編輯]軟件產業是由許多軟件公司及程式設計者所組成的產業,其性質較類似服務業。由於其產業特性,毛利率較其他產業要高[5]。軟件產業的獲利相當高,像微軟的創始人比爾·蓋茨就因為銷售Microsoft Windows及Microsoft Office而數次成為美國首富[6]。不過隨着時代的變化,軟件產業的分工及專業化也越來越細。例如電子遊戲產業及辦公室軟件都屬於軟件產業,而兩者就有不少的差異。
有許多非營利的軟件組織,例如自由軟件基金會、GNU計劃及Mozilla基金會。像萬維網聯盟(W3C)及互聯網工程任務組(IETF)等組織發展許多軟件標準,因此不同的軟件可以藉由這些標準互相溝通,這種標準包括例如XML、HTML、HTTP及FTP等。
其他著名的軟件公司有Google、Novell、SAP、Symantec、Adobe Systems、Corel,不過其中也有許多小公司有一些創新的產品。
參考文獻
[編輯]- ^ Compiler construction. [2014-05-22]. (原始內容存檔於2013-11-02).
- ^ 電腦軟體的介紹. Content.edu.tw. [2014-05-23]. (原始內容存檔於2014-05-23).
- ^ 吳漢東等. 知识产权基本问题研究(分论,第二版). 北京: 中國人民大學出版社. 2009年3月: 226. ISBN 9787300102771 (中文(簡體)).
- ^ DRM Associates. New Product Development Glossary. 2002 [2006-10-29]. (原始內容存檔於2018-07-13).
- ^ 10檔 上半年高毛利率股排行榜. Money.udn.com. [2014-05-24]. (原始內容存檔於2014-05-25).
- ^ 盖茨20度蝉联福布斯美国首富 8名华裔富豪上榜. Ccin.com.cn. [2014-05-24]. (原始內容存檔於2014-05-25).