在应用生命周期管理(ALM)领域中,存在各种不同的管理模型,如:传统的瀑布(waterfall)模型,CMMI模型以及最近一些年开始流行的敏捷模型,Scrum模型,kanban等等。每个不同的管理模型都有一些固定的流程,角色,活动和内容模版等内容,在ALM工具中,一般会使用不同的“过程模版”来提供给团队使用,在团队创建项目的时候可以选择某个特定的模版来支持自己的应用开发过程。但实际情况是,每个团队的真实操作场景都不一样,大家都有不同的说法,不同的工作流和不同的工作习惯,比如:我曾经和一个大型开发团队聊了一个小时它们的“项目”流程,最后发现他们所说的“项目”实际是一个个的条目化需求。这种情况下,团队往往会要求在自己的模版中进行修改,以便大家可以按照自己的习惯来进行操作。也许你觉得:让他们改变一下习惯,把原来叫做“项目”的东西改叫“需求”不就完了,其实事情真的没有那么简单,让一个人改变习惯尚且需要时日,让100个人改变习惯那就是个大工程了(甚至可以上升到“组织变革”的层面了)。而且,工具永远应该是人的辅助,所以多数情况下我们需要工具来适应人,而不能被工具绑架。

在TFS/VSTS中,默认提供了3种不同的过程模版,分别是:CMMI,敏捷和Scrum。

很多团队在开始的时候都很迷惑,我到底该选择哪个模版,我现在想做敏捷,但是公司的规范是cmmi;我们有一点Scrum,但不是很规范;到底咋办?我的回答是:模版只是一个起点,一开始的时候先按模版推荐的流程操作,熟练以后慢慢引入自己的实践,这个时候你就需要对这些模版进行定制。

不过说实话,在TFS 2013及以前的版本中的模版定制真心不是件容易的事情,且不说你需要懂得这些模型的各种细节,就是搞定那些复杂的xml和工作流就够你受的。所以,模版定制改进一直是微软TFS的UserVoice上呼声最高的几个feature之一,我们等待了快10年了,现在终于来了。

添加字段

添加字段一直都是我所有客户中最需要的,基本上每个开始使用tfs的用户都会问:我要在这个需求工作项的页面上添加一个“预期完成时间”该怎么办,我之前的回答是这样的:
1. 用Visual Studio下载当前项目的过程模版
2. 安装TFS Power Tools
3. 用TFS Power Tools打开下载的模版
4. 找到你的需求工作项类型,在里面添加字段;哦,别忘了还要添加到页面的布局里面,这个xml应该这么写…
5. 上传到项目中

基本上我还没说完,人家就睡着了 zzz

好吧,看看现在怎么做

  1. 随便打开一个你要添加字段的工作项,点击右上角的…,选择“定制”
  2. 在后台的“过程定制”中点击“新字段”,并填写字段名称和类型
  3. 切换到“布局”,选择显示的位置
  4. 回到原来的工作项页面,刷新页面,搞定

是不是很简单,以后你不用找我这个顾问了,自己搞定吧!(看来我要失业了)

模版的继承关系

看了上面的演示你会觉得很简单,对吧。要实现这个看似简单的功能,tfs后台的改动可不小。首先一个问题,如果我添加了字段,但是希望新创建的项目也可以使用这个字段怎么做,如果我希望在一个项目中的修改可以让其他部分项目使用,另外一部分项目不使用怎么办?

在 TFS 2013及之前版本中,项目模版是存储在项目级数据中的,所以对于一个项目的定制不会影响其他项目的模版,这样带来的好处是不同的项目可以使用不同的流程。不过有些企业希望统一所有的项目流程,在这种架构下就比较麻烦了,你必须一个个项目的更新模版。

新的模版定制功能中考虑到了这个问题,增加了模版继承机制。你可以从内置的Agile/CMMI/Scrum模版中选择一个创建子模版:
– 父模版的改动会自动影响子模版的项目,
– 子模版的改动不会影响父模版,
– 支持父子模版的切换,你可以把使用子模版的项目再切换回父模版;如果之前有些字段中有数据的话,这些数据仍然可以在工作项的历史纪录中找到

下图是后台的“模版定制”界面,你可以看到模版间的继承关系以及每个模版的版本和影响的项目数量。

选择模版后,我们可以将已有的项目迁移到有继承关系的子模版上

也可以对每个模版设置不同的权限,允许部分用户使用特定的模版,或者干脆停用

其他模版定制能力

当然,在工作项中添加字段只是最简单的场景,我们还需要修改字段的内容,比如:添加下拉菜单;修改工作流程,创建全新的工作项类型等等。这些内容在后续的TFS/VSTS更新中会以2-3周的迭代速度按照以下优先级提供

1. 添加字段修改布局(已经发布)
2. 添加下拉菜单和identity字段
3. 修改工作流
4. 添加新的工作项类型
5. 在字段上添加验证规则
6. 导入/导出定制过程模版

这些功能会首先提供给在线版vsts,按照企业版tfs每3个月一次更新速度,如果你自己部署了tfs,也可以更新到你的环境中。

参考:

ALM 博客:Adding a custom field to a work item
http://blogs.msdn.com/b/visualstudioalm/archive/2015/12/10/adding-a-custom-field-to-a-work-item.aspx

ALM博客:Visual Studio Online Process Customization – Update
http://blogs.msdn.com/b/visualstudioalm/archive/2015/07/27/visual-studio-online-process-customization-update.aspx

