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