軟件工程學習之道

      網友投稿 664 2025-04-02

      簡介


      軟件工程一直以來都缺乏一個統一的定義,很多學者、組織機構都分別給出了自己的定義:

      Boehm:運用現代科學技術知識來設計并構造計算機程序及為開發、運行和維護這些程序所必需的相關文件資料。

      IEEE:軟件工程是開發、運行、維護和修復軟件的系統方法。

      Fritz Bauer:建立并使用完善的工程化原則,以較經濟的手段獲得能在實際機器上有效運行的可靠軟件的一系列方法。

      軟件工程學的內容

      軟件工程學的主要內容是軟件開發技術和軟件工程管理.

      軟件開發技術包含軟件工程方法學、 軟件工具 和 軟件開發環境 ;軟件工程管理學包含軟件工程經濟學和軟件管理學。

      軟件工程基本原理

      著名軟件工程專家B.Boehm綜合有關專家和學者的意見并總結了多年來開發軟件的經驗,于1983年在一篇論文中提出了軟件工程的七條基本原理。

      (1)用分階段的生存周期計劃進行嚴格的管理。

      (2)堅持進行階段評審。

      (3)實行嚴格的產品控制。

      (4)采用現代程序設計技術。

      (5)軟件工程結果應能清楚地審查。

      (6)開發小組的人員應該少而精。

      (7)承認不斷改進軟件工程實踐的必要性。

      B.Boehm指出,遵循前六條基本原理,能夠實現軟件的工程化生產;按照第七條原理,不僅要積極主動地采納新的軟件技術,而且要注意不斷總結經驗。

      軟件工程(SoftWare Engineering)的框架可概括為:目標、過程和原則。

      (1)軟件工程目標:生產具有正確性、可用性以及開銷合宜的產品。正確性指軟件產品達到預期功能的程度。可用性指軟件基本結構、實現及文檔為用戶可用的 程度。開銷合宜是指軟件開發、運行的整個開銷滿足用戶要求的程度。這些目標的實現不論在理論上還是在實踐中均存在很多待解決的問題,它們形成了對過程、過 程模型及工程方法選取的約束。

      (2)軟件工程過程:生產一個最終能滿足需求且達到工程目標的軟件產品所需要的步驟。軟件工程過程主要包括開發 過程、運作過程、維護過程。它們覆蓋了需求、設計、實現、確認以及維護等活動。需求活動包括問題分析和需求分析。問題分析獲取需求定義,又稱軟件需求規 約。需求分析生成功能規約。設計活動一般包括概要設計和詳細設計。概要設計建立整個軟件系統結構,包括子系統、模塊以及相關層次的說明、每一模塊的接口定 義。詳細設計產生程序員可用的模塊說明,包括每一模塊中數據結構說明及加工描述。實現活動把設計結果轉換為可執行的程序代碼。確認活動貫穿于整個開發過 程,實現完成后的確認,保證最終產品滿足用戶的要求。維護活動包括使用過程中的擴充、修改與完善。伴隨以上過程,還有管理過程、支持過程、培訓過程等。

      (3)軟件工程的原則是指圍繞工程設計、工程支持以及工程管理在軟件開發過程中必須遵循的原則。

      軟件工程必須遵循什么原則

      圍繞工程設計、工程支持以及工程管理已提出了以下四條基本原則:

      (1)選取適宜的開發模型

      該原則與系統設計有關。在系統設計中,軟件需求、硬件需求以及其它因素間是相互制約和影響的,經常需要權衡。因此,必需認識需求定義的易變性,采用適當的開發模型,保證軟件產品滿足用戶的要求。

      (2)采用合適的設計方法

      在軟件設計中,通常需要考慮軟件的模塊化、抽象與信息隱蔽、局部化、一致性以及適應性等特征。合適的設計方法有助于這些特征的實現,以達到軟件工程的目標。

      (3)提供高質量的工程支撐

      工欲善其事,必先利其器。在軟件工程中,軟件工具與環境對軟件過程的支持頗為重要。軟件工程項目的質量與開銷直接取決于對軟件工程所提供的支撐質量和效用。

      (4)重視軟件工程的管理

      軟件工程的管理直接影響可用資源的有效利用,生產滿足目標的軟件產品以及提高軟件組織的生產能力等問題。因此,僅當軟件過程予以有效管理時,才能實現有效的軟件工程。

      軟件工程是指導計算機軟件開發和維護的工程學科。

      采用工程的概念、原理、 技術和方法來開發與維護軟件,把經過時間考驗而證明正確的管理技術和當前能夠 得到的最好的技術方法結合起來,這就是軟件工程。

      軟件工程強調使用生存周期方法學和各種結構分析及結構設計技術。它們是在七十年代為了對付應用軟件日益增長的復雜程度、漫長的開發周期以及用戶對軟件產 品經常不滿意的狀況而發展起來的。人類解決復雜問題時普遍采用的一個策略就是“各個擊破”,也就是對問題進行分解然后再分別解決各個子問題的策略。軟件工 程采用的生存周期方法學就是從時間角度對軟件開發和維護的復雜問題進行分解,把軟件生存的漫長周期依次劃分為若干個階段,每個階段有相對獨立的任務,然后 逐步完成每個階段的任務。采用軟件工程方法論開發軟件的時候,從對任務的抽象邏輯分析開始,一個階段一個階段地進行開發。前一個階段任務的完成是開始進行 后一個階段工作的前提和基礎,而后一階段任務的完成通常是使前一階段提出的解法更進一步具體化,加進了更多的物理細節。每一個階段的開始和結束都有嚴格標 準,對于任何兩個相鄰的階段而言,前一階段的結束標準就是后一階段的開始標準。在每一個階段結束之前都必須進行正式嚴格的技術審查和管理復審,從技術和管 理兩方面對這個階段的開發成果進行檢查,通過之后這個階段才算結束;如果檢查通不過,則必須進行必要的返工,并且返工后還要再經過審查。審查的一條主要標 準就是每個階段都應該交出“最新式的”(即和所開發的軟件完全一致的)高質量的文檔資料,從而保證在軟件開發工程結束時有一個完整準確的軟件配置交付使 用。文檔是通信的工具,它們清楚準確地說明了到這個時候為止,關于該項工程已經知道了什么,同時確立了下一步工作的基礎。此外,文檔也起備忘錄的作用,如 果文檔不完整,那么一定是某些工作忘記做了,在進入生存周期的下一階段之前,必須補足這些遺漏的細節。在完成生存周期每個階段的任務時,應該采用適合該階 段任務特點的系統化的技術方法──結構分析或結構設計技術。

      把軟件生存周期劃分成若干個階段,每個階段的任務相對獨立,而且比較簡 單,便于不同人員分工協作,從而降低了整個軟件開發工程的困難程度;在軟件生存周期的每個階段都采用科學的管理技術和良好的技術方法,而且在每個階段結束 之前都從技術和管理兩個角度進行嚴格的審查,合格之后才開始下一階段的工作,這就使軟件開發工程的全過程以一種有條不紊的方式進行,保證了軟件的質量,特 別是提高了軟件的可維護性。總之,采用軟件工程方法論可以大大提高軟件開發的成功率,軟件開發的生產率也能明顯提高。

      目前劃分軟件生 存周期階段的方法有許多種,軟件規模、種類、開發方式、開發環境以及開發時使用的方法論都影響軟件生存周期階段的劃分。在劃分軟件生存周期的階段時應該遵 循的一條基本原則就是使各階段的任務彼此間盡可能相對獨立,同一階段各項任務的性質盡可能相同,從而降低每個階段任務的復雜程度,簡化不同階段之間的聯 系,有利于軟件開發工程的組織管理。一般說來,軟件生存周期由軟件定義、軟件開發和軟件維護三個時期組成,每個時期又進一步劃分成若干個階段。下面的論述 主要針對應用軟件,對系統軟件也基本適用。

      軟件定義時期的任務是確定軟件開發工程必須完成的總目標;確定工程的可行性,導出實現工程 目標應該采用的策略及系統必須完成的功能;估計完成該項工程需要的資源和成本,并且制定工程進度表。這個時期的工作通常又稱為系統分析,由系統分析員負責 完成。軟件定義時期通常進一步劃分成三個階段,即問題定義、可行性研究和需求分析。

      開發時期具體設計和實現在前一個時期定義的軟件,它通常由下述四個階段組成:總體設計,詳細設計,編碼和單元測試,綜合測試。

      維護時期的主要任務是使軟件持久地滿足用戶的需要。具體地說,當軟件在使用過程中發現錯誤時應該加以改正;當環境改變時應該修改軟件以適應新的環境;當 用戶有新要求時應該及時改進軟件滿足用戶的新需要。通常對維護時期不再進一步劃分階段,但是每一次維護活動本質上都是一次壓縮和簡化了的定義和開發過程。

      下面扼要介紹軟件生存周期每個階段的基本任務和結束標準。

      1問題定義

      問題定義階段必須回答的關鍵問題:“要解決的問題是什么?”如果不知道問題是什么就試圖解決這個問題,顯然是盲目的,只會白白浪費時間和金錢,最終得出 的結果很可能是毫無意義的。盡管確切地定義問題的必要性是十分明顯的,但是在實踐中它卻可能是最容易被忽視的一個步驟。

      通過問題定義 階段的工作,系統分析員應該提出關于問題性質、工程目標和規模的書面報告。通過對系統的實際用戶和使用部門負責人的訪問調查,分析員扼要地寫出他對問題的 理解,并在用戶和使用部門負責人的會議上認真討論這份書面報告,澄清含糊不精的地方,改正理解不正確的地方,最后得出一份雙方都滿意的文檔。

      問題定義階段是軟件生存周期中最簡短的階段,一般只需要一天甚至更少的時間。

      2可行性研究

      這個階段要回答的關鍵問題:“對于上一個階段所確定的問題有行得通的解決辦法嗎?”為了回答這個問題,系統分析員需要進行一次大大壓縮和簡化了的系統分析和設計的過程,也就是在較抽象的高層次上進行的分析和設計的過程。

      可行性研究應該比較簡短,這個階段的任務不是具體解決問題,而是研究問題的范圍,探索這個問題是否值得去解,是否有可行的解決辦法。

      在問題定義階段提出的對工程目標和規模的報告通常比較含糊。可行性研究階段應該導出系統的高層邏輯模型(通常用數據流圖表示),并且在此基礎上更準確、 更具體地確定工程規模和目標。然后分析員更準確地估計系統的成本和效益,對建議的系統進行仔細的成本/效益分析是這個階段的主要任務之一。

      可行性研究的結果是使用部門負責人做出是否繼續進行這項工程的決定的重要依據,一般說來,只有投資可能取得較大效益的那些工程項目才值得繼續進行下去。可行性研究以后的那些階段將需要投入要多的人力物力。及時中止不值得投資的工程項目,可以避免更大的浪費。

      3需求分析

      這個階段的任務仍然不是具體地解決問題,而是準確地確定“為了解決這個問題,目標系統必須做什么”,主要是確定目標系統必須具備哪些功能。

      用戶了解他們所面對的問題,知道必須做什么,但是通常不能完整準確地表達出他們的要求,更不知道怎樣利用計算機解決他們的問題;軟件開發人員知道怎樣使 用軟件實現人們的要求,但是對特定用戶的具體要求并不完全清楚。因此系統分析員在需求分析階段必須和用戶密切配合,充分交流信息,以得出經過用戶確認的系 統邏輯模型。通常用數據流圖、數據字典和簡要的算法描述表示系統的邏輯模型。

      在需求分析階段確定的系統邏輯模型是以后設計和實現目標 系統的基礎,因此必須準確完整地體現用戶的要求。系統分析員通常都是計算機軟件專家,技術專家一般都喜歡很快著手進行具體設計,然而,一旦分析員開始談論 程序設計的細節,就會脫離用戶,使他們不能繼續提出他們的要求和建議。較件工程使用的結構分析設計的方法為每個階段都規定了特定的結束標準,需求分析階段 必須提供完整準確的系統邏輯模型,經過用戶確認之后才能進入下一個階段,這就可以有效地防止和克服急于著手進行具體設計的傾向。

      4總體設計

      這個階段必須回答的關鍵問題是:“概括地說,應該如何解決這個問題?”

      首先,應該考慮幾種可能的解決方案。列如,目標系統的一些主要功能是用計算機自動完成還是用人工完成;如果使用計算機,那么是使用批處理方式還是人機交互方式;信息存儲使用傳統的文件系統還是數據庫……。通常至少應該考慮下述幾類可能的方案:

      低成本的解決方案。系統只能完成最必要的工作,不能多做一點額處的工作。

      中等成本的解決方案。這樣的系統不僅能夠很好地完成預定的任務,使用起來很方便,而且可能還具有用戶沒有具體指定的某些功能和特點。雖然用戶沒有提出這些具體要求,但是系統分析員根據自己的知識和經驗斷定,這些附加的能力在實踐中將證明是很有價值的。

      高成本的“十全十美”的系統。這樣的系統具有用戶可能希望有的所有功能和特點。

      系統分析員應該使用系統流程圖或其他工具描述每種可能的系統,估計每種方案的成本和效益,還應該在充分權衡各種方案的利弊的基礎上,推薦一個較好的系統 (最佳方案),并且制定實現所推薦的系統的詳細計劃。如果用戶接受分析員推薦的系統,則可以著手完成本階段的另一項主要工作。

      上面的 工作確定了解決問題的策略以及目標系統需要哪些程序,但是,怎樣設計這些程序呢?結構設計的一條基本原理就是程序應該模塊化,也就是一個大程序應該由許多 規模適中的模塊按合理的層次結構組織而成。總體設計階段的第二項主要任務就是設計軟件的結構,也就是確定程序由哪些模塊組成以及模塊間的關系。通常用層次 圖或結構圖描繪軟件的結構。

      5詳細設計

      總體設計階段以比較抽象概括的方式提出了解決問題的辦法。詳細設計階段的任務就是把解法具體化,也就是回答下面這個關鍵問題:“應該怎樣具體地實現這個系統呢?”

      這個階段的任務還不是編寫程序,而是設計出程序的詳細規格說明。這種規格說明的作用很類似于其他工程領域中工程師經常使用的工程藍圖,它們應該包含必要的細節,程序員可以根據它們寫出實際的程序代碼。

      軟件工程學習之道

      通常用HIPO圖(層次圖加輸入/處理/輸出圖)或PDL語言(過程設計語言)描述詳細設計的結果。

      6編碼和單元測試

      這個階段的關鍵任務是寫出正確的容易理解、容易維護的程序模塊。

      程序員應該根據目標系統的性質和實際環境,選取一種適當的高級程序設計語言(必要時用匯編語言),把說細設計的結果翻譯成用選定的語言書寫的程序,并且仔細測試編寫出的每一個模塊。

      7綜合測試

      這個階段的關鍵任務是通過各種類型的測試(及相應的調試)使軟件達到預定的要求。

      最基本的測試是集成測試和驗收測試。所謂集成測試是根據設計的軟件結構,把經過單元測試檢驗的模塊按某種選定的策略裝配起來,在裝配過程中對程序進行必 要的測試。所謂驗收測試則是按照規格說明書的規定(通常在需求分析階段確定),由用戶(或在用戶積極參加下)對目標系統進行驗收。

      必要時還可以再通過現場測試或平行運行等方法對目標系統進一步測試檢驗。

      為了使用戶能夠積極參加驗收測試,并且在系統投入生產性運行以后能夠正確有效地使用這個系統,通常需要以正式的或非正式的方式對用戶進行培訓。

      通過對軟件測試結果的分析可以預測軟件的可靠性;反之,根據對軟件可靠性的要求也可以決定測試和調試過程什么時候可以結束。

      應該用正式的文檔資料把測試計劃、詳細測試方案以及實際測試結果保存下來,做為軟件配置的一個組成成分。

      8軟件維護

      維護階段的關鍵任務是,通過各種必要的維護活動使系統持久地滿足用戶的需要。

      通常有四類維護活動:改正性維護,也就是診斷和改正在使用過程中發現的軟件錯誤;適應性維護,即修改軟件以適應環境的變化;完善性維護,即根據用戶的要求改進或擴充軟件使它更完善;預防性維護,即修改軟件為將來的維護活動預先做準備。

      雖然沒有把維護階段進一步劃分成更小的階段,但是實際上每一項維護活動都應該經過提出維護要求(或報告問題),分析維護要求,提出維護要求,提出維護方 案,審批維護方案,確定維護計劃,修改軟件設計,修改程序,測試程序,復查驗收等一系列步驟,因此實質上是經歷了一次壓縮和簡化了的軟件定義和開發的全過 程。

      都應該經過提出維護要求(或報告問題),分析維護要求,提出維護要求,提出維護方案,審批維護方案,確定維護計劃,修改軟件設計,修改程序,測試程序,復查驗收等一系列步驟,因此實質上是經歷了一次壓縮和簡化了的軟件定義和開發的全過程。

      軟件開發

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:制造業生產過程系統管理(制造業生產過程系統管理方案)
      下一篇:提升服裝業管理效率,ERP進銷存軟件的重要性
      相關文章
      亚洲av无码一区二区三区不卡| 亚洲人成色在线观看| 亚洲AV综合色区无码另类小说 | 亚洲国产精品无码专区| 中文日韩亚洲欧美制服| 亚洲成a人片毛片在线| 国产精品亚洲а∨无码播放| 精品国产亚洲一区二区三区在线观看| 亚洲va精品中文字幕| 91亚洲国产成人久久精品网址| 亚洲第一区视频在线观看| 亚洲成人一级电影| 亚洲第一页在线视频| 亚洲欧洲国产综合| 亚洲国产精品成人综合久久久| 亚洲一级片在线观看| 天堂亚洲国产中文在线| 亚洲人AV在线无码影院观看| 亚洲s码欧洲m码吹潮| 亚洲精品偷拍视频免费观看 | 亚洲综合国产精品| 亚洲日本中文字幕区| 亚洲毛片免费观看| 亚洲一区二区三区在线网站| 亚洲最大天堂无码精品区| 亚洲国产日韩a在线播放| 国产精品亚洲精品久久精品| mm1313亚洲精品国产| 亚洲AⅤ无码一区二区三区在线 | 亚洲人成人网站在线观看| 中文字幕精品亚洲无线码二区 | 亚洲欧美日韩综合俺去了| 最新亚洲人成无码网www电影| 亚洲av无码乱码在线观看野外| 亚洲精品国产精品国自产观看| 中文字幕精品亚洲无线码二区| 久久亚洲一区二区| 亚洲中文无码a∨在线观看| 亚洲欧美不卡高清在线| 亚洲国产91精品无码专区| 亚洲日韩aⅴ在线视频|