葉上華,殷 茗,楊 益,姜繼嬌
1(西北工業大學 計算機學院,西安 710072)
2(西北工業大學 軟件學院,西安 710072)
3(西北工業大學 管理學院,西安 710072)
異地敏捷開發已成為軟件企業開發項目IT 策略的一部分[1],這種開發可能在一個單獨項目中涉及到多個地點,或軟件開發周期中一部分的服務提供者[2].敏捷方法已存在多年,通過使用迭代和增量方法為業務增加價值,其中軟件開發人員處理小模塊并響應用戶不斷變化的業務需求,并在價值、原則和實踐方面為軟件工程帶來了重大變化.因此,敏捷方法通過接受“反饋和變化”以及“擁抱而不是拒絕更高的變化率”來提供靈活性以及對軟件開發過程的嚴謹性[3].近年來,敏捷方法在全球化環境中越來越受到重視,其低成本,早期產品交付和高質量產品等多種優勢使得異地敏捷開發成為當下諸多企業積極探索的趨勢.然而,一些研究指出,由于異地敏捷開發存在文化差異、時間差異、地理分布等諸多特征[4],在全球分布式環境中采用敏捷方法會帶來重大挑戰,尤其是一些敏捷原則和實踐強調近距離、面對面交互.敏捷開發實踐需要頻繁地非正式通信,例如每日站立會議,以便管理項目并實現Scrum 的效果,當成員在地理上分散時,知識共享難以實現、非正式溝通很難進行[5].任務分配作為軟件項目的基礎活動,是異地分布式敏捷軟件開發中的關鍵環節[1],分配決策需要考慮多方面因素,任務分配可減少異地敏捷團隊之間的溝通成本,使團隊成員能把大部分精力投入到軟件開發[6].
目前,研究者們對任務分配的研究大多主要集中在人工智能領域,如多Agent 系統[7]、機器人[8]等.任務分配的目的,是為了合理配置現有資源,不同應用需要不同的任務分配機制.現有研究[8,9]大多致力于集中式任務分配,未考慮異地敏捷團隊的分布式的能力和資源.例如Butler 和Heys[10]提出了基于行為和拍賣的任務分配方法,行為方法提出了高中低的自重構團隊行為及六個任務行為,采用動機函數平衡不同行為完成任務布置,拍賣方法解決任務分配中的行為交互,及添加額外交互行為.Pendharkar[11]提出了啟發式蟻群的任務分配優化方法,分析了約束任務分配的線性整數規劃及其松弛規劃、低限制拉格朗日松弛,提出了約束任務分配的迭代啟發式貪婪及基于啟發式蟻群算法的約束任務分配模型.Wilson 和Quigley[12]提出了可靠性增長的任務分配模型,從項目風險視角出發,以成本和時間為約束,識別和設計系統開發可能的任務弱點,從成本、時間測試系統可靠性,建立多屬性效用函數,構建可靠性增長任務分配模型.上述研究雖然分別解決了任務布置和行為交互、約束任務分配及風險視角任務分配問題,但普遍忽略了任務與異地團隊的多屬性能力匹配.
異地敏捷軟件開發中的任務要分配給異地團隊,這些異地團隊具有不同的能力和資源來完成這些任務,因此需要考慮異地敏捷環境的多個決策屬性.現有學者已經對此展開了初步研究.Duggan 等[13]認為軟件構建中的任務分配需要考慮多個目標,包括成本、缺陷數量、完成時間、員工使用與客戶滿意度等,采用演化算法和遺傳算法進行多目標任務分配可以達到優化效果.Ruano-Mayoral 等[14]提出了一個全球開發項目任務包二階段分配框架,提出了任務分配的決策影響因子,包括可用性和能力;Almeida 等[15]提出了一個異地分布式開發認知映射和MACBETH 的多維決策模型,其中決策因子包括成本、分布水平、文化差異水平、團隊年齡、團隊技能適應性、溝通有效性、溝通頻率、協作控制水平等.Lamersdorf 和Münch[16]提出了全球軟件開發的一個客戶化多維需求任務分配模型,運用了改進Bokhari算法,該模型在多個典型假設場景和實際分布決策問題獲得了應用效果.張立等[17]提出半自治多Agent 任務分配方法,將心智模型與擴展合同網機制結合,并擴展了合同網機制包括發標優選、競標報價與多Agent 任務分配過程.另外,殷茗和馬靜[18]提出了基于多任務優先算法的異地軟件開發任務分配模式,該研究主要關注異地分布式軟件分配的優先權屬性.
上述研究為本研究提供了很好的研究借鑒,但是沒有考慮任務與團隊的多屬性能力匹配,對異地敏捷團隊的任務分配效用沒有聚焦.本文充分考慮了異地敏捷開發的特征和挑戰,首先提煉出該環境下的子任務能力需求屬性和團隊能力屬性,包括了技術能力、協調能力、創新能力和敏捷開發能力;其次,在整數線性規劃的基礎上提出了基于能力匹配的效用函數,分別求解出了任務和團隊的能力匹配效用值;再次,以全局效用最大化為目標,采用匈牙利算法求解出了最優的任務分配方案;最后,通過算例仿真驗證了方法的有效性,從而為異地敏捷軟件開發任務分配的決策實踐提供理論依據.
假設異地敏捷開發中待分配的任務已經分解為n 個子任務 Ti(i=1,2,3,···,n),參與項目開發的n 個團隊Pj(j=1,2,3,···,n),由多個異地團隊通過敏捷開發方式協作完成目標任務T.不同的子任務 Ti對 團隊 Pj有不同的能力要求,而團隊 Pj有自己的能力,團隊選擇不同任務產生的效用不同.效用函數就是用來評價任務和團隊的匹配程度的函數.因此,本文在根據任務能力需求屬性和團隊能力屬性的基礎上,利用效用函數將任務分配給最合適的團隊執行,從而實現全局最優.
異地分布式無法支持敏捷開發所提倡的面對面的溝通與交流,由此出現了大量待解決的協作問題.協作是“管理活動之間的依賴關系”,這種依賴關系包括共享的資源、任務分配、任務和子任務之間的關系[19],團隊協作、目標導向、團隊內聚力、共享心智模式及團隊學習等是影響軟件開發的重要變量[20].敏捷方法是高度協作的,無論是在開發組內部還是在開發組之間.敏捷方法依靠非正式溝通而不是大量文檔來快速傳播整個團隊和其他利益相關者的信息.沒有高度協作的環境,任何敏捷方法都注定要失敗.由于敏捷方法在很大程度上依賴于協作和溝通[21],因此團隊是成功的關鍵.考慮異地敏捷開發協作特征,本文將協作能力作為任務和團隊的重要能力屬性.另一方面,異地團隊開發的“敏捷性”,可以快速適應不穩定的市場環境和需求波動[22],即適應人員配置、程序設計、系統體系架構、軟件開發流程和軟件如何遵照業務調整和預算結構的變更[23].因此,將敏捷開發能力作為異地敏捷開發任務分配的能力屬性.對于技術能力和創新能力的提出則是因為敏捷方法的最大影響在于開發團隊.敏捷方法依賴于強大的開發團隊,除了具備較強的溝通協作能力和敏捷開發的經驗,開發團隊還必須技術嫻熟、思維活躍、善于變通,這不僅僅異地敏捷開發團隊更是任何軟件開發團隊應該具備的優秀品質.根據上述分析,結合軟件開發團隊強調技術與創新能力的特征,本研究認為異地敏捷開發的子任務 Ti有4 個能力屬性:協作能力、敏捷開發能力、技術能力和創新能力.采用能力需求向量表示各個能力的需求值,如式(1)所示.

