☆微软公司开发模式简介☆

zf4000 2002-08-14 12:10:15
北京大学出版社96年底所出的《微软的秘密》一书是目前我所见到的对微软公司软件产品开发过程介绍的最专业、最深入的一本书。通过本书,我们可以看到微软公司是如何对科学地对软件产品开发进行有效地管理,我想这些经验对于中国的广大软件开发人员,尤其是关心中国软件产业发展的各位朋友是大有益处的。所以特将此书中涉及软件产品开发的部分内容摘录出来(第四章“产品定义与开发过程”),加上我在微软中国工作的实际经验总结出这篇文章,希望与大家共同分享。本文作为摘录,自然是挂一漏万,所以建议大家若有时间还是找来原书一读。

在微软的产品定义与开发过程中,微软软件开发遵循着一种可称之为“靠改进特性(Feature)与固定资源(Resource)来激发创造力”的战略。该战略可分为五个原则:

将大项目分成若干里程碑式(Milestone)的重要阶段,各阶段之间有缓冲时间,但不进行单独的产品维护。
运用想象描述和对特性的概要说明(Program Specification)指导项目。
根据用户行为(User Behavior)和有关用户的资料确定产品特性及其优先顺序。
建立模块化的和水平式的设计结构,并使项目结构反映产品结构的特点。
靠个人负责和固定项目资源实施控制。
原则一:将大项目分成若干里程碑式的重要阶段,各阶段之间有缓冲时间,但不进行单独的产品维护。

项目进度安排与里程碑
微软通常采用“同步-稳定产品开发法”。典型项目的生命周期包括三个阶段:

计划阶段:完成功能的说明和进度表的最后制定
开发阶段:写出完整的的源代码
稳定化阶段:完成产品,使之能够批量生产(Roll Out)

这三个大阶段以及阶段间内在的循环方法与传统的“瀑布”(Water Fall)式开发方式很不相同,后者是由需求、详尽设计、模块化的代码设计与测试、集成测试以及系统测试组成的。而微软的三个阶段更像是风险驱动的、渐进的“螺旋”式的生命周期模型。

计划阶段的产品是想象性描述与说明文件,用来解释项目将做什么和怎么做。在管理人员拟定进度表、开发员写出代码之前,这些东西都促进了人们对设计问题的思考与讨论。开发阶段围绕三次主要的内部产品发布来进行;稳定化阶段集中于广泛的内部与外部测试。在整个产品生产周期中,微软都使用了缓冲时间的概念。缓冲时间使开发组能够对付意外的困难和影响到时间进度的变故,它也提供了一种手段,可以缓和及时发货与试图精确估计发货时间之间的矛盾。

在开发和稳定化阶段的所有时间中,一个项目通常会将2/3的时间用于开发,1/3的时间用于稳定化。(Office部门副总裁曾这样概述通常的进度:“一般说来,在总的进度表中,用一半的时间写出产品,留下另一半的时间调试或应付意外事故。这样,如果我有一个两年的项目,我会用一年来完成事先想好的东西……如果事情有点麻烦,我便去掉我认为不太重要的特性。”)。这种里程碑式的工作过程使微软的经理们可以清楚地了解产品开发过程进行到了哪一步,也使他们在开发阶段的后期有能力灵活地删去一些产品特性以满足发货时期的要求。

计划阶段

计划阶段是在一个项目的生命周期中,所有于开发前进行的计划所占用的时间。计划阶段产生出想象性描述、市场营销计划、设计目标、一份最初的产品说明、为集成其他组开发的构件而规定的接口标准、最初的测试计划、一个文档策划(印刷品和联机帮助形式的)以及一份可用性问题清单(Usability List)。计划阶段从想象性描述开始。想象性描述来自产品经理以及各产品单位的程序经理;它是对规划产品的市场营销设想,包括了对竞争对手产品的分析以及对未来版本的规划。想象性描述也可能讨论在前一次版本中发现面必须解决的问题以及应添加的主要功能。所有这些都基于对顾客和市场的分析以及从产品支持服务组处得到的资料。

说明文件从一个大纲开始,然后定义出新的或增加的产品特性,并对其赋以不同的优先级。说明文件只是产品特性的一个预备性概览;从开始开发到项目完成它要增加或变化20% - 30%。虽然在生命周期的后期说明变化一般较小,但越到后期,开发员就越是必须具充分的理由来作改变。

通常程序经理使用VB创建项目原型。他们也开展设计可行性研究以了解设计中的取舍情况,尽快做出涉及产品说明的决定。对于重要产品的说明需由公司高层领导进行复审。对于不太重要的产品,则由部分经理去完成。

开发阶段

开发阶段的计划对三四个主要的里程碑版本都逐个分配一组特性,规定出特性的细节和技术上的相关性,记录下单个开发员的任务以及对进度的估计。在开发阶段中,开发员在功能性说明的指导下写源代码,测试员写出测试项目组以检查产品的特性与工作范围是否正常,用户教育人员(User Education)则编写出文档草案。

