前言

  经过一年半的大学生活,我们编程的能力逐步提高,已经具备与同学合作开发软件的能力。经过我们小组的讨论及交流,结合小组情况,初步确定开发设计单词学习软件。软件开发任务的分配极其重要,我们无法保证所有开发人员同时处在相同的地方进行开发。为了能够快速准确地获得单词学习软件异地敏捷软件开发团队任务分配的全局最优解,提出了一种基于能力匹配的异地敏捷开发任务分配方法,在我的第一篇博客里,决定复现他人的论文,探讨关于软件异地敏捷开发的任务分配问题。

 

背景:

  小组成员人员在不同的时间与地点进行各子项目的开发。由于异地敏捷开发存在文化差异、时间差异、地理分布等诸多特征[1]。敏捷开发实践需要频繁地非正式通信以便管理项目。当小组成员在地理上分散时,信息共享难以实现,非正式沟通很难进行[2]。任务分配作为项目的基础活动,是异地敏捷开发中的关键环节[3]。各子项目的分配决策需要考虑多方面因素,合理的任务分配可减少千词斩团队之间的沟通成本,使团队成员能把大部分精力投入到软件开发[4]

  本文充分考虑了异地敏捷开发的特征和挑战,首先提炼出该环境下的子任务能力需求属性和团队能力属性,包括了技术能力、协调能力、创新能力和敏捷开发能力;然后求解出了任务和团队的能力匹配效用值;接着采用匈牙利算法求解出了最优的任务分配方案;最后,通过算例仿真验证面向千词斩的异地敏捷开发任务分配方法的有效性。

 

方法介绍:

  异地敏捷开发的子任务有 4 个能力属性:协作能力、敏捷开发能力、技术能力和创新能力。

  设各子任务为Ti ,团队成员为P,采用能力需求向量表示各个能力的需求值,如下所示:

Ti [xi1,xi2,··· ,xik] (k = 1,2,3,4)

  与子任务能力属性相对应,异地敏捷团队拥有Pj 4个能力属性:协作能力、敏捷开发能力、技术能力和创新能力。用能力拥有向量表示各个能力的拥有值,如下所示:

Pj [y1j,y2j,··· ,ykj] (k = 1,2,3,4)

  效用函数是一个量化Uij第j个团队成员和第i个子任务匹配度的函数。Uij计算公式如式下所示:

  其中 xik 为任务i的对于第k个能力的需求度,ykj为团队j对于第k个能力的实际拥有值,∂kij 为任务i和团队j对于第k个能力的单一能力匹配程度。当团队的某种能力高于任务需求某种能力或者团队的某种能力低于任务需求某种能力时会相同程度的降低匹配度,只有团队的某种能力与需求能力越相近,单一能力匹配度才会越高。基于异地敏捷开发的任务分配就是在效用函数矩阵中Uij ,选择n个不同行不同列的元素求解,根据算法选择效用值最大的方案即为最优分配方案。

 

算例仿真:

  我们小组决定在正式开发前,对我们将要开发的单词学习软件进行任务分配仿真。现将任务名称用任务标号来表示,如表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 任务标号和任务名称的对应关系

任务标号

任务名称

任务 1

登录注册模块

任务 2

单词学习模块

任务 3

单词复习模块

任务 4

单词测评模块

 

表2 异地敏捷开发任务能力需求数据

任务标号

技术能力

协调能力

创新能力

敏捷能力

任务 1

1

4

1

1

任务 2

2

5

1

2

任务 3

3

4

2

2

任务 4

3

3

1

2

 

表3 异地敏捷开发团队能力数据

任务标号

技术能力

协调能力

创新能力

敏捷能力

团队1

3

5

4

3

团队2

3

2

2

3

团队3

2

3

3

3

团队4

3

3

2

4

 

  对以上数据进行处理,求出异地敏捷团队和异地敏捷开发任务能力匹配的效用值,再用匈牙利算法对效用矩阵进行求解,效用矩阵结果如表4所示。

 

表4 任务和团队组的效用矩阵结果

任务标号

团队 1

团队 2

团队 3

团队 4

任务 1

0.524

0.381

0.619

0.524

任务 2

0.825

0.500

0.700

0.575

任务 3

0.606

0.545

0.591

0.636

任务 4

0.611

0.667

0.722

0.796


  最终分配方案为:团队1负责任务2,团队2负责任务3,团队3负责任务1,团队4负责任务4。

 

参考代码:

  以上数据是我自己通过使用自己编写的矩阵结果计算程序而的出的数据,原始代码如下:

#include<bits/stdc++.h>
using namespace std;
double need[4][4] = {1,4,1,1,2,5,1,2,3,4,2,2,3,3,1,2};
double have[4][4] = {3,5,4,3,3,2,2,3,2,3,3,2,3,3,2,4};

double a_cal(int i, int j, int k)
{
    double x = need[i][k];
    double y = have[j][k];
    double xy = fabs(x - y);
    double a1 = 6.0, b1 = 0.0;
    double a2 = 6.0, b2 = 0.0;
    for(int p = 0; p < 4; p++)
    {
        if(a1 > need[i][p])
        a1 = need[i][p];
        if(b1 < need[i][p])
        b1 = need[i][p];
        if(a2 > have[j][k])
        a2 = have[j][k];
        if(b2 < have[j][k])
        b2 = have[j][k];
    }
    
    double Yj = b1 > b2 ? b1 : b2;
    double Xi = a1 < a2 ? a1 : a2;
    return 1 - 1.0 * xy / (Yj - Xi);
}

double w_cal(int i, int j, int k)
{
    double sum = 0.0;
    for(int p = 0; p < 4; p++)
    sum += need[i][p];
    return 1.0 * need[i][k] / sum;
}

int main()
{
    double u_cal[4][4];
    memset(u_cal, 0.0, sizeof(u_cal));
    for(int i = 0; i < 4; i++)
    for(int j = 0; j < 4; j++)
    for(int k = 0; k < 4; k++)
        u_cal[i][j] += 1.0 * w_cal(i, j, k) * a_cal(i, j, k);
        
    for(int i = 0; i < 4; i++)
    for(int j = 0; j < 4; j++)
    printf("%.3f\n", u_cal[i][j]);
    
    return 0;
} 

 

参考文献:

[1] Shameem M, Kumar RR, Kumar C, et al. Prioritizing challenges of agile process in distributed software development environment using analytic hierarchy process. Journal of Software: Evolution and Process, 2018, 30(11): e1979. [doi: 10.1002/smr.1979]

[2] Mak DKM, Kruchten PB. Task coordination in an agile distributed software development environment. Proceedings of 2006 Canadian Conference on Electrical and Computer Engineering. Ottawa, ON, Canada. 2006. 606–611.

[3] Sutanto J, Kankanhalli A, Tan BCY. Investigating task coordination in globally dispersed teams: A structural contingency perspective. ACM Transactions on Management Information Systems, 2015, 6(2): Article No.5.

[4]Adelman L, Miller SL, Yeo C. Testing the effectiveness of icons for supporting distributed team decision making under time pressure. IEEE Transactions on Systems, Man, and Cybernetics —Part A: Systems and Humans, 2004, 34(2): 179–189. [doi: 10.1109/TSMCA.2003.819492]