这两天看了《移山之道:VSTS软件开发指南》,对团队软件开发又有了新的认识。也许对于我们这些软件开发的新手来说,最重要的是具体技术与应用框架,但读了这本书后我感觉到,实际团队项目中工具的使用是次要的,更重要的在于对人员的控制,如何高效得让一个团队各司其职、彼此之间在充分信息交流的基础上协同工作才是一个软件开发过程中最重要的因素。

VSTS 就是微软在MSF框架的基础上发布的一套团队软件开发集成环境,除了开发工具外还集成了测试工具、构建工具、管理工具和协作工具。其逻辑结构简单来说,就是把源代码存放在统一的服务器上,通过服务器程序为客户端不同的人员提供了不同的功能模块,也就是提供了不同的工具,比如为测试人员提供测试模块,为管理人员提供管理模块。不同的模块之间是高度耦合、协同工作的,我认为这样的运作体系之所以高效,除了因为各种工具集成完善之外,更多的原因在于所有人员一切的操作有有迹可寻,这一方面加强了人员的信息交流,免去了很多沟通的障碍,另一方面人们可以学习过去的经验,有一个“错题集”为你整理了过往的全部错题记录,这对于整个团队的建设十分有利。

说到底VSTS只是一个集成环境,完全可以有别的类似的工具出现,微软的这套工具之所以强大,原因在于其背后更深层次的思想与内涵,也就是刚刚说的MSF,即 Microsoft Solver Framework,中文是“微软解决问题框架”,说白了就是大型系统开发指南,是微软在多年软件开发经验的基础上总结出来的一套框架。下面就说说MSF的模型与准则。

MSF框架提出了软件开发过程中的组队模型和过程模型。组队模型其实就是如何进行人员配置,MSF 中技术人员组成为:开发、测试、用户体验、产品管理、程序管理、发布管理几个方面,这套人员体系的提出看似简单,其实背后藏着许多团队的血与泪。

更重要的是过程模型,这是一个团队开发软件的流程框架,如果缺少了这样一套流程体系,像无头苍蝇一样乱撞,开发过程必定会非常低效。过去的软件过程模型有两大类,瀑布模型和螺旋模型。瀑布模型是指,为整个软件开发过程设定一个个里程碑,在完成一个阶段的任务前,后续的工作都无法进行。这对用户需求始终保持不变的项目来说是适用的,但一旦用户需求有变化,整个里程碑的设置都要修改,十分低效。螺旋模型指的是依据用户需求不断改变重新构建软件,这对小型项目比较有效,但一旦项目较大,整个过程会非常混乱。

MSF框架提出的过程模型继承了以上两种模型的优点,它既使用了阶段里程碑的设计,也使用了迭代的方法根据需求重复构建软件。该过程模型中,软件不是像瀑布模型一下开发完整,而是先开发核心功能并构建、发布,然后再根据需求变化加入其他新的功能,不断发布新的版本,这是一个迭代的过程,体现了螺旋模型的优点。而在每一个版本的开发流程中,设置不同的阶段与里程碑,具体分为构思阶段、计划阶段、开发阶段、稳定阶段、部署阶段,分别对应需求分析、方案设计、技术代发、软件测试、项目发布这几个步骤。这样一套结合了迭代与里程碑的高效过程模型,既灵活多变又可稳步前进。

MSF有如下8个准则:推动信息共享与沟通;为共同的远景而工作;充分授权和信任;各司其职,对项目共同负责;重视商业价值;保持敏捷,预期变化;投资质量;学习所有的经验。这样一套设计准则在过程模型中有所体现,也为VSTS工具的设计提供了核心思想,我觉得其更重要的作用是为所有团队人员提供了一套行为与思想准则,是它们软件开发生涯中的人生观与价值观,心齐了步伐才能一致,思想统一团队才能前进。

VSTS集成环境就是对MSF框架的具体实现,其中蕴含了MSF框架的模型与准则。就算大家将来使用不到VSTS工具,了解MSF框架的基本原理对于团队软件开发还是必不可少的。

《移山之道:VSTS软件开发指南》读书笔记的更多相关文章

  1. csapp读书笔记-并发编程

    这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...

  2. CSAPP 读书笔记 - 2.31练习题

    根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1)  属于第一种情况 sum = x ...

  3. CSAPP读书笔记--第八章 异常控制流

    第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...

  4. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  5. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  6. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  7. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  8. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  9. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  10. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

随机推荐

  1. C#常用代码(更新中)

    文件(夹)的相关操作 新建文件夹 If(!Directory.Exist(路径)) Directory.CreateDirectory(路径); 删除文件夹 Directory.Delete(路径,t ...

  2. 中国移动物联网ONENET平台数据本地采集工具

    吧从中国移动物联网平台上接收的数据 实时按天保存为CSV文件或者是SQL SERVER数据库中方便进行数据处理 还可设置显示最大值,最小值,报警值,报警推送,tts语音报警等贴心功能

  3. 《python语言程序设计》_第一章编程题

    题目1.1 :显示"welcome to python " 答案:print('welcome to python') 题目1.2:显示"welcome to pytho ...

  4. redis 分布式读写锁

    http://zhangtielei.com/posts/blog-redlock-reasoning.html 链接里这篇 blog 讨论了 redis 分布式锁的实现以及安全性 我要参考 基于单R ...

  5. WebRTC 学习之 WebRTC 简介

    本文使用的WebRTC相关API都是基于Intel® Collaboration Suite for WebRTC的. 相关文档链接:https://software.intel.com/sites/ ...

  6. Java 大数值类型执行精确计算

    简介 如果基本的整数和浮点数精度不能够满足需求,那么可以使用 java.math 包下两个很有用的类:BigInteger 和 BigDecimal.这两个类可以处理包含任意长度数字序列的数值,Big ...

  7. 闲话ajax,例ajax轮询,ajax上传文件[开发篇]

    引语:ajax这门技术早已见怪不怪了,我本人也只是就自己真实的经验去总结一些不足道的话.供不是特别了解的朋友参考参考! 本来早就想写一篇关于ajax的文章的,但是前段时间一直很忙,就搁置了,趁着元旦放 ...

  8. GraphQL:你的容颜,十万光年

    What? GraphQL 是一种类似于 SQL 的结构化查询语言,由 facebook 于2012年创造,于2015年开源.SQL 在服务端定义,GraphQL 在客户端定义,也就是说 GraphQ ...

  9. 机器学习技法笔记:01 Linear Support Vector Machine

    Roadmap Course Introduction Large-Margin Separating Hyperplane Standard Large-Margin Problem Support ...

  10. numpy中pad函数的常用方法

    一.参数解释 ndarray = numpy.pad(array, pad_width, mode, **kwargs) array为要填补的数组 pad_width是在各维度的各个方向上想要填补的长 ...