当测试员发现错误时,开发员并不是留待以后处理,而是马上改正,并在整个开发阶段内使测试不断地、自动地进行。这就改善了产品的稳定性并且使版本发布日期更易估计。当达到项目中的一定阶段点后(40%时),开发员就试图“锁定”产品的主要功能要求或特性,从此只允许小范围的改动。如果在此点之后开发员想作大的改动,他们必须与程序经理以及开发经理进行讨论协商,也许还要征求产品部门经理的意见。

一个项目是围绕着3或4个主要的内部版本,或“里程碑子项目”来组织开发阶段的。一般用2至4个月来开发每一个主要的里程碑版本。每个版本都包括其自身的编码、优化、测试以及调试活动。项目为意外事故保留总开发1/3的时间,即“缓冲时间”(Padding Time)。(苹果公司的小组是割裂的、独立的,各自开发各自的东西。在还有3个月就要发货时,才会将所有的东西集成起来;Borland公司以一种渐近的方式进行开发,即把工作分成许多小的部分,并且总是让开发的东西能够运转。看起来似乎这种渐进的方法费时,但实际上几乎没有用过很长时间,因为这使你总是能掌握住事情真实的情况。)

当对最后一个主要的里程碑版本做了测试与稳定化之后,产品就要进行“外观固定”(UI Freeze),即确定产品的主要用户界面,如菜单、对话框以及文件窗口等。此后有关用户界面将不再进行大的改动,以免引进同步修改相应文档的困难。

稳定化阶段

稳定化阶段着重于对产品的测试与调试。项目在此阶段尽量不再增加新的功能,除非是竞争产品或者市场发生了变化。稳定化阶段也包括了缓冲时间,以应付不可预见的问题或者延迟。

下面我将Micosoft开发软件的模式用以下这张简图加以描述:(这张图对微软的测试进行了比较详细的描述,我个人认为微软的测试是Microsoft软件产品开发中一个十分重要也是十分有特色的分工。这是通过在微软将近一年的观察和与国内同类企业的分析,我才得出这样的结论。大家都很明白,国内的软件开发商在这方面做得很不够,尤其不重视软件的内部测试,在他们的思想中,可能有一个误区:认为测试应该完全去由用户去负责,其实不然,在软件的开发流程中,软件的测试与开发是一种“矛与盾”的关系,互为补充,缺一不可。在微软,可能这种关系发挥到了极至:有时开发部门与测试部门互相较着劲,开发经理和测试经理的地位是相同的,有时甚至测试经理的地位甚至凌驾于开发经理之上,但他们之间没有根本的利益冲突,只有一个共同的目标:将产品的质量提高。)

补充一点:(对微软的测试流程加以简要的描述一下)微软内部,专门有一个小组负责为微软的工程师们提供日常工作和管理的工具软件,他们是非盈利机构,其主要任务是开发微软内部所需要的工具软件:例如:

SLM(Source Library Tree),源代码管理工具,负责管理软件开发过程中各个程序员的源码,各个程序员负责写自己的模块,每天将完成的代码Check-in到一个中央服务器的SLM树中,这个SLM树由预先定义好的脚本在固定的时间开始编译,通常这个过程需要好几个小时,所以微软内部根据各个项目组的情况有各自的规定:比如开发员必须在下班前(比如下午6:00)之前将当天修改的代码Check-in进去,这样SLM才开始编译。
第二天,QA组的各个测试员从服务器上下载前一天的一个Build开始测试,将测试的情况及时的反映到另外一个工具软件中:RAID(Raid is a tool for entering, tracking, analyzing, and reporting product defects during development and maintenance.).这个工具负责管理产品的BUG情况,每个BUG包含很多属性:比如状态(活动的、解决的、关闭的)、严重级、优先级、哪个区域、哪个版本出现的、发现者、要将这个BUG赋给哪一个开发员等等一系列属性。还可以根据这个工具查询哪个开发员当天的BUG活动的、解决的数量,哪个测试员的BUG质量数目等等一些基本的产品质量情况,这样项目经理可以很容易的掌握该项目的具体进展情况。如果在项目的开发中期,发现的BUG数目比解决的BUG数目持续的多(意味着该产品的活着的BUG越来越多),可能意味着这个项目出现了问题,决策者可以迅速的作出相应的决策,及时的纠正产品开发中出现的失误(微软曾经有很多产品因为这样的因素被Cancel了)。还有项目经理可以根据这个工具,及时的掌握、了解每个测试员和开发员的工作状态,这一点很重要。有很多人曾经说过:Microsoft凭借着SLM和RAID打败了无数的竞争对手,通过我在微软的经历,我看这话一点也不假。这两个工具确实是非常杰出的工具,微软将它们使用到了十分艺术的程度上,对微软的成功起着非常重要的作用。更难能可贵的是,目前这些工具在功能上还在不断的进行改进、升级,使得微软的工程师们工作起来更加如虎添翼、虎虎生风,这样的企业哪有不成功的道理?
在测试过程中,也不是随便的对软件产品毫无目的的瞎使用、乱使用,微软也有一套十分先进的方法和工具支撑着测试的每个方面:比如ATCM( Access Test Case Management),一种基于Test Case(测试用例)的测试管理工具就承担着这方面的工作。

