首页 > 代码库 > 学习MSF

学习MSF

微软解决方案框架(Microsoft Solution Framework,MSF)

MSF没有像敏捷那样搞一个宣言,但是它也有一套思想框架—9条基本原则 
1. 推动信息共享与沟通(Foster open communications)

  • 第一个原则,就是所有信息都保留并公开,讨论要包括所有涉及的角色,决定要公开并告知所有人。当然,对牵涉到技术机密、安全性等信息要采取必要的保护措施

  • 看不到所有的信息,那么项目进度以及项目中存在的各种问题就不能及时让所有人知道,这样MSF中其他的原则也就不能实行了。没有开放的信息,也就谈不上“授权”,或者“建立清晰的责任和共同的职责”,以及“保持敏捷,预测并适应变化”。这也是为什么“推动信息共享与沟通”是第一个基本原则。MSF团队模型和MSF过程模型也是建立在“信息共享与沟通”原则上的


2. 为共同的远景而工作(Work toward a shared vision)

“共同的远景”是指产品的远景。我们做一个产品,不管是应用软件、行业软件,还是通用软件,要明确项目的目标是什么。

  • 这个目标必须是明确的,没有二义性;

  • 这个目标不是当前就能达到,必须是通过努力才能达到的;

  • 这个目标不是空泛的,它应该对项目成员每天的工作都有指导作用。每天你来上班,如果发现你做的事情对项目的远景没有帮助,你应该跟老板提出来

远景一般是由“有远见的人”提出,然后公开讨论,在讨论的过程中,可以消除误解,凝聚共识。这是一个项目的关键,是项目第一阶段要达到的主要目标


3. 充分授权和信任(Empower team members)

这一点的关键是“授权”这个词,授权(Empower)有两个意思:

  • 给某人权力和权威
  • 给予某人更多自信和自尊

在一个高效的团队中,所有的成员都应该能得到充分的授权,他们有权在职权范围内按照自己的承诺完成任务,同时,他们也充分信任其他同事能实现各自的承诺。类似地,团队的顾客(包括内部和外部的顾客)也认为团队能兑现承诺,并进行相应的规划

充分授权的管理方式是MSF的核心观念之一。MSF团队模型就是建立在以下两个原则上的:

  • 平等协作—成员之间、团队之间是平等协作的关系
  • 充分授权给团队和成员

这就是为什么MSF团队模型是网状,而不是层次结构。这样做有什么好处?好处有两点:

  • 被授权的人会承担起自己对项目的责任,同时也期望同事们也同样对项目负责
  • MSF提倡自下而上的计划,每个人有充分的权力估计并决定自己的任务需要多长时间,而不是上级交给的时间,这意味着让真正做这件事的人按照自己的估计去完成任务。这样做的结果是啥?是人人都会支持项目的计划和时间表,因为这个时间表是每个人自下而上订出来的

组员充分授权,到头来发现事情都没做完,咋办?

  • 这要靠工具的支持,在VSTS系统中,由于所有工作的进展都记录在案,任何延迟都会被及时发现

  • 这样组长(或其他层次的领导)就不用把力花在“询问”,而花在“帮助解决”上,在最关键的时候提供指导和帮助

  • 领导在项目中的角色是“支持成员完成任务”,而不是“控制成员,迫使他们完成任务”

  • 充分授权在MSF团队模型的另一个含义是:信任,鼓励团队成员成长,每人都可以在某一时段、某一领域当领导


4. 各司其职,对项目共同负责(Establish clear accountability and shared responsibility)

关键质量目标MSF小组角色出口条件
按约束条件交付产品 程序管理 我们的项目是在时间/资源的条件内交付的么
按产品规格说明交付产品 开发 我们是否按照功能说明完成了各项功能
保证所有问题都得到处理 测试 我们发现了所有的问题,而且都有处理方案吗
产品部署和后续管理 发布管理 客户能否快速方便地部署产品和进行后续管理
让产品更好用 用户体验 产品是否适应用户的使用习惯?易学易用
让客户满意 产品管理 客户是否(总体上)满意我们的项目

在项目进展的过程中,对于每一项任务,每个人都要明确以下几点。

  • Who:谁负责
  • What:做什么,具体的执行方案,什么叫做“做好了”
  • When:什么时候开始,什么时候结束
  • Why:为什么是这样安排(和项目的远景是否吻合),在什么情况下可以变更?

与“信息共享与沟通”原则相呼应,这样的安排能让所有人都明确自己的职责,同时有“大局观”—知道别人在做什么,为什么,以及整个项目的目标


