这两天看了《移山之道: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. FreeRTOS的内存管理

    FreeRTOS提供了几个内存堆管理方案,有复杂的也有简单的.其中最简单的管理策略也能满足很多应用的要求,比如对安全要求高的应用,这些应用根本不允许动态内存分配的. FreeRTOS也允许你自己实现内 ...

  2. 《mysql必知必会》学习_第14章_20180806_欢

    第14章:使用子查询. 子查询是镶嵌在其他查询里面,相当其他的select查询的条件来. P91 select order_num from where prod_id='tnt2';   #检索条件 ...

  3. Python之旅Day2 元组 字符串 字典 集合

    元组(tuple) 元组其实跟列表差不多,也是存一组数,与列表相比,元组一旦创建,便不能再修改,所以又叫只读列表. 语法: names = ("Wuchunwei","Y ...

  4. cf 20C Dijkstra?

    带队列  dijkstra #include <iostream> #include <cstdio> #include <queue> #include < ...

  5. maven理论基础

    Maven介绍 Maven是一个Java项目管理和构建工具 Maven使用pom.xml定义项目内容,并使用预设的目录结构 在Maven中声明一个依赖项可以自动下载并导入classpath Maven ...

  6. ubuntu 16.04下源码安装opencv3.4

    源码安装opencv,遇到了一些小波折,这里做个备忘吧. 首先要下载源码,路径: https://github.com/opencv/opencv 下载成功后,在opencv的根目录下执行下面操作: ...

  7. js 学习记录(一)

    前情提要: 本记录参照  <<javascript 入门导论>>  这本书学习 

  8. javascript中的LHS和RHS

    最近在拜读<你不知道的javascript>,接触到一个比较陌生的概念,LHS查询和RHS查询. 简单的一句话来讲,当变量出现在赋值操作符的左侧时进行LHS查询,出现在右侧时进行RHS查询 ...

  9. Redis主从同步原理-SYNC【转】

    和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,下图为级 ...

  10. docker compose示例

    version: ' services: game-server: image: /tomcat: container_name: 'game-server' ports: - '8019:8019' ...