2014-12-09 56 views
9

有没有办法测量在Visual Studio Online中用例或任务上花费的时间?我想把所有东西放在一个地方(Visual Studio Online就是这种情况),并且从那里能够生成报告,例如每个用户的每月时间跟踪报告和反映实际工作时间的每日报告一个特定的用例/任务与预计的时间。Visual Studio Online中的时间跟踪

+0

有关Team Foundation Server和Visual Studio Online的时间跟踪选项在这里有一个很好的讨论:https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2060101-tfs-needs-the-能力 - 跟踪 - 小时 - 绑定到一个工作 – 2014-12-09 22:00:59

回答

4

当您创建链接到Backlog itemBugTask时,字段Remaining work实际上以小时为单位。所以你可以设置这个有一个时间跟踪。

不幸的是,根据我的了解,无法设置任务完成后的实际时间。

+0

没有,因为系统不能真正知道用户在做什么。您处在正确的轨道上,他们可以检查与特定任务/错误/问题相关的工作,因此报告是有意义的。 – Jason 2014-12-09 13:16:16

+0

@Jason当您在“完成”中设置任务时,可能会出现一个字段,例如“实际工作”,用户可以设置该字段来设置任务所花费的实际时间。 – Gimly 2014-12-09 14:28:46

+0

有一个实际的工作设置(至少与cmmi配置文件)。预计剩余的实际。这并不能解决我认为OP所要求的确切时间,因为工人可以把任何东西放在那里。 – Jason 2014-12-09 14:30:58

2

不,在VSO或TFS中没有办法做到这一点。这种做法不利于有效和价值交付。事实上研究表明,向顾客提供价值可能是不利的。

虽然有插入VSO并提供此功能的第三方工具,我会推荐一种不同的方法。

对课程粒度任务有单独的时间跟踪。专注于计费而不是时间跟踪。我想知道哪个客户或项目需要付费以及资本支出与运营成本...除此之外,数据价值不大。我使用Freshbooks并成功地使用过收获。

更新:如果您是咨询公司,您显然需要跟踪您的结算时间。这应该在与TFS分离的系统中完成。

+2

我很困惑。目前,我们使用了fogbugz,并为我们所做的所有工作创建了案例 - 我的意思是bug个案,新功能案例,新项目所有功能的案例以及公司开发任务等。这样,我们知道如何我们花费了我们的时间,并精确记录了我们如何花时间为客户开票(我们很多的结算都是按时完成的,因此这很重要)。使我们能够在VSO中记录时间的功能将允许我们从fogbugz切换到VSO,我不明白为什么有那么多人反对呢? – tomRedox 2015-02-24 20:23:03

+0

时间跟踪与开发工作是分开的。我可能有一个用于记录时间的CustomerA-ProjectA-CapEx条目,在TFS中这是50个任务。不同的问题...... – 2015-02-25 05:17:06

+0

你可能会遇到这种情况,但这不适合我们,因为我们会记录时间。我们的客户喜欢看到我们花费时间的细节。你说:“这种方法不利于有效和价值交付”,但在我们的案例中,为了这个原因记录我们的时间对每一个案例至关重要。我想我的观点是,你的回答似乎暗示你公司的工作流程是唯一正确的。你能指点我提到的一些研究吗? (我有兴趣了解为什么我一直在遇到这个观点,因此也就是这个问题。) – tomRedox 2015-02-25 15:07:43

0

我在过去使用JIRA,并喜欢可以登录工作小时的方式。

我们使用评论列表在VSTS中创建了一个解决方法。这不是优雅,但它的作品。一个在评论中添加一个数值,并将其计算为工作小时数。你可以使用正则表达式更加详细地说明,但是我附上了假设那里有浮点或整数的代码。

URL_PREFACE = "https://yourproject.visualstudio.com/defaultcollection/" 

def getTicketComments(ticketID): 
    """ Gets a list of the comments (in order from oldest to newest) for a given ticket """ 

    url = URL_PREFACE + "_apis/wit/workitems/" + str(ticketID) + "/comments?api-version=3.0-preview&order=asc" 
    jsonDict = readURL(url) 

    return jsonDict["comments"] 

然后我们总结我们发现值:

def getHoursSum(ticketID): 
    """ For the given ticket, gets their comments, and calculates the hours 
    """ 
    commentList = getTicketComments(ticketID) 
    hourSum = 0 
    for comment in commentList: 
     try: 
      hourSum += float(comment["text"]) # Will break if it's not a number 
     except: 
      pass 

return hourSum 

最后,我们存储在CompletedWork领域工作的小时数:

def updateHours(ticketID, completedHours): 

    headers = {"Content-Type": "application/json-patch+json"} 

    url = URL_PREFACE + "_apis/wit/workitems/" + str(ticketID) + "?api-version=1.0" 

    body = """[ 
     { 
      "op": "replace", 
      "path": "/fields/Microsoft.VSTS.Scheduling.CompletedWork", 
      "value": """ + str(completedHours) + """ 
     } 
    ]""" 

    username = 'username' # Doesn't matter 
    password = TOKEN 

    # TO GET TOKEN: 
    # Log into https://yourproject.visualstudio.com/ 
    # Click on your name -> My Profile 
    # In the left-hand sidebar, click on "Security" 
    # Under "Personal Accesss Tokens," click "Add" 
    # Under "Description" give your token a name (doesn't matter) 
    # Choose an expiration for your token (recommend: 1 yr) 
    # "Authorized Scopes" = "All Scopes" 
    # Click "Save" 
    # Copy the token it gives you into token field below (paste between quotes) 

    session = requests.Session() 
    request = requests.Request(method="PATCH", headers=headers, auth=(username, password), 
           url=url, data=body) 
    prepped = request.prepare() 
    response = session.send(prepped) 

    return response 

(我只是复制和粘贴一些简化的代码 - 你需要整合它)

代码是由我最ex cellent的同事@Elliptica。