VSTS在线版
https://www.visualstudio.com

企业版Team Foundation Server下载
https://www.visualstudio.com/products/tfs-overview-vs


请关注微信公众号 devopshub,获取更多关于DevOps研发运维一体化的信息

http://devopshub.cn

#VSTS定制#全新的模版定制能力的更多相关文章

  1. Windows 7 封装篇(一)【母盘定制】[手动制作]定制合适的系统母盘

    Windows 7 封装篇(一)[母盘定制][手动制作]定制合适的系统母盘 http://www.win10u.com/article/html/10.html Windows 7 封装篇(一)[母盘 ...

  2. 鹿定制|Lu Couture|鹿定制·高级西装礼服私享定制品牌|芙蓉中路明城国际1425

    鹿定制|Lu Couture|鹿定制·高级西装礼服私享定制品牌|芙蓉中路明城国际1425 联系我们

  3. 思科WLC5508上传定制Portal展示模版

    1. 登录Cisco设备,获取模板样例登录cisco WLC设备后点击help,打开帮助文档Wireless Tab-->Web Login Page-->External Web Aut ...

  4. 提供VR定制开发、AR定制开发(VR游戏定制、应用定制)

    设置输出路径 添加烘培输出的贴图类型 添加“LightingMap”类型 设置烘培贴图大小和目标贴图位置为“自发光” 设置烘培材质,选择“输出到源” 点击“渲染”即可 24.标准材质贴图的烘培光影处理 ...

  5. VR定制开发、AR定制开发(长年承接虚拟现实、增强现实应用、VR游戏定制开发,北京公司,可签合同)

    Cardboard SDK for Unity的使用 上一篇文章作为系列的开篇,主要是讲了一些虚拟现实的技术和原理,本篇就会带领大家去看一看谷歌的Cardboard SDK for Unity,虽然目 ...

  6. ArcGIS api for javascript——地图配置-定制缩放动画,定制缩放框

    描述 本例展示了当用户放大或缩小地图时如何定义地图的动画.zoomDuration和zoomRate是Dojo动画属性,他们确定了动画的duration和帧刷新的rate .这些属性单位是毫秒,zoo ...

  7. CodeSnippet.info 开源说明 和 环境搭建 (第一版)

    Github开源声明 本网站的代码开源,开源的目的如下 技术分享 希望业内同行贡献代码 希望能够让网站更加安全 开源地址: CodeSnippet开源地址 关于代码贡献 任何人都可以贡献代码,一般在 ...

  8. Docker Dockerfile 定制镜像

    使用 Dockerfile 定制镜像  镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么无法重复的问题 ...

  9. 不可或缺的企业OA面临问题,以及解决建议 软件定制开发 森普演示平台

    ---恢复内容开始--- 随着信息时代的来临,企业管理也相应的信息化,各种管理软件相继而出,各行各业的信息化有过成功,也有过失败(注:是以该项目是否达到用户的预期目标而言).据统计在信息化失败的案例中 ...

随机推荐

  1. 帝国cmsV6.6版数据表

    信息表:每个模型都有以下六个表 phome_ecms_news 新闻系统模型-主表 phome_ecms_news_data_1 新闻系统模型-副表1 副表可无限增加 信息表 phome_ecms_n ...

  2. WinForm 多窗体操作

    1多窗体操作:确定哪个是主窗体 通过窗体进入其他窗体 代码如下 Form2 f2 = new Form2();//f2窗体实例化出来 f2.Show();//进入f2窗体 this.Hide();// ...

  3. 分享一个递归无限级拼接Json的方法---ExtJs的TreePanel和TreeGrid均适用(Ef,Lambda,Linq,IQueryable,List)

    话不多说,先上实体类,如果你不是codefirst,就把它当成数据表结构. 下面是底层BaseDal获取数据的方法  (如果你没有Base类,直接写在你的DAL层和BLL层) 下面是BaseServi ...

  4. Java/Android引用类型及其使用分析

    Java/Android中有四种引用类型,分别是: Strong reference     - 强引用Soft Reference        - 软引用Weak Reference      - ...

  5. iOS阶段学习第27天笔记(UIButton-UIImageView的介绍)

    iOS学习(UI)知识点整理 一.关于UIButton的介绍 1)概念:UIButton 是一种常用的控件,通过点击触发相应的功能 2)UIButton 的几种常用的状态        1.UICon ...

  6. 【C#进阶系列】12 泛型

    泛型是CLR和编程语言提供的一种特殊机制,它用于满足“算法重用”  . 可以想象一下一个只有操作的参数的数据类型不同的策略模式,完全可以用泛型来化为一个函数. 以下是它的优势: 类型安全 给泛型算法应 ...

  7. 纯css的防止图片撑破页面的代码图片会自动按比例缩小

  8. 值栈(Structs2)

    1. 关于值栈: 1). 登陆 时, ${userName} 读取 userName 值, 实际上该属性并不在 request 等域对象中, 而是从值栈中获取的. 2). ValueStack: I. ...

  9. sublime text 开发常用插件

    一.emmet插件 (HTML/CSS代码快速编写插件) 安装步骤:打开Sublime菜单栏>首选项>Package Control> 输入>Package Control: ...

  10. PHP高效率写法

    1.尽量静态化: 如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍.当然了,这个测试方法需要在十万级以上次执行,效果才明显.其实静态方法和非静态方法的效率 ...