與子任務能力屬性相對應,異地敏捷團隊 Pj擁有4 個能力屬性:協作能力、敏捷開發能力、技術能力和創新能力.用能力擁有向量表示各個能力的擁有值,如式(2)所示.

要實現整個系統優化,應當采用明確的標度度量任務分配結果,由此有必要分析基于能力匹配的效用函數.隨著環境變化,任務需求能力和團隊能力都隨之變化,團隊對子任務的勝任程度也相應變化[24],因此,基于能力匹配的效用需要重點考慮團隊能力對任務所需能力的滿足程度.任務和團隊的能力匹配研究不僅可以最大程度地調動開發團隊的工作潛能和主觀能動性,還可以使項目完成實現效用最大化[25],從而使軟件開發呈現良性循環的模式.效用函數 Uij是一個量化第j 個團隊和第i 個子任務匹配度的函數.
本文主要研究異地敏捷開發的任務分配中任務能力需求度和團隊擁有能力的匹配程度,分別包括技術能力、協調能力、創新能力和敏捷開發能力.與普遍情況下的軟件開發任務分配不同,本文的效用函數充分結合異地敏捷開發的特點對能力類型進行嚴格篩選,考慮到異地敏捷開發技術較為先進、異地溝通成本大、采用敏捷開發的軟件較為新穎和敏捷開發團隊規模較小等因素,最終效用函數確定技術能力、協調能力、創新能力和敏捷開發能力這4 種能力為本文研究的主要能力,從而使得效用函數的使用更加符合異地敏捷開發的任務分配研究背景.Uij計算公式如式(3)所示.


