二级公共基础知识总结笔记
文章目錄
- 二級公共基礎知識總結
- 第一部分 數據結構和算法
- 1.1 算法
- 1.2 數據結構
- 1.3 線性表
- 1.4 棧和隊列
- 1.4.1 棧
- 1.4.2 隊列
- 1.5 線性鏈表(線性表的鏈式存儲)
- 1.5.1 線性鏈表的概念及基本運算
- 1.5.2 循環鏈表
- 1.6 樹與二叉樹
- 1.6.1 樹的基本概念
- 1.6.2 二叉樹及其性質
- 1.6.3 二叉樹存儲結構及其遍歷
- 1.7 查找技術
- 1.8 排序技術
- 第二部分 程序設計基礎
- 2.1 程序設計方法與風格
- 2.2 結構化程序設計
- 2.3 面向對象的程序設計
- 第三部分 軟件工程基礎
- 3.1 軟件工程基本概念
- 3.1.1 軟件
- 3.1.2 軟件工程
- 3.2 結構化分析方法
- 3.2.1 需求分析
- 3.2.2 需求分析方法
- 3.2.3 結構化分析方法的常用工具
- 3.2.4 軟件需求規格說明書
- 3.3 結構化設計方法
- 3.3.1 軟件設計概述
- 3.3.2 概要設計(總體設計)
- 3.3.3 詳細設計
- 3.4 軟件測試
- 3.5 程序調試
- 第四部分 數據庫設計基礎
- 4.1 數據庫系統的基本概念
- 4.2 數據模型
- 4.3 關系代數
- 4.4 數據庫設計與管理
二級公共基礎知識總結
下個學期就要開始我的計算機雙學位就讀了。在此之前,我打算先考幾個證來過渡一下,像二級的C、C++、VB、Java、Python、Office都考一下。其中我比較熟悉的只有C和Python,其他的編程語言就要自己突擊一下了。3月我報的是C、C++和VB。為此還買了幾本書。這里總結一下考點,做一下筆記。之后書就不重要了,可以丟了。再刷一些題目,做一些記錄就可以了。開始筆記吧。
第一部分 數據結構和算法
1.1 算法
-
定義:對解決方案的操作步驟的準確而完整的描述。(是數學計算方法和程序間的一個過渡)
-
基本特征:可行性(可以在實際計算工具上執行);確定性(算法每一步的表述沒有歧義);有窮性(操作步驟有限,在有限時間內完成);有足夠的輸入。
總之,算法是指一組嚴謹地定義操作步驟的可以在有限的次數中終止的規則,每一個規則都是可行的、明確的。 -
基本要素:
(1). 對數據對象的運算和操作(由不同計算機系統的指令集規定其基本運算和操作);
(2). 控制結構(就是順序、選擇、循環三種); -
算法基本設計方法:列舉法、歸納法、遞推法、遞歸法、減半遞推法、回溯法
-
算法復雜度:體現在運行該算法所需的計算機的時間和空間資源上,越多則算法復雜度越高。
a. 輸入數據所占的存儲空間b. 程序本身所占的存儲空間c. 算法執行過程中所需要的額外空間,包括算法執行過程中的工作單元和某種數據結構所需要的附加存儲空間
(1). 時間復雜度:執行算法所需的計算工作量,用算法所執行的基本運算次數來度量(注意: 不是具體的執行時間)。常用大O表示法表示。我們經常用平均復雜度和最壞情況復雜度來分析算法的工作量。
(2). 空間復雜度:執行這個算法所需的內存空間。包括3個部分。為降低空間復雜度,主要應減少輸入數據所占的空間和額外空間。如果額外空間不隨問題規模變化,稱該算法in place原地工作。
1.2 數據結構
- 數據結構:是數據+結構(即有關聯的數據元素集合)。數據是需要處理的數據元素(數據的基本單位)的集合,具有共同特征。結構就是關系,是數據集合中各個數據元素之間存在的某種關系。
結構又可以分為邏輯結構——數據集合中各數據元素之間固有的邏輯關系;存儲結構——各數據元素在計算機中的存儲關系。此外,數據結構還研究對各種數據結構的運算。
所以,數據結構=數據+邏輯結構+存儲結構+運算。 - 數據元素間的結構根據不同的特性,分為線性結構、樹形結構、網狀結構(圖形結構)、集合。
- 兩兩數據元素的關系常常用前后件(前驅后繼關系)描述。B=(D+R),D={數據元素集合},R={前后件關系的集合}。 如:B=D+R,D={早餐,中餐,晚餐},R={(早餐,午餐),(午餐,晚餐)}。
- 節點:數據結構的圖形表示中引出的概念,根節點——沒有前驅的節點,葉子節點——沒有后繼的節點,內部節點——除了根節點和葉子節點之外的節點的統稱。
- 存儲結構:包括順序存儲結構和鏈式存儲結構。
- 邏輯結構:包括線性結構和非線性結構。如果數據結構沒有數據元素,稱其為空的數據結構。
| 線性結構 | 一個非空的數據結構,滿足一下兩個條件:有且只有一個根節點;每個節點最多只有一個前驅,也最多只有一個后繼 | (早餐,午餐), (午餐,晚餐) |
| 非線性結構 | 不滿足以上兩個條件的數據結構稱為非線性結構,主要是指樹和圖形結構 |
1.3 線性表
- 定義:表中除第一個元素外的每一個元素,有且只有一個前件,除最后一個元素外,有且只有一個后件。
- 結構特征:只有一個根節點,它無前件;有且只有一個終端節點,它無后件;除根節點與終端節點外,其他所有節點有且只有一個前件,有且只有一個后件。節點個數n就是線性表的長度,n=0時稱為空表。
- 順序表:線性表的順序存儲結構,所有元素所占的存儲空間是連續的,按邏輯順序依次存放。此時邏輯結構與存儲結構是一致的。順序表中前后件兩個元素在存儲空間中緊鄰,前件元素一定存儲在后件元素的前面。只要確定了首地址,順序表中任意元素的地址都可以方便地計算出來。
- 線性表的插入運算:在第i個元素之前插入一個新元素,需要把原來的第i個節點至第n個節點依次往后移一個元素位置,把新節點放在第i個節點位置上。其時間耗費在節點的移動上,所需移動節點的次數不僅與表的長度有關,還與插入的位置有關。
- 線性表的刪除運算:將表的第i個節點刪除,應將第i+1個元素至第n個元素依次向前移一個元素位置,共移動n-i個元素。所需移動節點的次數不僅與表的長度有關,還與刪除的節點位置有關。
- 綜上所述,線性表的順序存儲結構適用于建立之后其中元素不經常變動的情況,而不適用于經常需要進行插入和刪除的線性表。
1.4 棧和隊列
1.4.1 棧
- 定義:特殊的線性表,所有的插入和刪除操作限定在表的同一端(棧頂top)進行,另一端(棧底bottom)是封閉的,既不允許插入元素,也不運行刪除元素。棧中沒有元素時稱為空棧。
- 設有棧S=(a1, a2, a3, a4),則a1為棧底元素,a4為棧底元素。按照a1,a2,a3,a4的順序入棧,a4,a3,a2,a1的順序出棧。
- 特點:Last In First Out,后進先出。即棧頂元素總是最后被插入的元素,也是最早被刪除的元素,棧底元素總是最早被插入的元素,也是最晚被刪除的元素。在順序存儲結構中,棧的插入和刪除不需要移動表中的其他元素。
- 棧的運算之入棧:在棧頂插入一個新元素。
- 棧的運算之出棧:取出棧頂元素并賦予指定變量。
- 棧底運算之讀取棧頂元素:讀取棧頂指針所指向的元素并賦予指定變量。
1.4.2 隊列
- 定義:特殊的線性表,允許在一段(隊尾rear)進行插入,而在另一端(隊頭front)進行刪除的線性表。與生活中的排隊現象是一樣的。
- 設有隊列Q=(q1,q2,q3,q4),則q1為隊頭元素,q4為隊尾元素。按照q1,q2,q3,q4的順序進入,也按照這個順序退出。
- 隊列運算之入隊:隊頭指針front指示當前執行退隊運算的隊頭位置(即當前隊頭元素的前一個位置),隊尾指針rear指向當前執行入隊運算的隊尾位置,往隊列的隊尾插入一個元素稱為入隊,首先隊尾指針進1,然后在rear指針指向的位置插入新元素。
- 隊列運算之出隊:從隊列的排頭刪除一個元素稱為退隊運算。排頭指針front+1,然后刪除front指針指向的位置上的元素。隊頭指針始終指向當前執行退隊操作的隊頭位置。
- 循環隊列及其運算:為充分地利用數組的存儲空間而把數組的前端和后端連接起來,形成一個環形的表,就是循環隊列,是隊列的一種順序存儲結構。常用取余運算來實現循環順序隊列的“循環”。為區分隊空和隊滿的情況可以設置標志。
1.5 線性鏈表(線性表的鏈式存儲)
1.5.1 線性鏈表的概念及基本運算
- 概念:用一組不連續的存儲單元存儲線性表中的各個元素,數據元素間的邏輯關系不能依靠數據元素的存儲單元之間的物理關系來表達,因此每個元素除了存儲自身的信息外,還要存儲一個指示其后件的信息。
- 存儲節點:線性表鏈式結構的基本單位成為存儲節點,包括數據域(存儲數據元素本身的信息)和指針域(存儲一個指向后繼的指針,即存放下一個數據元素的存儲地址)
- 單鏈表:這種鏈表中,每一個節點只有一個指針域。是最基本的鏈表。其中第一個元素沒有前驅,可以是一個指向鏈表中第一個節點的特殊指針,即頭指針HEAD,最后一個元素沒有后繼,其指針域為空,用NULL表示。更加直觀的表示是用箭頭相鏈接的節點序列。在單鏈表中,只能順時針向鏈尾方向進行掃描。
- 雙向鏈表:在實際應用中有時還會用到每個存儲節點有兩個指針域的鏈表,一個存放前驅的地址,稱為左指針(Llink),一個指針域存放后繼的地址,稱為右指針(Rlink)。雙向鏈表的第一個元素左指針為空,最后一個元素的右指針為空。由于有兩個指針,可以從任一節點出發找到其他節點。
- 鏈棧:使用鏈式存儲結構表示棧,組織成一個單鏈表。
- 鏈隊列:使用鏈式存儲結構表示隊列,組織成一個單鏈表。
- 順序表和鏈表的優缺點比較:
| 順序表 | (1) 可以隨機存取表中的任意節點;(2) 無需為表示節點間的邏輯關系額外增加存儲空間 | (1) 其插入和刪除運算效率很低;(2) 存儲空間不便于擴充,不便于對存儲空間的動態分配 |
| 鏈表 | (1) 插入和刪除效率高,只需改變指針即可,不用移動元素;(2) 存儲空間易于擴充且方便空間的動態分配 | (1)需要額外的空間來表示數據元素之間的邏輯關系;(2) 數據的查詢效率較低 |
- 線性鏈表的基本運算:
(1). 查找指定元素:必須從隊頭指針出發,沿著指針域Next逐個節點搜索,直到找到指定元素或鏈表尾部返回NULL為止。
(2). 可利用棧(線性鏈表的存儲單元是不連續的,就存在離散的空閑節點,將計算機存儲空間中空閑的存儲節點利用起來,把其組織成一個帶鏈的棧,就是可利用棧)的插入和刪除:線性鏈表執行刪除時,被刪除節點回收到可利用棧,即把該空閑節點放到可利用棧棧頂,執行入棧操作;線性鏈表執行插入運算時,
需要一個空閑節點,就在可利用棧中取棧頂節點,執行退棧操作。
(3). 插入運算:在鏈式存儲結構下的線性表中插入一個新元素。由于新節點的存儲單元取自可利用棧,只要可利用棧非空,線性鏈表就總能找到存儲新元素的節點,因而不需要規定最大存儲空間,不會發生上溢錯誤。
(4). 刪除運算。
1.5.2 循環鏈表
- 概念:在單鏈表第一個節點之前增加一個沒有元素的表頭節點,HEAD指針指向表頭節點,最后一個節點的指針域指向表頭節點。在循環鏈表中,所有節點的指針構成了一個環狀鏈。
- 與單鏈表的比較:
(1). 對單鏈表的訪問是一種順序訪問,從其中一個節點出發,只能找到它的后繼;在循環鏈表中,可以通過一個節點訪問到表中的所有節點。
(2). 在單鏈表中空表和第一個節點的處理必須單獨考慮;在循環鏈表中,表頭節點是循環鏈表所固有的節點,因此即使在表中沒有數據元素的情況下,表中也至少有一個節點,從而使空表與非空表的處理統一。
1.6 樹與二叉樹
1.6.1 樹的基本概念
- 樹:一種簡單的非線性結構,是以分支關系定義的層次結構。在使用圖形表示數據結構中元素的前后件關系時通常使用有序箭頭,但是樹形結構中使用無向箭頭也可以,因為前后件關系很明確。
| 父節點和根節點 | 樹結構中,每個節點只有一個直接前驅,稱為父節點;沒有直接前驅的節點只有一個,即樹的根節點(樹的根) |
| 子節點和葉子節點 | 在樹結構中,每個節點可以有0、1或多個直接后繼,稱作該節點的子節點。沒有后繼的節點是葉子節點 |
| 度 | 一個節點擁有的后件(直接后繼)個數就是該節點的度。所有節點中最大的度是樹的度 |
| 深度 | 根節點所在的層次為1,其他節點所在的層次等于父節點的層次+1,樹的最大層次稱為該樹的深度。 |
| 子樹 | 在樹中,以某節點的一個子節點為根構成的樹稱為該節點的一棵子樹。 |
1.6.2 二叉樹及其性質
-
二叉樹(Binary Tree)定義:是一個有限的節點集合,該集合或為空,或由一個根節點及其左右不相交的左、右二叉子樹所構成。與樹是相似的,但又有不同。二叉樹不是樹的特殊情況,二者是不同的概念。
-
二叉樹的特點:
(1). 二叉樹可以為空,空的二叉樹沒有節點,非空二叉樹只有一個根節點;
(2). 每個節點最多只有兩棵子樹,即二叉樹中不存在度大于2的節點,二叉樹中的節點可能沒有子節點,可能只有一個左子節點或只有一個右子節點;
(3). 二叉樹的子樹有左右之分,不能任意顛倒次序。 -
二叉樹的基本形態:5種;空,僅有根節點,左右子樹均非空,左子樹非空右子樹為空,左子樹為空右子樹非空。
-
滿二叉樹:除最后一層,每一層上的所有節點都有兩個子節點的二叉樹,一棵平衡的二叉樹。
(1). 其在第i層有2(i-1)個節點,相當于每一層的節點數都滿了;
(2). 一棵深度為K的滿二叉樹共有2k-1個節點;
(3). 滿二叉樹中只有度為2和0的節點,沒有度為1的節點。所有度為0的葉子節點都在最后同一層。 -
完全二叉樹:除最后一層,每一層上的節點數均達到最大,在最后一層上只缺少右邊的若干節點。
(1). 葉子節點只在最后兩層出現;
(2). 對于任一節點,若其右子樹的深度為m,則左子樹的深度為m或m+1。 -
二叉樹的基本性質:
(1). 二叉樹的第K層上面,最多只有2k-1個節點;
(2). 深度為K的二叉樹,最多有2k-1個節點(等比數列求和);
(3). 對任何一棵二叉樹,度為0的節點(葉子節點)總是比度為2的節點多一個;
(4). 具有n個節點的二叉樹,其深度至少為[log2n]+1;
(5). 具有n個節點的完全二叉樹,其深度為[log2n]+1。
(6). 較復雜。
1.6.3 二叉樹存儲結構及其遍歷
- 二叉鏈表:二叉樹常采用鏈式結構。由于每個元素可以有兩個后件,因此每個節點有兩個指針:左指針域執行左子節點,右指針域執行右子節點。因此,二叉樹的鏈式存儲結構也稱為二叉鏈表(非線性結構,不同于雙向鏈表)。
- 二叉樹的遍歷:不重復的訪問二叉樹中的所有節點。一般先訪問左子樹,在訪問右子樹,在先左后右的原則下,根據訪問根節點的次序不同,二叉樹的遍歷分為前序遍歷(DLR)、中序遍歷(LDR)、后序遍歷(LRD)三種。
(1). 前序遍歷:先訪問根節點——> 前序遍歷左子樹——> 前序遍歷右子樹(DLR)
(2). 中序遍歷:先中序遍歷左子樹——> 訪問根節點——> 中序遍歷右子樹(LDR)
(3). 后序遍歷:先后序遍歷左子樹——> 后序遍歷右子樹——> 訪問根節點 (LRD)已知中序遍歷序列和前序遍歷序列(或后序遍歷序列)可以唯一確認一棵二叉樹,但是知道前序和后序則無法唯一確定這棵二叉樹。
1.7 查找技術
查找是插入和刪除等運算的基礎,是數據處理的重要內容。
- 順序查找:最好情況:1次找到;最壞情況:n次比較后找到;平均:n/2次,即O(n)的時間復雜度。特點在于:雖然效率很低,但是在線性表無序(不管使用順序存儲還是鏈式存儲)的時候,或者在采用鏈式存儲結構時,只能用順序查找。
- 二分查找:條件:使用順序存儲結構;線性表是有序表。對于長度為n的有序線性表,在最壞情況下二分查找只需比較log2n次。即O(logn)的時間復雜度。
- 哈希查找:時間復雜度O(1)。
1.8 排序技術
排序是指將一個無序序列整理成按值非遞減順序排列的有序序列。
-
交換類排序法(借助數據元素的交換來排序的方法):冒泡排序: 最壞的情況下,對長度為n的線性表排列需要比較n(n-1)/2次。快速排序則是對冒泡排序的一種本質改進,其平均時間最佳O(nlog2n) ,最壞O(n2)。如初始序列基本有序,則蛻化為冒泡排序。
-
插入類排序法(每次將一個待排序元素按其大小插入到前面的有序子表中):簡單插入排序:持續不斷的清空無序表,插入有序表中,其效率與冒泡排序法基本相同。希爾排序法則有較大改進。
-
選擇類排序法(每趟從待排序的序列中選擇最小的元素,順序放在有序子表中的后面,直到全部序列滿足排序要求為止):簡單選擇排序,最壞的情況下要比較n(n-1)/2次。對于大量數據元素,堆排序則是很有效的。
-
排序方法比較:
方法平均時間最壞情況時間輔助存儲 冒泡排序 O(n2) O(n2) O(1) 快速排序 O(nlog2n) O(n2) O(log2n) 簡單插入排序 O(n2) O(n2) O(1) 簡單選擇排序 O(n2) O(n2) O(1) 堆排序 O(nlog2n) O(nlog2n) O(1)
第二部分 程序設計基礎
2.1 程序設計方法與風格
- 程序設計:指設計、編制、調試程序的方法與過程。不等同于編程。程序設計的方法和風格顯著影響程序的質量。良好的程序設計風格可以使程序結構清晰,便于維護。
- 程序設計規范:
(1). 源程序文檔化:在源程序中包含一些內部文檔,以幫助人們理解和閱讀源程序。考慮符號名的命名、程序注釋(包括序言性注釋和功能性注釋)、視覺組織(空行、空格和縮進)。
(2). 數據說明的方法:詞序規范化、變量安排有序化、使用注釋。
(3). 語句結構:簡單直接,模塊化……
(4). 輸入輸出:方式和格式盡量方便用戶使用;對所有的輸入數據都要進行檢驗,確保輸入數據的合法性;輸入數據時,應允許使用自由格式,允許默認值;輸入一批數據后,最好使用輸入結束標志;給所有的輸出加注釋,并設計良好的輸出報表格式……
2.2 結構化程序設計
- 原則:自頂向下; 逐步求精;模塊化;限制使用goto語句。
- 基本結構:順序結構、選擇結構和循環結構。3種基本結構就足以表達各種其他形式的結構。共同特征是嚴格的只有一個入口和出口。
- 注意事項:使用順序、選擇、循環等有限的控制結構表示程序的控制邏輯;選用的控制結構只允許有一個入口和出口;程序語句組成容易識別的功能模塊,每個模塊只有一個入口和一個出口;復雜結構應該用基本控制結構進行組合嵌套來實現;語言中沒有的控制結構,應采用前后一致的方法模擬;嚴格控制goto語句的使用。
- 總之,按結構化程序設計出的程序具有明顯的優點:程序易于理解、使用和維護;提高呢編程工作的效率,降低了軟件開發成本。
2.3 面向對象的程序設計
基本概念:
- 對象(Object):系統中用于描述客觀事物的一個實體,是構成系統的一個基本單位,由一組靜態特征(屬性)和它可執行的一系列方法(行為)組成。其中的屬性即對象包含的信息,一般只能通過執行對象的操作來改變。方法則是對象的動態行為。
對象的基本特點:標識唯一性;分類性(可以將具有相同屬性和操作的對象抽象成類);多態性(同一個操作可以是不同對象的行為);封裝性(對象內部對外是不可見的);模塊獨立性好(完成對象功能所需的元素都被封裝在對象內部)。 - 類(Class):具有共同屬性和方法的對象的集合,是關于對象的抽象描述,反映屬于該對象類型的所有對象的性質。
- 實例(Instance):一個具體對象則是其對應類的一個實例。
- 消息(Message):消息傳遞是對象間通信的手段,一個對象通過向另一個對象發送對象來請求其服務。一個消息由接受消息的對象名稱、消息選擇符、零或多個參數組成。消息只告知接受對象需要完成什么操作,而不指示怎樣完成操作。
- 繼承:直接獲得已有的性質和特征,而不必重復定義它們。一個子類可以直接繼承父類的全部描述,而且可以定義自己的屬性和方法。其中,繼承又分成單繼承和多繼承。
- 多態:同樣的消息可以被不同的對象接受而產生不同的行為。即子類對象可以像父類對象那樣使用,同樣的消息既可以發給父類也可以發給子類對象。
- 優點:與人類習慣的思維方法一致;穩定性好;可重用性好;容易開發大型軟件產品;可維護性好。
第三部分 軟件工程基礎
3.1 軟件工程基本概念
3.1.1 軟件
- 定義:是由(機器可執行的)程序、數據和(不可執行的)相關文檔組成的完整集合。
(1). 程序:軟件開發人員依據用戶需求開發的、用某種程序設計語言描述的、能夠在計算機中執行的語句序列。
(2). 數據:使程序能夠正常操作信息的數據結構。
(3). 文檔:與程序開發維護使用相關的文件資料。 - 特點:(1). 是一種邏輯實體;(2). 沒有明顯的制作過程;(3). 在使用期間不存在磨損老化問題,損失方式特殊;(4). 對硬件和環境具有依賴性,給軟件的移植帶來問題;(5). 軟件復雜性高,成本昂貴;(6). 軟件開發涉及諸多社會因素。
- 分類:(1). 系統軟件:管理計算機資源,提高使用效率,為用戶提供各種服務的軟件。(2). 支撐軟件:介于系統軟件和應用軟件之間,輔助用戶開發軟件的工具型軟件。 (3). 應用軟件:為了應用于特定軟件而開發的軟件。
- 軟件危機:泛指在計算機軟件的開發和維護中所遇到的一系列嚴重問題,幾乎所有軟件都不同程度存在這些問題(軟件開發生產率低;軟件質量難以保證;軟件開發進度無法控制;軟件成本不斷提高;軟件維護程度低下;軟件需求的增長得不到滿足)。主要原因在于:軟件本身的特點,如復雜度高,規模龐大;人們對軟件開發維護有許多錯誤認識和做法,對軟件的特性認識不足。為此,誕生了軟件工程的概念。
3.1.2 軟件工程
- 軟件工程:應用于計算機軟件的定義、開發和維護的一整套方法、工具、文檔、實踐標準、工序。重要三要素是方法(技術手段)、工具、過程。
- 軟件工程目標和研究內容(軟件開發技術和軟件工程管理)
- 軟件工程的原則:
| 抽象 | 分層次抽象,自頂向下、逐層細分控制軟件開發的復雜性 |
| 信息隱蔽 | 模塊設計成黑箱,不讓模塊使用者直接訪問 |
| 模塊化 | 模塊化有助于信息隱蔽和抽象,有助于表示復雜的系統 |
| 局部化 | 模塊間松耦合,模塊內部強內聚,有助于控制分解的復雜性 |
| 確定性 | 軟件開發過程中所有概念的表述是無歧義的、確定的、規范的 |
| 一致性 | 各個模塊使用一致的概念、符號;程序內外部接口一致;系統規格說明書和系統行為一致 |
| 完備性 | 軟件系統不丟失任何重要成分,完全實現系統所要求的功能 |
| 可驗證性 | 開發大型的軟件系統需要對系統自頂向下、逐層分解,遵循系統易于檢查、測試、評審的原則 |
- 軟件工程過程:是使用適當的資源為開發軟件進行的一組開發活動,在過程結束時將輸入(用戶要求)轉化為輸出(軟件產品)。
基礎活動如下:
| 軟件規格說明 | 規定軟件的功能及其運行時的限制 |
| 軟件開發 | 產生滿足規格說明的軟件 |
| 軟件確認 | 確認能夠滿足用戶提出的要求 |
| 軟件演進 | 為滿足用戶要求的變更,軟件必須在使用的過程中不斷演進 |
- 軟件生命周期:一個軟件從提出、實現、使用、維護和停止使用與廢棄的過程稱為軟件生命周期。分為3個時期和8個階段。
| 軟件定義期 | 問題定義 | 確定要解決的問題是什么 | |
| 可行性研究與計劃制定 | 決定該問題是否存在解決方法可行,指定完成任務的實施計劃 | 可行性分析報告 | |
| 需求分析 | 對于開發軟件提出的需求進行分析并給出詳細定義 | 軟件規格說明書、初步的用戶手冊 | |
| 軟件開發期 | 軟件設計 | 分為概要設計和詳細設計,給出軟件的結構、模塊劃分及設計流程 | 概要和詳細設計說明書、測試計劃初稿 |
| 軟件實現 | 在軟件設計的基礎上編寫程序 | 用戶手冊、操作手冊和單元測試計劃 | |
| 軟件測試 | 在設計測試用例的基礎上檢驗軟件的各個組成部分 | 測試分析報告 | |
| 運行維護期 | 運行和維護 | 將已交付的軟件投入運行,同時不斷地維護,進行必要而且可行的擴充和刪改 |
- 軟件開發工具:從單項工具逐步向集成工具發展;軟件開發環境:是全面支持軟件開發全過程的軟件工具的集合。
3.2 結構化分析方法
也稱傳統方法學,使用結構化方法完成軟件開發的各項任務。
3.2.1 需求分析
- 軟件需求是用戶對目標軟件系統在功能、性能和設計約束上的期望。需求分析的任務是發現需求、定義需求的過程,將創建所需的數據模型、功能模型和控制模型。
- 需求分析階段的工作:
(1). 需求獲取:了解用戶情況,發現用戶問題和對目標系統的完整、準確和具體的需求。
(2). 需求分析:整合獲得的需求,得出系統的解決方案和目標系統的邏輯模型。
(3). 編寫需求規格說明書:這是需求分析的階段性成果。
(4). 需求評審:從一致性、完整性、現實性、有效性復審軟件需求規格說明書。
3.2.2 需求分析方法
- 結構化分析方法:面向數據流的結構化分析(SA);面向數據結構的Jackson系統開發;面向數據結構的結構化數據系統開發方法。面向對象分析方法:面向對象分析是面向對象軟件工程方法的第一個環節。
- 結構化分析方法:使用數據流圖、數據字典、結構化英語、判定表和判定樹等工具來建立一種新的稱為結構化規格說明的目標文檔。
3.2.3 結構化分析方法的常用工具
- 數據流圖:分析員和用戶間極好的通訊工具。
| 數據流 | 有向箭頭 | 沿箭頭方向傳輸數據,在旁邊標注數據流名 |
| 加工過程 | 圓形 | 轉換,輸入數據經過加工、交換產生輸出 |
| 數據存儲文件 | 類長方形 | 表示存儲過程中存放各種數據的文件 |
| 源/潭 | 長方形 | 表示系統與環境的接口,屬于系統之外的實體 |
- 數據字典:對數據流圖中所有元素的定義的集合,是結構化分析的核心,與數據流圖共同構成系統的邏輯模型。其中共有4種類型的條目,數據流、數據項、數據存儲和加工。
- 判定表:如果一個加工邏輯有多個條件、多個操作并且在不同場合下執行不同的操作,可以使用判定表來描述。一個十字分成四個區域,左上部是基本條件項,列出各種可能的條件;右上部成為條件項,列出各種可能的條件組合;左下部是基本動作項,列出所有的操作;右下部是動作項,列出在對應的條件組合下所選的操作。
- 判定樹:可以用判定表表示的加工邏輯都可以用判定樹表示。
3.2.4 軟件需求規格說明書
這是需求分析階段的最后成果,是軟件開發過程中的重要文檔之一,衡量它的標準如下:
| 正確性 | 首先正確體現系統的真實需求 |
| 無歧義性 | 對每一個需求沒有兩種解釋 |
| 完整性 | 涵蓋用戶對系統的所有需求,包括功能需求、性能需求、接口需求、設計約束等 |
| 可驗證性 | 每一個需求都可在有限代價的有效過程中驗證確認 |
| 一致性 | 各個需求的描述之間不能有邏輯上的沖突 |
| 可理解性 | 應盡量少使用計算機的概念和術語 |
| 可修改性 | 結構風格在需要的時候不難改變 |
| 可追蹤性 | 每個需求的來源和流向是清晰的 |
3.3 結構化設計方法
在需求分析階段已經使用數據流圖和數據字典等工具建立了系統的邏輯模型,即做什么,接下來解決怎么做的問題。
3.3.1 軟件設計概述
- 軟件設計基礎:基本目標是用抽象概括的方式確定目標系統如何完成預定的任務,確定系統的物理模型,是開發階段最重要的步驟。
| 按工程管理角度劃分 | 概要設計 | 將軟件需求轉化為軟件體系結構,確定系統及接口、全局數據結構或數據庫模式 |
| 詳細設計 | 確認每個模塊的實現算法和局部數據結構,用適當方法表示算法和數據結構的細節。 | |
| 按技術觀點劃分 | 結構設計 | 定義軟件系統各主要部件之間的關系 |
| 數據設計 | 將分析時創建的模型轉換成數據結構的定義 | |
| 接口設計 | 描述軟件內部、軟件和協作系統之間以及軟件與人之間如何通信 | |
| 過程設計 | 把系統結構部件轉換成軟件的過程描述 |
- 軟件設計基本原理與原則:
(1). 模塊化,但要避免模塊的數目過多或過少;(2). 抽象;(3). 信息隱藏——指出設計和確定模塊時應使得一個模塊中包含的信息對不需要這些信息的模塊來說是不能訪問的;(4).模塊獨立性——每個模塊完成一個相對獨立的特定子功能,并且和其他模塊間的關系很簡單。模塊的獨立性是設計好壞的關鍵,可以用耦合和內聚兩個定性指標來衡量,一般來說,要求模塊之間的耦合盡可能弱,即模塊盡可能獨立,且模塊的內聚程度盡可能高。實踐表明,內聚更加重要,應把更多精力放到提高模塊的內聚程度上。
3.3.2 概要設計(總體設計)
- 基本任務:
(1). 設計軟件系統結構:過程如下:按功能劃分模塊確定每個模塊功能確定模塊調用關系確定模塊之間接口評估模塊結構質量 (2). 設計數據結構及數據庫:實現需求定義和規格說明中提出的數據對象的邏輯表示。
(3). 編寫概要設計文檔:概要階段的文檔有概要設計說明書、數據庫設計說明書、集成測試計劃。
(4). 概要設計文檔評審:對其進行評審。 - (程序)結構圖:構成的基本形式有順序形式、選擇形式和重復形式。4種經常使用的模塊類型:傳入模塊、傳出模塊、變換模塊和協調模塊。軟件的結構是一種層次化的關系,支持了軟件的各個模塊之間的關系。
| 模塊 | 一個矩形代表一個模塊 | 矩形 |
| 調用關系 | 矩形之間的調用關系用矩形之間的箭頭表明 | 箭頭或直線 |
| 信息 | 用帶注釋的箭頭表名模塊調用過程中來回傳遞的信息 | 數據信息是帶空心圓的箭頭,控制信息則是帶實心箭頭 |
| 協調模塊 | 對所有下屬模塊進行協調和管理 | |
| 傳入模塊 | 從下級模塊取得數據,經處理傳到上級模塊 | |
| 變換模塊 | 從上級模塊取得數據,經過特定的處理轉換成其他形式,再傳送給上級模塊 | |
| 傳出模塊 | 從上級模塊取得數據,經處理傳給下級模塊 | |
| 上級模塊 | 控制其他模塊的模塊 | |
| 從屬模塊 | 被另一個模塊調用的模塊 | |
| 原子模塊 | 樹中位于葉子節點的模塊,沒有從屬節點的模塊 | |
| 深度 | 表示控制的層數 | |
| 寬度 | 最大模塊數的層的控制寬度 | |
| 扇入 | 調用一個給定模塊的模塊個數 | |
| 扇出 | 由一個模塊直接調用的其他模塊個數 |
- 面向數據流的設計方法:在需求分析階段產生了數據流圖,而面向數據流的結構化設計能夠很輕易的將數據流圖轉換成程序結構圖。
(1). 數據流圖的類型:數據流圖的信息流可分為兩種類型:變換流和事務流。相應地,數據流圖可分為變換型和結構型兩種類型。
(2). 變換型:信息沿著輸入通路進入系統,從外部形式變成內部形式;然后經過變換中心(主加工);再沿著輸出通路變換成外部形式離開軟件系統。這種信息流就是變換流,這種數據流圖就是變換流圖。
(3). 事務型:信息沿著輸入通路到達一個事務中心,事務中心根據輸入信息的類型在若干個處理序列中選擇一個來執行。這就是事務流,有明顯的事務中心,各活動流以事務為起點成輻射狀流出。
(4). 面向數據流的結構化設計過程:確認數據流圖的類型;說明數據流的邊界;把數據流圖映射為結構圖,根據數據流圖的類型進行事務分析或變換分析;根據設計原則進行結構優化。
(5). 結構化設計的原則:提高模塊獨立性;模塊規模應適中;深度、寬度、扇入和扇出都適當;模塊的作用域應位于控制域之內;降低模塊之間接口的復雜程度;設計單入口單出口的模塊;模塊功能可以預測。
3.3.3 詳細設計
- 任務:為軟件結構圖中的每一個模塊確定實現算法和局部數據結構。
- 過程設計工具:
(1). 程序流程圖:方框表示加工步驟;菱形表示邏輯條件;箭頭表示控制流。程序流程圖不便于表示數據結構。
(2). N-S圖:用方框圖來代替傳統的程序流程圖。
(3). PAD圖:問題分析圖,用二維樹形結構表示程序的控制流,將這種圖翻譯成程序代碼較容易。
(4). PDL:過程設計語言,也稱為偽碼。
3.4 軟件測試
在軟件投入使用之前盡可能多的發現軟件中的錯誤,是保證軟件質量、可靠性的關鍵步驟,是對軟件規格說明、設計和編碼的最后復審。
- 軟件測試目的:根本目的在于盡可能多的發現并排除軟件中隱藏的錯誤。
- 軟件測試準則:
(1). 所有測試都應追溯到用戶需求;
(2). 在測試之前制定測試計劃,并嚴格執行;
(3). 充分注意測試中的群集現象;
(4). 避免由程序的編寫者測試自己的程序;
(5). 不可能進行窮舉測試;
(6). 妥善保存測試計劃、用例、出錯統計和分析報告,為維護提供方便。 - 軟件測試方法:根據軟件是否被執行,分為靜態和動態測試。按照功能分,可以分為白盒測試和黑盒測試。
(1). 靜態測試:包括代碼檢查、靜態結構分析、代碼質量度量等;不實際運行軟件,而是通過人工進行分析。
(2). 動態測試:上機測試,關鍵在于設計合理、高效的測試用例。測試用例的設計方法分為白盒測試方法和黑盒測試方法。
(3). 白盒測試:(又稱結構測試或邏輯驅動測試)把程序看成裝在一只透明的白盒子里,測試者必須完全了解程序的結構和處理過程。根據程序的內部邏輯來設計測試用例。其主要是在程序內部進行,完成軟件內部操作的驗證。主要技術有邏輯覆蓋測試和基本路徑測試等。
邏輯覆蓋測試:語句覆蓋(選擇足夠多的測試用例,使被測程序中的每個語句至少執行一次,是邏輯覆蓋中的基本覆蓋,但是沒有關注判斷的條件中隱含的錯誤)和路徑覆蓋(執行足夠的測試用例,使程序中所有可能的路徑至少經歷一次)、判定覆蓋(對每個判斷條件的取值分支T或F都要測試一次)、條件覆蓋(設計測試用例保證程序中的每個判斷的每個條件的可能取值至少執行一次,但可能忽略全面的判斷覆蓋的要求)、判斷-條件覆蓋(使判斷中每個條件的所有可能取值至少執行一次,同時每個判斷的所有取值分支至少執行一次)。
基本路徑測試:根據控制流程確定程序的基本環路集合,由此導出一組測試用例對每一組獨立執行路徑進行測試。環路復雜度=程序流程圖中的判斷框個數+1就是要設計測試用例的基本路徑數。
(4). 黑盒測試:把程序看成一只黑盒子,完全不考慮程序的結構和處理過程,根據規格說明書的程序外部功能來設計測試用例,檢查是否符合規格說明的要求。常見測試法有:等價類劃分法、邊界值分析法(設計測試用例使之剛好運行在邊界情況附近,揭露錯誤)、錯誤推測法(列出所有的錯誤和易錯情況表,基于此設計測試用例;針對性強,非常實用,但是需要豐富經驗)等。 - 軟件測試的實施:過程:單元測試、集成測試、確認測試(驗收測試)、系統測試。
(1). 單元測試:針對單個模塊(軟件設計的最小單位)測試,對軟件進行正確性的檢驗,以盡早發現模塊內部可能存在的各種錯誤。它在編碼階段進行,依據是源程序和詳細設計說明書。采用靜態或動態測試,動態以白盒測試法為主,測試其結構,黑盒測試法為輔,測試其功能。因為測試的是單模塊,需要一些輔助模塊去模擬與被測模塊相聯系的其他模塊,即為測試模塊設計驅動模塊(相當于主程序,接收測試數據,傳給被測模塊,輸出結果)和樁模塊(虛擬子程序,代替被測模塊調用的模塊,接受被測模塊的調用,默認被調用的子模塊的功能,將結果返回被測模塊),構成其測試環境。
(2). 集成測試:組裝測試,對各模塊按照設計要求組裝成的程序進行調試,主要目的是發現與接口有關的、設計階段產生的錯誤。依據是概要設計說明書,通常采用黑盒測試。內容主要是軟件單元的接口測試、全局數據結構測試、邊界條件測試、非法輸入測試。方式可分為非增量方式集成(先分別測試每個模塊,再按設計要求組裝在一起進行整體測試)和增量方式集成(把要測試的模塊和已經測試的模塊連接起來測試,測試完把下一個模塊連接進來測試)。
(3). 確認測試:檢查軟件的功能、性能是否與用戶需求一致,依據是需求規格說明書,常采用黑盒測試。首先測試程序是否滿足規格說明書上的各種要求,然后進行軟件配置復審,保證軟件配置齊全、分類有序。
(4). 系統測試:在實際運行環境中進行的一系列集成測試和確認測試,目的是在真實的系統工作環境檢驗軟件是否能與系統正確連接,發現軟件與系統需求不一致的地方。
3.5 程序調試
在對軟件進行成功的測試之后進行程序的調試,診斷和改正程序中的錯誤。
-
程序調試基本概念:測試發現錯誤,調試是在成功測試(發現了錯誤的測試)之后排除錯誤的過程。軟件測試貫穿整個軟件生命期,調試主要在開發階段。
-
程序調試的基本步驟:
(1). 錯誤定位;(2). 修改設計和代碼,排除錯誤;(3). 進行回歸測試,防止引進新的錯誤。 -
程序調試的原則:
(1). 錯誤定性和定位的原則: 集中思考分析與錯誤現象有關的信息;不鉆死胡同;不要過分依賴調試工具;避免用試探法;
(2). 修改錯誤的原則:錯誤可能群集;要修改錯誤本身;必須進行回歸測試;修改源代碼程序,不要改變目標代碼。 -
軟件調試方法:從是否追蹤和執行程序的角度,分為靜態(主要調試手段)和動態調試(通過人的思維分析代碼調錯,輔助手段)。
(1). 強行排錯法:傳統方法,很低效;設置斷點,程序暫停,觀察程序狀態和繼續運行程序。
(2). 回溯法:相當常用,適合小程序;大程序回溯可能性很低。
(3). 原因排除法:二分法,歸納法,演繹法。都可以使用調試工具來輔助完成,但是工具不能完全替代。
第四部分 數據庫設計基礎
4.1 數據庫系統的基本概念
- 數據:描述事物的符號記錄。數據庫中的數據被稱為持久性數據,而存放在內存的數據稱為臨時性數據。
- 數據庫:長期存儲在計算機內、有組織的、集成的、可共享的數據集合,冗余度小,數據獨立性和擴展性高。
- 數據庫管理系統:系統軟件,負責數據庫中的數據組織、數據操縱、數據維護、控制、保護和數據服務。
- 數據語言:包括交互式命令語言和宿主型語言,用于定義、操縱和控制數據。
- 數據庫管理員:管理數據庫的規劃、設計、維護、監視的專人。
- 數據庫系統:由以上的幾個部分組成。
- 數據庫應用系統:在數據庫系統的基礎上,使用數據庫管理系統軟件和數據庫開發工具書寫出應用程序,開發出應用界面,就構成了數據庫應用系統。由數據庫系統、應用軟件、應用界面組成。
- 數據庫技術的發展階段:
| 應用背景 | 科學技算 | 科學計算、管理 | 大規模管理 |
| 硬件背景 | 無直接存取設備 | 磁盤、磁鼓 | 大容量磁盤 |
| 軟件背景 | 無操作系統 | 有文件系統 | 數據庫管理系統 |
| 處理方式 | 批處理 | 聯機實時處理、批處理 | 分布處理、聯機實時處理和批處理 |
| 特點 | |||
| 數據管理者 | 人 | 文件系統 | 數據庫管理系統 |
| 數據面向的對象 | 某個應用程序 | 某個應用程序 | 現實世界 |
| 數據共享程度 | 無共享,冗余度大 | 共享性差,冗余度高 | 共享性大,冗余度小 |
| 數據獨立性 | 不獨立,完全依賴于程序 | 獨立性差 | 具有高度的物理獨立性和邏輯獨立性 |
| 數據結構化 | 無結構 | 記錄內部有結構,整體無結構 | 整體結構化,用數據模型描述 |
| 數據控制能力 | 由應用程序控制 | 由應用程序控制 | 由DBMS提供數據安全性、完整性、并發控制和恢復 |
- 未來的數據庫系統應支持數據管理、對象管理、知識管理,應具有面向對象的基本特征。
- 數據庫系統的基本特點:數據集成性、數據共享性高,冗余性低(保證系統一致性的基礎)、數據獨立性高、數據統一管理與控制。
- 數據庫系統體系結構:(應用——>外模式——>外模式/概念模式映射——>概念模式——>概念模式/內模式的映射——>內模式——>數據庫) 三級模式和兩級映射。
(1). 數據庫系統的三級模式結構:
a. 外模式:也稱子模式或用戶模式,是用戶的數據視圖,是用戶所能夠看見和使用的局部數據的邏輯結構和特征的描述,是與某一應用有關的數據的邏輯表示。外模式通常是模式的子集,它反映了用戶對數據的要求。
b. 概念模式:模式,是數據庫系統中全局數據邏輯結構的描述,全體用戶的公共數據視圖。概念模式處于中層,反映了設計者的數據全局邏輯要求。
c. 內模式:又稱物理模式,是數據物理結構和存儲方式的描述,是數據在數據庫內部的表示方式。內模式處于最底層,反映了數據在計算機物理結構中的實際存儲方式。
三個級別的模式層次反映了它們的不同環境和要求,其中內模式處于底層,概念模式處于中層,外模式處于最外層。一個數據庫只有一個內模式和概念模式,可以有多個外模式。
(2). 數據庫系統的二級映射:
這是在三級模式之間提供的兩級映射:外模式/概念模式的映射(使數據庫中的數據具有較高的邏輯獨立性),概念模式/內模式的映射(使數據庫中的數據具有較高的物理獨立性)。
4.2 數據模型
現有的數據庫系統都是基于某種數據模型而建立的,數據模型是數據庫系統的基礎。
-
數據模型三要素:
(1). 數據結構:對系統靜態特征的描述,是數據模型的核心。
(2). 數據操作:對系統動態特征的描述,是允許的操作的集合。
(3). 數據約束:特定的語義約束條件,保證數據的正確、有效、相容。 -
數據模型的類型(按不同的應用層次分成三種):
(1). 概念數據模型(概念模型):一種面向客觀世界、面向用戶的模型,與具體的平臺和系統無關。
(2). 邏輯數據模型(數據模型):面向數據庫系統的模型,著重與數據庫系統一級的實現。
(3). 物理數據模型(物理模型):面向計算機物理實現的模型。 -
E-R模型:實體聯系模型。有1:1、1:n、n:m三種聯系。可以直觀的用E-R圖表示。屬于概念模型。
-
層次模型:用樹形結構表示實體及其聯系,節點是實體,樹枝是聯系,從上到下是一對多的聯系,有且只有一個根節點。
-
網狀模型:用網狀結構表示實體及其聯系,是層次模型的擴展,允許一個或多個節點無父節點,一個節點可以有多于一個的父節點。
-
關系模型:用二維表來表示關系,以其為基本結構建立的模型稱為關系模型。
4.3 關系代數
表示關系模型的數據操作的相關理論——關系代數和關系演算。
- 關系代數的基本運算:
(1). 投影運算:從關系模式中指定若干屬性組成新的關系。是對列屬性的去重復。
(2). 選擇運算:從關系模式中找出滿足指定條件的數據項的操作稱為選擇。
(3). 笛卡爾積:設有n元關系R和m元關系S,它們分別有p和q個記錄,則笛卡爾積為RxS,是一個m+n元關系,記錄有pxq個。 - 關系代數的擴充運算:
(1). 交。集合運算之一,是兩個關系的交集。
(2). 連接和自然連接。連接是從兩個關系的笛卡爾積中選擇滿足給定屬性間的一定條件的那些元組。其中的一個特例是自然連接,要求兩個關系中進行比較的是相同的屬性,并且進行等值連接,還有去掉重復的屬性列。
(3). 除。近似于笛卡爾積的逆運算。
(4). 并。集合運算之一,是兩個關系的并集。 - 關系代數的應用實例:關系代數雖然形式簡單,但它足以滿足對表的查詢、插入、刪除和修改操作。
4.4 數據庫設計與管理
數據庫設計是數據應用的核心,根本目標是要解決數據共享問題。
- 數據庫設計:是對于一個給定的應用環境,構造最優的數據庫模式,建立性能良好的數據庫,滿足用戶的信息需求(靜態要求)和處理需求(動態要求)。
- 數據庫設計方法:面向數據的方法:以信息需求為主,兼顧處理需求;面向過程的方法:以處理需求為主,兼顧信息需求。面向數據的方法是主流。
- 數據庫設計的步驟:
生命周期法:
(1). 需求分析階段:成果:需求說明書。設計數據庫的起點,收集到的基礎數據和數據流程圖是下一步設計概念結構的基礎。方法主要有兩種:結構化分析(SA,自頂向下,逐步分解;使用數據流程圖和數據字典,數據字典包含數據項、數據結構、數據流、數據存儲和處理過程)和面向對象分析。
(2). 概念設計階段:成果:概念數據模型。分析數據間的語義關聯,在此基礎上建立一個數據的概念模型。方法有集中式模式設計法(設計簡單方便,強調統一一致,適合小型單位)和視圖集成設計法(先做局部在合并;選擇局部應用,視圖設計——逐一設計分E-R圖,視圖集成——合并E-R圖,得到概念模式,常見的沖突有命名、概念、域、約束沖突;策略:自頂向下,自底向上,自內向外)。
(3). 邏輯設計階段:成果:邏輯數據模型。將E-R圖轉換為關系模式(即關系數據模型),這就是邏輯設計的主要內容。在關系模式的基礎上進行關系視圖設計(外模式設計,用戶子模式設計),關系視圖具有優點(提供數據邏輯獨立性;能夠適應用戶對數據的不同需求;有一定的數據保密功能)。其后還要進行規范化。
(4). 物理設計階段:成果:數據庫內模型。是為一個給定的邏輯模型選取一個最適合應用要求的物理結構的過程。一般留給用戶的內容有索引設計、集簇設計、分區設計。 - 數據庫管理:對數據庫中的共享資源進行維護和管理,這是數據庫管理員的責任。包含數據庫的建立、調整、重組、安全性和完整性控制、故障恢復、數據庫監控6大功能。
總結
以上是生活随笔為你收集整理的二级公共基础知识总结笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猴子吃桃问题的函数递归解决方案
- 下一篇: Docker部署程序员简历