程序設計基本概念
編譯程序和解釋程序
彙編語言->源程序->彙編程序->目標程序->運行
高級語言->源程序->解釋程序->中間代碼->運行
->編譯程序->目標語言程序->運行
語法,語義,語用
詞法(保留字):特定文本內語詞的構成和使用的法則
語法(計算表達):程序設計語言的基本符號
語義:按語法規則構成的各個語法成分的含義,分析是否靜態語義錯誤
語用:表示構成語言的各個記號和使用者的關係
程序設計語言分類
1.命令式和結構化
2.面向對象
3.邏輯式
4.函數式
軟件過程模型
瀑布模型(依線性順序連接,以文檔爲驅動,適用於軟件需求很明確的軟件項目模型)
優點:容易理解,管理成本低。
缺點:客戶必須完整,正確和清晰的表單他們的需要。
增量模型(每一個增量均發佈一個可操作的產品)
優點:第一個交付的成本和時間很少,小系統所承擔的風險不大
缺點:如果沒有對用戶的變更要求進行規劃,產生的初始增量可能會造成增量的不穩定。
演化模型(迭代的過程模型)
原型模型(適用於用戶需求不確定,需求經常變化的情況)
原型模型可以分爲:
1.探索性原型
2.實驗性原型
3.演化型原型
螺旋模型(龐大,複雜且高風險的系統)
每個螺旋週期如下四個步驟:
1.制定計劃
2.風險分析
3.實施工程
4.用戶評估
噴泉模型(以用戶需求作爲動力,以對象作爲驅動的模型,適合於面向對象的開發方法)
噴泉模型使開發過程具有迭代性和無間隙性。
優點:提高軟件項目的開發效率,節省開發時間
缺點:開發過程需要大量開發人員,不易管理
基於構建的開發模型
利用預先包裝的構建來構造應用系統
形式化方法模型(嚴格的數學模型)
主要生成計算機軟件形式化數學規格說明
統一過程模型
用例和風險驅動,以架構爲中心,迭代並且增量的開發過程。由UML方法和工具支持。
迭代的意思是將整個軟件開發項目劃分爲許多個小的“袖珍”項目,每一個袖珍項目包含正常軟件項目的所有元素。
敏捷方法
總體目標爲通過儘可能早的,持續的對有價值的軟件的交付。
極限編程(XP)
輕量高效低風險,每週工作40小時
水晶法
不同項目不同策略,項目質量和開發人員的提高,項目和過程的質量也隨之提高
並列爭求法
每30天一個從此,按照需求的優先級來實現產品。。
常用算法
算法的特性:
(1)有窮性:執行有窮步之後結束。
(2)確定性:算法中每一條指令都必須有確切的含義,不能含糊不清。
(3)輸入(>=0)
(3)輸出(>=1)
(4)有效性(可行性):算法的每個步驟都能有效執行並能得到確定的結果。例如a=0,b/a就無效。
2、分治法
子問題相互獨立,將一個難以解決的大問題分解爲一些規模較小的相同問題
(1)特徵:把一個問題拆分成多個小規模的相同子問題,一般可用遞歸解決。
(2)經典問題:斐波那契數列、歸併排序、快速排序、矩陣乘法、二分搜索、大整數乘法、漢諾塔
3、動態規劃法(用於求最優解)
子問題相互不獨立,避免大量的重複運算,用於求解某種具有最優性質的問題
(1)特徵:劃分子問題(最優子結構),並把子問題結果使用數組存儲,利用查詢子問題結果構造最終問題結果。
(2)經典問題:斐波那契數列、矩陣乘法、揹包問題、 LCS最長公共子序列
4、回溯法
可以系統的搜索一個問題的所有解或任意解。
(1)特徵:系統的搜索一個問題的所有解或任一解。有試探和回退的過程。
(2)經典問題:N皇后問題、迷宮、揹包問題
5、貪心法(用於求滿意解)
貪心算法並不是從整體最優考慮,而是某種意義的局部最優
(1)特徵:局部最優,但整體不見得最優。每步有明確的,既定的策略。
(2)經典問題:揹包問題(如裝箱)、多機調度、找零錢問題
加密技術
MD5 報文摘要算法
RC5 明文加密算法
RSA 非對稱加密算法
SHA-1 安全校驗算法,確保信息未被篡改
軟件複雜度度量
Macabe度量法
V(G) = m - n + 2
測試
白盒測試
邏輯覆蓋
語句覆蓋(每條語句至少執行一次)
路徑覆蓋(測試程序中所有可能路徑)
判定覆蓋(每個判定表達式至少獲得一次“真”或“假”)
條件覆蓋(每一條判定語句的每個邏輯條件至少滿足一次)
判定/條件覆蓋
循環覆蓋
循環中的每個條件都得到驗證
基本路徑測試
黑盒測試
等價類劃分
邊界值分析
錯誤推測
因果圖
軟件項目估算模型
COCOMO 估算模型 (精確的易於使用的成本估算模型)
1.基本COCOMO(靜態單變量)
2.中級COCOMO(靜態多變量)
3.詳細COCOMO
系統,子系統,模塊三個層次
COCOMO Ⅱ 估算模型
1.應用組裝模型
2.早期設計階段模型
3.體系結構階段模型