2014-12-09 73 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。