針對1.2 節所提出的基于異地敏捷開發的任務分配的效用函數所構成的效用矩陣求解,本文采用匈牙利算法求解效用矩陣問題.匈牙利算法作為求解指派問題的經典算法,在避免程序陷入無限循環的情況下,可以求得指派問題精確的全局最優解.無論是對普通的軟件任務分配問題還是對結合異地敏捷開發特色的任務分配,該算法都有很好的適應性.效用計算步驟如下.
Step 1.從效用矩陣的每行最大匹配值減去該行元素,再從效用矩陣的每列最大匹配值減去該列元素.
Step 2.此時效用矩陣每行每列都存在零元素,需找出n 個獨立的零.若能找出,就以這些獨立零對應的效用矩陣中的匹配度為1,其余為0,得到最大效用值.當n 較小時,可用觀察法、試探法找出n 個獨立零元素.若n 較大,則需要按一定順序去找,具體如下:
(1)從只有一個零的行(列)開始,給這個零加圈,劃去畫圈的列(行)中的其他零;
(2)給只有一個零列(行)的零加圈,然后劃去加圈的元素所在行(列)的零;
(3)反復進行Step 2 中(1)、(2)兩步,直到所有零都被圈出或劃掉為止;
(4)若仍有沒有畫圈的零,且同行(列)的零至少有兩個.從剩有零最少的行(列)開始,比較這行零所在列中零的數目,選擇列中零最少的零加圈,然后劃掉同行同列的其他零.反復進行,直到所有零都圈出或劃掉為止;
(5)若畫圈零元素的數目m 等于矩陣的維數 n,那么已得到效用值最大的分配結果;若m<n,則轉下一步.
Step 3.做最少的直線覆蓋所有零,以確定該代價矩陣中能找到最多的獨立零.
(1)對沒有畫圈的行打對號;
(2)對已經打對號的行中有劃掉零的列打對號;
(3)再對打有對號的列中含畫圈元素的行打對號;
(4)重復Step 3 中(2)、(3),直到得不出新的打對號的行、列為止;
(5)對沒有打對號的行畫橫線,對打對號的列畫縱線,得到覆蓋所有零的最少直線數.
Step 4.經過上述變換得到新的效用矩陣.在沒有被直線覆蓋的數中找出最小值,并對沒劃直線行的各數都減去該最小值,對劃直線列的各數都加上該最小值,得到新矩陣,轉Step 2.
本文的核心是研究異地敏捷開發環境條件下合理的任務分配過程,研究對象是敏捷開發任務和異地敏捷開發團隊.傳統人力處理任務分配,無法保證分配結果質量.本文提出的基于能力匹配的方法可以量化分配結果,保證全局最優解.為驗證該方法的有效性,本研究在異地敏捷開發某購物網站項目為背景,利用效用函數進行任務分配案例仿真.仿真環境采用17.12 版本CodeBlocks,C 語言編程,在CPU 2 GHz、 4 GB 內存、256 GB 硬盤空間的64 位Windows 8 主機運行.前期采用問卷調查獲取仿真初始數據.
數據采集通過問卷調查獲取,以Likert5 級量表對異地敏捷開發任務能力需求度屬性和異地敏捷開發團隊能力屬性進行打分.現將任務名稱用任務標號來表示,如表1 所示,并做出如下規定:異地敏捷開發任務對技術能力,協調能力,創新能力和敏捷開發能力的需求值用(0,1],(1,2],(2,3],(3,4],(4,5]區間的右端點{1,2,3,4,5}表示,分值越高表示需要程度越高;同理,異地敏捷開發團隊的技術能力,協調能力,創新能力和敏捷開發能力擁有值也用(0,1],(1,2],(2,3],(3,4],(4,5]區間的右端點{1,2,3,4,5}表示.最終數據如表2 和表3所示.

