2014-12-09 6 views
9

Esiste un modo per misurare il tempo speso per un caso d'uso o un'attività in Visual Studio Online? Mi piacerebbe tenere tutto in un posto (Visual Studio Online sarebbe il caso) e da lì essere in grado di generare report, ad esempio report di tracciamento mensile per utente e report giornalieri che rifletterebbero il tempo effettivo su cui si è lavorato un caso/una pratica d'uso specifici rispetto al tempo stimato.Monitoraggio del tempo in Visual Studio Online

+0

C'è una buona discussione sulle opzioni di tracciamento del tempo con Team Foundation Server e Visual Studio Online qui: https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2060101-tfs-needs-the- abilità-to-track-hours-tied-to-a-wor –

risposta

4

Quando si crea un Task collegato a un Backlog item o un Bug, il campo Remaining work è in realtà in ore. Quindi puoi impostare questo per avere una sorta di tracciamento del tempo.

Sfortunatamente, non c'è modo di impostare l'ora effettiva che l'attività ha richiesto dopo che è stata completata, per quanto ne so.

+0

Non c'è, perché il sistema non può sapere veramente cosa sta facendo l'utente. Sei sulla strada giusta, e possono controllare il loro lavoro legato a una specifica attività/bug/problema, quindi i rapporti hanno senso. – Jason

+0

@Jason Quando si imposta l'attività su 'Fatto', potrebbe esserci un campo come "Lavoro effettivo" che gli utenti potrebbero impostare per impostare le ore effettive che l'attività ha richiesto. – Gimly

+0

Esiste un'impostazione di lavoro reale (almeno con i profili cmmi). Stimato, rimanente, attuale. Questo non risolve il momento esatto in cui penso che l'OP chiedesse, poiché il lavoratore può inserire qualsiasi cosa lì dentro. – Jason

2

No, non esiste un modo per eseguire questa operazione in VSO o in TFS. Questo approccio non favorisce una consegna efficace e di valore. In effetti, gli studi dimostrano che può essere dannoso per fornire valore ai clienti.

Mentre esistono strumenti di terze parti che si collegano a VSO e forniscono questa funzionalità, consiglierei un approccio diverso.

Avere un tempo separato di monitoraggio contro le attività granulose. Concentrati sulla fatturazione e non sul monitoraggio del tempo. Voglio sapere quale cliente o progetto fatturare come capex vs opex ... Oltre a ciò c'è poco valore nei dati. Uso Freshbooks e ho usato Harvest in passato con successo.

Aggiornamento: se si è una società di consulenza, ovviamente è necessario tenere traccia del tempo per la fatturazione. Questo dovrebbe essere fatto in un sistema separato da TFS.

+2

Sono confuso da questo. Attualmente usiamo fogbugz e creiamo casi per tutto il lavoro che svolgiamo in questo, e con ciò intendo casi di bug, nuove funzionalità, casi per tutte le funzionalità di nuovi progetti, nonché attività di sviluppo aziendale ecc. In questo modo sappiamo come stiamo spendendo il nostro tempo e abbiamo una solida documentazione di come abbiamo speso il nostro tempo per fatturare i nostri clienti (gran parte della nostra fatturazione è un lavoro che richiede molto tempo, quindi è fondamentale). Una funzionalità che ci ha permesso di registrare il tempo in VSO ci avrebbe permesso di passare da fogbugz a VSO, non vedo perché così tante persone sono contrarie? – tomRedox

+0

Il monitoraggio del tempo è qualcosa di separato dallo sforzo di sviluppo. Potrei avere una singola voce CustomerA-ProjectA-CapEx per il tempo di registrazione, dove in TFS ci sono 50 attività. Problemi diversi ... –

+0

Questo potrebbe essere il tuo caso, ma non è per noi, perché calcoliamo il tempo richiesto. Ai nostri clienti piace vedere la rottura di dove abbiamo trascorso il nostro tempo. Dici che "questo approccio non è favorevole a una consegna efficace e di valore", ma nel nostro caso è fondamentale registrare il nostro tempo per ogni caso esattamente per questa ragione. Credo che il mio punto sia che la tua risposta sembra implicare che il flusso di lavoro della tua azienda sia l'unico corretto. Puoi indicarmi alcuni degli studi che menzioni? (Sono interessato a capire perché continuo a incontrare questo punto di vista, quindi la domanda.) – tomRedox

0

Ho usato JIRA in passato e mi è piaciuto il modo in cui si potevano registrare le ore lavorate.

Abbiamo creato una soluzione alternativa in VSTS utilizzando l'elenco di commenti. Non è elegante ma funziona. Si aggiunge un valore numerico in un commento e questo viene contato come un numero di ore lavorate. Puoi renderlo più elaborato usando espressioni regolari, ma sto includendo il codice che presuppone che ci sia un float o un intero in esso.

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"] 

Poi sommiamo i valori che troviamo:

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 

E, infine, abbiamo memorizzare il numero di ore lavorate nel CompletedWork campo:

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 

(ho appena copiato e incollato un po 'di codice semplificato - sarà necessario integrarlo)

Il codice è stato scritto dal mio più ex collega cellulare @ Elliptica.