每個人都意識到我們需要過程來改進軟件開發的方式。每個人也都意識到我們需要敏捷,靈活性和適應性。每個人也都認同對質量的需要。但是,我們中間的很多人都發現,現有的軟件過程過于繁重,并約束、妨礙著我們創造力源泉的發揮。
開發人員疲于應付開發過程。統一過程過于繁重, 過程改進程序需要過多繁瑣的工作,而敏捷陣營又似乎承諾了太多。我們深知我們需要好的實踐來保證按時,按照預算來開發出好的軟件。我們需要從根本上對我們設計,配置, 培訓,采用和部署過程的方式進行重新設計。
什么是核心統一過程?
核心統一過程,或者我們稱之為EssUP,是建立在現代軟件開發實踐之上的新一代軟件開發過程。她是一個嶄新的開始,開始于沒有任何累贅的一頁白紙。她慎重的集成了來自三個陣營的成功實踐:統一過程陣營,敏捷方法陣營和過程改進陣營。每一個陣營都貢獻了不同的過程能力。
但是,在我們更進一步深入討論什么是EssUP之前,讓我們首先快速列舉出我們需要一個新過程的原因。
1、傳統的軟件過程過于繁重,沒有人會去閱讀大量冗長的過程描述。
2、過程必須關注對開發人員的支持,而不是僅僅面向過程專家。顯然這篇論文是面向過程專家的,因為很少有開發人員真正的閱讀過程方面的論文。
3、過程必須幫助 團隊在獲得過程質量的同時獲得軟件質量。因此,要交付好的軟件,而不僅僅是通過 CMMI的評估。任何軟件開發過程都必須聚焦于生產好的軟件。
4、過程必須提供基于原則的敏捷。滿足管理需求的同時不阻礙創新。
5、這個方法必須允許項目團隊(開發人員在沒有過程工程師幫助的情況下)很容易的將好的實踐加入到現行過程中。
6、過程應該使團隊更加強大。一個告訴您需要做什么,并且試圖像機器人一樣控制您行為的過程并不能夠幫助您。
實踐成為一等公民
一個傳統的軟件過程,比如統一過程,是通過對她所定義的不同角色所進行的活動和生產的制件進行描述的。這些活動和制件可能服務于不同的目的,例如基于用例的需求,測試驅動的設計、架構的構建、基于組件的開發,換句話說,他們在處理不同的實踐。這些實踐不是外在的、也不是可見的,甚至沒有一個名字。這樣的過程中所包含的許多實踐可以被形象地比喻為“一鍋湯”。
為了易于識別、設計和部署新的實踐(它們的個數可能有上百個),我們需要讓實踐成為一等公民(first-class citizens),并且降低過程在軟件開發中的地位。過程是您選擇的一組實踐的組合。為了達到這點,我們需要在這些實踐的各種使用中,包括設計,部署,和改進,把她們區分開來。
EssUP就表現形式來看,與其它過程或者方法有很大的區別。她給過程工業引入了一種新的思想:關注點分離(Separation of Concerns :SOC或面向方面的思想)。當我們在過程開發中使用這種思想時,我們就能生成一個本質上不一樣的過程。這樣一個過程使得您可以更容易、更直觀地定制您自己的軟件過程。最重要的是她可以使計劃和執行一個軟件項目更自然更來自于直覺。為了使這樣的思想更具象,我們在下面描述一些使用SOC思想的情況:
1、每一個實踐都獨立于其它實踐。
您只需要選擇您需要的實踐,而不用必須去取消選定任何活動和制件。僅僅選擇您想要的實踐,并把她們與您現有的過程組合起來。
2、從現有的過程和核心統一過程的元素中,您可以很容易地分離出各個元素。這個特性允許您在需要時以一種進化的方式改進已有的實踐。
從一個通用的 平臺開始,您可以使用一種源于紙牌游戲的簡單技術來描述您自己的過程。以這個為基礎,您可以自由靈活地導入我們的實踐。您加入您需要的那些,和您認為您所在的組織可以采用的那些,卻不需要承擔巨大的 風險。
3、她區分了過程的兩個不同視圖:過程的作者視圖和軟件開發者視圖。在過去的軟件過程里面,往往只關注作者視圖。EssUP強調了開發者的視角。她采用了游戲中的一些方法來開發,培訓,應用,并且使用這個過程,使之更輕量、敏捷。另外,我們保證這個游戲很好玩。
4、我們把核心的實踐和非核心的實踐進行了區分。這使得我們可以創建一個核心的輕量過程,同時這個過程有著很大的增量空間(比如上百個實踐)。
這些年來,我們發現,只有極少的人真正閱讀過程描述文檔,不論是通過書籍或者通過網絡。因此,給他們很多是沒有意義的。取而代之的是提供真正的核心,讓他們自己去學習其余他們想要的。有些人可能希望通過研讀來學習,有很多文章和書籍都可以選擇。一些人可以通過與已經獲得相關知識的人一起工作來學習。這樣分離關注點的結果是使過程非常輕量并且容易地響應變化。
5、她用一種平衡的方式分離了外在、顯見的知識和內在、隱含的知識。內在的知識是那些您用這樣或那樣的方法獲得的知識—您在大腦中儲存他們。外在的知識是以可獲得的描述形式存在的。過去的過程試圖用這種顯見的方式去捕獲所有的相關知識。盡管這樣的意圖是好的,卻使得過程變得繁重。EssUP只把核心部分顯性化。其余的部分要么是隱含的要么是由核心部分引用而得來。然而,處理知識最巧妙的形式,是在需要時,使用智能代理—這樣的方法我們稱之為smart practice。
6、她為分離創造性工作和非腦力工作準做好了準備(prepared)。這使得開發者把時間用于人類所擅長的工作—創造性的工作—把非腦力的勞動交給智能代理去完成。我們使用做“好了準備(prepared)”這個術語是因為EssUP并不是自身含有代理;代理是一個附加軟件。
7、她分離了兩種制件:alphas和betas。我們現在還沒有給他們起任何名字。我們認為alphas和betas兩者的區別是所有項目中最基本的。您可以暫時用key thing代替alpha,用evidence代替beta。
Alpha是那些非常重要的東西,她們存在于所有項目中,不論是不是以書面的形式存在。事實上,alphas并不是為特定過程定義的。比如,每一個軟件項目都有以下這些alphas: 項目(project),已實現的系統(implemented system),待完成列表(backlog),風險(risk)。每一個alpha有一系列的betas: 項目Alpha可能含有一個項目計劃,一個迭代計劃。風險Alpha包含一個風險列表。訂單可能含有一個特性列表和一個改變列表。Beta是Alpha的證據。他們可以是描述,圖表,流程圖,任何文檔或者非文檔,只要您自己認可。沒有文檔意味著團隊把這些知識都保存在頭腦中了。
因此,alphas是穩定并獨立于過程的,相反,betas可能基于您選擇的特定實踐。
Alphas和betas的分離使我們保持項目文檔的最小化。我們可以用精確的方式討論究竟有多少文檔。這讓我們能夠用紀律化的方式實現敏捷。我們可以從次核心內容中,分離出核心內容。
是什么形成了過程的基礎?
核心統一過程的中心,是一些簡單、并被驗證過的實踐,在各種類型和規模的軟件開發過程中,她們都可以被使用。這些實踐都經過了特別的設計,因而可以被分別使用,或者按照您的需要任意組合。這使得過程很容易被采用,并為創造和集合出一個您自己需要的過程提供了堅實的基礎,無論這些需要是來自開發人員還是來自開發組織。
EssUP來自于我們的五個基礎實踐,通過三個附加的工作實踐可以減少組織中引入這個過程所付出的代價。
基礎實踐
五個基礎實踐都是關于技術開發工作的。
迭代核心:使您很容易采用迭代的,固定時間盒的方式來管理和控制您的項目。
架構核心:讓您能夠確定被選定的架構適合項目的需要。
用例核心:使團隊以敏捷的方式獲取需求,并在解決方案中驅動開發和測試。
組件核心:通過使用從面向對象及其他流行開發方法中繼承而來的屬性,使你的軟件健壯、靈活、可重用。
建模核心:使您能夠采用適當的細節等級,增強團隊間的 溝通,降低項目風險。
有效的團隊協作
上面的五個開發實踐組成了技術層面的基礎,作為她的補充,這里提出其它三個實踐,來提升高效的團隊協作及過程改進。
產品核心:使團隊能夠緊密結合到所屬業務和項目組織中去。
過程核心:使團隊能夠采納并發展核心統一過程,使之成為自己需要的過程。
團隊核心:使團隊能夠設置并維護一個合適的工作環境。
但是,測試去了哪里?
測試無處不在。我們相信這樣一個隱喻:“無論您做了什么事情,直到您經過檢驗確認她就是您想要做的,您才算完成了這件事”,或者說“人人都是他自己的清潔工”。我們讓測試成為您任何工作中的組成部分之一。用例核心包括測試驅動設計,因為用例是測試用例的雛形。組件核心則包括組件的單元測試。
提供一種敏捷的方式
這一組實踐為您提供了一個基礎,從而能夠使用敏捷的方法來處理計劃和實現。您可以采用所有的實踐,或您需要的實踐,一個單獨的實踐,甚至是一個實踐的局部。您可以混合或者組合這些實踐,成為您需要的實踐,編寫您自己的實踐來擴展過程,混合您自己已有的實踐來建立您的體驗。這與傳統的,實踐與實踐之間沒有辦法剝離的過程有著巨大、本質的區別。