5. 交付增量的价值(Deliver incremental value) 
现在的软件产业,特别是和互联网相关的产业,变化非常快,用户希望产品团队经常提供更新,以适应新的需求。我们要保证在两个方面保证客户的利益:

  • 我们提供的新版本对用户真的有价值
  • 和客户商讨一个最优的新版本的发布频率 
    最优的频率会因为产品的特点(企业产品,消费者产品)和发布平台(办公电脑、家用电脑、互联网、智能手机及平板电脑)的不同而大不相同

在MSF团队模型中,“用户体验”这个角色代表了用户的利益,保证产品能真正易于使用;“产品管理”这个角色代表了客户的利益,保证了我们的产品能为顾客提供商业价值。搞技术的,要尊重这两个角色,因为他们代表的是我们的衣食父母


6. 保持敏捷,预期和适应变化(Stay agile, expect and adapt change) 
软件工程,唯一不变的是变化。所以干脆别幻想客户的需求会在第一时刻很明确,然后保持不会变。要注意,我们是预期变化,不是期望变化

除开外部原因,团队内部也在变化,我们对技术的掌握每天都在提高,原来认为不可能的事可能变得容易。我们对客观世界和软件系统的了解每天都在深化,原来觉得没问题的小细节忽然成了大问题。甚至原来一起打拼的同事忽然要离开……这些都要求我们团队保持敏捷的身段


7. 投资质量(Invest in quality)

对质量的重视,引起对质量的投资,引起对人、过程和工具的投资。

  • 投资要讲效率 
    软件开发过程大部分时间花在了解/设计/变更/再了解/再设计的过程中。我们要重视质量,但并不是要不惜一切代价达到最高的质量标准(有人倒吸了一口凉气),因为提高人/过程/工具的质量是要花成本的!我们不是为提高质量而提高质量。我们要讲投资的效率。比如,在做快速原型的过程中,有些部分可以做得粗糙一点

  • 投资要讲时机 
    比如说对于某项技术的培训,最好的做法是在即将需要的时候进行培训。太超前或滞后都不灵

  • 投资是长期的 
    和投资股票/不动产一样,真正的投资者看重的是长线的收益;人的成长、团队的成熟都需要时间,不可能短期内立竿见影。那些“短平快”的东西,叫投机,不叫投资


8. 学习所有的经验(Learn from all experiences) 
在学习过去的经验的同时,也要避免让过去的经验妨碍解决现在的问题 
这一原则有两个含义——

  • 把经验总结出来
  • 分享经验

为什么要坚持总结和分享?是为了——

  • 让团队成员从别人的成果和失败的例子中学到东西
  • 帮助新项目重复以往成功的做法
  • 培育团队总结的习惯和“批评与自我批评”的文化

MSF在每一个里程碑结束时都要做一个里程碑回顾,这个回顾不必等到整个项目结束才做。这样做的好处是,大家对最近的成败都记忆犹新,能提供比较准确和全面的反馈;如果发现了错误,可以马上研究解决办法,在下一个里程碑中通过实践来验证。另外,一些好的做法可以及时得到总结和推广

在项目结束时,MSF推荐请团队以外的专家来主持召开“事后诸葛亮”会,这样的专家会比较系统地总结团队的成功经验和失败教训,同时也客观评价团队的一些特性和团队的开发过程管理,这样能促使团队成员以客观、向前看、解决问题的心态来参加“事后诸葛亮”会,避免主观臆断或相互指责

9. 与顾客合作(Partner with internal and external customers)

 

MSF敏捷开发模式

在Visual Studio TFS中,MSF演化为以下两个分支:

  • MSF敏捷开发模式
  • MSF CMMI开发模式

MSF敏捷开发模式吸收了近几年来在软件业界流行的各种“敏捷”开发模式的优点,认识到目前大部分软件是以网络应用相联系的,强调和用户更紧密地交流,快速迭代,避免不必要的过程。

MSF CMMI开发模式

  • MSF也支持CMMI 的开发模式

  • CMMI是英文Capacity Maturity Model Inte-grated(能力成熟度模型集成)的缩写

CMMI是CMM模型的最新版本,资料显示,如果一个项目的管理达到了CMMI较高的等级,那么项目的质量与按期完成率都会有较大的提高。

CMMI虽然源于美国,但在世界各地得到了广泛的推广与接受,特别是和外包服务相关的软件企业(例如印度)。

 

学习MSF