2014-12-09 4 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- 능력 추적 시간 - 묶어 놓은 것 –

답변

4

Backlog item 또는 Bug에 연결된 Task을 만들 때 Remaining work 필드는 실제로 시간입니다. 따라서 시간 추적을 설정하도록 설정할 수 있습니다.

아쉽게도 작업이 완료된 후 실제로 걸린 시간을 내가 아는 한 설정할 방법이 없습니다.

+0

시스템은 사용자가하는 일을 실제로 알 수 없으므로 그렇지 않습니다. 당신은 바른 길을 가고 있으며 특정 작업/버그/문제와 관련된 작업을 체크인 할 수 있으므로 보고서가 의미가 있습니다. – Jason

+0

@ Jason '완료'에 작업을 설정하면 사용자가 작업에 소요 된 실제 시간을 설정하도록 설정할 수있는 '실제 작업'과 같은 필드가있을 수 있습니다. – Gimly

+0

실제 작업 설정이 있습니다 (적어도 cmmi 프로파일 사용). 추정 된, 남은, 실제. 이것은 작업자가 요구하는 정확한 타이밍을 해결하지 못합니다. 작업자는 그곳에 무엇이든 넣을 수 있기 때문입니다. – Jason

2

아니요, VSO 또는 TFS에서이 작업을 수행 할 방법이 없습니다. 이 접근법은 효과적이고 가치있는 전달에 도움이되지 않습니다. 실제로 연구 결과에 따르면 고객에게 가치를 전달하는 것이 좋지 않을 수 있습니다.

VSO에 연결되는 타사 도구가 있지만이 기능을 제공하려면 다른 접근 방식을 권합니다.

과정 별 작업에 대해 별도의 시간 추적을하십시오. 결제 및 시간 추적에 집중하십시오. 나는 capex와 opex를 비교할 때 어떤 고객이나 프로젝트를 알기를 원합니다. 그 외에도 데이터에는 가치가 없습니다. 나는 Freshbooks를 사용하고 과거에 Harvest를 성공적으로 사용했습니다.

업데이트 : 컨설턴트 인 경우 분명히 청구 시간을 추적해야합니다. 이 작업은 TFS와는 별도의 시스템에서 수행해야합니다.

+2

나는 이것으로 혼란스러워합니다. 현재 우리는 fogbugz를 사용하여 우리가 수행하는 모든 작업에 대한 사례를 작성합니다. 즉, 버그 사례, 새로운 기능 사례, 새로운 프로젝트의 모든 기능에 대한 사례 및 회사 개발 작업 등을 의미합니다. 우리는 시간을 보내고 정확하게 우리가 고객에게 비용을 청구하는 데 시간을 얼마나 소비했는지에 대한 확실한 기록을 가지고 있습니다. (많은 청구서 작성은 시간에 맞춰 이루어진 작업이므로 이것이 중요합니다.) 우리가 VSO에서 시간을 기록 할 수있게 해주는 기능은 우리가 fogbugz에서 VSO로 전환 할 수있게 해줄 것입니다. 왜 그렇게 많은 사람들이 반대하는지 모르겠습니다. – tomRedox

+0

시간 추적은 개발 노력과는 다른 것입니다 .i는 TFS에서 50 개의 작업 인 녹음 시간에 대해 하나의 CustomerA-ProjectA-CapEx 항목을 가질 수 있습니다. 다른 문제들 ... –

+0

그게 당신에게 해당 될 수도 있지만, 우리가 시간을 청구하는 것처럼 우리에게는 그렇지 않습니다. 우리 고객은 우리가 시간을 보냈던 곳의 고장을보고 싶어합니다. "이 접근법은 효과적이고 가치있는 전달에 도움이되지 않습니다"라고 말하지만, 우리의 경우 정확하게 그 이유 때문에 각 사례에 대해 우리의 시간을 기록하는 것이 중요합니다. 내 대답은 귀하의 회신이 귀하의 회사의 워크 플로가 유일한 올바른 것임을 암시하는 것 같습니다. 당신이 언급 한 몇 가지 연구를 가르쳐 주시겠습니까? (나는 왜 내가이 시점, 즉 질문을 계속 겪고 있는지 이해하는 데 관심이있다.) – tomRedox

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 

가 (난 그냥 복사 및 붙여 넣기 몇 가지 간단한 코드 - 당신은 그것을 통합해야합니다)

코드는 내 대부분의 전적으로 작성되었습니다 cellent 동료 @ 엘립 티카.

관련 문제