构建之法——读书笔记(5)

第七章 MSF

What is 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团队模型

MSF团队模型定义了小组同级成员的一些角色和职责

在MSF团队模型中,任何技术项目都必须达到特定的关键质量目标,才能够被认为是成功的项目。任何一个角色无法实现其目标,都将危及整个项目。因此,每个角色都被认为是同等重要的,重要的决定都要共同作出。相关的目标和角色如上图所示。

MSF过程模型

每个项目都要经过一个生命周期

MSF过程模型是从传统的软件开发瀑布模型和螺旋模型发展而来的,它把瀑布模型中基于里程碑的规划优势与螺旋模型中增量迭代的长处结合了起来

MSF过程模型的基本元素是阶段和里程碑。所谓“阶段”,就是在这一段时间里团队集中精力做某一类事情,每个阶段的结束都代表了项目的进展和团队工作重心的变化。比如在“开发阶段”结束后,团队就不再允许设计/实现新的功能,除非有理由充分的“变更请求”

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

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

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

更强调与用户的交流

项目的商业价值要由用户说了算,那些“我觉得用户会喜欢”的东西要及早和用户交流。因为“我觉得”和“用户觉得”是两码事


质量—防患于未然

防止缺陷的发生成为团队质量控制的首要任务,在防止缺陷的发生和确保缺陷被修复上,所有的角色都要负责

有一些团队把开发和测试有意无意地对立起来,好像二者是矛盾的。一个典型的例子是,有时开发人员不想给测试人员足够的信息,好像不想“帮”测试人员找到缺陷;与此同时,测试人员一旦找到缺陷,会有些得意,“看,你写的代码那么臭,我又发现了N个Bug”。这种对立情绪,也许在短期内能刺激成员的工作热情,而从长远来看是有害的。很少有人会希望在这种充满对立情绪的环境中工作

微软公司内部做过统计,在一个中大规模的团队中,一个“缺陷”从发生到被改正,中间经过了近20道工序,平均总的时间开销是12小时。优秀的团队能做到这一点:可能的缺陷在设计阶段之前就讨论过,并且在代码中已经避免了,因此在“缺陷跟踪系统”中,并没有出现很多缺陷记录在案,但是软件的质量仍然很高


重视在实战条件下的质量

这一点要求我们保持随时可以发布的高质量。如果用户说:时间到了,网站要上马。我们应该很快地交给用户一个可用的版本,也许功能不多,但是现有的功能都可用。这就要求我们必须保证项目的质量是“随时可用”。为了达到这一点,我们要重视产品的安装和发布—产品要尽早能够达到随时安装、发布的标准。在一些项目中,安装和发布都是最后阶段才做,这就导致几个问题:

  • 开发过程中,测试团队很难安装产品,阻碍了测试团队的进展。很多情况下,测试人员不得不从多个源头拷贝不同的文件到测试环境中,才能开始测试,浪费了大量时间
  • 关于安装的缺陷得不到重视—用户拿到一个Beta版,意见最大的就是安装不上!或者好不容易装好了,却卸载不了,不得不重新安装系统。

精简过程,直奔主题

我们一帮人吭哧吭哧干活是为了什么?主题是什么?是为了解决用户的问题。用户给项目投资了成千上万,不是为了看到一堆过时的文档。同样,在团队成员之间的交流要简明,不必为了交接而搞出许多文档。另外一个重要的因素是,如果团队在整个软件生命周期都使用团队协作服务器(TFS),那么很多活动、决定、文档都自然地记录在TFS上,不必额外去为了文档而再写一些东西。


 

MSF CMMI开发模式

  • MSF也支持CMMI 的开发模式
  • CMMI是英文Capacity Maturity Model Inte-grated(能力成熟度模型集成)的缩写

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

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

但是要注意的是,众多新兴的小企业,特别是互联网企业,并没有多少采用CMMI来指导软件开发。

在MSF中,CMMI 在所有的流程上都加了一个“提议”(Proposed)阶段,通过“审核”或者决定“开始调查”,处于“提议”阶段的工作项可以变为“激活”状态。如果调查的结果不是要开始着手工作,那么工作项可以退回到“提议”状态。以缺陷类型

时间: 2024-10-21 09:22:09

构建之法——读书笔记(5)的相关文章

构建之法——读书笔记(8)

