必威电竞|足球世界杯竞猜平台

計算機軟件
來源:互聯網

計算機軟件(計算機 軟件,也稱軟件)是系統中的程序及其文檔,程序是計算任務的處理對象和處理規則的描述。文檔主要是為了便于了解程序所需的闡明性資料。程序在計算機平臺之上運行,文檔一般是給人看的,軟件通常通過解決用戶的問題而表現出其價值。

含義

計算機軟件的含義有三,一為個體含義,二為整體含義,三為學科含義。個體含義之計算機軟件是指任一計算機系統中的任一程序及其有關的文檔(程序是軟件之主體,文檔之作用是為了便于理解程序)。整體含義之計算機軟件是指任一計算機系統中所有個體含義之計算機軟件所構成之集合。學科含義之計算機軟件是指以整體含義之計算機軟件為研究對象的學科,或者也可以說學科含義之計算機軟件是指在實施個體含義之計算機軟件過程中所涉及的理論、原則、方法、技術所構成的學科。

發展過程

軟件的發展受到應用和硬件發展的推動和制約,其發展過程大致可分為三個階段。

第一階段

從第一臺計算機上的第一個程序的出現到實用的高級程序設計語言出現以前為第一階段(1946~1956年),計算機的工作是由儲存在其內部的程序指揮的,這是馮??諾依曼式計算機的重要特色。當時計算機的應用領域較窄,主要是科學計算,就一項計算任務而言,輸入、輸出量并不大。但計算量卻較大,主要處理一些數值數據,機器結構以中央處理器為中心,存儲容量較小。編制程序(簡稱編程)所用的工具是低級語言,即以機器基本指令集為主的機器語言和在機器語言基礎上稍加符號化的匯編語言。突出的問題是,程序的設計和編制工作復雜繁瑣、費時和易出差錯,衡量程序質量的標準主要是功效,即運行時間省、占用內存小,很少考慮到結構清晰、易讀性和易維護性。設計和編制程序采用個體工作方式,強調編程技巧。主要研究科學計算程序、服務性程序和程序庫,研究對象是順序程序。當時人們對和程序有關的文檔的重要性尚認識不足,重點考慮程序本身,尚未出現軟件一詞,但畢竟由于程序是軟件的主體。從發展的連續性來看,故將其歸為第一階段。

第二階段

從實用的高級程序設計語言出現以后到軟件工程出現以前為第二階段(1956—1968年)。隨著計算機應用領域的逐步擴大,除了科學計算繼續發展以外,出現了大量的數據處理問題。其性質和科學計算有明顯區別,就一項計算任務而言,計算量不大,但輸入、輸出量卻較大。這時,機器結構轉向以存儲控制為中心,出現了大容量的存儲器。外圍設備發展迅速,為了提高程序人員的工作效率,出現了實用的高級程序設計語言。為了充分利用系統資源,出現了操作系統。為了適應大量數據處理問題的需要,開始出現數據庫及其管理系統。在20世紀50年代后期,人們逐漸認識到和程序有關的文檔的重要性,從而到了60年代初期,出現了軟件一詞,融程序及其有關的文檔為一體。這時,軟件的復雜程度迅速提高,研制周期變長,正確性難以保證,可靠性問題相當突出。到了60年代中期,出現了人們難以控制的局面,即所謂軟件危機。為了克服這一危機,人們進行了以下三個方面的工作:①提出結構程序設計方法。②提出用工程方法開發軟件。③從理論上探討程序正確性和軟件可靠性問題。這一階段的研究對象增加了并發程序,著重研究高級程序設計語言、編譯程序、操作系統以及各種應用軟件。計算機系統的處理能力得到加強,設計與編制程序的工作方式逐步轉向合作方式。

第三階段

