




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章 計算機軟件基礎曲阜師范大學計算機科學學院2/6/20231計算機軟件基礎內容摘要
計算機系統由硬件與軟件組成,硬件是基礎,軟件是靈魂。軟件是指為運行、維護、管理及應用計算機所編制的所有程序和程序運行所需要的數據及其文檔資料的總稱,簡而言之,軟件=程序+數據+文檔。 本章主要介紹軟件基礎知識:算法基礎,數據結構基礎,程序設計基礎和軟件工程基礎等。2/6/20232計算機軟件基礎學習目標
理解算法、算法的設計以及評價算法優劣的概念;了解程序設計語言的概念和程序設計的過程;理解數據結構的基本概念和幾種典型的數據結構;了解軟件工程中有關概念,熟悉軟件生存周期、軟件開發模型和軟件開發方法的內容。為進一步學習本書以下各章內容和以后的各門專業課程學習打好基礎。
2/6/20233計算機軟件基礎主要內容3.1算法基礎3.2程序設計基礎3.3數據結構基礎3.4軟件工程基礎2/6/20234計算機軟件基礎3.1 算法基礎 算法是計算機科學中最重要的核心概念,算法設計的好壞直接影響軟件的性能。
數值計算算法:“計算方法”課程是研究求線性代數方程組、高次代數方程、常微分方程數值解以及計算數值微分、數值積分算法的課程。
非數值計算算法:“算法設計與分析”課程研究解決線性規劃、動態規劃等典型問題的算法設計問題;“數據結構”課程研究了各種排序與查找算法等。2/6/20235計算機軟件基礎3.1.1算法及其性質算法:為解決一個問題而采取的方法和步驟。算法的特性:
(1)有窮性:有窮步驟;(2)確定性:無歧義性;(3)輸入:0或多個;(4)輸出:1或多個;(5)可行性:在有限時間內完成。 綜上可知,算法是精確定義的一系列規則,這些規則指出如何經過有限步驟在有限的時間內產生出所求問題的解。2/6/20236計算機軟件基礎3.1.2算法的描述算法是對解決問題方法的精確描述,常用的描述工具有:自然語言流程圖算法描述語言計算機程序設計語言
2/6/20237計算機軟件基礎3.1.3算法設計舉例
例3-1給定兩個正整數m和n,試寫出求它們的最大公因子的算法。解:歐幾里德算法用自然語言表述如下: 第1步:讀入兩個正整數m和n(設m>n)。 第2步:求m除以n的余數r=mod(m,n)。 第3步:用n的值取代m,用r的值取代n。 第4步:判別r的值是否為零,如果r=0,則m為最大公因子;否則返回第2步。 第5步:輸出m的值,即為最大公因子。2/6/20238計算機軟件基礎
開始
輸入m,n
r←mod(m,n)
m←nn←rr≠0結束Y
輸出mN歐幾里算法流程圖:2/6/20239計算機軟件基礎歐幾里德算法用算法描述語言表示PROCEDUREEuclid BEGINREAD(m,n);REPEATr:=求m除以n的余數;m:=n;n:=r;UNTILr=0; WRITE(m);
END2/6/202310計算機軟件基礎歐幾里德算法用C語言表示main(){
Intm,n,r;
printf(“請輸入兩個正整數m和n:”);
scanf(“%d%d”,&m,&n);/*讀入正整數m和n*/ while(n!=0)
{r=m%n;/*求m除以n的余數*/m=n;/*用n的值取代m*/n=r;/*用r的值取代n*/}
printf(“最大公因子是:%d\n”,m);}2/6/202311計算機軟件基礎3.1.4怎樣衡量算法的優劣 正確性是對算法的基本要求。除此之外,一般衡量算法的優劣以下3個方面來考慮。(1)算法的時間特性(2)算法的空間特性(3)算法的易理解性2/6/202312計算機軟件基礎3.1.4怎樣衡量算法的優劣 設計算法時,還要注意以下幾點:(1)通用性。一個算法總是針對某類問題設計的,所以對于求解某類問題中的任何一個問題應該是有效的。(2)確定性。算法中的每個步驟都是確定的,在什么情況下做什么都非常明確,沒有含糊不清的地方。(3)有限性。一個算法在執行時,必須經過有限步后停下來,結束算法執行,給出結果,而不能無限地執行下去。2/6/202313計算機軟件基礎3.2 程序設計基礎 程序由計算機基本的操作指令組成,計算機所有的指令稱為機器的指令系統。程序中的每一步都由程序員用計算機能夠理解的計算機語言編寫而成。2/6/202314計算機軟件基礎主要內容3.2.1 程序設計語言3.2.2 結構化程序設計3.2.3 程序設計步驟2/6/202315計算機軟件基礎3.2.1程序設計語言 人們針對不同的應用領域開發出了幾百種編程語言,隨著計算機技術的發展,程序設計語言也不斷地變化、發展,新的語言不斷涌現,老的語言不斷發展、改進,當然有些語言也逐步被淘汰。程序設計語言向著易學、易用、描述問題的能力越來越強的方向發展。
2/6/202316計算機軟件基礎1.程序設計語言的特點和分類(1)機器語言——第一代語言 機器語言是二進制形式的計算機能直接執行的低級語言。它是由機器指令組成的語言,對應不同的機器就有不同的機器語言。機器語言對人來說既難理解又難掌握,編出的程序不易查錯糾錯。計算機剛出現時用的是機器語言。2/6/202317計算機軟件基礎(2)匯編語言—第二代語言 匯編語言比機器語言直觀,它的每一條符號指令與相應的機器指令有對應關系,同時又增加了一些宏、符號地址等功能。 使用匯編語言編寫的程序稱為匯編語言程序,它要經過匯編系統翻譯成機器語言后才能執行。例如,微機上常用的Microsoft的宏匯編語言MASM。2/6/202318計算機軟件基礎(3)高級程序設計語言—第三代語言 高級程序設計語言種類很多,依據語言的性質它們可以分為過程性語言、面向對象語言和專用語言三類。2/6/202319計算機軟件基礎1) 過程性語言 過程性的編程語言適合于那些順序執行的算法。用過程性語言編寫的程序有一個起點和一個終點,程序從起點到終點執行的流程是直線型的。2/6/202320計算機軟件基礎1)過程性語言BASIC是為初級編程者設計的,自從1964年問世以來,已經出現了幾種流行的版本,包括GW-BASIC,QBASIC,TurboBASIC等,它在PC機上得到廣泛應用。它以簡單易學為主要特點。COBOL是發展于20世紀60年代的一種語言,適合于大型計算機系統上的事務處理。COBOL是編譯執行的過程性高級語言,主要被一些專業程序員用來開發和維護大型商業集團的復雜程序。2/6/202321計算機軟件基礎1)過程性語言FORTRAN語言它出現于1954年,是出現最早的高級編程語言之一,有著非常廣泛的用戶群,對于數值計算的應用,至今仍然是一種可選的語言。2/6/202322計算機軟件基礎1)過程性語言Pascal語言開發于1971年,主要用于結構化程序設計的教學,現在在科學、工程計算領域和系統程序設計方面得到廣泛使用,各種計算機系統中都已配置了Pascal語言。在微機上用的TurboPascal語言就是一種開發能力很強的語言。2/6/202323計算機軟件基礎1)過程性語言C語言是20世紀70年代初作為設計UNIX操作系統的語言而研制的。C語言具有很強的功能而且十分靈活,以其高效、簡潔、可移植性強等特點受到計算機用戶的青睞。它還具有類似匯編語言的特性,使程序員能“最接近機器”。目前流行的TurboC語言是在微機上運行的,它的集成環境包含有編輯、編譯、連接、運行和調試程序所需的一切工具。2/6/202324計算機軟件基礎2)面向對象語言 面向對象的程序設計語言是建立在用對象編程方法的基礎上的。程序被看成是正在進行通信的若干對象的集合。程序設計就是定義對象、建立對象間的通信關系。程序運行的結果就是將對象集的初始狀態變成終結狀態(目標狀態),程序中的輸入即是對象間發消息(通信),而輸出則是程序中的對象向顯示器(或打印機)發消息(通信)的結果。2/6/202325計算機軟件基礎2)面向對象語言
20世紀70年代以來,盡管出現了十多種面向對象的程序設計語言,但最有生命力的當屬VisualBasic、C++、Java等。 微軟的VisualBasic(VB)是綜合性的且功能強大的編程語言,具有圖形設計工具、結構化的事件驅動編程模式,使用戶可以既快又簡便地編制出Windows下的各種應用程序。2/6/202326計算機軟件基礎2)面向對象語言
C++成為當今最受歡迎的面向對象程序設計語言之一,因為它既融合了面向對象的能力,又與C語言兼容,保留了C語言的許多重要特性。這就維護了大量開發的C庫、C工具以及C源程序的完整性,使C程序員不必放棄自己已經十分熟悉的C語言,只要補充學習C++提供的那些面向對象的新概念即可。目前常用的有BorlandC++版和VisualC++版。2/6/202327計算機軟件基礎2)面向對象語言
Java語言是20世紀90年代新出現的面向對象的語言,它與C++很相似,但更適用于網絡應用。Java是一種獨立于平臺的語言,Java程序不但能在微機的Windows環境下運行,還同樣能運行在其他機器的Macintosh和UNIX環境下,對于Java程序可以說“一次編寫,多次使用”。近幾年廣泛而成功的應用,證明它將推動Internet和網絡的發展。2/6/202328計算機軟件基礎3)專用語言 專用語言是為特殊的應用而設計的語言。今天仍有數百種專用語言在流通,最有代表性的包括LISP、Prolog、APL和Forth。LISP和Prolog適用于人工智能領域,特別是關于知識表示和專家系統構造;APL是為數組和向量運算設計的簡潔而強有力的語言;Forth是為開發微處理機軟件設計的語言,它支持用戶自定義函數并以面向堆棧方式執行,以提高速度和節省內存。2/6/202329計算機軟件基礎(4)第四代語言 第四代語言(4GL)上升到更高的一個抽象層次,盡管還用不同的語法表示程序結構和數據結構,但已不再涉及太多的算法性細節。迄今,使用最廣的第四代語言是數據庫查詢語言,它支持用戶以復雜的方式操作數據庫。最流行的SQL(StructuredQueryLanguage)結構化查詢語言,支持數據庫的定義和操作。它功能強大,簡單易學。2/6/202330計算機軟件基礎(4)第四代語言 程序生成器(ProgramGenerators)代表更為復雜的一類4GL,它只需要很少的語句就可生成完整的第三代語言程序,它不必依賴預先定義的數據庫作為它的著手點。 此外,一些決策支持語言(DecisionSupportLanguage)、原型語言(PrototypingLanguage)、形式化規格說明語言(FormalSpecificationLanguage)也被認為屬于4GL的范疇。2/6/202331計算機軟件基礎2.程序設計語言的選擇 一項任務可以用多種編程語言來實現,當你為一項工程選擇程序設計語言時,主要考慮以下幾個因素:(1)應用領域;(2)算法和計算復雜性;(3)數據結構復雜性;(4)軟件運行環境;(5)性能方面的需要與實現的條件;(6)軟件開發組成員是否都精通這門語言。2/6/202332計算機軟件基礎2.程序設計語言的選擇 項目所屬的應用領域常常作為首要考慮的因素,例如,C語言經常用于系統軟件的開發,FORTRAN在工程及科學計算領域占主導地位(當然Pascal、BASIC、C也廣為使用),數據庫管理系統在信息處理領域廣泛使用(其中SQL使用較廣),匯編語言在工業控制領域被廣泛使用,面向對象的語言C++正被用來開發大型的軟件系統,Java語言正在網絡應用方面發揮作用等。2/6/202333計算機軟件基礎3.2.2結構化程序設計 程序的編寫就是用程序設計語言把算法程序化。程序員應該根據算法的要求,選擇一種程序設計語言,對算法進行編碼。對該程序設計語言,必須要深刻地理解、熟練地掌握、正確地運用,以便能編出高質量的程序代碼。2/6/202334計算機軟件基礎編寫程序的基本要求語法上的正確性語義的正確性2/6/202335計算機軟件基礎高質量程序的特點運行速度快占用存儲空間小可靠性高易懂性2/6/202336計算機軟件基礎1.三種基本的控制結構(1)順序控制結構(2)選擇控制結構(3)重復控制結構2/6/202337計算機軟件基礎三種基本控制結構共同點(1)只有一個入口(2)只有一個出口(3)結構內的每一部分都有機會被執行(4)結構內沒有死循環(無終止的循環)2/6/202338計算機軟件基礎2.程序設計風格(1)文檔化(documentation)要有效、適當地使用注釋。要使用含義鮮明的符號名。(2)格式化(layout):盡量使程序布局合理、清晰、明了。恰當地利用空格、空行和縮進。自然的程序段之間用空行分開。2/6/202339計算機軟件基礎2.程序設計風格(3)模塊化 把復雜的程序分解為功能單一的程序模塊,每一個程序模塊只完成一個獨立的功能,模塊之間盡量減少聯系,即高內聚、低耦合。2/6/202340計算機軟件基礎3.2.3程序設計步驟 設計一個能解決實際問題的計算機程序需要經過以下幾個過程:(1)建立模型:由實際問題的描述抽象出數學模型,即由物理模型到抽象模型,用形式化方法描述現實世界。(
2)算法設計:給出解決問題的步驟,即算法。同一個問題可以有各種不同的解決辦法,可以從中選取一種最合適的算法。2/6/202341計算機軟件基礎3.2.3程序設計步驟(3)算法表達:選擇一種表達算法的工具,對算法進行清晰的表達。(4)編寫程序:選擇一種程序設計語言,把以上算法程序化,這稱為編寫程序。(5)程序測試:對編寫好的程序進行測試,查找并修改程序中的錯誤。(6)程序文檔編寫與程序維護:整理和編寫程序文檔,以便更好地維護程序。對程序員有用的文檔為程序手冊,對用戶有用的文檔為用戶參考手冊。2/6/202342計算機軟件基礎3.3數據結構基礎
《數據結構》是計算機科學技術專業的一門重要專業基礎課,是教學計劃中的核心課程之一。它不僅是一般程序設計(特別是非數值性程序設計)的基礎,而且是設計和實現編譯程序、操作系統、數據庫系統及其他系統程序和大型應用程序的重要基礎。2/6/202343計算機軟件基礎主要內容3.3.1 什么是數據結構3.3.2 幾種典型的數據結構線性表棧和隊列樹圖2/6/202344計算機軟件基礎3.3.1什么是數據結構數據:一切可輸入計算機并能為計算機所處理的描述客觀事物的符號的集合。例如數、字符、圖形、圖像、聲音等都可以視為數據。數據結構:帶有結構的數據元素的集合,結構反映了數據元素之間存在的某種關系,但不涉及數據的具體內容。
2/6/202345計算機軟件基礎數據結構課程主要研究內容數據結構課程主要研究數據的邏輯結構和物理結構以及它們之間的關系,并對這種結構定義相應運算。 數據的邏輯結構可分為線性數據結構(線性表、棧、隊列、串、數組和文件)和非線性數據結構(樹、圖)。 數據的物理結構指數據元素在主存中存放形式。數據運算是定義在數據的邏輯結構上的,但運算的具體實現要在存儲結構上進行。常用的運算有:檢索、插入、刪除、更新、排序等。2/6/202346計算機軟件基礎3.3.2幾種典型的數據結構1.線性表線性表是n個數據元素的有限序列,可表示為(a1,a2,…,an)。例如:全班學生名單;計算機導論成績等都可以用線性表表示。當n=0時,定義線性表為空表。同一線性表中的元素屬于同一類數據對象。線性表的操作有置空表,求表的長度,取表中元素,在表中查找某元素,插入或刪除一個元素等。2/6/202347計算機軟件基礎線性表的存儲結構線性表的存儲結構通常采用順序存儲和鏈式存儲兩種存儲結構。順序存儲結構是用一組地址連續的存儲單元依次存放線性表的元素。線性表的第i個元素ai的存儲位置為:
LOC(ai)=LOC(a)+(i-1)*C
式中LOC(a)是線性表的第一個數據元a的存儲位置,通常稱為線形表的基地址。2/6/202348計算機軟件基礎線性表的順序存儲結構圖3-9線性表的順序存儲結構1000H1004H1000H+4(i-1)a1元素ai元素存儲地址存儲單元2/6/202349計算機軟件基礎順序存儲結構的缺點①在進行插入或刪除運算時,需要移動大量元素。②在為長度變化較大的線性表預先分配空間時,必須按最大空間分配,使存儲空間不能得到充分利用。③表的容量難以擴充。2/6/202350計算機軟件基礎線性表的鏈式存儲結構 鏈式存儲結構用一組任意存儲單元(可以是連續的或不連續的存儲單元)來存儲線性表的元素。 在這種存儲結構中,每個元素需存儲兩個部分信息:一部分就是元素本身的信息,稱之“數據域”;另一部分則是該元素的直接后繼元素的存儲位置,稱之“指針域”(或“鏈”)。2/6/202351計算機軟件基礎線性表的鏈式存儲結構
(c)刪除一個元素a32/6/202352計算機軟件基礎2.棧和隊列棧和隊列是各種程序設計中廣泛應用的兩種數據結構。從邏輯結構上看,它們是一種運算受限制的線性表,也稱為限定性數據結構。2/6/202353計算機軟件基礎(1)棧(stack)
棧是限定在表尾進行插入和刪除運算的線性表,其表尾稱為棧頂(top),表頭稱為棧底(bottom)。當表中沒有元素時,稱為空棧。
若給定棧S=(a1,a2,…,an),則稱a1是棧底元素,an是棧頂元素。棧的操作是按“先進后出”(LIOF:LastInFirstOut)的原則進行的。2/6/202354計算機軟件基礎棧的邏輯結構圖3-11進棧和出棧示意圖2/6/202355計算機軟件基礎棧的基本操作與存儲結構 棧的基本操作除入棧和出棧外,還有取棧頂位置上的元素、置S為一個空棧、判定S是否為空棧等操作。 在計算機中,棧的存儲結構與線性表的相似,可以分為順序存儲結構和鏈式存儲結構兩種。2/6/202356計算機軟件基礎(2)隊列隊列的邏輯結構與棧相反,隊列(queue)是一種“先進先出”(FIFO:FirstInFirstOut)的線性表。只允許在隊列一端插入,并在另一端進行刪除。2/6/202357計算機軟件基礎(2)隊列 隊列的基本運算與棧的運算類似,主要包括下列五種:入隊列(在隊列Q的隊尾插入元素X),出隊列(刪除隊列Q的隊頭元素),取出隊列Q的隊頭元素,置隊列Q為一個空隊列,判別Q是否為一個空隊列。 隊列的存儲結構也與棧的存儲結構相類似,可分為隊列的順序存儲結構和鏈式存儲結構兩類。2/6/202358計算機軟件基礎3.樹 樹結構是非線性結構,可以用來描述客觀世界中廣泛存在的層次結構的關系。例如人類社會的族譜、各種社會組織機構等都可以表示為樹型結構。
樹形的存儲結構也可分為順序存儲結構和鏈式存儲結構兩類。 下面我們介紹的二叉樹和樹其結構都是樹形的結構。2/6/202359計算機軟件基礎(1)二叉樹 二叉樹是有限個元素的集合,該集合或者為空、或者由一個稱為根的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也稱作一個結點。Ф左子樹右子樹左子樹右子樹
(a)(b)(c)(d)(e)
圖3-13二叉樹的五種基本形態2/6/202360計算機軟件基礎BCDEFGHIJKLMNO123456789101112131415ABCDEFGHI123456789
(a)一棵滿二叉樹
(b)一棵非滿二叉樹A2/6/202361計算機軟件基礎ABDCEFGHIJ12345678910ABDCGEF1234567
(a)一棵完全二叉樹
(b)一棵非完全二叉樹
2/6/202362計算機軟件基礎(2)樹
樹是n個有限數據元素的集合。當n=0時,稱這棵樹為空樹。在一棵非空樹T中:1)有一個特殊的數據元素稱為樹的根結點,根結點沒有前驅結點。2)若n>1,除根結點之外的其余數據元素被分成m(m>0)個互不相交的集合T1,T2,…,Tm,其中每一個集合Ti(1≤i≤m)本身又是一棵樹。樹T1,T2,…,Tm稱為這個根結點的子樹。2/6/202363計算機軟件基礎ABCDEFGIH圖3-16樹結構示意圖2/6/202364計算機軟件基礎(2)樹
如果一棵樹中結點的各子樹從左到右是有次序的,即若交換了某結點各子樹的相對位置,則構成不同的樹,稱這棵樹為有序樹;反之,則稱為無序樹。零棵或有限棵不相交的樹的集合稱為森林。任何一棵樹,刪去根結點就變成了森林。2/6/202365計算機軟件基礎4.圖 圖結構是一種比樹結構更復雜的非線性結構。任意兩個結點之間都可能相關,即結點之間的鄰接關系可以是任意的。圖結構被用于描述各種復雜的數據對象,在自然科學、社會科學和人文科學等許多領域有著非常廣泛的應用。圖的存儲結構可以用順序存儲結構和鏈式存儲結構以及順序存儲結構和鏈式存儲結構的結合,例如鄰接矩陣、鄰接表等。
2/6/202366計算機軟件基礎4.圖圖是由非空的頂點集合和描述頂點之間關系的邊(或者?。┘辖M成,其形式化定義為:G=(V,E); G表示一個圖,V是圖G中頂點的集合,E是圖G中邊的集合,集合E中P(vi,vj)表示頂點vi和頂點vj之間有一條直接連線,即偶對(vi,vj)表示一條邊。2/6/202367計算機軟件基礎v1v4v3v2v5圖3-17無向圖
v4v3v2v1圖3-18有向圖2/6/202368計算機軟件基礎3.4軟件工程基礎軟件工程自1968年提出以來,近40年中,已發展成為用于指導軟件生產工程化,覆蓋軟件開發方法學、軟件工具與環境、軟件工程管理等內容的一門新學科。隨著程序設計從結構化程序設計發展到面向對象程序設計,軟件工程也由傳統的軟件工程演變為面向對象的軟件工程,現在正向更新一代的基于構件的軟件工程邁進。2/6/202369計算機軟件基礎主要內容3.4.1 軟件工程概述3.4.2 軟件生存周期3.4.3 軟件開發模型3.4.4 軟件開發方法2/6/202370計算機軟件基礎3.4.1軟件工程概述1.軟件的發展與軟件危機
20世紀60年代末期所發生的軟件危機,體現在軟件可靠性沒有保障、軟件維護費用不斷上升、進度無法預測、成本增長無法控制、程序人員無限度地增加等各個方面,以致形成人們難以控制軟件開發的局面。計算機領域把大型軟件開發和維護過程中遇到的一系列嚴重問題稱為“軟件危機”(SoftwareCrisis)。2/6/202371計算機軟件基礎2.軟件工程學的主要內容
(1)軟件工程的定義 軟件工程是以系統的、規范的、定量的過程化方法應用于軟件的開發、運行和維護,以及對這些方法的研究。 軟件工程的目標就是在要求的時間內研制開發出具有良好的軟件質量和費用合理的產品。2/6/202372計算機軟件基礎(2)軟件工程學的主要內容軟件工程學的主要內容是軟件開發技術和軟件工程管理。軟件開發技術包含了軟件開發方法、軟件工具和軟件工程環境;軟件工程管理包含了軟件工程經濟學和軟件管理學。2/6/202373計算機軟件基礎軟件開發方法常用的軟件開發方法:結構化方法是采用結構化的技術來完成軟件開發的各項任務;面向對象方法是面向對象方法在軟件工程領域的全面運用;面向構件的方法是創建和利用可復用的軟件構件來解決軟件開發問題。2/6/202374計算機軟件基礎軟件工具
軟件工具(SoftwareTools)是指幫助開發和維護軟件的軟件。 利用軟件工具可提高軟件設計的質量和生產效率。例如,編程時用的編輯程序,測試用的跟蹤程序、靜態分析工具等。眾多的軟件工具組成“工具箱”,供開發人員選用。2/6/202375計算機軟件基礎軟件工程環境 軟件工程環境正是軟件方法和工具的結合,它是相關的一組軟件工具集合,它支持一定的軟件開發方法或按照一定的軟件開發模型組織而成。軟件開發環境的設計目標是提高軟件生產率和改善軟件的質量。2/6/202376計算機軟件基礎軟件工程管理學 軟件工程管理就是對軟件工程生存期內的各階段的活動進行管理,實現按預定的時間和費用成功地完成軟件的開發和維護。 軟件工程管理學的內容包括軟件費用管理、人員組織、工程計劃管理和軟件配置管理等。
2/6/202377計算機軟件基礎軟件工程經濟學 軟件工程經濟學借鑒經濟學的成熟經驗、技術和方法為軟件工程決策服務。
包括軟件成本估算模型分析,軟件生命周期成本估算,以成本效益分析、邊際分析、風險分析為基礎的決策方法以及軟件成本估算技術等。2/6/202378計算機軟件基礎3.4.2軟件生存周期 軟件生存周期是軟件工程的一個重要概念,是一個從用戶需求開始,經過開發、交付使用,在使用中不斷地增補修訂,直至讓位于新的軟件的全過程,是指軟件產品從考慮其概念開始,到該軟件產品不再能使用為止的整個時期。2/6/202379計算機軟件基礎3.4.2軟件生存周期 軟件生存周期一般劃分為軟件計劃、軟件開發和軟件運行維護三個時期組成。
軟件計劃時期分為問題定義、可行性研究兩個階段。
軟件開發時期可分為需求分析、軟件設計、程序編寫、軟件測試等階段。
軟件運行維護時期是指軟件交付使用后在運行過程中需要不斷地維護,使軟件能持久地滿足用戶的需要。2/6/202380計算機軟件基礎3.4.2軟件生存周期1.問題定義:系統要解決的問題是什么?2.可行性研究:問題是否有可行性方案?3.需求分析:目標系統必須做什么?4.軟件設計:怎樣實現(劃分及模塊具體描述) 目標系統?5.程序編寫6.軟件測試:單元、集成及驗收測試;7.軟件運行維護:改正性、適應性及完善性維 護。2/6/202381計算機軟件基礎3.4.3 軟件開發模型 軟件開發模型是軟件開發全部過程、活動和任務的結構框架。 軟件開發模型能清晰、直觀地表達軟件開發全過程,明確規定了要完成的主要活動和任務,用來作為軟件項目開發工作的基礎。 常用的有瀑布模型,快速原型模型,演化模型,螺旋模型,噴泉模型,構件組裝模型,轉換模型和智能模型等。2/6/202382計算機軟件基礎(1)瀑布模型 瀑布模型(WaterfallModel)是1970年WinstonRoyce提出的最早出現的軟件開發模型。 瀑布模型遵循軟件生存期的劃分,明確規定每個階段的任務,各個階段的工作按順序展開,形如瀑布流水,最終得到軟件系統或軟件產品。2/6/202383計算機軟件基礎(1)瀑布模型圖3-19瀑布模型2/6/202384計算機軟件基礎(2)快速原型 快速原型(RapidPrototypeModel)模型是把用戶最初的需求快速建立一個只包括核心功能并可在計算機上運行的程序(原型)讓用戶使用。用戶通過使用這個原型,以便能準確地認識到他們的實際需要是什么,提出進一步的需求,開發人員按照用戶意見快速修改原型,直到得到明確完整的需求,按照這個最后的需求開發出系統。2/6/202385計算機軟件基礎(2)快速原型
圖3-20快速原型模型快速分析形成最終系統快速構造原型運行原型評價原型快速修改系統不滿意滿意2/6/202386計算機軟件基礎(3)演化模型 演化模型(evolutionarymodel)結合了瀑布模型的線性順序的特點和快速原型模型的迭代思想。 演化模型與快速原型的相同之處是迭代的特征,不同之處是演化模型的每一輪都得到一個用戶真正使用的完整版本,而快速原型每一輪得到的是在功能和性能上大大簡化了的版本。2/6/202387計算機軟件基礎(3)演化模型
需求分析設計編碼測試運行需求分析設計編碼測試運行需求分析設計編碼測試運行工作版本n工作版本2工作版本12/6/202388計算機軟件基礎(4)螺旋模型 螺旋模型是由TRW公司的B.Boehm于1988年提出的,它將瀑布模型和演化模型等結合起來,并且強調了其他模型均忽略了的風險分析。螺旋模型更適合于大型軟件的開發,應該說它對于具有高度風險的大型復雜軟件系統的開發是較為實際的方法。2/6/202389計算機軟件基礎圖3-22螺旋模型2/6/202390計算機軟件基礎(5)噴泉模型 噴泉模型(FountainModel)主要用于采用對象技術的軟件開發項目。軟件的某個部分常常被重復工作多次,相關對象在每次迭代中隨之加入漸進的軟件成分。由于對象概念的引入,表達分析、設計、實現等活動只用對象類和關系,從而可以較為容易地實現活動的迭代和無間隙,使其開發自然地包括復用。2/6/202391計算機軟件基礎圖3-23噴泉模型2/6/202392計算機軟件基礎(6)構件組裝模型
構件組裝模型(SoftwareReuseModel)旨在開發具有各種一般性功能的軟件模塊—構件,一般這些構件適用于某個領域(例如建筑、電子、機械、財經等),這些構件設計時考慮其適應各種界面的接口規格,將它們規范化后放入構件庫,供軟件開發時利用。
構件組裝模型利用已有的軟件構件來構造應用軟件系統,軟件開發過程也用螺旋模型,支持軟件開發的迭代方法。2/6/202393計算機軟件基礎(6)構件組裝模型
構件組裝模型在實施開發活動時,要描述項目需要什么構件,然后在構件庫中查找構件,如果有構件可用就直接使用;否則如果有相似的構件就進行修改,修改后的構件用于構造系統并且追加到構件庫中;若沒有需要的構件,就要進行開發,再將開發的新構件用于構造系統并且追加到構件庫中。 建立一個豐富的構件庫,充分復用已有構件,可以減少軟件生產中的重復開發,避免開發人員的重復勞動,提高開發效率,縮短開發周期,降低開發成本。2/6/202394計算機軟件基礎3.4.4軟件開發方法 軟件工程研究的范圍非常廣泛,包括技術方法、工具和管理等許多方面。其中軟件開發的技術方法是軟件工程研究的重點。 當前軟件開發方法主要有結構化軟件開發方法、面向對象開發方法和基于構件的軟件開發方法。2/6/202395計算機軟件基礎1.結構化軟件開發方法 結構化方法是通過按功能將問題分解抽象成模塊,建立模塊和模塊之間的調用關系來進行軟件開發的。針對軟件開發的不同階段和活動,該方法又可以劃分為結構化分析(structuredanalysis,SA)、結構化設計(structureddesign,SD)和結構化程序設計(structuredprogramdesign,SP)3個階段和方法。2/6/202396計算機軟件基礎(1)結構化方法的基本原則 采用結構化方法來分析和解決問題應遵循3個基本原則:1)分解原則2)模塊化原則3)抽象原則2/6/202397計算機軟件基礎(2)結構化分析方法 結構化分析方法給出一組幫助系統分析人員產生功能規約的原理和技術。一般利用圖形表示用戶需求,以數據流圖為基礎,伴以數據詞典,并配上結構化語言、判定表和判定樹等手段,從而達到為解決問題建立模型。2/6/202398計算機軟件基礎(3)結構化設計方法 結構化設計方法給出一組幫助設計人員在模塊層次上區分設計質量的原理與技術,它通常與結構化分析街接起來使用,以數據流圖為基礎得到軟件模塊結構。 第一階段是概要設計,又稱總體設計或初步設計,從整體上回答系統應該如何實現的問題,即確定軟件結構。 第二階段是詳細設計階段,確定每個模塊具體的執行過程,故又稱“過程設計”。2/6/202399計算機軟件基礎(4)結構化程序設計 結構化程序設計是把軟件結構化設計的結果翻譯成用某種結構化程序設計語言書寫的程序。 雖然程序設計的質量取決于軟件設計的質量,但是選用的程序設計語言和編碼的風格對軟件的可靠性、可讀性、可測試性和可維護性產生深遠影響。2/6/2023100計算機軟件基礎2.面向對象的軟件開發方法 面向對象的軟件開發技術(object-orienteddevelopmenttechnology,OOT)以客觀世界中的對象為中心,以類和繼承為構造機制來抽象現實世界。這種技術起源于面向對象的程序設計語言。自20世紀80年代中期到90年代,面向對象的研究重點已從編程語言轉移到設計方法學。面向對象的軟件開發方法包
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股東紀律協議書
- 聯勤機制協議書
- 豬欄租用協議書
- 租用混凝土資質協議書
- 股份平分協議書
- 對塑膠過敏免責協議書
- 大學生入學就業協議書
- 房屋買租賃合同協議書
- 幼兒園煤氣供應協議書
- 租裝載機協議書
- 夜場水煙合作協議書
- 河南省青桐鳴大聯考普通高中2024-2025學年高三考前適應性考試地理試題及答案
- 管道勞務分包協議書
- 2025-2030中國鋰電子電池行業市場深度調研及前景趨勢與投資研究報告
- 江蘇省南京市建鄴區2023-2024學年八年級下學期期末考試物理試題【含答案解析】
- 公立醫院與民營醫院醫聯體合作協議書(2篇)
- 25《慢性子裁縫和急性子顧客》核心素養公開課一等獎創新教學設計
- 退出聯合診所協議書
- 物業管理服務交接方案
- 港股通知識測試題及答案
- 組織學與胚胎學知到課后答案智慧樹章節測試答案2025年春浙江中醫藥大學
評論
0/150
提交評論