Visual Studio Onlineのユースケースまたはタスクに費やされた時間を測定する方法はありますか?すべてを1か所にまとめ(Visual Studio Onlineの場合)、そこからレポートを生成できるようにしたいと思います。たとえば、ユーザーごとの月次時間追跡レポートや、実際に作業した時間を反映する日次レポートなどです。特定のユースケース/タスクと推定時間。
バックログアイテムまたはバグにリンクされたタスクを作成している場合、フィールド残りの作業は実際には時間。したがって、これを一種の時間追跡を持つように設定できます。
残念ながら、私が知る限り、タスクが終了してから実際にかかった時間を設定する方法はありません。
いいえ、VSOまたはTFSでこれをすぐに実行する方法はありません。このアプローチは、効果的で価値のある提供を助長するものではありません。実際の調査によると、顧客に価値を提供することは有害である可能性があります。
VSOにプラグインしてこの機能を提供するサードパーティのツールがありますが、別のアプローチをお勧めします。
コースのきめ細かいタスクに対して個別の時間を追跡します。時間の追跡ではなく、請求に焦点を合わせます。請求する顧客またはプロジェクト、および設備投資と運用コストを知りたいのですが...それ以上にデータにはほとんど価値がありません。私はFreshbooksを使用しており、過去にHarvestを使用して成功しています。
更新:コンサルタントの場合は、明らかに請求の時間を追跡する必要があります。これは、TFSとは別のシステムで実行する必要があります。
私は過去にJiraを使用し、作業時間を記録する方法が好きでした。
コメントのリストを使用して、VSTSで回避策を作成しました。エレガントではありませんが、機能します。コメントに数値を追加すると、それは労働時間数としてカウントされます。正規表現を使用してこれをより複雑にすることができますが、floatまたは整数が含まれていることを前提としたコードを同封しています。
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
(単純化されたコードをコピーして貼り付けたところです。統合する必要があります。)
コードは私の最も優秀な同僚@Ellipticaによって書かれました。