軟件工程出現以后迄今為第三階段1968年以來)。由于大型軟件的開發是一項工程性任務,采用個體或合作方式不僅效率低,產品可靠性差,甚至很難完成,只有采用工程方法才能適應。從而在1968年的大西洋公約學術會議上提出了軟件工程,40多年來,軟件領域工作的主要特點是:第一,隨著微型化、并行化、網絡化硬件平臺的快速發展。資源化、服務化、泛在化應用形態的不斷拓廣,各類新型應用模式與應用系統不斷出現。如普適計算、服務計算、云計算嵌入式系統、混成系統、信息物理系統等。對計算機軟件提出了挑戰,出現了嵌入式軟件與應用、網絡軟件與應用、分布式軟件與應用、自治式軟件與應用、“軟件作為服務”與應用等各種軟件與應用形態,促進了軟件理論、方法與技術的發展。第二,開發方式逐步由個體合作方式轉向工程方式。軟件工程發展迅速,出現了計算機輔助軟件工程、軟件開發過程的規范化管理、基于Internet的軟件協同開發等。除了開發各類工具與環境,用以支撐軟件的開發與維護外,還出現了一些實驗性的軟件自動化系統。第三,軟件復雜性控制問題頗受關注。致力研究軟件開發過程本身,在主流的功能分解風范與模型、面向對象風范與模型基礎上,開始探索新型軟件開發風范與模型,如資源開放聯盟、網構軟件風范與模型等。研究軟件體系結構、基于構件的軟件以及中間件等。第四,除了軟件傳統技術繼續發展外。人們著重研究以智能化、自動化、集成化、網絡化、信息化以及自然化等為標志的軟件開發與運行新技術。開始探索情景驅動的軟件自適應方法、技術與系統等。第五,注意研究軟件理論與非經典的軟件模型,特別是軟件開發過程的本質、量子程序語言與系統等。

分類

計算機軟件系統通常分為系統軟件、應用軟件、支撐軟件三類。

系統軟件

系統軟件是計算機系統中最靠近硬件的一層,使得計算機使用者和其他軟件將計算機當作一個整體而不需要顧及到底層每個硬件是如何工作的。其他軟件一般都通過系統軟件發揮作用。它與具體的應用領域無關,如編譯程序和操作系統等。編譯程序將程序人員用高級語言書寫的程序翻譯成與之等價的、可執行的低級語言程序,操作系統則負責管理系統的各種資源、控制程序的執行,在任何計算機系統的設計中,系統軟件都要予以優先考慮。

應用軟件

應用軟件是特定應用領域中用以解決實際計算問題的軟件。它可以是一個特定的程序,比如一個圖像瀏覽器。也可以是一組功能聯系緊密,可以互相協作的程序的集合,比如微軟的Office軟件。也可以是一個由眾多獨立程序組成的龐大的軟件系統,比如數據庫管理系統。例如,人口普查用的軟件就是一種應用軟件,對于具體的應用領域,應用軟件的質量往往成為影響計算機實際效果的決定性因素。20世紀70年代出現的嵌入式應用與近年來興起的信息物理系統,其相應軟件的復雜程度高,開發工作量大,促進了軟件的發展。模擬應用導致模擬語言(simula)的出現,隨著計算機應用水平的不斷提高,各類應用模式不斷出現,促進了計算機軟件的發展,應用軟件的作用越來越大。

支撐軟件

支撐軟件是軟件開發、維護與運行的軟件。隨著計算機科學技術的發展,軟件的開發、維護與運行的代價在整個計算機系統中所占的比重很大,遠遠超過硬件。因此,支撐軟件的研究具有重要意義,直接促進軟件的發展。當然,數據庫管理系統、網絡軟件等也可算作支撐軟件。但是20世紀70年代中后期發展起來的軟件開發環境以及后來開發的中間件則可看成現代支撐軟件的代表。軟件開發環境主要包括環境數據庫、各種接口軟件和工具組,三者形成整體,協同支撐軟件的開發與維護。

組成部分

計算機軟件包括軟件語言、軟件方法學軟件工程、軟件系統。

軟件語言