<构建之法>第十&十一章 主要讲述了在软件设计前期的需求分析问题上的方法和实践经验,分为"典型用户和场景"以及"软件设计与实现". 其中第十章大部分内容包含: 用户的分类(典型用户可以包括以下内容: 1. 名字(越自然越好) 2. 年龄(不同年龄和收入的用户有不同的需求) 3. 收入 4. 代表的用户在市场上的比例和重要性(比例大不等同于重要性高,如付费的用户比例较少,但是影响大,所以更重要 5. 使用这个软件的典型场景 6. 使用本软件/服务的

构建之法读书笔记之五

今天我学习了构建之法的第五章——典型用户与典型场景.我们都知道,软件开发最终都是服务于用户,所以用户主导着我们的开发方向.软件开发离不开用户,所以能够搞清楚用户隐藏的要求也是软件开发过程中的的一个重要的课题,这就涉及到了典型用户. 典型用户,顾名思义,能够代表大部分用户的用户.很多时候,不考虑典型用户的话,软件的开发不可能把所有的方面都做的尽善尽美,开发人员不可能把所有的方面都能考虑到.这时候,典型用户就站了出来.但同时,典型用户也有两面性——受欢迎的与不受欢迎的.那些能够按照开发者期望进行操作

软件 = 程序 + 软件工程(构建之法读书笔记一)

在我正式开始阅读这本书之前,我对于软件工程这个词汇的概念还是模糊的,认为它只是停留在是一门学科,一个专业,或者是一大堆硬生生的理论知识,然而当我读完构建之法这本书的推荐序和第一,第二版前言开始,我就深刻意识到我之前对于软件工程的肤浅认识是多么错误. 我看书一般喜欢从从书的封面开始看起,或许这也是大多数人看书的习惯,·在本书的封面素描着一副鲁班锁,刚开始让人感觉有点奇怪,明明是一本讲软件工程的书,为什么要用鲁班锁做为封面图案呢?原来玄机深藏于鲁班锁的内部,这鲁班锁从外部看,是严丝合缝的十字立方体,

构建之法读书笔记

周末我抽空将<构建之法>第一章读完,感觉对软件工程又有了新的认识. <构建之法>开篇便写到:软件=程序+软件工程.我认为这是对软件的一种及其精炼的解释.程序即是指一行行代码,软件工程则包含了各种软件开发活动,包括构建管理.源代码管理.软件设计.软件测试.项目管理等等,是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程. 作为一名机械专业的学生,我认为软件设计是我们必须掌握的一门技能.机械行业,除了大家普遍所能看到的机械结构,每一个设备还包含有控制.软件等部分,一个

构建之法读书笔记_1

本周我快速地阅读了一遍<构建之法>,提出以下几个问题: 1在满足客户需要的同时,我们有些什么原则需要坚持. 2软件测试方法有什么?做软件测试只是找BUG吗? 3什么是敏捷流程?怎样去根据自己的项目选择开发方法? 4第三章中有提及考级的相关内容,但是在社会工作中,实践经验比证书更重要,我们应该如何平衡理论知识与实践之间的关系? 5当今市场对软件有哪些主要需求,安全软件并不能填满所有的漏洞,它的发展前景真的有那么好吗?

构建之法读书笔记之三

在学习了构建之法第四章,第五章之后,写一下我的感想. 代码规范一直是我们在学习过程中一个老生常谈的话题.专业技能过硬与否只是一方面,代码规范同样也是一个举足轻重的方面.比如最开始的注释,在我们写一些很短的代码十几行,几十行代码的时候,如果不写注释,说白了,那么短的代码,谁都能找得到.但是,万一代码量上了三位数呢.几百行的代码,找那么一个错误,难度可是不小.再加点难度,四位数,五位数,甚至做项目的时候呢.没有注释,八成项目经理都不要你了. 代码规范有很多方面,处了注释,还有缩进,行宽,括号,分行,

构建之法读书笔记之二

由于近几周进行构建之法的学习很少,所以这周一下子看了三个周期的内容. 既然选择了软件工程专业,就决定了我们将来要朝着软件工程师的方向发展.那么,问题来了,如何成为一名合格的软件工程师,在成为一名软件工程师的过程中,我们又有那些需要注意和学习的地方呢. 软件工程师的成长道路上,首先对我们自己的专业技能有很高的要求.所以第一步,我们要丰富自己的专业技能,并奇瑞要很好的衡量自己的能力.这样一来,就有涉及到了衡量我们能力的标准.这里又有一个问题,对于这些衡量标准,我们不能抱着仅仅不被OUT的态度,不能只

构建之法读书笔记3

软件开发流程: 写了再改模式:适合只用一次的小程序 RUP统一流程:将不同类型的工作划分为规程和工作流. 老板驱动的流程:老板在整个流程中占据领导地位. 渐进交付的流程:现发布一个版本,然后根据反馈进行修改然后再发布,不断反复直到用户满意或无法进行下去时停止.MVP:最小可行产品,即先做出一个实现了关键功能的很小的软件供用户使用体验,然后根据用户反馈继续开发.MBP:最强最美产品,即等到产品做得完美了后再进行发布. TSP原则:优秀的模式和流程的共同点的总结. 瀑布模型以及瀑布模型的各种变形:适

构建之法——读书笔记(6)

第8章 需求分析 8.1 软件需求 寻找需求: 1. 获取和引导需求(Elicitation) 软件团队需要找到软件的利益相关者,了解和挖掘他们对软件的需求,引导他们表达出对软件的需求. 2. 分析和定义需求(Analysis&Specification) 这是指对从各个方面获取的需求进行规整,定义需求的内涵,从各个角度将需求量化(需求实现的最后期限,实现需求大致所需的时间和资源成本,各个不同需求的优先级,需求带来的收益,等等). 3. 验证需求(Validation) 软件团队要跟利益相关者沟

构建之法读书笔记01

第一章讲述了学生与老师的关系,很多内容都是老师上课所涉及到的,那就是如何让我们学好软件工程,在很多时候我们都是有惰性的,需要老师给与压力,也就是老师说的要想让我们真的学会游泳,就要下水,同时老师还需要踹我们一脚,不仅是在学士或者在游泳的过程中,都要让我们感到压力,那样才能激发我们求生的本能,同时能够让我们创造奇迹. 软件工程融汇了很多技术,书中更是列出了十多种相关科目,在感觉到博大精深的同时,有深深的感觉学习这门的压力,看到了软件工程的目标,就是创造“足够好”的软件,而足够好也是给我们纠正了,不