軟件工程導論算法
1.軟件的概念?(判斷?)數據庫
雖然軟件對於現代的人並不陌生,但不少人對於軟件的理解並不許確,「軟件就是程序,軟件開發就是編程序」的這種錯誤觀點仍然存在。編程
什麼是軟件數組
2.什麼是軟件?數據結構
軟件是計算機系統中與硬件相互依存的另外一部分,它是包括程序,數據及其相關文檔的完整集合。框架
程序 按事先設計的功能和性能要求執行的指令序列。編程語言
數據 使程序能正常操縱信息的數據結構。工具
文檔 與程序開發,維護和使用有關的圖文材料。性能
2.軟件危機及其具體表現?單元測試
主要表現爲:軟件的發展速度遠遠滯後於硬件的發展速度,不能知足社會日益增加的軟件需求。軟件開發週期長、成本高、質量差、維護困難。
(1)經費預算常常突破,完成時間一再拖延。因爲缺少軟件開發的經驗和軟件開發數據的積累,使得開發工做的計劃很難制定。主觀盲目制定計劃,執行起來與實際狀況有很大差距,使得開發經費一再突破。因爲對工做量估計不足,對開發難度估計不足,進度計劃沒法按時完成,開發時間一再拖延。
(2)開發的軟件不能知足用戶要求。開發初期對用戶的要求瞭解不夠明確,未能獲得明確的表達。開發工做開始後,軟件人員和用戶又未能及時交換意見,使得一些問題不能及時解決,致使開發的軟件不能知足用戶的要求,於是致使開發失敗。
(3)開發的軟件可維護性差。開發過程當中沒有贊成的、公認的規範,軟件開發人員按各自的風格工做,各行其是,開發過程無完整、規範的文檔,發現問題後進行雜亂無章的修改。程序結構很差,運行時發現錯誤也很難修改,致使維護性差。
(4)開發的軟件可靠性差。因爲在開發過程當中,沒有確保軟件質量的體系和措施,在軟件測試時,又沒有嚴格的、充分的、徹底的測試,提交給用戶的軟件質量差,在運行中暴露出大量的問題。
3.什麼是軟件工程?
軟件工程是指導計算機軟件開發和維護的工程學科。
採用工程的概念、原理、技術和方法來開發與維護軟件,把通過時間考驗而證實正確的管理技術和當前可以獲得的最好的技術方法結合起來,以經濟地開發出高質量的軟件並有效地維護它。
4.軟件的工程的目標?
軟件工程的目標是運用先進的軟件開發技術和管理方法來提升軟件的質量和生產率,也就是要以較短的週期、較低的成本生產出高質量的軟件產品,並最終實現軟件的工業化生產。
可靠性,可以使用性,可維護性,可移植性。
可靠性:是指在規定的時間和條件下,軟件可以正常維持其工做的能力
可以使用性:是指爲了使用該軟件所須要的能力
可維護性:是指當環境改變,或軟件運行發生故障時,爲了使其恢復正常運行所 作努力的程度,
可移植行:是指軟件從某一環境轉移到另外一環境時所作努力的程度。
5.軟件生命週期或軟件生存期?
軟件生存期分爲三個時期:軟件定義,軟件開發,運行維護
軟件定義:主要任務時解決「作什麼」的問題,包括肯定工程的總目標和可行性; 導出現實工程目標應使用的策略及系統必須完成的功能;估計完成資 源所須要的資源和成本;制定工程進度表。它又一般分爲三個階段: 問題定義、可行性研究和需求分析。
軟件開發:主要任務時解決「如何作」的問題,即具體設計和實如今前一個時期 定義的軟件。它一般由概要設計、詳細設計、編碼和測試組成。
運行維護:主要任務是使軟件持久地知足用戶的須要。
完成開發過程的基本任務
完成各個階段所須要的步驟?
6.軟件工程方法?
目前使用最普遍的軟件工程方法學:傳統方法學(結構化方法學),面向對象方法學。
三要素:方法、工具和過程。
第2章 軟件生存期模型(選擇題)(p21)
面向過程:瀑布模型,快速原型模型,增量模型,螺旋模型
面向對象:噴泉模型,統一過程,基於構件的開發模型,敏捷過程
瀑布模型:瀑布模型核心思想是按工序將問題化簡,將功能的實現與設計分開, 便於分工協做,即採用結構化的分析與設計方法將邏輯實現與物理 實現分開。將軟件生命週期劃分爲制定計劃、需求分析、軟件設計、 程序編寫、軟件測試和運行維護等六個基本活動,而且規定了它們 自上而下、相互銜接的固定次序,如同瀑布流水,逐級下落。
快速原型模型:它是增量模型的另外一種形式;它是在開發真實系統以前,構造 一個原型,在該原型的基礎上,逐漸完成整個系統的開發工做。快 速原型模型的第一步是建造一個快速原型,實現客戶或將來的用戶 與系統的交互,用戶或客戶對原型進行評價,進一步細化待開發軟 件的需求。經過逐步調整原型使其知足客戶的要求,開發人員能夠 肯定客戶的真正需求是什麼;第二步則在第一步的基礎上開發客戶 滿意的軟件產品。
增量模型:將軟件產品分解城一系類的增量構件,在增量迭代開發中逐步逐步 加入,爲此,要求構件的規模適中,而且新構件集成到已有的軟件 所造成的新產品必須是可測試的
螺旋模型:螺旋模型是一種演化軟件開發過程模型,它兼顧了快速原型的迭代的 特徵以及瀑布模型的系統化與嚴格監控。螺旋模型最大的特色在於 引入了其餘模型不具有的風險分析,使軟件在沒法排除重大風險時 有機會中止,以減少損失。同時,在每一個迭代階段構建原型是螺旋 模型用以減少風險的途徑。螺旋模型更適合大型的昂貴的系統級的 軟件應用
噴泉模型:噴泉模型(fountain model)是一種以用戶需求爲動力,以對象爲 驅動的模型,主要用於描述面向對象的軟件開發過程。該模型認爲 軟件開發過程自下而上週期的各階段是相互迭代和無間隙的特性。
統一過程:它提供了在開發組織中分派任務和責任的紀律化方法。它的目標是 在可預見的日程和預算前提下,確保知足最終用戶需求的高質量產 品。統一過程模型是一種「用例驅動,以體系結構爲核心,迭代及 增量」的軟件過程框架,由UML方法和工具支持
基於構件的開發模型:是一種基於分佈對象技術、強調經過可複用構件設計與構 造軟件系統的軟件複用途徑。基於構件的軟件系統中的構件 能夠是COTS構件,也能夠是經過其它途徑得到的構件。CBSD 體現了「購買而不是從新構造」的哲學,將軟件開發的重點 從程序編寫轉移到了基於已有構件的組裝,以更快地構造系 統,減輕用來支持和升級大型系統所須要的維護負擔 ,從 而下降軟件開發的費用。
敏捷過程:敏捷開發以用戶的需求進化爲核心,採用迭代、按部就班的方法進行 軟件開發。在敏捷開發中,軟件項目在構建初期被切分紅多個子項 目,各個子項目的成果都通過測試,具有可視、可集成和可運行使 用的特徵。換言之,就是把一個大項目分爲多個相互聯繫,但也可 獨立運行的小項目,並分別完成,在此過程當中軟件一直處於可以使用 狀態
3.2 結構化分析方法
功能建模 :功能建模的思想就是用抽象模型的概念,按照軟件內部數據傳 遞、變換的關係,自頂向下逐層分解,直到找到知足功能要求 的全部可實現的軟件爲止。功能模型用數據流圖來描述。
數據建模:在結構化分析方法中,使用實體—關係建模技術來創建數據模型。這 種技術是在較高的抽象層次(概念層)上對數據庫結構進行建模的 流行技術。實體—關係模型表示爲可視化的實體—關係圖,也稱爲 ER圖。 ER圖中僅包含3種相互關聯的元素:數據對象(實體)、 描 述數據對象的屬性及數據對象彼此間相互鏈接的關係。
行爲建模:狀態轉換圖(簡稱狀態圖)經過描繪系統的狀態及引發系統狀態轉 換的事件,來表示系統的行爲。狀態圖中使用的主要符號如圖所示。
結構化分析模型
第4章 結構化設計方法
體系結構設計→體系結構圖(功能結構圖)
結構話設計 數據設計→物理數據模型(PDM)
接口設計→界面設計例如(窗口,網頁(PC端,移動端))
過程設計 圖形工具:程序流程圖,N-S圖,PAD圖,
決策樹
表格工具:決策表
語言工具:僞代碼
結構化設計或者結構化程序設計的特色?(簡答)
①.若是一個程序的代碼塊僅僅經過順序、選擇和循環這三種基本控制結構進行 鏈接,而且每一個代碼塊只有一個入口和一個出口,則稱這個程序是結構化的。
②.複雜結構應該用基本控制結構進行組合嵌套。
③.建議從高級語言中取消GOTO語句;嵌套;子模塊
④.自頂向下(Top-Down)、逐步細化(Stepwise Refinement)
⑤.使用的控制結構只容許有一個入口一個出口。
從軟件工程的角度,程序設計語言如何選擇? (簡答)
詳細設計應能直接地容易地翻譯成代碼程序。
源程序應具備可移植性。
編譯程序應具備較高的效率。
儘量應用代碼生成的自動工具。
可維護性。
程序設計語言的選擇 ? (簡答)
在選擇編程語言時,能夠考慮如下因素。
應用領域:目標系統的應用領域不一樣,須要採起的系統開發範型也不一樣,因此要考慮支持相應範型的編程語言。
系統用戶的要求。
編程語言自身的功能。
編碼和維護成本及開發環境。
編程人員的技能。
軟件測試的基本概念?
編寫測試用例發現軟件錯誤。
什麼是軟件測試?
(1) 軟件測試是爲了發現錯誤而執行程序的過程。
(2) 或者說,軟件測試是根據軟件開發各階段的規格說明和程序的內部結構而精 心設計一批測試用例。
測試用例?即輸入數據及其預期的輸出結果
黑盒測試(也叫功能測試):
測試要根據軟件的外部特徵進行,這種方法把測試對象看作一個黑盒子,程序人員徹底不考慮程序內部的邏輯和內部特性,只依據程序的需求規格說明書,檢查程序的功能是否符合他的功能說明。
白盒測試(也叫結構測試或邏輯驅動測試):
軟件白盒測試是對軟件過程性細節作細緻的檢查,這一方法是把測試對象看做一個透明的盒子,容許測試人員利用程序內部的邏輯經過不一樣點檢查程序的狀態,肯定實際的狀態是否與預期的狀態一致。
調試
調試也稱排查或糾錯,它是緊跟在測試以後要作的工做,但與測試不一樣之處在於:測試重於發現軟件中有錯,發現異常或軟件運行的可疑之處;而調試是任務在於爲錯誤確切的定位,找到出錯的根源,並經過修改測序將其排除。
軟件測試策略分?
一般軟件測試過程按4個步驟進行,即單元測試、組裝測試、確認測試和系統測試。
軟件過程是什麼?
應該以過程思惟來從新認識軟件業存在的問題,重視提升軟件組織的過程成熟度,實施過程評估,找出已有過程的不足和缺陷,進而改進軟件過程。把對軟件產品自己的關注轉移到對軟件過程的關注上來,由於只有軟件過程的問題解決好了,按其過程開發的軟件產品才能符合要求。
軟件過程成熟度模型?
CMM是能力成熟度模型Capability Maturity Model三個英文單詞第一個字母組成的。事實上,該模型最先提出時,它指的是軟件過程能力成熟度模型。
該模型按軟件過程的不一樣成熟度劃分了5個等級,1級被認爲成熟度最低,5級則成熟度最高。
成熟度等級(ML,Maturity Level)
初始級(ML1) 已管理級( ML2) 已定義級(ML3) 已量化管理級(ML4)
優化級(ML5)
軟件項目管理包含哪些?(填空?)
項目估算,風險管理,進度管理,需求管理,配置管理(再看看各自的意義)
一、 例3-1
銀行儲存系統的業務流程以下,存儲填寫的存款單或取款單由業務員鍵入系統,若是是存款則系統記錄存款人姓名、住址、身份證號碼、存款類型、存款日期、到期日期、利率及密碼(可選)等信息,並印出存單給儲戶;若是是取款並且開戶時留有密碼,則系統首先覈對儲戶密碼,若密碼正確,或存款時未留密碼,則系統計算利息並打印出利息清單給儲戶。要求畫出分層的數據流圖,並細化到二層數據流圖。
銀行儲蓄系統的E-R圖
2、P87【例4.1】針對第三章3.1的銀行儲蓄系統,開發軟件結構圖
①第一步,對銀行儲蓄系統的數據流圖進行復查並精化,獲得以下圖所示的數據流圖。
三、提升模塊的獨立性,獲得的軟件結構以下圖所示:
四、P103
要求用篩選法求100之內的素數。所謂篩選法,就是從2到100中去掉二、 三、 五、7的倍數,剩下的就是100之內的素數。
爲了解決這個問題,可先按程序功能寫出如下框架;
main(){
①創建2到100的數組A[],其中A[i]=i;
②創建2到10的素數表B[],其中存放2到10之內的素數;
③若A[i]= i是B[]中任一數的倍數,則剔除A[i];
④輸出A[]中的全部沒有被剔除的數;
}
上述框架中每一個加工語句均可以進一步細化成循環語句;
main(){
//①創建2到100的數組A[],其中A[i]=i
for(i=2;i<=100;i++)A[i]=i;
//②創建2到10的素數表B[],其中存放2到10之內的素數
B[1]=2; B[2]=3; B[3]=5; B[4]=7;
//③若A[i]= i是B[]中任一數的倍數,則剔除A[i];
for(j=1;j<=4;j++)
檢查A[]因此的數可否被B[j]整除的數從A[]中剔除
//輸出A[]中全部被剔除的數
for(i=2;i<=100;i++)
若A[i]沒有被剔除,則輸出之
}
將語句逐步細化下去直到用程序設計語言來表示爲止:
main(){
for(i=2;i<=100;i++) A[i]=i;
B[1]=2; B[2]=3; B[3]=5; B[4]=7;
for(j=1;j<=4;j++)
for(i=2;i<=100;i++)
if(A[i]/B[j]*B[j] == A[i] )
A[i]=0;
for(i=2<i<=100;i++)
if(A[i]!=0)
printf(「A[& d]=%d\n」,i,A[i]);
}
5、P109
4.13 對於圖4-49所示的流程圖,試分別用N-S圖和PAD表示之。
對應的N-S圖和PAD圖以下:
6、
4.14圖4-52所示的流程圖完成的功能是使用二分查找方法在table數組中找出值爲item的數是否存在。
(1)判斷此算法是不是結構化的,說明理由。
(2)若算法是非結構化的,設計一個等價的結構化算法,並用N-S圖表示。