軟件語言是用以書寫程序(或設計規約、功能規約、需求規約)和文檔的語言。又可分為實現級語言(書寫程序及其文檔之語言)、設計級語言(書寫設計規約及其文檔之語言)、功能級語言(書寫功能規約及其文檔之語言,以及需求級語言(書寫需求規約及其文檔之語言)。

軟件方法學

軟件方法學是以軟件方法為研究對象的學科,著重研究諸如自頂向下方法、自底向上方法、面向對象方法、軟件自動化方法、形式方法等。

軟件工程

軟件工程是應用計算機科學與數學原理開發與維護軟件的工程,或者可以說軟件工程的學科含義是用工程化方法研究、開發、維護軟件的學科,如軟件開發環境、領域工程、需求工程以及軟件自動化等。

相關系統

軟件系統包括各種用于軟件開發與維護之系統以及應用軟件系統,如操作系統、語言處理系統、數據庫管理系統、計算機安全系統等。

軟件開發

軟件開發是根據用戶要求建造出軟件系統或者系統中的軟件部分的過程。軟件開發是一項包括需求捕捉,需求分析,設計,實現和測試的系統工程。

軟件一般是用某種程序設計語言來實現的。通常采用軟件開發工具可以進行開發。

軟件許可

不同的軟件一般都有對應的軟件許可,軟件的使用者必須在同意所使用軟件的許可證的情況下才能夠合法的使用軟件。從另一方面來講,某種特定軟件的許可條款也不能夠與法律相抵觸。

未經軟件版權所有者許可的軟件拷貝將會引發法律問題,一般來講,購買和使用這些盜版軟件也是違法的。

難點與展望

難點

軟件是智力產品,軟件開發是智力活動。其難點是:第一,如何從軟件科學的角度加深對軟件開發過程本質的認識,“變是不變的真理”在軟件領域表現突出。軟件不會像硬件一樣老化磨損,但存在缺陷維護和技術更新。在使用過程中必須不斷維護,其中包括:①糾錯性維護,使用中一旦發現存在錯誤,便及時糾正。②預見性維護,指預防檢測與改正軟件中存在的潛在錯誤。③適應性維護,隨著環境的改變,使原有軟件適應新的環境。④完善性維護,原有軟件在設計時難免有不完善之處,在使用中需要逐步完善。變動性是軟件的重要特征,軟件開發風范與模型均和領域有關。領域不同,合適的風范與模型可能也不同。但軟件開發過程的本質是否也和領域有關,目前尚難斷定。共性為何,個性為何,這些都是有待研究的問題。軟件主要是由人開發的,各人思考問題的習慣、方式不盡相同,思維規律也不盡相同。但軟件開發過程的本質是否也和思維規律有關,亦亟待研究。此外,軟件開發過程的復雜性研究對軟件開發的作用巨大影響深遠。

第二,如何從開發與運行的角度,使得計算機軟件能夠更加適應開放環境的需要,即功能與性能更加智能化。“智能”含義,眾說紛紜。然而,多數人認為,智能是指洞察、學習、理解、推理的能力。其中學習是核心,如果軟件智能化指的是使軟件本身具備智能,則事實表明,軟件是能智能化的。如果軟件智能化指的是使軟件具備人類智能,則當然是有條件的。目前流行的歸納學習、分析學習、聯接學習以及遺傳學習等途徑各有利弊,應視具體情況,酌情采用,或另創新途徑。另一方面,需要從軟件方法學的角度,提出新的軟件范型、結構模型與相應的開發方法與運行機理。對智能化的軟件給以系統化的支持。

第三,如何從保證軟件產品質量的角度來保證程序正確性與軟件可信性。程序正確性總是相對某一基準而言的,一般說來,程序(實現級)是正確的。指的是它能全部體現相應設計規約中的功能,設計規約的正確性。指的是它能體現功能規約中的全部功能。功能級程序(即功能規約)是正確的,則指它能體現需求定義中的全部需求,過去考慮較多的是實現級程序的正確性,今后宜更多考慮設計級與功能級程序的正確性。理論上的正確性與實際的正確性從理論上說應該是一致的,但實際上又往往不能完全一致。問題在哪里,是理論原因還是實際原因,有待研究。此外,開發過程不正確,則任何級別的程序正確性均無法保證。在這種意義上說,開發過程的正確性就顯得格外重要,許多開放環境下的復雜軟件系統的正確性沒有絕對的基準,而只能以用戶滿意度或“足夠正確”來刻畫。如何處理此類系統的正確性問題是亟待研究的問題。更進一步,如何保證開放環境下軟件系統高可信也是一個挑戰性的問題。

第四,如何從服務用戶的角度來提高用戶友善性。軟件質量優劣的最終評判者是用戶,對用戶不友善的軟件,用戶當然不會樂于使用。為使軟件對用戶友善,人與系統的接口界面應盡可能采用自然語言與圖形語言,這一點頗為重要。采用自然語言與圖形語言還只是接口界面的表示問題,更重要的還是接口界面的結構。結構宜簡明,力戒煩瑣,最后隨著非經典計算如量子計算等的研究進展,也需研究如何開發軟件。

展望

展望未來,挑戰與機遇并存。隨著對軟件開發過程本質認識的深入,軟件開發與運行的功效越來越高。軟件的智能化水平得到不斷的提升,能夠不斷適應開放、動態與多變環境的需要。軟件產品的質量能夠從多個方面得到綜合化的保障,軟件系統的可信性將得到大幅度的提升。軟件系統的用戶友善性越來越好,能夠更好地服務廣大用戶的需求。總之,軟件系統將能夠更好地滿足信息化社會的需要。

參考資料 >

生活家百科家居網