计算敏捷项目中迭代时间安排(Python3版)
2018-07-31 本文已影响166人
CC先生之简书
节奏是敏捷开发的核心,保持合理固定的节奏,能有效的促使各个环节协调统一,高效运行。针对产品的不同周期,方案有所不同。
迭代开发.jpg
通常,我们需要在一个时间盒中去分配一个项目中不同阶段的时间,在项目管理中,我们经常要以人/天来进行计算。
现在让我们来假定一个规则:
- 一个时间盒里的时间点有 需求,开发,SIT测试,UAT测试,回归测试, 发布
- 工作日为周一,周二,周三,周四,周五(万恶的工作日。。。)
- 上一个迭代发版后的一天为需求截止时间
- SIT测试完成的时间为需求截止后的5天
- UAT和回归测试一共消耗3天
- 封板时间为发布前一天
看看,我们设定了一个至少6个条件的规则才能算出一个迭代周期。这个时间你是不是已经开始翻着日历开始搬指头了。
日历.jpg
如果,用Python来实现呢?
翻了翻PyPi中的第三方包,发现一个好玩的:business_calendar
其提供了非常简单易用的计算工作日的接口,并允许用户指定特定日期为假期,从而将其从当前的工作日中剔除
项目主页: https://pypi.python.org/pypi/business_calendar/
在该类库中,有workday和businessday的概念:
-
addbusydays(date, offset) 其将考虑holidays公休假的因素
-
addworkdays(date, offset) 忽略公休假的因素
-
busdaycount(date1, date2) 计算两个时间点直接的工作日
-
range(date1, date2) 返回工作日列表, 考虑假期因素
-
isworkday(date) 是否是工作日,忽略公休假的因素
-
isbusday(date) 是否工作日,考虑公休假
-
isHoliday(date) 是否是假日
from business_calendar import Calendar, MO, TU, WE, TH, FR
import datetime
detester = input("请输入上一个版本结束时间:\n")
thisyear = datetime.datetime.strptime(detester, '%Y-%m-%d').year
thismonth= datetime.datetime.strptime(detester, '%Y-%m-%d').month
thisday= datetime.datetime.strptime(detester, '%Y-%m-%d').day
begindatetime = datetime.datetime(thisyear,thismonth,thisday)
print(begindatetime)
# normal calendar, have holidays
#cal = Calendar(workdays=[MO,TU,WE,TH,FR], holidays=['2018-06-18'])
cal = Calendar(workdays=[MO,TU,WE,TH,FR])
date1 = cal.addbusdays(begindatetime, 1)
print("版本中需求截止时间 %s" % date1)
date2 = cal.addbusdays(date1, 5)
print("版本中SIT测试完成时间 %s" % date2)
date3 = cal.addbusdays(date2, 3)
print("版本中UAT+回归测试完成时间 %s" % date3)
date4 = cal.addbusdays(date3, -1)
print("版本中封板时间 %s" % date4)
下次,再算版本时间的时候,希望小伙伴们能用的上啦~~~