在軟體工程的概念被提出來之前,開發人員錯誤地認為,軟體就是開發活動,或者極端地認為其就是編碼,至于分析和設計等都是次要的。随着軟體規模的不斷增大,軟體開發活動中暴露出很多問題。軟體工程是為克服這些問題而被提出,并在實踐中不斷地探索它的原理、技術和方法。軟體工程的工程化思想讓開發人員看到,軟體工程活動包括溝通活動、計劃活動、模組化活動、實作活動、部署活動、維護活動、管理活動、過程改進活動。
溝通活動是一切項目都需要的活動。當需要開發一個項目時,一方面,開發團隊必然需要與客戶進行交流和溝通,獲得項目的需求;另一方面,開發團隊内部也需要交流,以便對項目有一個統一的了解,進而開發出滿足使用者需####要的産品。
溝通活動包括确定合适的客戶、非正式溝通和正式溝通。确定合适的使用者是指發現真正的使用開發産品的使用者,隻有使用該産品的使用者才能說出他們真正的需要。溝通是一門藝術,需要經驗和技巧。非正式溝通是與使用者的第一次接觸,還沒有建立融洽的關系,難以進行長時間和深入交流,這時由于對問題的認識還比較膚淺,或者由于雙方的領域不同,對問題的了解都存在一定的隔閡和難度,非正式溝通的目的是建立良好的關系和對問題有一個初步的了解。這種良好的關系增加雙方的友誼,增強信任感,為後面的正式溝通鋪平道路。非正式溝通應在一種輕松愉快的氛圍當中進行,雙方可以從感興趣的問題入手,進而轉到主題上來,了解項目所涉及的領域和初步要求等。正式溝通時,根據非正式溝通獲得的基本需求和問題,雙方确定讨論的主題或問題,開展深入的分析和讨論。一般,有一個主持人按照事先确定的議程,針對問題逐漸地提問和解答,保證溝通高效進行,并形成初步的文檔。正式溝通持續時間較長或分幾次進行。
計劃活動包括項目計劃和項目跟蹤管理活動。
項目計劃包括項目可用的資源、工作分解以及完成工作的進度安排。在項目執行期間,項目計劃一般應該經常地修正,有些項目或部分可能會頻繁地改變。通常要密切跟蹤項目變動的部分,并及時回報和調整。
項目計劃一般随着項目的進展不斷細化,這是由于項目初期各種計劃都是比較粗略的,無法做到較為詳細的計劃。随着項目的進展,一些要素和過程逐漸明确,因而項目的計劃需要詳細設計。
由于項目實際運轉與計劃總是有偏差的,是以項目跟蹤管理就是監控項目運轉過程出現的誤差,及時調整項目計劃,使得項目沿着正确的方向進行。
模組化是對事物的抽象,抓住問題的本質,并進行必要的描述。由于軟體産品是邏輯的,是大腦的邏輯想象,是看不見、摸不着的複雜事物,是以對軟體産品的模組化是必不可少的。
模組化活動是對軟體本質的抽象,并建立完整的模型描述文檔。模型是問題的某個方面的抽象。例如,需求模組化就是抽象出軟體的根本需求,包括資料需求、功能需求和環境需求等,可以通過實體關系模型、資料流模型和狀态模型來抽象和描述。模組化在軟體工程活動中是普遍的現象。軟體工程方法學提供許多的軟體模組化活動和相關的模型。我們在後續的章節會學到許多的模型。
軟體模組化主要包括軟體過程模組化和軟體本身模組化兩大類。軟體過程模組化指對軟體開發的過程進行模組化,目的是對複雜的開發過程進行抽象,了解不同開發過程的本質特征,進而指導開發團隊根據軟體項目選擇合适的開發過程。軟體自身模型是對軟體本身進行模組化,從不同的方面抽象出軟體的本質問題,進而給出合理的解決方案。
模組化活動包括構模組化型和模型的描述。構模組化型指根據軟體的複雜程度從不同的方面建立軟體的模型,目的是了解系統。構模組化型可以采用分解與抽象的方法進行。模型的描述是對建構的模型進行統一的表示,以便在開發人員之間進行交流和約定。有許多的工具支援開發人員進行高效模組化。
實作活動就是軟體的構造活動,也就是我們常說的編碼。實作活動根據軟體的設計編寫軟體的代碼,經過相應的測試後傳遞運作。
實作活動一般包括代碼編寫、測試與調試、重構和運作等。代碼編寫就是根據設計文檔和代碼規範将設計轉換成代碼的過程。開發人員要對程式語言和環境有一定的經驗,了解語言的特性,編寫簡潔明了的代碼。測試與調試指對代碼進行單元測試和內建測試,并對存在的問題進行修改和回歸測試等。重構活動是對能夠運作的代碼進行優化,使得代碼的結構層次清晰,便于了解和修改,并在清晰的前提下提高代碼的效率,支援代碼的重用。
一般,複雜的軟體需要部署在不同的硬體環境中。部署活動就是建立系統運作的環境,确定硬體結點之間的連接配接關系、結點的配置,以及配置設定代碼元件在不同的結點上。例如,一個基于web的圖書館系統,需要部署web伺服器、應用伺服器和資料庫伺服器的配置,建立它們之間的連接配接協定和帶寬要求,然後部署圖書館系統的代碼到不同的伺服器上。
軟體開發完成傳遞使用者使用後,就進入軟體的運作和維護階段。軟體維護是指軟體系統傳遞使用以後,為了改正軟體運作錯誤,或者因滿足新的需求而加入新功能的修改軟體的過程。軟體維護就是在軟體傳遞運作後,保證軟體正常運作、适應新變化等需要而進行的一系列修改活動。軟體維護的主要工作是在軟體運作和維護階段對軟體産品進行必要的調整和修改。
軟體維護是持續時間最長、工作量最大的一項不可避免的過程。軟體維護的基本目标和任務是改正錯誤、增加功能、提高品質、優化軟體、延長軟體壽命,以及提高軟體産品價值。
當今的軟體開發活動是一個非常複雜的過程。項目涉及幾十、幾百甚至幾千的人員,項目周期少則幾個月,多則幾年,項目費用越來越高,是以,這樣的項目就需要很好地管理活動。
著名的項目管理專家james p.lewis指出,項目是一次性的、多任務的工作,具有明确的開始日期和結束日期、特定的工作範圍、預算和要達到的特定性能水準。因而,項目涉及預期的目标、費用、進度和工作範圍4個要素。
軟體項目管理活動就是如何管理好項目的範圍、進度、成本等。為此需要制訂一個好的項目計劃,然後跟蹤與控制好這個計劃。實際上,要做到項目計劃切合實際是一個非常高的要求,需要對項目進行詳細的需求分析,制訂合理的計劃,安排好進度、資源調配、經費使用等,并不斷地跟蹤和調整。為了降低風險,要進行必要的風險分析與制訂風險管理計劃等。
要完成一個軟體項目,項目經理需要完全了解項目的過程,确定項目需要哪幾個步驟,每個步驟要完成什麼事情,需要哪些資源和技術,等等。如果将項目的關注點放在項目的開發過程,無論哪個團隊來做,都采用統一的開發過程,産品的品質是一樣的。團隊還可以通過不斷改進過程來提高産品的品質。這個過程展現了團隊的整體能力,而不依賴于個人能力。
軟體過程不隻是軟體開發的活動序列,而是軟體開發的最佳實踐,包括流程、技術、産品、關系、角色和工具等。在軟體過程管理中,首先要定義過程,然後合理地描述過程,進而建立企業過程庫,并成為企業可以重用的資源。同時,也要不斷地改善和規範過程,幫助企業提高生産效率。
軟體過程改進是極其複雜的。必須不斷總結過去做過的項目的過程經驗,形成有形的過程描述,并不斷地完善和在以後的項目中重複利用。
過程管理活動的主要内容是過程定義和過程改進。過程定義是對最佳實踐加以總結,形成一套穩定的、可重複的軟體過程。過程改進是根據實踐中對過程的使用存在的偏差或不切實際的地方進行優化的活動。通過實施過程管理活動,軟體開發團隊可以逐漸提高其軟體過程能力,從根本上提高軟體生産效率。