項目經(jīng)理(Project manager)是項目的支柱與核心,維基百科的定義:項目經(jīng)理是項目管理方面的專家,負(fù)責(zé)項目的策劃、執(zhí)行和結(jié)束,即整個生命周期過程。項目經(jīng)理手中的“干將莫邪”便是軟件開發(fā)過程方法(software development process/software development life cycle (SDLC)),可能采取的有RUP(Rational Unified Process),敏捷等。
其實軟件開發(fā)區(qū)分階段已經(jīng)廣為大家接受,普遍的概念即需要區(qū)分為分析、設(shè)計、實施、測試、發(fā)布,過程中會產(chǎn)生若干產(chǎn)物,如需求說明書、概要設(shè)計、詳細(xì)設(shè)計等。若提及過程方法,如RUP的話,主要分為四大階段,先啟(Inception)、精華(Elaboration)、構(gòu)建(Construction)、交付(Transition)迭代的開發(fā)方式,而Scrum的核心概念則是Sprint。
Maven在項目管理中有那些幫助呢?Maven能夠從一個信息中心為項目提供構(gòu)建,報告,文檔編制等工作。在Maven官方介紹《What is maven》中介紹了maven的項目目標(biāo)(Objectives)(http://maven.apache.org/what-is-maven.html),如下:
l 簡化構(gòu)建過程
l 提供統(tǒng)一的構(gòu)建系統(tǒng)
l 提供項目質(zhì)量信息
l 提供對于開發(fā)最佳實踐的指導(dǎo)
l 允許對于新特性的透明整合
對于Maven影響最為深刻的就是它的構(gòu)建系統(tǒng),幾乎貫穿了整個實施階段。作為對比我們參考一下RUP的Construction階段,以及Scrum的單個Sprint過程。
RUP的Construction階段的目標(biāo):
這個階段的目標(biāo)是澄清需求并基于架構(gòu)基線完成開發(fā)。
l 通過優(yōu)化資源來縮減開支,并避免無意義的爭執(zhí)與返工。
l 實用性與質(zhì)量兼具。
l 盡快發(fā)布可用版本。
l 完成對所有功能的分析、設(shè)計、開發(fā)、測試。
l 采用增量迭代的模式完成開發(fā)并準(zhǔn)備交付。
l 檢查項目發(fā)布的所有資源是否已經(jīng)準(zhǔn)備完全。
l 形成項目組之間的并行開發(fā)。
在《硝煙中的Scrum與XP》一書中,介紹了作者實施Scrum的過程。在一個Sprint中,不是只有Sprint backlog、burn down chat等,實施過程中的敏捷思想也是其中的核心,我們來看看敏捷信奉的一部分最佳實踐:
l 簡單設(shè)計(Simple Design)
l 結(jié)對編程(Pair Programming)
l 測試驅(qū)動(Test-Driven Development)
l 小規(guī)模發(fā)布(Small Releases)
l 持續(xù)集成(Continuous Integration)
l 集體擁有代碼(Collective Code Ownership)
l 編碼標(biāo)準(zhǔn)(Coding Standard)
Maven對于上述目標(biāo)中的質(zhì)量(實用性與質(zhì)量,以測試驅(qū)動)、可用(可用版本,小規(guī)模)、資源管理等均能發(fā)揮較大的作用。主要是其定義了一套完整優(yōu)秀的構(gòu)建生命周期機制,其基本階段如下:
l validate – 驗證項目正確性及依賴有效性
l compile – 編譯項目源碼
l test – 使用合適的單元測試框架對編譯后的源碼進(jìn)行測試,測試代碼不會被打包或發(fā)布
l package –將編譯后的代碼以規(guī)定格式打包,如Jar
l integration-test – 將打包后的代碼放置于環(huán)境中進(jìn)行集成測試
l verify – 檢查打包的有效性并驗證質(zhì)量標(biāo)準(zhǔn)
l install – 將包裝載入本地倉庫,以提供與其他項目的依賴
l deploy – 將包發(fā)布至遠(yuǎn)程倉庫中
其上每一個階段實際都分為前中后三個階段,用戶可以定義在每一個階段前后進(jìn)行自定義的操作,打造自己的構(gòu)建流程(如在某個階段執(zhí)行前制定特殊的配置文件,完成后再改回默認(rèn))。對于階段的實際使用方式,如:validate可以項目所有依賴有效,test可以針對dao層進(jìn)行單元測試,intergration-test可以對完整業(yè)務(wù)流程或服務(wù)層等進(jìn)行集成測試。
在項目中實際使用的經(jīng)驗,對于標(biāo)簽的使用心得:
1.<dependency> - 依賴標(biāo)簽,最重要的標(biāo)簽,也是Maven的基礎(chǔ)功能。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
2. <repository> - 資源倉庫,可以包含多個,常用的有Maven,Jboss等,如下是公司內(nèi)建的Nexus資源庫。
<repository>
<id>Suntang's Maven Repository</id>
<name>Suntang Nexus Repository</name>
<url>http://10.10.10.33:8081/nexus/content/groups/public</url>
</repository>
3. <profile> - 解釋為情景模式可能較為合適。可以有多個,在何種場景下會使用哪些屬性、插件等。如下例子便是當(dāng)缺失某個文件時激活。
(感覺寫的不錯的一篇,http://blog.csdn.net/turkeyzhou/article/details/4894657)
<profile>
<activation>
<file>
<missing>target/generated-sources/axistools/wsdl2java/org/apache/maven</missing>
</file>
</activation>
</profile>
4.<build> - 構(gòu)建過程。是進(jìn)行整個項目管理的核心標(biāo)簽。重點需要掌握的知識就是生命周期。
(http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference)
下面的例子就是制定了打包時的資源路徑,并且定義了最終打包的名稱。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
<resource>
<directory>src/main/assembly</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
<finalName>po</finalName>
</build>
4.< plugin > - 支持插件。如單元測試自動化,之前提到的Ant的插件等。若有某些功能覺得不順手,可以嘗試官網(wǎng)找一下有沒有合適的插件(http://maven.apache.org/plugins/index.html)。
下面的例子就是在集成測試中,只運行后綴為TestSuitex.java的測試類
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<junitArtifactName>junit:junit</junitArtifactName>
<forkMode>once</forkMode>
</configuration>
<executions>
<execution>
<id>default-test</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<skip>false</skip>
<includes>
<include>**/*TestSuitex.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>