第一篇:軟件工程學習總結
軟件工程學習總結
通過一個學期系統的學習軟件工程這門課,結合與小組成員一起開發設備管理系統的經驗,讓我對軟件的開發有了更深的了解,學習到每一個軟件的開發都不僅僅是寫代碼,還有更加復雜的系統性的開發流程。
要開發一個軟件,就拿設備管理系統來說,我們不能一上手就開始寫代碼,這樣會浪費大量的人力物力財力還得不到理想的結果,首先我們應該先做好市場及需求方面的調查,了解用戶需求有助于我們開發更加實用高效的軟件,做好市場調研可以讓我們對成本、利潤、市場情況等有深層了解,讓我們做出最優決策。
調查結束后,我們要寫出詳細的報告,包括項目開發計劃書、軟件需求規格說明書等,有了這些調查結果,我們才可以系統的,條理的來編寫我們的軟件。從前我們寫代碼都非常的盲目,雜亂無章,想到哪寫到哪,浪費了大量的時間,寫的代碼結構也很松散,錯誤率高。學習軟件工程后,我們學習了多種軟件開發模型,學會了模塊化的開發方法,小組成員每人完成不同的模塊,最后綜合起來,這樣能夠節省大量的時間,縮短開發時間,使代碼結構更加緊湊,易于管理維護。如果說代碼是一種工具的話,那么軟件工程就是使用工具的經驗指導,他能指導我們更好的使用這個工具,發揮它最大的潛能,幫助我們完成項目,不管使用什么程序語言,軟件工程教給我們的開發方法都無條件適用,我們需要認真學習理解這門課程,它將伴隨我們在程序開發的路上走下去。
第二篇:軟件工程學習總結和體會2015
西安交通大學
2015級研究生課程專題作業
軟 件
工 程 心 得專 業: 班 級: 學 號: 姓 名: 電 話:
二○一五年十月
體 會
一、軟件生命周期各階段任務目的和主要方法
在分階段總結之前,首先要明確以下三個問題:
1、什么是軟件生存周期?
軟件生存周期是指從軟件定義、開發、使用、維護到淘汰的全過程。主要包括:
(1)問題定義;(2)可行性研究;(3)需求分析;(4)概要設計;(5)詳細設計;(6)編碼;(7)測試;
(8)軟件維護。
2、軟件生存周期為什么劃分成階段?
(1)任何一個階段的具體任務不僅獨立,而且簡單,便于不同人員分工協作,從而降低整個軟件開發工作的困難程度。
(2)可以降低每個階段任務的復雜程度,簡化不同階段的聯系,有利于工程的組織管理,也便于采用良好的技術方法。
(3)使軟件開發的全過程以一種有條不紊的方式進行,保證軟件的質量,特別是提高了軟件的可維護性。
3、應該怎樣來劃分階段?
(1)每一個階段的任務盡可能獨立;(2)同一階段內的任務性質盡可能相同;
(3)每一個階段任務的開始和結束有嚴格的標準。
下面分別對各階段進行討論:
1、問題定義
目的是將用戶提出的要求具體化、定量化,任務是確定研制系統的范圍,明確研制的邊界。
方法步驟:
(1)通過調查研究,了解系統要求;
(2)需求方與開發方討論確定系統的功能、性能、可靠性、安全保密性等方面的要求,以及費用、進度等方面的要求。
2、可行性研究
可行性研究說明該軟件開發項目的實現在技術上、經濟上和社會條件上的可行性,評述為合理地達到開發目的可能選擇的各種方案,目標是用最小的代價在盡可能短的時間內確定問題是否能夠解決。
可行性研究的方法是首先需要進一步分析和澄清問題定義;然后分析員導出系統的邏輯模型;最后對未來的行動方針提出建議。
在導出邏輯模型的過程中,具體要根據以下四個方面分析可行性:
(1)經濟可行性:進行成本效益分析,評估項目的開發成本,估算開發成本是否會超過項目預期的全部利潤.分析系統開發對其它產品或利潤的影響。
(2)技術可行性:根據客戶提出的系統功能,性能及實現系統的各項約束條件,從技術的角度研究實現系統的可行性。(3)法律可行性:研究在系統開發過程中可能涉及的各種合同,侵權,責任以及各種于法律相抵觸的問題。
(4)開發方案的選擇性:提出并評價實現系統的各種看法方案.從中選出一種用于軟件項目開發。
3、需求分析
需求分析是為了有效解決用戶的需要而進行的一項工程活動,要考慮的問題是功能需求、數據需求、性能需求和接口需求,開發者承擔分析任務,核心是用戶。
軟件項目的失敗大半源于需求分析沒有做好,軟件開發人員首先應該明確用戶的意圖和要求,正確獲取用戶的需求,然后形成一個軟件需求規格說明,它是軟件開發的重要基礎。
需求分析的方法:
(1)需求獲取:獲取客戶需求,客戶泛指某個人或機構部門等,一般方法是調查,包括訪談座談、問卷、跟班和收集資料,需求規約可表達用戶的軟件價值。
(2)需求分析與規格說明:建立需求模型,它是用戶需求的圖解,一些常用的模型有:業務樹圖、用例圖、活動圖。分別用于結構化需求建模、系統業務舉例和反映系統工作流程。
(3)需求驗證:要驗證的主要內容有:有效性驗證、一致性驗證、完整性驗證、現實性驗證和可檢驗性驗證。
需求建模的方法:
(1)關聯模型
(2)面向對象模型(3)原型方法
4、系統設計
此階段主要根據需求分析的結果,對整個軟件系統進行設計,如系統框架設計,數據庫設計等,一般分為概要設計和詳細設計,好的軟件設計將為軟件程序編寫打下良好的基礎。
概要設計是對需求規格說明書中提供的軟件系統邏輯模型進行進一步的分解,從而建立軟件系統的總體結構和各個子系統間及各個模塊間的關系,定義各子系統接口界面和各模塊的功能描述,并根據設計結果產生概 要設計文檔。
概要設計在早期有模塊化方法、功能分解方法;在60年代后期提出了面向數據流和面向數據結構的設計方法;近年來又提出面向對象的設計方法等。
詳細設計過程根據概要設計形成的結果對各個模塊的內部實現進行規劃設計,并根據設計結果產生詳細設計文檔。
詳細設計主要方法是通過采用結構化和面向對象的方法從視圖、控制、模型三層模型上細化概要設計的各個模塊,并完成偽代碼為編碼階段做準備。
5、編碼和測試
編碼是將軟件設計的結果轉換成計算機可執行的程序代碼。主要方法是依據詳細設計文檔實現設計中的算法、功能、接口、數據結構,采用結構化和面向對象化的方法編寫代碼。
編碼過程中要制定統一,符合標準的編寫規范,以保證程序的可讀性,易維護性,提高程序的運行效率。
軟件設計完成后要經過嚴密的測試,以發現軟件在整個設計過程中存在的問題并加以糾正。整個測試過程分單元測試、組裝測試以及系統測試三個階段進行。
測試的方法主要有白盒測試和黑盒測試兩種。在測試過程中需要建立詳細的測試計劃并嚴格按照測試計劃進行測試,以減少測試的隨 意性。
6、軟件維護
軟件維護是軟件生命周期中持續時間最長的階段。在軟件開發完成并投入使用后,由于多方面的原因,軟件不能繼續適應用戶的要求。要延續軟件的使用壽命,就必須對軟件進行維護。
軟件的維護包括糾錯性維護和改進性維護兩個方面。
二、課程主要收獲
《軟件工程》課程強調概念和知識的理解和掌握,側重軟件項目的分析、設計、實現和維護的基本技能。比較注意“點”和“面”的結合,是一門理論性和實踐性都較強的學科。作為一名已經在IT領域工作十年之后又重返校園的大齡學生,雖然已經不是第一次學習這門課程了,去年也剛在單位取得了信息系統項目管理高級工程師資格,從另一個側面對軟件開發過程有了更深層次的理解。不過溫故而知新,這次仍然選修這門課,我還是得到了一些新的啟示。最大的收獲就是在我看來,軟件工程與其說是一門課程,不如說是一門思想,是一個如何去分析和處理問題的過程,應該說其范疇已經遠遠不止局限于該門課程,它已經成為了一個綜合的能夠解決問題的思想集合。
此外,通過對軟件開發過程的重學習,并結合之前在軟件開發管理工作中的經驗,我對自己在軟件開發主要階段管理工作中的不足有了更進一步的認識,總結了相應的管理要點,具體闡述如下:
1、概要設計
主要任務:系統應該怎樣做,或概括地說,系統應該如何實現。本階段特點:將用戶的具體要求轉為抽象的計算機軟件設計。管理要點:
通過分析對比,從多種可能的實現方案和軟件結構中選出最佳方案及最合理的,即: 設想供選擇的方案→推薦最佳方案→選取合理的方案功能分解→ 軟件設計結構 → 數據庫設計 3 確定測試要求并確定測試計劃
作為項目管理者必須從概要設計開始就應該從全局角度開始把握整個系統的進展,并必須從此階段開始,時刻從全局觀的問題來發現問題,解決問題。
2、詳細設計
主要任務:系統應該怎樣具體地做,或概括地說,系統應該如何具體地去實現所有的要求。
本階段特點:將抽象的計算機軟件設計轉為形象的,具體的,面向用戶的計算機界面設計。
管理要點:
本階段尚未涉及具體編寫程序,而是要設計出程序的“藍圖”,所以詳細設計的結果基本上決定了最終的程序代碼的質量。邏輯是否正確性能是否滿足要求是否容易閱讀和理解 作為項目管理者在詳細設計階段,應始終不忘從一名用戶的使用角度出發,審視每一個界面的詳細設計,以保證設計出來的界面以及程序能夠滿足一般用戶希望將來的系統能夠通俗易懂,簡單實用的要求。
3、編碼
主要任務:用某種程序設計語言書寫計算機能夠識別的程序。
本階段特點:將詳細設計書的內容“翻譯”成計算機語言,直接關系到整個項目的質量。
管理要點:
本階段的編碼是設計的自然結果,因此,程序的質量主要取決于軟件設計的質量。但是,程序設計語言的特性和編碼途徑也對程序的以下特性產生深遠的影響: 程序的可靠性 2 程序的可讀性 3 程序的可測試性 4 程序的可維護性
作為項目管理者在編碼階段,必須從把握進度與質量這兩個基本方面來有效地實施對項目的管理。首先應該根據項目進度計劃來合理地安排每一名作業成員的作業日程,并且隨時監督每一作業的進展情況,還需要針對項目的最新變更及時對計劃進行調整,以保證項目的按時完成。同時,在項目的進展過程中還需要通過小組討論,檢查評審等形式洞察每項作業的質量,以保證項目的保質保量完成。可以說,本階段是一名項目管理者在項目開發過程中極為忙碌也異常重要的階段。
4、測試
主要任務:通過單元測試和綜合測試來保證軟件工程的高質量。
本階段特點:盡可能早地發現并糾正差錯,往往占到軟件開發總工作量的40%以上,是保證軟件質量的關鍵。
管理要點:
軟件測試在軟件生命周期中橫跨兩個階段。通常在編寫出每個模塊之后就對其作必要的測試(稱之為單元測試),模塊的編寫者和測試者是同一人,編碼和單元測試屬于軟件生命周期的同一個階段。在此階段結束之后,對軟件系統還應該進行各種綜合測試,這是軟件生命周期的另一個獨立階段,通常由專門的測試人員來承擔這項工作。
作為項目管理者在編碼階段,必須高度重視軟件測試工作,甚至可以說應該把測試看作與編寫程序同等重要的任務來對待。在要求每一名開發人員完成自己分內的單元測試,并且監督測試人員認真進行各項綜合測試的同時,應該把自己完全當成一名本軟件工程的用戶,從用戶的角度以一種高度負責,甚至近乎苛刻的嚴格態度來對軟件進行徹底的測試。在本階段通過嚴把質量關來確保軟件工程的質量。
所以說,尤其在軟件進入具體開發階段后,能否遵循要點進行管理是很重要的。
總之,實際工作當中軟件項目為什么會失敗?為什么交付日期會一拖再拖?我覺得項目失敗只有一個原因:就是項目經理不合格。除非這個項目經理在項目開始階段就已經提出來了這個項目會失敗,或者是完全屬于項目之外不可抗拒的原因導致失敗。也許還會有一些我的同行跳出來說不服,那么請繼續:
難道是新增需求的原因導致失敗?客戶會讓你新增100個需求而要你二天交貨嗎?必然是分析設計階段沒有充分考慮好可擴展性和新增需求導致現在不可控制而失敗的!
難道是程序員人力不足導致?人都沒有到位,怎么會失敗,多少人做多少人的事,多少人做多少人的計劃,不會有失敗。
難道是程序員技能不夠?項目經理是如何面試的?怎么在項目失敗了才發現是程序員技能不夠?有問題早提出來嘛。
難道測試人員沒有做好?少來了,測試人員只是加了一道保障證明。程序很多流程都通過不了,程序還屬于開發調試階段,與測試人員有什么關系?
我曾經在單位參加一些項目,發現有這樣一個概念很多項目經理都沒有搞清楚:什么叫開發階段?我認為開發階段最多只能包括單元測試這一部分。綜合測試絕對不能屬于開發階段了,也就是說不能到了最后交付階段還有程序流程走不通,程序隨便正常操作都會失敗。程序隨便正常操作都出現好多bug屬于開發還沒有完成,絕對還沒有過單元測試階段,離綜合測試和驗收階段還早著呢。說白了,還屬于代碼審查階段。
不懂程序設計的項目經理,往往不注重code開發人員,其實這是一個嚴重的錯誤。軟件的質量來源于什么?由誰來保證?有的項目經理說是由測試人員來保證,就算測試人員的測試用例寫得很詳細,把需求中的每一個功能點都測試到了,那最后就沒有問題了嗎?當然不是,很多邏輯上的東西要程序員來保證不出問題的,而測試人員只是起一個驗證的作用,問題不應該由測試人員來發現,而應該由開發人員來發現。也就是說,我們盡量不要讓測試人員來發現問題。如果第一次測試有至少25%以上的用例通不過,那說明質量控制出了問題。這樣的版本根本就不應該拿出來進行測試。由此可見,軟件的質量是由程序員來保證的,而不是測試人員。
總的說來,一個項目的成敗與否,與項目的各個階段皆有關系:需求都不清楚,開發起來肯定是南轅北轍;分析設計不夠好,會讓程序員難以維護,隨著新增需求的增多,會導致整個系統混亂不可控制;編碼不好,整個系統不穩定是必然的,Bug也是抓不盡的;測試不做好,系統是沒有保證的,少了哪個環節都不行。
所以做軟件項目開發過程管理工作,我認為重點要放在項目計劃、進度控制、質量控制、風險預測這四個方面。不要說項目的失敗是因為新需求引起的,一個沒有新增需求和風險的項目是不存在的,承認這一點之后,我們就不會有很多怨言了。
以下針對這四個方面進行詳述:
項目計劃:沒有項目計劃,那失敗還有什么話好說?大家都知道凡事預則立,不預則廢。項目計劃一定要包括這幾方面的內容:各階段里程碑時間點,各個里程碑的輸出結果,風險預測,意外應對。計劃時間一定要提前于交貨時間,并注意風險意外是否留下足夠的應對時間和處理方案。
進度監控:對每個階段把握好,每個階段要完成的任務一定要完成,如果完不成,是什么原因導致的?我們的應對策略是什么?我們要信任別人,但是不要忘記鎖門。同樣的,別人說完成了,你不能就認為別人完成了,要看到結果才能證明完成了。有的項目經理說,我也進度監控啦,他說完成了就完成了,誰想到沒有完成?到底是程序員不誠實還是項目沒有管理好?你沒有鎖好門,能怨別人偷你東西嗎?還有一種情況就是不懂如何鎖門,根本就不知道這一階段的輸出結果是什么?當然進度監控就是一句空話了。
質量監控:也應該是分階段進行的,每一個階段的質量監控內容有所不同。
需求分析階段的質量監控就是完整而又正確的理解用戶需求,需求是否清楚可懂,寫用例的測試人員是否明白需求?
分析設計階段的質量監控就是設計是否完全滿足需求?這個設計方案是否滿足以后新功能的擴展?以及是否有考慮到新功能的意外和設備環境,運行平臺的變化?
編碼階段的質量監控就是變量命名是否規范?代碼是否可讀?是否有詳細的注釋?是否有重復代碼?要知道重復代碼是必然會造成系統不穩定,bug成群的。可變部分的代碼和不可變部分的代碼是否分離。要知道上面講的每一部分如果沒有做好,都會導致后期的產品出現大量問題。代碼階段還有一個重要的工作就是做code review代碼公開評審,你自己發現不了的問題別人也許就看得見。
單元測試階段的質量監控任務就是單元測試代碼是否測試通過?代碼覆蓋是否完全?單元測試報告提交情況如何?單元測試用例有沒有做好? 綜合測試階段質量監控任務當然就是看用例是否完全?是否全部真正執行?測試報告有沒有寫好?
回歸測試當然得看以前測試的Bug是否還在,如果還在,當然是無條件打回去重新開發。
測試階段最主要的監控就是看用例是否真正執行,是否有安全性測試?破壞性測試?異常測試,壓力測試?
以上的每個階段最好完成了才進行下一階段,否則會造成混亂出現問題的,造成想并行進行節約時間卻反而浪費了時間。
以上就是我重學《軟件工程》并結合實際工作經驗所得到的啟示,不妥之處請劉老師批評指正!
第三篇:軟件工程總結
軟件工程課程總結
摘要:
計算機是20世紀最重大的科學技巧成就之一,使當代社會的經濟、軍事、科研、教育、服務等方面在概念和技巧上發生了性的變化,對人類社會的進步已經并還將產生極為深刻的影響。目前,計算機是世界各發達國度劇烈競爭的科學技巧領域之一。
電子計算機早期功效主要是計算,后來已遠遠超越單純計算的功效,還可模擬、思維、進行自適應反饋處理等等,把它叫做“電腦”更為合實際。由于電子計算機功效的飛躍性發展,應用于生產和生活的各個方面,直接和顯著地提高了生產、工作和生活的效率、節奏和水平,在軟科學研究和應用中它也起著關鍵作用,因此它已被公認是現代技巧的神經中樞,是未來信息社會的心臟和錄魂。計算機學科分為四個領域,分別是計算機科學,計算機工程,軟件工程和信息系統。
正文:
軟件工程是研究和應用如何以系統性的、規范化的、可定量的過程化方法去開發和維護軟件,以及如何把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來的學科。包括項目管理,分析,設計,程序的編寫,測試和質量控制。它涉及到程序設計語言、數據庫、軟件開發工具、系統開發平臺、標準、設計模式等方面。
學了《軟件工程》這門課程和一些有關資料后,感覺一些東西都曾經接觸過,但在實際工作中有些理論要完全遵循可能還有些障礙,軟件工程只是提供了理論上的一些結論,但對項目的具體可操作性的規范的制定方面卻做的很少,《軟件工程》發展了幾十年,光是開發模型就達到了10多種,對不同的項目采用合適的開發模式,有些項目在不同的開發階段可能還要轉換開發模式,把它們靈活的應用到實際中還是很困難的。
軟件技術是信息技術產業的核心之一,軟件技術的發展是與信息技術產業的發展互相促進的。當今世界,信息技術正處于新一輪重大技術突破的前夜。預計今后 20~30 年是信息科學技術的變革突破期,可能導致 21 世紀下半葉一場新的信息技術革命。近年來,從 IT 界到一些國家首腦,都高度關注以物聯網為標志的新一輪信息技術的發展態勢,認為這是繼 20 世紀 80 年代 PC 機、90 年代互聯網、移動通信網之后,將引發 IT 業突破性發展的第三次 IT 產業化浪潮。每一次重大的技術變革都會引起企業間、產業間甚至國家間競爭格局的重大變化,也促進了軟件技術與軟件產業的重大變革與發展。
近年來,信息技術、軟件技術、軟件系統與軟件產業的發展備受關注,已有不少論述、分析與判斷。近10 年內網絡技術經歷寬帶化、移動化和三網融合將走向基于 Ipv6 的下一代互聯網,2010 年 1 月,國家 863 計劃信息技術領域辦公室和國家 863 計劃信息技術領域專家組,在上海舉辦“信息-物理融合系統 CPS發展戰略論壇”,提出“信息-物理融合系統 CPS 是一個綜合計算、網絡和物理環境的多維復雜系統,是信息和物理世界的深度的融合交互,可實現大型工程系統的實時感知、動態控制和信息服務,使系統更加可靠、高效與實時協同,使得人類物理現實和虛擬邏輯逐步融合,具有重要而廣泛的應用前景。業界關于軟件工程的代表性觀點創立與使用健全的工程原則,以便經濟地獲得可靠且高效率的軟件。應用系統化,遵從原則,可被計量的方法來發展、操作及維護軟件;也就是把工程應用到軟件上。與開發、管理及更新軟件產品有關的理論、方法及工具。一種知識或學科,目標是生產品質良好、準時交貨、符合預算,滿足用戶所需的軟件。實際應用科學知識在設計、建構電腦程序,與相伴而來所產生的文件,以及后續的操作和維護上。
6使用與系統化生產和維護軟件產品有關之技術與管理的知識,使軟件開發與修改可在有限的時間與費用下進行。
7建造由工程師團隊所開發之大型軟件系統有關的知識學科。對軟件分析、設計、實施及維護的一種系統化方法。系統化地應用工具和技術于開發以計算機為主的應用。
10軟件工程是關于設計和開發優質軟件。
《軟件工程》是一門綜合性和實踐性很強的核心課程,它屬于是一門交叉學科,包含有:軟件開發技術(軟件開發方法學、軟件開發過程、軟件工具和軟件工程環境)、軟件工程管理(軟件管理學、軟件經濟學、軟件心理學)。主要內容包括軟件工程概述、可行性分析、需求分析、概要設計、詳細設計、面向對象分析與設計、編碼、軟件測試、項目計劃與管理。
本課程是面向準備從事軟件開發的畢業生而開設的一門專業課程。針對計算機教學中軟件工程這一薄弱環結,結合目前軟件開發商對人才的要求,對計算機專業的畢業生進行軟件工程強化培訓,目的是使畢業生能夠了解和掌握軟件工程的基本理論和方法,并在實際軟件開發中運用這些方法。
我理解,軟件工程是按照工程學的管理方式,有組織、有計劃的,在一定的質量基礎、時間限度和成本范圍內,實現功能明確的軟件系統。而且,軟件工程在企業范圍內運行,一定需要企業資源的支持,要與企業的經營、決策、管理體系聯系在一起,才能夠被踏踏實實的落實下來。
軟件工程項目是一個需要一步一步的計算,分析思考而來的,需要不斷思考,研究不斷進步,軟件業作為一個服務業,要想得到發展,首先必須形成一個對軟件服務有迫切需要的市場。其次,這個市場中的消費者必須具備足夠的購買力。軟件的消費群體簡單一點,可以分為個體消費和企業消費。中國的企業群體,數量龐大,但是質量不高。上規模的企業極少。國內目前能夠形成比較大規模的獨立市場的,肯定是小規模的軟件系統。
隨著信息化時代的到來其地位越來越受到人們的重視,軟件工程從一個學科,或是某一個研究方向來說,人員僅僅是過程,方法的執行者,所以人員素質往往被忽略,軟件工程是一門實踐性很強的學科,所以在實際的軟件研究過程中,人員的素質占有很重要的地位。要有出色的軟件問世,研發人員的素質至關重要!
作為軟件工程的學習者應該不斷創新,不斷嘗試、實踐,不斷研究和學習,中國的軟件工程技術依舊滯后于國外一些軟件工程技術,作為新一代的學習者應該擔當起振興起中國軟件事業,使中國科技得到高速發展!
現在已經是信息化時代,信息化潮流不斷涌現,想要掌握主動權就是掌握信息化的發展方向,這就需要我們不斷學習,時間,研究,學習國外的先進技術,轉變自己的技術,然后融合,創新。
軟件技術不是一成不變的,是隨著社會的進步的不斷進步,不需要不斷的創新,不斷的改善的,需要我們不斷的學習,不斷的研究,不斷進步。
第四篇:軟件工程總結
1.Software is a product and can be manufactured using the same technologies used for other engineering artifacts Answer: b 2.WebApps are a mixture of print publishing and software development, making their development outside the realm of software engineering practice.Answer: b 3.Software engineering umbrella activities are only applied during the initial phases of software development projects.Answer: b 4.Planning ahead for software reuse reduces the cost and increases the value of the systems into which they are incorporated.Answer: a 5.The essence of software engineering practice might be described as understand the problem, plan a solution, carry out the plan, and examine the result for accuracy.Answer: a 6.In agile process models the only deliverable work product is the working program.Answer: b 7.A most software development projects are initiated to try to meet some business need.Answer: a 8.In general software only succeeds if its behavior is consistent with the objectives of its designers.Answer: b 9.Software processes can be constructed out of pre-existing software patterns to best meet the needs of a software project.Answer: a 10.Process technology tools allow software organizations to compress schedules by skipping unimportant activities.Answer: b 11.It is generally accepted that one cannot have weak software processes and create high quality end products.Answer: a 1.Requirements engineering is a generic process that does not vary from one software project to another.Answer: a 2.A stakeholder is anyone who will purchase the completed software system under development.Answer: b 3.It is relatively common for different customers to propose conflicting requirements, each arguing that his or her version is the right one.Answer: a 4.Developers and customers create use-cases to help the software team understand how different classes of end-users will use functions.Answer: a 5.Use-case actors are always people, never system devices.Answer: b 6.Analysis patterns facilitate the transformation of the analysis model into a design model by suggesting reliable solutions to common problems.Answer: a 7.In win-win negotiation, the customer’s needs are met even though the developer’s need may not be.Answer: b 8.In requirements validation the requirements model is reviewed to ensure its technical feasibility.Answer: b
1.Object-oriented domain analysis is concerned with the identification and specification of reusable capabilities within an application domain.Answer: a 2.In structured analysis models focus on the structure of the classes defined for a system along with their interactions.Answer: b 3.Creation and refinement of use cases if an important part of scenario-based modeling.Answer: a 4.It is important to consider alternative actor interactions when creating a preliminary use case.Answer: b 5.Brainstorming is one technique that may be used to derive a complete set of use case exceptions.Answer: a 6.In many cases there is no need to create a graphical representation of a usage scenario.Answer: a 7.One or more attributes of a data object must be defined as a key to allow the location of an instance of the data object.Answer: a 8.Attributes are chosen for an object by examining the problem statement and identifying the entities that appear to be related.Answer: b 9.An analysis package involves the categorization of analysis model elements into useful groupings.Answer: a 10.The data flow diagram must be augmented by min-spec that can serve as a guide the design of the software component that will implement the process.Answer: a 11.The UML sequence diagram show the order in which system events are processed.Answer: b 12.Analysis patterns are discovered, they are not explicitly created.Answer: a 13.It is not possible to justify the time required for WebApp requirements analysis.Answer: b 14.UML activity diagrams can be used to represent the user observable functionality delivered by the WebApp as well as the operations contained in each analysis class.Answer: a 15.Configuration analysis focuses on the architecture of the user’s web browsing environment.Answer: b 16.Content objects are extracted from use cases by examining the scenario description for direct or indirect content references.Answer: a 1.With thorough testing it is possible to remove all defects from a program prior to delivery to the customer.Answer: b 2.Program flow graphs are identical to program flowcharts.Answer: b 3.The cyclomatic complexity of a program can be computed directly from a PDL representation of an algorithm without drawing a program flow graph.Answer: a 4.Graph-based testing methods can only be used for object-oriented systems Answer: b 5.Equivalence testing divides the input domain into classes of data from which test cases can be derived to reduce the total number of test cases that must be developed.Answer: a 6.Boundary value analysis can only be used to do white-box testing.Answer: b 7.Orthogonal array testing enables the test designer to maximize the coverage of the test cases devised for relatively small input domains.Answer: a 8.Client/server architectures cannot be properly tested because network load is highly variable.Answer: b 1.The best representation of system architecture is an operational software prototype.Answer: b 2.The architectural representations can be an enabler for communication among project stakeholders.Answer: a 3.An architectural description is often documented using an architecture template.Answer: b 4.An architectural genre will often dictate the architectural approach that may used for the structure to be built.Answer: a 5.Before an architectural pattern can be chosen for use in a specific system it must have a code implementation to facilitate its reuse.Answer: b 6.Once selected, archetypes always need to be refined further as architectural design proceeds.Answer: a 7.Quantitative methods for assessing the quality of proposed architectural designs are readily available.Answer: b
Chapter 10 Self-Check Quiz
1.In the most general sense a component is a modular building block for computer software.a.True b.False
Answer: a(Section 10.1)
2.In the context of object-oriented software engineering a component contains
a.attributes and operations b.instances of each class c.roles for each actor(device or user)d.set of collaborating classes
Answer: d(Section 10.1.1)
3.In traditional software engineering modules must serve in which of the following roles?
a.Control component b.Infrastructure component c.Problem domain component d.All of the above
Answer: d(Section 10.1.2)
4.Software engineers always need to cerate components from scratch in order to meet customer expectations fully.a.True b.False
Answer: b(Section 10.1.3)
5.Which of the following is not one of the four principles used to guide component-level design?
a.Dependency Inversion Principle b.Interface Segregation Principle c.Open-Closed Principle d.Parsimonious Complexity Principle
Answer: d(Section 10.2.1)
6.The use of stereotypes can help identify the nature of components at the detailed design level.a.True b.False
Answer: a(Section 10.2.2)
7.Classes and components that exhibit functional, layer, or communicational cohesion are relatively easy to implement, test, and maintain.a.True b.False
Answer: a(Section 10.2.3)
8.Software coupling is a sign of poor architectural design and can always be avoided in every system.a.True b.False
Answer: b(Section 10.2.4)
9.WebApp content design at the component level focuses on content objects and the manner in which they interact.a.True b.False
Answer: b(Section 10.4.1)
10.A WebApp functional architecture describes the key functional components and how they interact with each other.a.True b.False
Answer: a(Section 10.4.2)
11.Which of these is a graphical notation for depicting procedural detail?
a.box diagram b.decision table c.ER diagram d.flowchart
Answer: d(Section 10.5.1)
12.A decision table should be used
a.to document all conditional statements b.to guide the development of the project management plan c.only when building an expert system d.when a complex set of conditions and actions appears in a component
Answer: d(Section 10.5.2)
13.A program design language(PDL)is often a
a.combination of programming constructs and narrative text b.legitimate programming language in its own right c.machine readable software development language d.useful way to represent software architecture
Answer: a(Section 10.5.3)
14.In component-based software engineering, the development team examines the requirements to see which are amenable to composition, rather than construction, before beginning detailed design tasks.a.True b.False
Answer: a(Section 10.6)
15.Which of the following is not one of the major activities of domain engineering?
a.analysis b.construction c.dissemination d.validation
Answer: d(Section 10.6.1)
16.Which of the following factors would not be considered during component qualification?
a.application programming interface(API)b.development and integration tools required c.exception handling d.testing equipment required
Answer: d(Section 10.6.2)
17.Which is the following is a technique used for component wrapping?
a.black-box wrapping b.clear-box wrapping c.gray-box wrapping d.white-box wrapping
Answer: b(Section 10.6.2)
18.Which of the following is not one of the issues that form a basis for design for reuse?
a.object-oriented programming b.program templates c.standard data d.standard interface protocols
Answer: a(Section 10.6.3)
19.In a reuse environment, library queries are often characterized using the ________ element of the 3C Model.a.concept b.content c.context d.all of the above
Answer: c(Section 10.6.4)
1.The importance of software design can be summarized in a single word a.b.c.d.Answer: d(Section 8.1)
2.Which of the following is not a characteristic common to all design methods?
a.configuration management b.functional component representation c.quality assessment guidelines d.refinement heuristics
Answer: a(Section 8.2.2)
3.Which of the following can be used to represent the architectural design of a piece of software?
a.Dynamic models b.Functional models c.Structural models d.All of the above
Answer: d(Section 8.3.2)
4.Design patterns are not applicable to the design of object-oriented software?
a.True b.False
Answer: b(Section 8.3.3)
5.Since modularity is an important design goal it is not possible to have too many modules in a proposed design.a.True b.False
Answer: b(Section 8.3.5)
6.Information hiding makes program maintenance easier by hiding data and procedure from unaffected parts of the program.accuracy complexity efficiency quality
a.True b.False
Answer: a(Section 8.3.6)
7.Cohesion is a qualitative indication of the degree to which a module
a.can be written more compactly.b.focuses on just one thing.c.is able to complete its function in a timely manner.d.is connected to other modules and the outside world.Answer: b(Section 8.3.7)
8.Coupling is a qualitative indication of the degree to which a module
a.can be written more compactly.b.focuses on just one thing.c.is able to complete its function in a timely manner.d.is connected to other modules and the outside world.Answer: d(Section 8.3.7)
9.When using structured design methodologies the process of stepwise refinement is unnecessary.a.True b.False
Answer: b(Section 8.3.8)
10.Software designs are refactored to allow the creation of software that is easier to integrate, easier to test, and easier to maintain.a.True b.False
Answer: a(Section 8.3.10)
11.Which of the following is not one of the five design class types
a.Business domain classes b.Entity classes c.Process classes d.User interface classes
Answer: b(Section 8.3.13)
12.Which design model elements are used to depict a model of information represented from the user’s view?
a.Architectural design elements b.Component-level design elements c.Data design elements d.Interface design elements
Answer: c(Section 8.4.1)
13.Which design is equivalent to the floor plan of a house?
a.Architectural design b.Component-level design c.Data design d.Interface design
Answer: a(Section 8.4.2)
14.Which design model is equivalent to the detailed drawings of the access points and external utilities for a house?
a.Architectural design b.Component-level design c.Data design d.Interface design
Answer: d(Section 8.4.3)
15.Which design model is equivalent to a set of detailed drawings for each room in a house?
a.Architectural design b.Component-level design c.Data design d.Interface design
Answer: b(Section 8.4.4)
16.The deployment design elements specify the build order for the software components.a.True b.False
Answer: b(Section 8.4.5)
第五篇:軟件工程總結
第一章軟件與軟件工程的概念
軟件的概念:軟件是計算機系統中與硬件相互依存的另一部分,軟件包括程序,數據,及其相關文檔的完整集合。程序是按事先設計的功能和性能要求執行的指令序列。數據是使程序能夠正確地處理信息的數據結構。文檔是與程序開發,維護和使用有關的圖文資料。
程序的最小單位是函數及子程序,程序與數據是分離的,在面向對象程序設計時代,程序的最小單位是類,在類中封裝了相關的數據及指令代碼。
軟件的特性,判斷正誤:1.軟件是無形的、不可見的邏輯實體,因此,軟件是無法描述的。(錯)
2、軟件的開發特性是指軟件需要大量手工勞動,難以自動化生產。(對)
3、有缺陷的軟件就是廢品。(錯)
4、軟件的生產指的是軟件的復制。(錯)
5、由于軟件的開發充滿人的個性特點,因此管理并不決定軟件開發的成敗(錯)。
6、軟件的開發環境往往就是軟件的運行環境,或者與其兼容。(對)
7、合格的軟件產品不需要維護,軟件需要維護說明其質量不合格。(錯)
8、軟件可以不斷改進,因此軟件不需要廢棄。(錯)
軟件的分類:1,系統軟件:能與計算機硬件緊密配合在一起,使計算機系統各個部件,相關的軟件和數據協調,高效的工作的軟件。2,應用軟件,是在系統軟件的支持下,在特定區域內開發,為特定目的服務的一類軟件。3,支撐軟件,也叫工具軟件,是協助用戶開發軟件的工具性軟件。4,可復用軟件,最初實現的典型的可復用軟件是各種標準函數庫,通常是由計算機廠商提供的系統軟件的一部分。
IEEE給出的定義:軟件工程是開發,運行,維護和修復軟件的系統方法。軟件的定義:計算機程序,方法,規則,相關的文檔資料一集在計算機上運行時所必需的數據。
軟件危機的典型表現
1、成本太高,預算不準
2、超過預計時間
3、軟件質量標準不明確
4、生產率低
5、缺乏文檔資料,難以維護。原因:1,缺乏軟件開發的經驗和有關軟件開發數據的積累,使得開發工作的計劃很難制定。2.軟件人員與用戶的交流存在障礙,除了知識背景的差異,缺少合適的交流方法及需求描述工具。3,軟件開發過程不規范,缺少方法和規范的指導。4,隨著軟件規模的增大,其復雜性往往會呈指數級升高。5,缺少有效的軟件評測手段,提交用戶的軟件質量差。
軟件危機發生的主要原因有:
1、遇到了無法解決的高難度技術問題(不是)
2、無法招聘到足夠的編程高手(不是)
3、軟件人員與用戶互相不理解(是)
4、計劃和管理不科學、落實不力(是)
5、軟件質量標準不明確(是)
軟件的質量特性包括(選擇)問題1:
1、功能性
2、可靠性
3、使用性
4、經濟性(不包括)
軟件的質量特性包括(選擇)問題2:
1、效率
2、可維護性
3、可移植性
4、經濟性(不包括)
軟件工程的目標是運用先進的軟件開發技術和管理方法來提高軟件的質量和生產率,也就是要以較短的周期,較低的成本生產出高質量的軟件產品,并最終實現軟件的工業化生產。軟件生存期:軟件的孕育,誕生,成長,成熟,衰亡的生存過程。軟件生存期由軟件定義,軟件開發和運行維護三個時期組成,每個時期又可劃分為若干個階段。
2、軟件定義時期的任務主要任務是解決“做什么”的問題,確定工程的總目標和可行性;實現工程目標的策略及系統功能;估計需要的資源和成本;制訂工程進度表。通常又分為3個階段:問題定義,可行性研究,需求分析。
3、軟件開發時期的任務和包含階段主要任務是解決“如何做”的問題,設計和實現定義的軟件。由概要設計、詳細設計、編碼和測試4個階段組成。
4、軟件運行維護時期的主要任務是使軟件持久地滿足用戶的需要,通常有4類維護活動:改正性維護;適應性維護;完善性維護;預防性維護。開發過程中的典型文檔:軟件需求規格說明書。項目計劃。軟件測試計劃。軟件設計說明書。用戶手冊。軟件工程各個階段的基本任務
1、問題定義與可行性研究:解決什么問題?能否解決問題?是否值得做?”
2、需求分析:做什么
3、軟件設計:如何實現
4、程序編碼和單元測試:實現設計
5、集成和系統測試:組裝連接測試、功能驗證測試
6、軟件運行和維護:修改 第二章軟件工程方法與工具
軟件工具:是指能支持軟件生存周期中某一階段(如系統定義,需求分析,設計,編碼,測試,維護等)的需要而使用的軟件工具。
需求分析工具
1、結構化圖形工具箱。通過數據流程圖DFD進行功能分析。包括DFD圖形工具,實體-關系圖(E-R)圖形工具,Jackson圖形工具,Warnier圖形工具,Visio綜合工具,2、面向對象工具,Rational Rose,PowerDesigner,Visio 設計工具(1)概要設計工具:設計目標軟件的體系結構、控制結構和數據結構。軟件的體系結構通常用模塊結構圖來描述。模塊的數據結構通常用實體-關系圖來描述。Visio。Rational Rose 詳細設計工具。設計模塊的算法和內部實現細節。詳細設計描述方法有輸入-處理-輸出(IPO)圖。問題分析圖(PAD)。盒圖(NS圖)。流程圖(FC)。程序設計語言(PDL)。結構化語言。判定表。判定樹
第三章軟件需求獲取與結構化分析方法 需求獲取的主要任務是與用戶溝通,了解系統或產品的目標是什么,客戶或用戶想要實現什么,系統和產品如何滿足業務的要求,最終系統或產品如何用于日常工作。獲取并理解用戶的需求是軟件工程師所面對的最困難的任務之一。
需求分析的困難體現:系統的目標或范圍問題;需求不準確性問題;需求的易變問題
需求獲取的任務:發現和分析問題,并分析問題的原因,結果關系。與用戶進行各種方式的交流,并使用調查研究方法收集信息。按照三個成分即數據,過程和接口觀察問題的不同側面。將獲取的需求文檔化,形式有用例,決策表,決策樹等。需求獲取的原則:深入淺出,以流程為主線。
獲取具體的需求的途徑1,與用戶交流。2,現有產品或競爭產品的描述文檔。3,系統需求規格說明。4,當前系統的問題報告和改進要求。5,市場調查和用戶問卷調查。6,觀察用戶如何工作。
關于需求獲取問題的認識辨析:
1、沒有與用戶交流就不可能獲取系統需求。(不能獲取準確、全面的系統需求)
2、沒有經過與用戶交流而獲取的需求都是不真實的需求。(一些需求從用戶以外的途徑獲取)
3、系統開發必須獨立完成,參考類似系統及技術文檔屬于抄襲行為,應予避免。(系統開發包含研究行為,應了解對手產品,取長補短)
4、系統開發包含改進當前系統的缺陷和不足。(對)
5、需求調查時,用戶所說的需求未必是真實、準確的需求,因此需求分析需要依賴用戶,但是不能過分迷信用戶。(對,需求描述是困難的)
6、觀察用戶如何工作也是一種需求調查行為。(對)
軟件需求分析階段的任務:需求獲取,需求分析,需求定義,需求驗證。完整性,正確性,合理性,可行性,充分性。
結構化分析方法:是一種建模技術。核心是數據字典。
功能模型用數據流圖(DFD)來描述使用實體—關系圖(ER圖)建立數據模型。使用狀態轉換圖(簡稱狀態圖)建立系統行為模型。數據字典。加工規格說明。需求建模的依據是需求描述
數據建模,ER圖,需要認真看。
第四章結構化設計方法
結構化設計方法是在模塊化,自頂向下逐步細化及結構化程序設計技術基礎上發展起來的,結構化設計方法可分為兩類:一類是根據系統的數據流進行設計,稱為面向數據流的設計,或稱過程驅動設計,另一類是根據系統的數據結構進行設計,稱為面向數據結構的設計,或稱數據驅動的設計。
軟件的體系結構設計,模塊化設計都是分而治之策略的具體表現。模塊化是將整體軟件劃分為獨立命名且可獨立訪問的模塊,不同的模塊通常具有不用的功能或指責,每個模塊可獨立開發,測試,最后組裝成完整的軟件。模塊是構成軟件的基本構件。模塊并不是越小越好,當模塊數目增加時,每個模塊的規模將減小,開發單個模塊的成本確實減少了,但是隨著模塊數目增加,模塊之間關系的復雜程度也會增加,設計模塊間接口所需要的工作量也將增加。
模塊的獨立性是指軟件系統中每個模塊只涉及軟件要求的具體的子功能,而與軟件系統中其他模塊的接口是簡單的,若一個模塊只具有單一的功能且與其他模塊沒有太多的聯系,那么稱此模塊有獨立性。
自頂向下,逐步細化:抽象是指忽視一個主題中與當前目標無關的方面,以便更充分地注意與當前目標有關的方面,當我們進行軟件設計時,設計開始時應盡量提高軟件的抽象層次,按抽象級別從高到低進行軟件設計,將軟件的體系結構按自頂向下方式,對各個層次的過程細節和數據細節逐層細化,直到用程序設計語言的語句能夠實現為止,從而最后確定整個系統的體系結構,這就是自頂向下逐步細化過程。
復用是指同一事物不做修改或稍加修改就可以多次重復使用,將服用的思想用于軟件開發,稱為軟件復用。1是盡量使用已有的構件。2是如果確實需要創建新的構件,則在設計時應該考慮將來的可重復使用性。軟件設計的階段與任務:從工程管理的角度,可以將軟件設計分為概要設計階段和詳細設計階段。從技術的角度,傳統的結構化方法將軟件設計劃分為體系結構設計、數據設計、接口設計和過程設計4部分;概要設計包括體系結構設計、數據設計、接口設計。詳細設計即過程設計,對結構表示進行細化,得到軟件詳細的數據結構和算法。
軟件設計各項設計工作的依據:體系結構設計,定義軟件模塊及其之間的關系,依賴于數據流圖。數據設計,依賴于ER圖。接口設計,依賴于頂層數據流圖。過程設計:依賴于加工規格說明、狀態圖
基于數據流方法的設計過程:1.復查并精化數據流圖。2.確定數據流圖中數據流的類型,典型的數據流類型有變換型數據流和事務型數據流。3.導出初始的軟件結構圖。4.逐級分解。5.精化軟件結構。6.導出接口描述和全局數據結構。
軟件模塊結構的改進方法:1,模塊功能的完善化。2,消除重復功能,改善軟件結構。3,模塊的作用范圍應在控制范圍之內。4,盡可能減少高扇出結構,隨著深度增大扇入。5,避免或減少使用病態連接。6,模塊的大小要適中。接口設計的依據是數據流圖中的自動化系統邊界。
自頂向下,逐步細化的設計過程主要包括兩個方面:一是將復雜問題的解法分析和細化成由若干個模塊組成的層次結構,二是將每個模塊的功能逐步分解細化為一系列的處理。第五章編碼
編碼容易出現的風格不足
1、變量或函數名字缺乏具體含義
2、變量或函數名字與其用途不符
3、變量或函數未加上必要的注釋
4、函數未說明其功能、參數的意義
5、引用的符號未加以解釋和說明
6、對循環等重要的程序語句未注釋
7、對用到的重要庫函數沒有解釋說明
8、對結構體等復雜數據結構的組成成分沒有解釋說明
9、缺乏必要的提示語句 第六章軟件測試方法
軟件測試是在軟件投入生產性運行之前,對軟件需求分析,設計規格說明和編碼的最終復審,是軟件質量控制的關鍵步驟。軟件測試是為了發現錯誤而執行程序的過程。