表1 任務標號和任務名稱的對應關系

表2 異地敏捷開發任務能力需求數據

表3 異地敏捷開發團隊能力數據
按式(4)進行效用值計算,首先求出異地敏捷團隊和異地敏捷開發任務能力匹配時的效用值,再采用匈牙利算法對效用矩陣進行求解.采用C 語言編程,對實驗結果用文本輸出的方式表示.效用矩陣結果表4所示.
本文為數據處理方便,將效用矩陣乘以1000 后再按照匈牙利算法求最大值進行處理;式(7)是最終分配矩陣,1 表示分配,0 表示不分配.

表4 任務和團隊組的效用矩陣結果

經過23 次迭代,式(7)為整體效用最高時的分配矩陣,最終分配方案為:任務1 和團隊2、任務2 和團隊3、任務3 和團隊1、任務4 和團隊6、任務5 和團隊7、任務6 和團隊8、任務7 和團隊4、任務8 和團隊5.
異地敏捷開發項目匹配效用量化值如表5 所示,且效用值為4.837.效用值大小是由任務能力需求、團隊能力及任務和團隊的匹配程度來決定.計算后可以得出每一個任務和團隊的匹配度的衡量標準都在0 到1 區間里取值,故而整體效用值理論上是在0 到8 之間.由此可得該算例的分配結果最高效用適中.

表5 匹配效用量化值
當前異地敏捷團隊的能力值均高于任務能力需求值,可見并非能力越高的團隊產生的效用越高,對于高能力團隊接受低能力需求的任務時,同樣是人才資源的浪費.只有任務和團隊二者的能力剛好彼此滿足時,才能產生較高的效用值.這為日后任務分解的改進或參與異地敏捷項目團隊的調整給出理論性的依據.
效用值作為直接定量描述異地敏捷任務和異地敏捷團隊分配方案質量的數值,其越大說明任務和團隊能力越匹配,分配方案越合理.實際運用中,管理者應當在任務發布初期遵循效用值高的異地敏捷團隊參與任務的原則進行團隊選擇,只有這樣才會更高質量的完成任務.
本文充分考慮了軟件異地敏捷開發的任務分配特點,提煉出了異地敏捷開發環境下的任務能力需求屬性和團隊能力屬性,創新性地提出基于能力匹配的效用函數,將分配結果量化表達,使任務分配給最適合的團隊執行,達到了結果最優,從而產生效用最高的分配方案.通過算例驗證本文任務分配方法的有效性.但由于效用函數是基于線性規劃思想,對大規模的任務分配還缺乏普適性.異地敏捷開發在軟件開發領域已然興起,還有許多工作需要將來繼續深入研究.