微软也许正是靠着“程序员的聪明和测试员的勤奋”构建起软件帝国的大厦、谱写着软件事业的辉煌
...全文
134 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
foreveryday007 2002-08-15
  • 打赏
  • 举报
回复
學習
ozzzzzz 2002-08-15
  • 打赏
  • 举报
回复
msf好像有培训的 我的一个朋友似乎和我说过他受过ms的关于msf的培训
Rose2000 2002-08-15
  • 打赏
  • 举报
回复
我觉得楼主没有贴完,应当还有。
呵呵,现在觉得我们的开发流程和它的挺像的,只不过,开发不像他那么复杂而已,毕竟人家是大公司,我们是小公司了。
您是不是因为ASP.NET的开发和维护繁琐而烦恼,微软的开发工具更新速度、开发技巧是成多元化的趋势,ASP.NET以其灵活多变的开发模式,深受广大开发人员的喜爱,灵活多变的开发模式有其利的一面,也有其不好的地方,特别是程序代码的随意性较强,即开发人员可以把代码放到任何一个地方,且变量的使用也是无度的、无规律的,这对目前讲究团队开发的流程管理来讲,简直就是一种灾难,本软件将彻底解决您的后顾之忧,通过本软件的自动生成功能,生成的ASP.NET代码规范、全部开源,不存在用隐含的内容,全部代码逻辑开源的展示给客户,符合团队开发的管理要求。本工作室的开发团队汲取多位资深开发人员多年的项目开发经验开发出本软件, 使用本软件从最基本的VO对象到ASPX页面的新增、删除、修改、查询等功能一起生产,代码功能一一俱全。您只需要稍微做下界面的排版即可使用到实际的项目中了。 1、使用本软件做开发的优势: 如果您是ASP.NET开发人员,一定会为每天开发中大量的重复拷贝、粘贴代码(如分页等功能)而感到烦恼,又或为ASP.NET对模式开发的繁琐关联配置而显得无可奈何时。使用本软件可以自动生成代码、建立页面关联。开发人员只要前期对业务了解清楚,数据库表设计明确,用本软件即可完成程序的编写。 如果您是经常使用NHibernate或其他DLL插件的ASP.NET开发人员,一定会为NHibernate或其他DLL插件的配置部署问题而搞懵,这些类型的插件有个最大的问题是其核心操作均是由该插件的内部完成,对开发人员来说是个黑匣子(一般用户不会去读其开源代码),而且多个项目用同类型的插件部署到一部服务器上的时候,很容易造成版本冲突,且出现莫名其妙的问题。这些插件产生的冗余代码,也让开发人员不舒服。使用本软件生成的代码,全部开源,结构清晰,在您的开发工程中绝对不需要引用任何插件或链接库。 如果您是公司或项目负责人,一定会遇到这样的情况,公司拥有众多的ASP.NET开发高手,而开发习惯也各式各样,因而对项目接手的维护人员的技术要求也相应需要提高,这样项目的投入成本自然增加,而企业的利润也相应减少。没有统一开发模式,对项目的后期维护是一个相当痛苦的过程,何况IT界人才流动频繁,项目的交接也是常有的问题。使用本软件的自动生成的代码,符合.NET的开发模式结合工厂模式,展示、业务、逻辑、存储的分层实现,代码的编写已分门归类,重要体现了“桥归桥,路归路”的理念,这样对任何需要尽快熟悉项目的人员,一定可以在短时间内理解项目的架构思想,很快上手。 2、本软件自动生成的内容: ★ VO、POJO对象 ★ DAO接口 ★ IMPL接口实现类 ★ DAO工厂 ★ VO、POJO工厂 ★ DBC数据库连接管理类,数据库事务管理机制 ★ ASPX调用页面(增、删、改、查)(含.CS文件),分页功能自动实现 ★ Web.Config配置文件(VS2005工程需要的文件) 3、特色: ☆ 一键生成,简洁使用。 ☆ 生成的代码全部开源,没有任何通过插件或链接库来做的操作。 ☆ 支持多表的多主键处理。 ☆ 支持数据事务的操作。 ☆ 生成内容可以依据客户的需要来选择性的生成。 ☆ 支持自定义查询接口的生成,用户可以定义查询条件。 ☆ 目前支持Oracle、Sqlserver 数据库对象的自动生成代码。 4、联系方式: Email通讯邮箱 : autocode@126.com QQ留言:915842778

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