Welcome to MSDN Blogs Sign in | Join | Help

    两天后,我将离开微软中国研发集团服务器与开发工具事业部(以下简称STB中国),但我不会走得太远——新的部门是在北京的微软大中华区开发工具及平台事业部。作为STB中国团队的创建者之一,做出这个决定对我来说并不容易;不过我很肯定,经过多年的磨练和砥砺,STB中国团队今天已经站在了一个更高的平台上。所以,对这个创新机构的未来,我充满了信心。

    2005年初,STB中国在上海成立。这几年里,我们和华东地区的产业伙伴紧密合作、不断向新的目标发起冲锋。在这里,我想借助我们的博客,谈谈过去四年多来我的一些粗浅感受——以及这个不断成长的团队是多么让我自豪。

    在中国设立服务器与开发工具研发团队的构想萌生于2004年。在总部的大力支持下,我从雷德蒙返回故乡上海,组建创业团队、确立发展目标、锁定研发方向。几年过去了,回头看看,我深刻地感受到,跨国企业本土化研发的深度完全是取决于“态度”——客观地说,无论在哪个行业,你都很难找到这样一家公司,她是如此渴望在经营、管理、研发、合作等各个方面都深深融入中国本土,并梦想着成为中国IT产业的一部分。她就是微软。

    在微软,你几乎看不到那种大多数跨国公司“通行”的、任用不懂中文的外籍高管的情况;更重要的,在许多全球性企业都以简单的项目外包和产品汉化作为其在中国从事本土化研发的重大进展的背景下,微软却真正地做到了把中国视为创新基地,做到了资源最大化、团队本地化、研发核心化、合作多元化和产品定制化。

    今天,微软中国研发集团的北京、上海和深圳团队都已成为微软全球研发体系和中国自主创新事业的重要链环。

    创新实力和产业影响力的持续增长无疑是令人兴奋的——以我身处的STB中国团队来说,在过去的一年里,我们便迎来了一个个值得骄傲的瞬间。例如,去年春季发布的微软三大企业级软件产品就是我们与STB世界各地团队共同奋斗的成果。之后,我们又陆续为包括微软第二代高性能计算产品、最新的Azure云计算平台在内的多项技术和产品研发做出了重大贡献。再如,去年问世的中国第一台百万亿次超级计算机曙光5000A正是我们与本土伙伴并肩作战的结晶——去年夏天,我们和曙光的团队紧密协作,最终“交出了一份满意的答卷”、“创造了中国高性能计算的历史”——不少朋友可能不清楚,曙光5000A有两个很有趣的“唯一”,首先,它是当时全球超级计算机TOP 10中唯一的非美国研发的产品;其二,它还是十强机中唯一一款采用Windows HPC Server 2008的高性能计算平台。

    “扎根中国”,我们希望把这个承诺落到实处。无论是开发工程师、测试工程师、项目经理、架构师、甚至管理者,不知道客户最终想要的是什么,我们永远不可能做出能为客户产生价值的产品。因此,除研发工作外,STB中国团队还积极通过各种渠道与中国本地客户和合作伙伴建立联系,在微软中文技术论坛上回答问题,在技术大会上演讲

    打难打的仗才能锻炼好队伍 —— 正因如此,在团队建立之初,我们就将研发方向锁定在对公司具有战略意义、对全球用户而言至关重要的那些项目上。我想,这也会为STB中国团队今后的创新实践指明方向。

    态度决定深度。在惜别STB中国之际,我坚信不久的将来,随着与客户和合作伙伴的深入交流,不断将各方需求融入到产品研发过程中,这个团队可以在中国做出世界一流的研发。

    两天后,也就是我在微软的第十五年,我将从服务器与开发工具事业部的研发部门调任至技术推广部。在新的岗位上,我会负责在整个大中华区推广微软最新技术的创新应用:协助我们的合作伙伴及独立软件开发商改进商业模式、提高自身能力;支持中小企业快速成长;为开发人员和相关专业的师生们提供创新经验和技术资源等等。

    STB中国的同事们,过去四年多来,每时每刻我都享受着与各位携手工作的过程。我也坚信,在未来的日子里,我会随时关注更多来自STB中国的成就与贡献,我也期待着在今后的工作中、在与客户的互动和交流中能与大家再度携手。

    让我们继续一起加油,为我们的客户创造新的商业价值!

image

谢恩伟

 

    不知不觉,离2009年5月12日已经过去了一个多月,而离2008年那个令全中国人民刻骨铭心的日子也相距了一年之久。然而,岁月的河流对去年发生的汶川大地震似乎显得无能为力。时间,并没有如潮水般将那段记忆从人们心中洗刷淡去;记忆,却在时间的沉淀中愈发清晰。

    我依然记得去年5月12日的情景。那天下午天气很好,办公室里安静得只有自己思考的声音。忽然,Outlook弹出公司发送的一封新邮件,在第一时间向全公司的员工告知了发生在天府之国那令人震惊的消息。接下来几天的捐款公司上下所有人更是慷慨解囊,有些部门的老板甚至发起了员工捐一元,自己就对应捐两元的竞赛,丝毫不怕个别员工会“恶意”捐款让老板“破产”的风险。

    在一年后的今天,一年多前所发生的一切依然历历在目。带着让灾区更快更好地重建起来的强烈愿望,5月22日下午,服务器与开发工具事业部的公民责任委员会向在紫竹办公的近400位员工发起了“纪念5·12一周年公益义卖活动”,向全体员工征集义卖物品,号召大家参与这次义卖,并将义卖所得全部捐献给灾区。而我有幸受邀为这次的义卖活动主持。

    活动从策划发起到进行义卖仅短短几周时间,但义卖现场却热闹非凡,气氛丝毫不差庙会。许多员工捐出了自己的私人物品,摆放在义卖现场竟从大会议室的前门到后门摆满了两大排。捐出的物品更是琳琅满目,从精装书籍,生活用品,护肤品,手饰,婴儿用品,工艺品,到电子用品等等,还有人特地自制了一些蛋糕送到现场参加义卖。每件物品的起价并不高,很多都从个位数起价,但到场的同事都踊跃竞拍,从10元竞价到上百元,甚至上千元。每一个人都发挥出前所未有购物狂的潜质。而每一位竞拍成功的人,无论出价多少,都获得了周围人充满感激的热烈掌声。身为主持,站在台上,看着大家争先举手竞拍,看到一件件拍品都发挥出比它本身更多的价值,心底不禁有股暖流涌动。

    而各部门的老板们的捐赠就更令人惊呼:捐时间和私人服务!有的老板捐出了4个小时1:1教授DJ技能,有的捐献晚餐时间亲自下厨做特色法式大餐外加品酒常识,有的捐出双休日充当司机和导游游览水乡同里,还有的干脆就捐半天的贴身服务,至于是什么,就由出价的人说了算咯。当然,老板的时间都是蛮贵的,但仍不乏买主。大多数老板们都被不同部门的员工抢购一空,除了某位卖高尔夫时间的老大。不是因为底价太高,或是因为老板没有人缘(恰恰相反的是此位老大用“人见人爱,花见花开”来形容最恰当不过),看来高尔夫作为贵族运动在本分的IT员工中还是比较缺乏市场。

    其实类似的自发性活动在服务器与开发工具事业部并不少见。在汶川大地震一周年前夕,高性能计算SQL Server两个团队分别奔赴四川走访受灾群众安置点和学校,捐款捐物。而公民责任委员会作为服务器与开发工具事业部中由员工自发成立的组织,时常为同事们提供各类志愿活动信息,甚至精心组织多项富有新意的公益活动。在这样的氛围里工作,能感受到的不仅是身边(以及自己)的每个人对工作和技术的热情,更能感受到人与人之间的关怀。我们知道物资捐赠的也只是绵薄之力,但我们相信无数个绵薄之力加在一起,就能让爱散播在社会的每个角落,让我们居住的家园变得更美好,无论是今天,或是更灿烂的明天!

郭晓颖

尊敬的各位读者, 首先感谢您阅读我们这篇博客摘要。如果您对其中一篇博文有任何想法或疑问,请直接在相关博文后面直接留言,以便负责博客的相关研发工程师能給于及时跟踪或答复。如果您的问题与我们的博文内容没有直接的联系,建议您直接在微软中文技术论坛(http://social.microsoft.com/forums)上查阅或提问,那里有更多微软MVP、微软讲师、技术支持工程师和广大的IT专业人士、开发人员、微软技术爱好者,分享技术经验,解决技术问题。谢谢!

 

高性能系统棧的推倒和重建  (一)

作者简介: 徐明强博士现任微软中国研发集团服务器与开发工具事业部高性能计算资深架构师,领导HPC产品中的并行编程模型和运行时系统的设计与架构。 徐明强博士拥有21年高性能计算领域专业经历,包括8年学术政府实验室的研究和13年的业界经验。点击这里阅读全文。

 

System Center Configuration Manager 2007补丁简介

当补丁发布以后,用户可以联系微软客户支持团队下载,并且根据相应的KB文章进行安装。下面,我们就简单地介绍一下System Center Configuration Manager 2007中的补丁。 点击这里阅读全文。

 

调试客户端部署问题 -- 将ccmsetup作为系统服务运行

我在过去一些年中常见的一个客户端部署的问题是将ccmsetup程序用作一个系统服务。绝大多数情况下,我们可以将ccmsetup程序作为系统服务正常使用。然而,也有一些情况中这么做会带来预料不到的结果,随后导致客户端部署的失败。这篇文章介绍了一些这样做带来的后果,同时介绍了这么做如何导致了客户端部署失败。 点击这里阅读全文。

 

Microsoft Management Summit 2009

上周在拉斯维加斯,一年一度的微软管理峰会(Microsoft Management Summit, MMS) 如期举行。MMS为全世界IT Pro提供了微软IT管理领域的最新进展和深度的技术体验。此次峰会一如既往地吸引了全世界的IT管理领域的专家,共同探讨这一领域的各种主题。本次的MMS中,共有900多场精彩的演讲及用户体验活动,集中展示了微软在此领域的各个产品及解决方案。点击这里阅读全文。

 

听微软大牛们谈“怎样成为优秀的工程师”

这天正午,上海紫竹园晴空万里,微软服务器与开发工具事业部(STB)正在会议室进行一个午餐谈话,主题是“怎样成为优秀的工程师”。听众是来自各个部门的员工,大部分是年轻面孔。面对听众的是主持人和四位“大牛”,其中有三位是经理,一位是资深的个人贡献者(Individual Contributor,IC)。他们相同的是都有很强的技术背景,深谙什么是优秀的工程师。我们SQL Server中国研发中心的总经理孙博凯(Prakash Sundaresan)也落座其中。主持人先后问了数个问题请大牛们谈论,我将这些谈论记录下来,和大家分享:点击这里阅读全文。

 

30分钟内加载1TB 的数据——SSIS打破商业ETL工具的记录

许多企业拥有海量的数据,并将其存储在多个不同的数据源。为了给用户提供有意义和可靠的信息,企业需要提取、转换和加载数据(Extract, Transform, and Load data,简称 ETL)。SQL Server 集成服务 (SSIS)可以让企业把来自异构数据源的任意数据加载到数据库。2008年2月,微软宣布了SQL Server 集成服务数据加载的一个破记录壮举:SQL Server集成服务用不到30分钟的时间把1 TB 的数据从平面文件加载到SQL Server 2008。这比其他商业ETL工具的最佳时间快了30%。点击这里阅读全文。

 

升级到MSXML 6.0

由于历史原因,MSXML有许多版本共存,比如3.0、4.0、5.0和6.0。让我们的客户把他们的应用程序移植到MSXML 6.0上去是我们的最终目标。点击这里阅读全文。

 

简要介绍SQL Server 2008新的事件处理系统——SQL Server Extended Events

SQL Server Extended Events(下面简称XEvent)是SQL Server 2008里新加的事件处理系统,用来取代SQL Server原先的SQL Trace的跟踪机制。事件处理系统对一个复杂服务器系统的排错,调试是极为关键的。和SQL Server原来的事件处理系统相比较,XEvent具有下列的优势:点击这里阅读全文。

 

超轻量级MSXML多功能测试程序

MSXML是微软非托管代码栈中最为核心的XML服务集合,不但适合基于COM的开发应用,更是微软AJAX解决方案和客户端XSLT解决方案的核心组件。上一次我们介绍了一个基于HTML和MSXML6的超轻量级XPATH测试程序。本次我们将推出一个更全面的MSXML测试程序。这个程序可以验证XPath、XSLT、Schema和XDR,并支持Namespace。点击这里阅读全文。

 

使用微软SAP BI Connector组件分析处理数据

微软SAP BI Connector组件(Microsoft Connector for SAP BI)是由微软中国SQL Server商务智能团队开发的集成服务(Integration Services)新组件,它的主要功能是让用户更方便地在微软SSIS集成环境中与SAP NetWeaver BI交互数据。点击这里阅读全文。

 

Silverlight3的7个新功能

在刚刚结束的Mix09大会上(Mix是微软面向web开发者和设计者的会议),Silverlight团队的程序经理Joe Stegman介绍了silverlight3的许多让人兴奋的新功能,摘录如下:点击这里阅读全文。

 

.NET Interop入门-P/Invoke和Reverse P/Invoke

最近在论坛上经常看到一些基本的interop的问题,给我动力写完之前的.net interop入门系列,给刚刚涉足.NET  interop的朋友们一个大体上的概念。每每谈及.NET interop,我的脑中总是出现下面一幅图: 点击这里阅读全文。

 

成功从SBS 2003迁移到SBS 2008的关键

从SBS2003到SBS2008的迁移安装(Migration install)是SBS2008安装中常见的方式。在SBS官方博客上发布了一篇文章讲述了进行迁移安装的关键。点击这里阅读全文。

原文发表地址:http://blogs.technet.com/chinahpc/archive/2009/05/11/volunteertrip.aspx

    4月24日到29日,HPC中国研发团队和一些家人朋友,还有现已回到美国工作的前部门经理Alex Sutton,一行22人去了四川省旅游,不仅游览了绮丽秀美的九寨黄龙,还访问了震区都江堰的受灾群众安置点,最开心的是在我家乡的山村小学里见到了好多可爱的小朋友。相信不少朋友都听说过“多背一公斤”这样号召旅行者出行时多背一些物品给贫困山区小孩的故事,而这次把我们的集体旅游与志愿者行动结合起来,则是我们HPC全体成员的共同心愿。成行之前,作为一名积极的志愿者,我推荐了两个选项:去都江堰市龙池镇云华村,捐献旧笔记本电脑协助上海市闸北区热爱家园青年社区志愿者协会(下文简称“热爱家园”)开展电脑培训班,这是我去年曾经实地考察参与了前期调研的项目; 或是访问捐助我家乡县城里大山深处的“夫妻小学”,我搜到的南充日报报道来看他们的确非常需要帮助。让人喜出望外的是,最后我们不仅去了云华村,大多数的同事还去了我的家乡,好好利用了我们公司的每人每年三天的志愿者假期。我相信我们大多数人都乐于助人,但往往有这样那样的顾虑让我们不能成行,身体力行做个志愿者,并没有想象的那么困难。

    24日,从上海飞到成都,我们没时间休息,就汇同热爱家园的职员陈佩赶赴云华村,到了都江堰,“岷江黄浦江水水相融, 上海都江堰心心相连”的大幅标语格外显眼,有名的板房区“幸福家园”显得秩序井然,路边很多楼房的裂缝仍然清晰可见,但更多的是推土机和起重机在热火朝天地重建家园。而我在将近一年的离别之后重访故地,忍不住客串做起了导游,向大家介绍眼前的情景和地震时的故事:这块空地,曾经停放了好多军车搭建了好多帐篷,“铁军来了”、“有困难,找铁军”的横幅格外暖心;那条二王庙后门的公路上,曾经有检疫人员不辞辛劳地向来往车辆喷洒消毒剂;还有多次出现在新闻联播的紫坪铺水库,曾经有无数冲锋舟运走受灾群众,运来物资运来官兵运来希望。

多次出现在新闻联播的紫坪铺水库 仍在抢修中的龙池隧道

  (多次出现在新闻联播的紫坪铺水库)        (仍在抢修中的龙池隧道

云华村板房区 搬运物资到板房区

          (云华村板房区)                   (搬运物资到板房区)

    车开了近三个小时,穿过还在施工中的隧道,开过还在修建的龙池公路,终于到了龙池镇云华村的受灾群众安置点,也就是上海建工援建的板房区,上次来这里调研的时候,我还在上海建工的厨房蹭了几顿饭呢。可能是乡亲们还在劳动,小孩们还在上学,我们并没有见到太多村民,把5台笔记本电脑、若干路由器集线器插线板和长长短短的网线放在热爱家园的云华图书室后,我们走进一家农户,一位大姐和一位老奶奶热情地和我们聊了起来,从她们那熟悉的乡音中,我听到隐隐的伤痛,却流露出更强的坚韧与希望,还有一份真诚的感谢。我们带的东西并不多,也没有时间把网络环境全部搭好,只希望这一点点帮助对即将开展的电脑培训班有些作用。大山里的孩子和青年,急需电脑和互联网来获取信息,学习知识,建设自己的家乡。在返程的车上,我代表四川人由衷地感谢我的同事们愿意大老远地来看看震区,大家都说我太客气了,Ming更是说道:打在手上,全身都会痛,四川人民受灾了,全国人民都心痛。地震过去快一年了,我们见证灾区同胞自强不息重建家园,我们祝福灾区同胞平安幸福安居乐业。

等待图书室管理员 村民们搬进板房前的临时居所

       (等待图书室管理员)              (村民们搬进板房前的临时居所)

Ming与老乡聊天 我们在云华图书室外的合影

      (Ming与老乡聊天)                  (我们在云华图书室外的合影)

    4月28日,游完九寨沟和黄龙的美景之后,超过半数的同事跟我回家乡南充市营山县。不巧的是,连接成都和营山的达成铁路因为扩建施工暂时关闭,于是我们从成都十陵汽车站搭乘客车,耗时4个小时,匆匆吃了午饭,又坐上县团委老师帮我们联系的面包车沿着盘山公路开了2个小时,最后在崎岖的山路上步行了半个小时,到达了我们的目的地合兴乡糖房村大垭口“夫妻小学”。当我们抬着黑板提着礼物走近小学,远远地就听到了小孩子们嘹亮的歌声,心一下子被感动充满了。紧走几步,我看到了眼前的画面,廖老师正领着站得整整齐齐的小孩子们大声唱歌,他们最大的也只是在上二年级啊,歌声轻灵稚气,眼神清澈纯净,笑容天真无邪。还有不少学生家长,围了上来,老乡们不善言辞,但一看就知道是已经站在这里等了我们很久。

通往“夫妻小学”的崎岖山路 搬运黑板

   (通往“夫妻小学”的崎岖山路)                (搬运黑板)

从附近赶来欢迎我们的小村民 小朋友们唱歌欢迎我们

   (从附近赶来欢迎我们的小村民)          (小朋友们唱歌欢迎我们)

    老师领着学生们回到教室,幼儿园一个教室,一二年级一个教室。简陋的教室有一面是土墙,有一些大的裂缝,夏天很热,教室光线很暗,廖老师走上教室中间的一张课桌上,伸手拉了开灯的绳索,然后带领幼儿园的孩子们一起念自制黑板上的bpmf拼音,孩子们认真地齐声背诵帮助记忆的口诀“广播电台播播播”(b),“两个门洞摸摸摸”(m),窗外的我们和家长都开心地笑了,我想我们都看到了未来的希望。接着廖老师把两个教室的孩子集中到一起,带着他们唱起了一首“爱心叔叔”的歌,我们都很感动,不知道这是不是廖老师自己谱词谱曲的。第一排一个小女孩,长得有点像我的小侄女,我拉着她的手,问“你喜欢读书吗”,她一点也不怕我,也用小手拉着我的大手,扑闪着大眼睛说“喜欢,语文数学我都喜欢”。校长让我们给学生说些什么,因为有的小孩子听不懂普通话,George让我代表大家说说话。而我望着满满一教室可爱的小朋友,和充满期待的老师家长,一时不知说些什么好,他们需要太多的东西,而我们能提供的又太有限。最后我问了一堆问题:你们喜欢读书吗?你们喜欢你们的阳老师吗?你们喜欢你们的廖老师吗?阳老师和廖老师非常地辛苦对吗?我们都要好好学习好不好?得到的则是小孩子们一次更比一次大声的肯定回答。Alex用中文跟打了招呼,孩子们也都兴奋地叽叽喳喳,要跟见到的第一个老外交朋友。最后我们回到教室外的空地,George向校长和老师捐赠了我们带来的物品,大家还当场捐出七千多元,用于教学点的房租等校舍建设。

廖老师带领小朋友学拼音 Alex向小朋友问好

    (廖老师带领小朋友学拼音)                (Alex向小朋友问好)

“夫妻小学”全貌 教室窗外的学生家长

     (“夫妻小学”全貌)                    (教室窗外的学生家长)

George代表我们捐款、捐物

   (George代表我们捐款、捐物)

    校长和老师承诺会将这笔钱的用途告知我们,而我们每个人离开的时候也在心中思考着这样一些问题:怎么样才可以更好地长期帮助这些老师和孩子呢,如果我们有更多的资源,怎么样才能有效地利用起来呢,目前由我们公司或者个人来直接负责运营是不现实的,是不是有合适的非营利组织可以合作呢?这些问题尚在思考、探讨之中。如果您有意愿、有资源帮助大山深处的老师和孩子,有扶持他们长期发展的推荐方案,我们期待倾听您的声音。

 

 

                                                                                                                       魏臻

 

    5月1日,BizTalk Server的第六个正式版本 —— BizTalk Server 2009正式发布了,共有9个语言版本一起亮相,其中当然包括了中文简体版:)。 这篇文章向大家介绍BizTalk Server 2009中有什么新增的功能和改进的能力。

 

更新的平台支持

    Windows Server 2008, SQL Server 2008和Visual Studio 2008是微软近期发布的重要平台产品,BizTalk Server 2009将全面支持新的平台,并保持对现有平台的支持,具体如下:

    · 操作系统:Windows Server 2003 SP2, Windows XP SP3, Vista SP1, Windows Server 2008

    · 数据库:SQL Server 2005 SP3, SQL Server 2008

    · 开发工具:Visual Studio 2008 SP1, .NET Framework 3.5 SP1

    用户可以通过对新平台的支持而直接获得收益,比如:

    · 更好的虚拟化:虚拟化是提高硬件利用率并降低运营成本的好方法,而通过借助Windows Server 2008和HyperV, 我们可以实现BizTalk Server的高性能虚拟化部署,包括实现64位虚拟机,多虚拟处理器以及enlightened设备等。

    · 通过支持SQL Server 2008而获得更好的数据库性能,同时维持对SQL Server 2005而保护用户的现有投资。

    · 通过支持Visual Studio 2008增强开发人员体验和团队生产率。

 

提升开发人员和团队生产率

    BizTalk Server 2009在开发方面不仅仅是简单地支持在Visual Studio 2008中创建BizTalk项目,还通过提供了一系列新特性来提高开发人员和团队的生产率。

    · 新的应用程序生命周期管理(ALM)支持: BizTalk Server2009提供了对Team Foundation Server(TFS)的支持,使开发团队可以像开发其他.NET项目一样地管理BizTalk项目, 比如通过TFS与Project Server集成进行项目管理,对Bug进行追踪,并且使用MSBuild实现自动构建。

    · 增强的开发人员生产率:BizTalk Server 2009改进了BizTalk项目系统,提供了与其他Visual Studio项目相同的用户体验。BizTalk Server 2009还实现了若干新特性,比如对Map的单步调试从而简化对复杂Map的开发和调试,以及通过生成代码框架实现对Artifacts(如Schema, Map和Pipeline)的自动化单元测试。

 

增强的SOA和Web Services集成能力

    BizTalk Server 2009进一步完善了其作为SOA集成服务器的全方位集成能力。

    · 新的Web Services注册: BizTalk Server 2009包括了UDDI Services 3.0,提供了对服务的注册和发现机制。

    · 新的行业(LOB)适配器: BizTalk Server 2009 为Oracle E-Business Suites和SQL Server提供了两个新的适配器。

    · 增强的IBM主机系统集成: BizTalk Server 2009增加了一个新的WCF WebSphere MQ 通道,并且新增了一个新的针对主机应用程序的WCF服务,将传统Transaction Integrator暴露给.NET Framework开发人员。另外,BizTalk Server 2009还包括了对CICS,IMS,CICS HTTP,DB2,DB2/400,DB2 Universal Database,和WebSphere MQ等最新版本的支持。

    · 增强的企业服务总线(ESB)导航:通过ESB Guidance 2.0实现企业服务总线(ESB)使用模式。

 

增强的B2B集成能力和设备连接能力

    · 对EDI和AS2协议的增强支持:EDI/AS2仍然是重要的B2B集成手段,BizTalk Server 2009对已有的EDI/AS2特性进行了一系列的改进,比如支持多消息附件,自动配置消息转发,端到端保持文件名等。

    · 新的Mobile RFID平台和设备管理:BizTalk Server 2009为多种移动设备提供了一个新的轻型平台,简化了移动应用程序的发展,这样的移动应用程序可以通过RFID实时读写商业信息。BizTalk RFID Mobile包括了对增强的设备管理的支持,以及使用PowerShell和System Center Operations Manager2007管理和监控RFID基础结构的能力。

    · 新的RFID工业标准支持:支持关键工业标准(包括LLRP,TDT,TDS,WS Discovery和不完全EPCIS支持)。

 

我们对BizTalk Server 2009的贡献

    最后,自我宣传一下:),服务器与开发工具事业部的中国团队在BizTalk Server 2009的开发中发挥了举足轻重的作用:

    · 北京团队负责了BizTalk Server 2009整体的测试工作。

    · 上海团队负责了UDDI Services v3.0的全部开发和测试工作。

 

马仲男 测试主管

    在前面李敏的一位软件测试开发工程师的成长体验中, 她提到了微软的自动化测试. 在软件开发流程中, 这种开发一次、自动执行的测试方法被看作测试领域的尖端技术。 在Wikipedia中对其的定义是:


“Test automation is a process of writing a computer program to do testing that would otherwise need to be done manually. Once the testing has been automated, a large number of test cases can be validated quickly.
“Test automation can be expensive, and it is usually employed in combination with manual exploratory testing. It can be made cost-effective in the longer term though, especially in regression testing.”


    对于任何一个需要开发有持久生命力软件的组织来说, 自动化测试显得必不可少。 比如像Windows这样的产品, 通常的生命周期可以长达10年以上。 试想一下, 没有自动化测试的话, 任何一次的产品改动、升级、补丁、导致的测试成本有多大。


    之所以说自动化测试是尖端技术, 原因在于自动化测试的技术难度, 特别是UI测试自动化。 跟软件产品一样, 自动化测试程序也讲究性能、稳定性、可伸缩性等指标。 测试程序除了要实现目标程序一样的功能才能够进行结果检验以外, 测试程序还要实现额外的功能去观察目标程序的行为。比如要自动化测试 “dir C:\*.txt” 这个命令, 测试程序除了要实现跟dir一样的文件读取, 通配符展开的功能外, 还需要读取dir命令的输出结果才能够进行结果的比对。同时也要支持跟dir命令一样的灵活性和扩展性。这使得自动化测试在实现起来有可能比其测试目标的实现更加困难。而对于UI产品的自动化,实现起来就牵涉到读取GUI的图像输出(比如检查是否正确弹出了MessageBox),模拟用户的鼠标键盘输入(比如模拟用户在保存文件的时候选择正确的保存路径),同步测试产品和用户的交流等等。这些技术门槛使得自动化测试成为一把双刃剑,成败不在于是不是去做它,而是有没有能力把它做好。 接下来的介绍会让你对微软的UI测试自动化和软件测试开发工程师(Software Development Engineer in Test以下简称SDET)有更深入详细的了解。
举一个十分具体的UI自动化的例子:


1. 启动计算器程序(calc.exe)
2. 模拟用户进行菜单输入,从普通模式切换到科学模式
3. 模拟用户计算(4+6/2)的阶乘
4. 检查计算结果是否正确

   要求:
1. 整个流程的执行在4秒以内完成
2. 能够适应于不同分辨率和语言 (不同语言的菜单项文字是不同的!)
3. 能够稳定执行,若非产品本身的确有bug,该序列不允许失败
4. 如果下一版本的calc.exe修改UI风格 (Win7中已经修改了),或者改为WPF实现,要求现有的测试代码仅做简单修改即可继续使用

    对于刚入职的SDET来说,其实现难度已经足够大得让其宁愿去写一个calc.exe程序本身。无论是学校的教学还是课外的研究,针对UI自动化的资料几乎是零。上诉功能和需求,需要工程师结合已知的知识和技能,研究出解决问题的最佳办法。

    UI自动化其实是一种进程与进程之间的通信。测试程序需要跟目标程序通过某种进程通信方式来获取目标程序的信息,包括UI元素的位置,显示的文字内容,然后再模拟用户的操作比如在特定位置点击鼠标。就进程之间通信方式来说,Windows平台上有很多选择,比如管道,TCPIP,Windows消息,共享文件,RPC等等。对于UI自动化,最容易想到的解决方案是Windows消息。通过Windows消息以及跟Windows相关的API可以获取计算器窗口,菜单和按钮位置。但真正开始用Windows消息来实现UI自动化测试的时候,就会发现Windows消息的一些不足,比如Windows消息无法用于WPF程序,无法获取Excel或者IE里面的UI子元素。

    所以,除了Windows消息外,工程师还需要更深入地考虑其它技术。其间就需要研究微软内部的各种UI Test Framework,了解不同Framework的实现技术,优劣以及和测试目标的匹配程度。在进行不断的摸索,尝试,原代码分析后,工程师才会对微软平台各种技术有深入的了解,整个过程是把基础的理论知识转换为产品相关的生产力的过程。

    UI自动化对于SDET来说有两层含义。其一,对该技术的熟悉程序决定测试工作的质量。另外,由于UI自动化涵盖的技术范围和深度,使得该技术是锻炼SDET的一个很好的平台。微软对工程师的技术技能要求不是限制在某一固定领域的,而是要求工程师锻炼能够通用的核心竞争力。比如,作为SDET,通过2年的努力,在Visual Studio的界面测试上取得了90分的成功,那么,如果该工程师愿意换一个项目做SDE(Software Development Engineer, 即软件开发工程师)的话,比如到SQL Server开发存储过程的图形化设计,他在前两年所积累的技术技能,要能够确保他在新的项目和职位上,取得同级别的90分。而UI自动化,对于锻炼这样的核心竞争力是一个非常好的平台,因为它至少包括了:


1. 精通微软通用的开发工具和技术, 比如C#, .NET Framework, 多线程。把开发技巧运用到实际的项目中。
2. 熟悉Windows平台的系统知识,比如进程间通信, Win32消息机制。站在微软工程师的角度,通过具体的项目和代码充分了解Windows平台。
3. 锻炼在压力环境下解决实际问题的能力, 比如深入分析COM/DCOM,研究UI Automation Framework的底层实现来解决技术上的细节问题。
4. 熟练掌握调试技巧。UI自动化的开发过程牵涉到测试程序和目标程序,在调试的时候需要处理两者的同步问题。同时,UI自动化的稳定性是比较难解决的问题。调试一个偶尔发生的错误是一个非常有挑战性的任务。
5. 在自动化测试的开发过程中熟悉微软的项目流程,最后,给SDET带来的不仅仅是测试技能的飞跃,同时也让工程师更加熟悉所测试的产品,更好地保证产品质量。


    当一个SDET经历了UI自动化测试,武装上了上述技能,就意味着他熟知微软平台的开发技巧,体验过程序开发过程中通常是如何犯错,如何调试,工程师在怎样的情况下容易做出错误的判断和假设,那么,他就能够很轻松地破坏别人的程序,找出漏洞。这不仅仅对测试工作来说是一个很好的起点,这样的坚实技术背景还能够让工程师学习和发展其它技能的时候事半功倍。换言之,自动化测试对微软的产品来说,是保证其可以持续成功的重要技术;对于优秀的SDET来说,是一项必不可少的重要的技能;对于刚入职的工程师来说,亲身体验和研究自动化测试,特别是UI自动化,能够让你实现学生生涯到职业生涯的转变。
   

    在后续的文章中,我打算介绍自动化测试和手动测试的比较,看看自动化测试所达到的效果是否等同于手动测试的录制和重复。同时,也会具体介绍UI自动化测试开发的有趣细节。

 

 

熊力
软件测试开发工程师

简介

    如今,几乎所有的商业软件都有一个图形用户界面(GUI)。从用户的角度看,一个直观的功能正确的GUI往往比软件的功能更重要。根据论文“A Comprehensive Framework for Testing Graphical User Interfaces” 的统计显示,GUI通常占总代码量的45% - 60%。测试GUI代码对于软件测试开发工程师而言,既独特又富有挑战。

    首先,在软件开发周期中,GUI的改变是绝对的,而稳定则是相对的。在用户进行Beta版本的试用时,他们的反馈往往集中在用户体验即GUI上。而与之相对应的是,开发人员也乐意修改这样的问题因为其开销通常相对可以控制。但是,这给测试组带来了极大的挑战。他们不但要确保最小的回归(REGRESSION)风险,而要承担诸如更新测试用例和自动化等额外的工作[2]。

    再则,管理大量的GUI测试用例也是个难题。 GUI上一个貌似简单的改变,会影响到几百个已有的测试用例。根据我们的经验,软件产品的测试用例中,25%甚至更多都是GUI相关的,其中80%的都可以自动化。在软件开发周期中,一个对话框可能会改变多次,其相应的管理成本也随之水涨船高。

    最后,传统的测试标准可能不能很好的对GUI测试进行评估。比如: 通常测试经理认为70%以上的代码覆盖率为可以接受的测试结果,然而对于GUI来说,你只要简单通过打开每一个对话框,就可以达到较高的代码覆盖率。由此可见,代码覆盖率和GUI测试覆盖的层次、深度没有直接的关系,还必须采用其他的测试标准。

    现在已经有了一些关于GUI测试方面的研究,例如,GUITAR项目。GUITAR利用模式对话框的属性去获得“事件流图”,然后围绕“事件流图”自动生成测试用例。但是,GUITAR可能不适合非模式对话框为主的软件 (比如基于MMC开发的GUI),而且它也缺少系统的途径去管理整个测试过程。

    这篇文章介绍了一套GUI测试工具集,我们内部将它命名为“Tao项目”。这是个全面的解决方案,包括用户引导的测试用例和测试自动化生成器、静态二进制分析器、GUI变化跟踪器和综合的报表机制。

    接下来,本文的第二节会概要介绍Tao项目,第三节详细描述Tao项目的不同组成部分,第四节列出了Tao项目可能的未来研究工作。

Tao项目概述

    道可道,非常道。道是一种传统的中国哲学思想, 其精髓乃万物皆有其规律,人类需顺应自然法则以实现游刃有余。根据这种思想,我们设计了这个GUI测试工具组来应对第一节中所提到的挑战。图1描绘了通常GUI测试周期中的主要测试活动。

clip_image002

图1 通常GUI测试周期的主要活动

    Tao针对这些测试步骤,提供了一个完全解决方案,图2显示了它的主要构成部分。

clip_image004

图2 TAO工具组

    TAG (测试用例自动化生成器) :用户引导的测试用例和测试自动化生成器。根据预先定义好的规则和基于知识系统的模型,它能生成测试用例和相应的自动化测试代码。

    Visual Tree (可视化树图) :这个树图描绘了GUI的结构,能够形象地显示测试用例报告、自动自动化报告和UI差别变化结果。

    Static Binary Analysis (静态二进制分析器) :对于用支持反射(REFLECTION)的编程语言编写的GUI,这个工具会生成静态分析结果。

    Automation Framework (自动化框架) :执行测试自动化的底层工具。

    UI Diff Tool (UI差别跟踪器) :它能扫描目标GUI的差别,并把这些差别在树图中用图形化的方式显示出来。作为输出的一部分,它会建议用户可能需要更新的相应测试用例和测试自动化。

    Bug Filer (Bug 管理器) :是专门发送GUI bug的工具。它把GUI bug根据不同的原因进行分类,这可用作bug趋势分析和质量评估。

 

王景村(测试经理)、李敏(测试主管)

    对我们的系统和组件进行压力测试是非常重要的。压力测试可以发现很多在正常情况下不会被暴露的问题,也就是说可以发现更多其他测试无法发现的系统缺陷。虽然压力测试和负载测试在某些方面有共同点,但是两者并不相同。负载测试是通过在系统上运行已经定义好的工作负载从而确保系统能够在一定的负载系正常工作。而压力测试是测试系统过载的情况,并帮助回答这样一个问题“什么原因导致了系统错误?”

    以下是我曾经参与过的一些压力测试:

  • Windows 客户端的压力测试

    在这个系统测试中,我们同时运行许多应用程序,伪应用程序以及测试程序。如果你没有看到过这种情形,你应该去尝试一下。此时,很多子系统会被同时频繁地调用。由于现实中,一个人很难同时做很多事,所以一般Windows用户是很难出现这样的负载。

  • Xbox 压力测试

    在这个系统测试中,许多测试程序和一个游戏引擎同时在Xbox的进程空间中以多线程的方式运行。在Xbox中的所有测试都被设计成与系统内核同时运行在同一个进程空间中。而这也正是Xbox系统的模型。每个测试都是一个线程,每个线程都知道自己不能独享整台机器。我们同时运行所有的测试,于是就出现了图形测试,I/O测试,声音测试,网络测试和控制器测试同时运行的情形。

  • HPC 压力测试

    在这个系统测试中,我们在管理控制台运行的时候提交许多简单的MPI作业,从而模拟了一个很大的工作负载。事实上,它模拟了一个实际中不可能出现的工作负载,因为真正的用户不会喜欢一个集群同时有成百上千的作业在队列中等待处理 。成千上万的MPI作业同时运行,就会有几百万个状态更新信息被发送到管理控制台。此时管理控制台就需要同时处理几百万条消息。

    这些测试都如下共同点:

  • 没有用户会这样使用系统!
  • 负载是完全不合理的
  • 系统最终可能会崩溃
  • 我们可能不会修复这样的BUG,因为用户不会碰到它。

    这是一种设计出来的不合理的负载。实际中用户不会给系统带来如此强度的工作负载。而这种负载强度应该会导致系统崩溃。但是我们并不会修复每一个这样的BUG。其实这些都并不是重点。重点是我们可以通过这样的测试很快发现系统的弱点,并决定这些弱点是否应该被修复或者处理并由此调整测试。一个在正常使用情况下可能需要一个月才暴露的BUG,在压力测试中可能几分钟就会暴露出来。这是一种很有效并高效的寻找BUG的方法。

   

    压力测试的关键是:

一个通过了压力测试的系统在正常的工作负载下将很难出错。这样的系统才是好系统!

 

 

John Daly

高性能计算(HPC)美国团队测试经理

 

翻译:周毅, 高性能计算中国团队测试开发工程师

尊敬的各位读者, 首先感谢您阅读我们这篇博客摘要。如果您对其中一篇博文有任何想法或疑问,请直接在相关文章最后留言,以便负责博客的相关研发工程师能給于及时跟踪或答复。 如果与我们的博文内容没有直接的联系,建议您直接在微软中文技术论坛(http://social.microsoft.com/forums)上查阅或提问,那里有更多微软MVP、微软讲师、技术支持工程师和广大的IT 专业人士、开发人员、微软技术爱好者,分享技术经验,解决技术问题。 谢谢!

 

Silverlight中进行基本的数据验证

Silverlight 2支持基本的数据验证功能。在Silverlight 2中,当我们把数据绑定到某个UI控件的时候,该数据所具有的有效性规则也自动被绑定到了该UI控件上。比如某个数据字段被设置为整数型,当我们用非整数型数据对该字段进行更新的时候就会发生错误。我们就可以利用这个规则在UI中对输入数据进行验证。要做到这点,我们只要设置两个XAML属性,并在所定义的事件中实现我们所期望的UI行为就可以了。点击这里阅读全文。

 

CodePlex上TlbImp新版本发布:基于规则的自定义功能

大家好。距离上次我们发布在CodePlex上的新版本TlbImp已经过了快半年了。在这半年的时间内,除了主要进行.NET 4.0相关的新功能开发之外,我们上海CLR小组也没有忘记进行TlbImp相关功能的继续开发,于今年3月9日再次发布了TlbImp的一个新版本。点击这里阅读全文。

 

SQL中国研发中心近况

嗯,我该说些什么好呢——这是一个漫长、有趣而又繁忙的一年。当然,与我最后一次发帖子时相比,很多事情已经发生了变化:最开始只是出现在美国部分房产抵押市场上的金融危机,现在已经演变为一场世界性的经济危机。这场危机几乎影响到了所有经济领域中的所有人。我们在世界各地都有了重要的政治进展,而绝不仅仅是在美国选举产生了一位新总统。点击这里阅读全文。

 

现在可以下载MSXML4.0 SP3了

今天,我们很荣幸地宣布MSXML4.0 Service Pack 3 (SP3)可以在微软下载中心下载了!MSXML4.0 SP3支持多种语言。MSXML4.0 SP3修复了许多安全缺陷并提高了软件的可靠性,可以完全取代以前的MSXML4.0、MSXML4.0 SP1和MSXML4.0 SP2。点击这里阅读全文。

 

使用HTML和MSXML6.0 创建一个超轻量级XPATH测试程序

在开发和调试基于XML的应用的时候,程序员往往为找不到合适的快速桌面XPATH测试软件发愁。诚然,市面上有成套的XML编辑软件,但是它们往往要么太过于庞大,安装维护不是很方便,要么就是不免费,自己写一个吧,又觉得处理UI很烦。特别是在利用MSXML开发软件的程序员,很想使用MSXML直接测试自己写的XPATH对不对。笔者这里提供各位程序员一个基于HTML和MSXML6的超轻量级XPATH测试程序参考和使用。点击这里阅读全文。

 

怎样在SCCM2007 R2中安装和使用报表服务点

在前一篇 整合SQL Reporting Services 和 Configuration Manager 2007 R2 中,我们介绍了报表服务点可以提供的功能及与传统报表方案的不同之处。这一篇中,我们着重介绍如何安装和使用这一 Configuration Manager 2007 R2 中提供的新功能。 安装 SQL 报表服务点 : 1. 安装 SQL Server 报表服务和数据库服务; 2. 配置 SQL Server 报表服务, 用报表服务配置向导一步一步配置报表服务,注意只有配置了邮件选项。点击这里,阅读全文。

整合SQL Reporting Services 和 Configuration Manager 2007 R2

此文翻译自System Center Configuration Manager 研发团队博客,英文原文请参见 SQL Reporting Services Integration with System Center Configuration Manager 2007 R2 背景 在Configuration Manager 2007 R2之前,报表方案提供给用户的是一个以ASP为基础的解决方案,它包括384张报表,这些报表是site server 的一部分。点击这里,阅读全文。

 

Configuration Manager 2007 SP2

Configuration Manager 2007 Service Pack 2 (SP2) Beta 将于 2009 年五月底在 Microsoft Connect 上发布。 我们希望在这里和大家分享一下 SP2 给我们带来的新内容。 在 SP2 中我们主要致力于 Out of band management 的开发及增加对 Windows® 7, Windows Server 2008® R2 的支持。点击这里,阅读全文。

 

我组喜获年度最佳客户关怀奖

服务器与开发工具事业部(中国)上个月举行了热闹的新年晚会。除了吃好喝好,欣赏到了同事们精彩搞笑的节目(George使出了耍酷的老本行,为我们组赚够了眼球),我们还荣获了部门的年度最佳客户关怀奖(Best CARE of the Year 2008 ) CARE 取自Customers Are Really Excited,该奖旨在肯定我们团队在过去一年中与客户和合作伙伴的积极合作和突出贡献。点击这里,阅读全文。

    我希望大家都度过了一个快乐的春节。我也享受了一段轻松的假期——大部分时间宅在家里接待朋友和他们的家人,同时去杭州做了短暂的旅行。

    十分感谢你们通过博客或者私下里给我的反馈。我希望在这篇博文中回答一些你们提出的问题。同时,为了延续整个系列的行文思路,我也会涉及一些我们团队计划sprint的方法以及sprint过程中发生的事情,并穿插着回答你们提出的那些问题。

    首先,我想说的是,不存在敏捷无需计划的神话。可是,敏捷开发中的计划的确和传统软件开发中的计划有着很大区别。正如我在上一篇博文中所说,我们针对利益攸关方(stakeholders)给出的上层需求创建了带有优先级的产品待开发事项(product backlog)。这一带有优先级的任务列表形成了最基本的sprint计划。在这一过程中,我们一般遵循三阶段的步骤:在主管间进行的预计划阶段,所有团队成员都参加的计划阶段以及包含利益相关者的计划提交阶段。这里的关键是:计划是在所有成员的通力合作中进行,最重要的是由组员自发来制定标准、而不是依赖于某个项目经理。

    预计划阶段在上一个sprint的最后一周进行,在这一阶段中,团队中分别带领项目经理,开发和测试的几位主管会聚集到一起讨论出在即将进行的下一个sprint中,需要开发的故事(story)列表。这个过程取决于很多因素,其中最重要的是:上一个sprint的进展情况,从利益相关者那里得到的反馈,需求或故事优先级发生的变化以及预计的团队速度。项目经理(有时甚至是开发人员或者测试人员)在阐述故事的时候会尽量简短到只描述出目标、故事的简单介绍以及故事的具体流程。我们发现OneNote很好的满足了我们这一需求(稍后会给出一个故事的截图)。

    产品待开发事项总是列出对客户有价值的条目,同时它也可以增加这个团队要求的条目。但是,只有那些最终会给客户带去价值的条目才可以出现在待开发事项中。举例来说,创建并维护一个持续集成服务器以持续保证最终产品的质量,这样的条目被允许出现在待开发事项中的。

    计划阶段通常在sprint的第一天进行。在开会前,项目经理会把OneNote页面的链接发送给组员,以便大家评估,并且为计划会议做好准备。通常,组员会在OneNote页面中交换意见,从而在会议之前澄清那些不明了的地方。在计划会议当天,团队组员会聚集到一起,过一下所有的故事,解决之前发现的任何问题,把故事进一步细分成一些任务,并描述每个故事的验收测试。组员同时也会对完成这些故事所需要的时间做一个大致的估计,然后根据这些估计决定在这个sprint中,团队可以完成哪些故事。

    计划提交阶段在之后的一天进行,主管会再度聚集在一起并且向利益相关者介绍团队承诺完成的任务。此时,利益相关者可以提出建议对优先级进行调整。比如,如果团队成员可以完成故事A,B以及C,但是不能完成D和E,利益相关者可以建议团队在这一个sprint中完成A,B,D以及E(假设D和E消耗的总时间和C相同)。然后,项目经理会把这些故事输入用来管理我们项目的Visual Studio Team Foundation Server。

    注:我们花了好几个sprint来学习并总结出以上这个计划流程。这就是sprint回顾(我会在以后的博文中提及)发挥的重要作用。

   

    现在,让我来回顾一些针对我上一篇博文提出的问题:

在sprint中的变化以及干扰

    有一位朋友提了这样一个问题,变化是敏捷方法的核心,那么团队应该如何应对sprint过程中发生的变化呢?诚然,快速有效的应对变化是所有敏捷方法的核心部分,然而,在sprint过程中的干扰始终对生产力有着不良影响。在我们的团队中,我们总是尽量避免sprint过程中的干扰,把变化延缓到下一个sprint中。因为我们把sprint的长度控制在4个星期,所以对于那些变化,意味着他们平均需要等待2个星期。:) 最起码,我们希望团队在应对变化之前,先完成那些计划了的故事。这一策略当然需要利益相关者的支持,并且在之前就达成一致。干扰对团队的影响很容易观察到,方法之一就是留意团队速度的下降。(比如在燃尽图上看到曲线的变化)

代码重构:

    另一个问题是该怎样应对因需求改变导致的重构现有代码。当研究一个新的设计时,重构是有效的方法;当代码量不大时,重构也不是一个大问题。然而,一旦你的代码量开始变大,重构的代价就会变得很昂贵。由于利益相关者的反馈和需求的变化,我们也曾有相当一部分代码需要重构。 在考量代码重构问题时,最重要的依据是重构对于产品和团队的影响。

    举一个例子,我们曾不得不改变当一个图形被拖动到另一个图形内部时的产品行为。因为在最初设计这一行为的时候,我们的信息不够充分。在初期的实现之后,我们注意到有一些人已经对这一行为记录了bug,因为他们认为产品的表现和他们的预期不同。我们针对这一情况采取了下列的方法:1)收集更多的反馈以明确预期的行为;2)提供了一个穿刺(spike)方案(译者注:Spike指在产品线的外部开发的试探性的原型系统),调整了产品的行为;3)对穿刺方案进行代码复查和“伙伴测试”确保解决问题。(译者注:伙伴测试指找产品组成员帮忙适用产品的新功能,以查找问题)4)对已发生的变化撰写单元测试。

    另外,我需要指出的是,在任何的重构过程中,自动化测试的好处都不会被过分夸大。它能够确保正在进行的代码改变不会给产品的其他部分带来计划外的破坏。

架构与设计

    尽管我们应该预期到设计和实施中会有变化发生,然而,就如我之前提及的,当代码量增大时,对代码的改变和重构的代价呈非线性的增长。面对这个问题,预先进行一定程度的架构与设计就带来了好处。这里的架构与设计并不需要非常具体化,其目的是能够刚好鉴定出在之后的实施中可能面对的主要问题。当然,说起来容易做起来难J。在项目的初期,当上层的需求齐备了,也有一个初步的产品待开发事项列表时,就可以开始进行上层架构了。尽管这可以通过纸笔或者任何建模工具来完成(我们希望在Dev10发布之后,你们会用Visual Studio Team Architect完成这项任务),你将会需要开发一个原型来支持你的设计与架构。我们发现这一步骤对项目的成功非常有帮助。对有一定复杂度的项目,你可以通过这个方法来确定应使用的技术,明确依赖关系等等。对团队来说,这也是对其各自的自动化框架加强建设的好时机。

    OK,我已经讲了很多形而上学的东西。下面让我展示一些截图,把我们团队在sprint计划阶段进行的工作映对到我在前文中所讲述的方法原则。

    下面的这些截图展示了我们团队在sprint计划以后讨论出的故事列表。 同时,你也会注意到一些不同的团队成员留下的评论。其中的交付编号是在TFS中对应的标识号码。

list of stories

    一个用户故事从用户角度描述了一个需求功能点。一个好的用户故事包括需求功能的描述,谁需要它,怎么使用它,为什么需要它。

    Spint计划中的重要一环是让团队对“完成”的定义达成共识。在我们对“完成”的定义中,编写并且运行通过验收测试是重要内容之一。验收测试是在软件交付之前进行的黑盒测试。在我们的语境中,它意味着用户故事的核心内容实现得如同预期的那样。

    一个验收测试应该满足两个条件:1)产品的拥有者应该能够根据它鉴定用户故事已经被实现。2)开发人员应该能够根据它检验他们是否已经开发出了预期的功能。我们不开发那些不能被检验的功能。

    下面是我们所创建一个典型用户故事的具体组成部分:

various parts of a typical user story

    接下来,你会看到一个示例故事以及基于这个故事展开的讨论。<作者注:为了节省空间,以及展示团队成员间的合作,在复核阶段对问题展开的讨论,我做了手工编辑并把他们合并在了一起。〉最重要的是对故事的讨论是团队在动手实施之前的协作,团队在那一时刻已经达成了一致。在这里,我们把对质量的要求往上流推进到很早期的阶段,甚至在团队动手开始写任何一行代码之前,我们已经开始为产品质量作了努力。事实证明,这一办法在之后节省了我们很多的时间精力。如下图所示,团队讨论并解决了关于可用性,可实施性以及可测试性的问题。

story example

story discussion

这篇博文中,我已闲庭信步于sprint计划阶段,不多言了。下一篇中,我会就sprint的实施阶段展开进一步的讨论。

Ramesh Rajagopal

Visual Studio Team Architect 中国团队经理

翻译:朱永泰

校译: 林裕科

[原文发表地址] 在微软当软件开发测试工程师的故事

[原文发表时间] Tuesday, February 24, 2009 3:45 PM

背景资料:李敏,2005年开始在微软实习,半年后研究生毕业成为正式员工,先后经历了System Center Configuration Manager 2007以及SP1、R2的发布,测试的领域涉及UI测试、AMT feature和安全测试等。这篇博客,是她想分享给大家的一些体会和故事,一来给不熟悉测试工作的读者描绘一下在微软当软件测试开发工程师是怎么回事情,二来“揭秘”一下微软的职业发展体制 ——

    2005年的秋天,李敏还在上海交通大学念研究生,还有半年就要毕业了。一天,同学发了个链接给她,是微软在上海招聘实习生的消息,职位的名称叫做软件测试开发工程师(Software Development Engineer in Test,简称SDET),这个职位对学生来说还是个新鲜玩意儿,没几个人清楚具体情况,在好奇心的驱动和微软的吸引力之下,她投出了简历。接着她经历了传说中的微软“五轮面试”,走出美罗大厦的时候已是下午一点,时至今日她对这个时刻的印象只有两个:饥肠辘辘,大脑高速运转。经过一周的焦急等待之后,她同时收到了SDET实习生和正式员工的offer,所在的组是System Management Server(也就是System Center Configuration Manager 2007的上一个版本)。

    就这样,李敏开始了在微软当软件测试开发工程师的旅程。

    几个月过去了,当同学好奇地问起在微软工作的感受和SDET的情况时,她说了自己的“微软测试初体验”:

测试初体验一、软件测试开发工程师,很“奢侈”很“酷”

    问起对软件测试开发工程师的第一印象是什么,她的回答是:挺“奢侈”挺“酷”的。

    说到“奢侈”,先看看一个软件测试开发工程师的典型“测试财产清单” —— 一到两台配置先进的工作机;两个21寸的液晶显示器,一个屏幕用来显示产品的界面,另一个屏幕用来发bug或者编程序;再加上实验室里面十几台测试机器或是一个16G内存的“巨无霸”。如果你需要测试Windows Mobile,那恭喜你了,各式各样的smart phone、pocket PC可以装满一抽屉。经过一段时间的了解后,她也知道了这样“奢侈”的配置一方面可以提高工作效率,更重要的是让测试工程师能够考虑到各种复杂的配置以及模拟客户环境。

    说到“酷”,印象中,软件测试开发工程师总是有机会走在尝试各种微软新技术、新产品的前端,也总是有机会通过动手能力来展示自己的“酷”。比如工程师会把十几台测试机器装成各种各样不同的Bench, 操作系统从Windows 2000、XP到最新的Vista、Longhorn甚至Windows 7,从x86到x64,从英文到德文、中文、日文等;微软最新的产品或者尚未发布的产品都可以拿来“研究”一把,比如Longhorn、Windows 7、Hyper-V等;虽然不一定考过MCSE,但是每个人都会配置DNS、DHCP、AD、network等。

测试初体验二、测试有时候就像是玩游戏,找问题的能力很重要

    测试就像是玩游戏?也许你会觉得不可思议。李敏拿了道面试题来打比方,给你一台笔记本电脑,你会怎么去测试它?这是一道典型的开放式问题,即使是没有测试知识的人也可以想出很多的“测试用例”。比如检查笔记本的型号、颜色、硬件配置、屏幕、电池、操作系统等,相信这是很多人拿到新买的笔记本之后做的第一件事情,这些多半都属于常规的正向功能测试;还有些人指出,外观要小巧方便携带,键盘手感如何布局如何,功能键是不是方便易用,这些人对可用性要求比较高;还有些会想到用它来玩3D游戏看看显卡的性能怎么样;有些人想到装上Vista、64位的操作系统,这就是兼容性方面的考虑;还有人思维“不走寻常路”,提出要把笔记本放在赤道的日照、南极的冰雪环境下试试能不能正常工作,当砧板切切菜,扔下楼看看碎不碎,这就是关于可靠性和压力方面的测试,有趣的答案还可以有许多许多,只要你去想…

    在李敏的描述中,软件测试开发工程师真实的日常工作跟答这道题一样的好玩,只不过笔记本电脑换成了软件程序。软件测试开发工程师拿到“笔记本电脑”之后,会像上面说到的一样开动脑筋仔细检查,检查之前需要列出想测试的各个方面、策略、工具、风险以及怎么开展等,这称为测试计划(test plan);每项具体的测试叫做测试用例(test case),每个test case需要列出具体操作步骤(steps);找出来软件的缺陷、问题等称为bug,bug中需要记录怎样去重现它,称为重现步骤(repro steps);找bug的过程中你可以试图找出根本原因在哪里、甚至哪一行代码有问题,这就是debugging。优秀的软件测试开发工程师在这个“玩游戏”的过程中需要具备足够的好奇心,想出各种各样的主意把软件“搞坏”,尽可能地找出bug,还要多从客户的角度去想,其终极目标就是为发布到客户手中的软件把好质量关。其中,找bug是软件测试开发工程师应该具备的基本功。

    不久她就找到机会“测试”了一把自己的SDET指数,正好高性能计算组举办找bug比赛,优胜者可以获得一些小礼品,她拿到了一个印有Microsoft标志的水杯。

这时候,她的一个高中同学在MSN上面发了条消息:“你当了测试工程师,就不用编程了吧?”。看来需要澄清一下了:

测试初体验三、谁说软件测试开发工程师不用写代码了?

    微软早年也设有只做手工测试而不写代码的职位,称为STE(Software Testing Engineer)。现在所有的测试工程师的职位都叫做SDET(Software Development Engineer in Test),从名字可以看出来,需要具备编程能力,这些编程工作是为了更好地做测试。

    举个例子,李敏负责的某个UI模块有1000多个测试用例,手工执行一遍想想都很累。为了偷懒,她写了些代码将其中80%的测试用例实现测试自动化,这样下班前只要让机器开始跑自动化,第二天就可以拿到结果,从而大大减少了验证这些测试用例所需要花的人工时间,又可以及时地捕捉到bug。此外,软件测试开发工程师经常会做一些实用的测试工具和研究测试技术,比如开发UI测试方面的工具,开发测试流程管理工具,和更好地运用基于模型的测试方法等。在坚持创新的公司文化引导下,大家都非常注重运用新技术新方法,不断地把测试工作推进到新的高度。

    转眼间,一年过去了,李敏从上海的服务器与开发工具事业部老大谢恩伟的手中接过了一周年的水晶纪念碑,按照惯例还请大家吃了一磅的M&M巧克力。2007年秋天,她所在的团队发布了System Center Configuration Manager 2007。在这段时间里,她亲身体验了微软给员工提供的多种多样的成长帮助:

职业发展体验一、员工成长路上的多种帮助

    从加入公司的第一天起,部门就分配了一个资深员工给李敏做“Mentor”,Mentor的意思是良师益友,也就是“师傅”。Mentor会手把手地教日常工作中碰到的各种问题,很多小问题都可以请教Mentor,比如打印机怎么用、测试用例怎么设计、甚至是开会的时候有个缩写名词没听懂等。第一个Mentor的作用就是“师傅领进门”。

    公司还提供了系统的专业知识培训。半年内,她先后参加了New SDET in Microsoft、Test Automation等培训,这些都是测试工作的基础知识。说起“修行在自身”,公司MyLearning网站上有不少测试专题,比如性能测试、代码覆盖率研究和安全测试等;这个网站有无数的在线课程录像,在这里可以学习其他员工的知识和经验,帮助自己更好地做测试工作;近期即将进行的技术讲座、培训、会议等也会在这里公布,热门专题一定要早点去注册“占座”,否则就没位子了。另外,她还发现了一个非常棒的资源MSLibrary,那里有无比丰富的技术书籍、新闻杂志和研究论文等。公司还投资了一系列的综合能力培训,为员工提供从各方面提升“软”技能的平台:有些培训是语言方面的,比如觉得英文不够好的可以去上课,老外来到中国也可以学中文;还有一些是教你“怎么说话”的,比如告诉你怎么精准提问、精准回答,怎样做演讲,怎样去沟通得到大家都想要的结果;还有一些教你“怎么思考”,比如创新思考,不同情况下的思考方式等。这些培训很实用,一般学完了就可以运用到实际工作和生活中。

    再后来,李敏对安全测试的兴趣日渐浓厚,她根据自己的发展需求和兴趣找了美国这方面的“大牛”来做Mentor,渐渐地在System Center Configuration Manager 2007 SP1中挑起了做安全测试的担子。她还在上海的服务器与开发工具事业部中组建了一个跨产品组的虚拟团队,一方面带领团队成员学习安全知识和安全开发流程,另一方面积极向各个产品组推广实施安全开发流程的最佳实践经验。虚拟团队的成员来自各个不同的产品组,能花在安全方面的时间都是“工作之余”,要带领这个团队凝聚力量朝一个目标努力是并不容易的事情。最初组建团队的时候,她会用自己对安全方面的热情感染其他有兴趣的人,接着用事例让大家认识到安全对于微软产品真的很重要,而且安全方面的知识对于长期的职业发展也很有帮助,就这样“招募”到了团队的最初几个核心成员。接下来就是确定这个组的远景、使命和活动计划,她先提出了一个草案然后组织大家一起讨论,经过一番“激烈”辩论、修正大家达成了共识。其实,最大的困难还是来自于按照计划一步一步地开展活动,在团队成员兴趣减退的时候,需要振作士气让大家重新记起“最初的梦想”;在一些成员特别忙的时候,需要灵活修改计划,让他们能两头兼顾;另外还要考虑怎样能够更好地把安全意识和最佳实践经验传递给所有员工,比如会选择技术讲座、安全知识简报和展示等多种宣传方式。在这个过程中,李敏学到了很多东西,尤其是“influence without authority”的领导方式,通过影响来带动别人,而不是通过上下级的权威去要求别人。

    此时,她对微软的职业发展也有了更加深刻的认识:

职业发展体验二、微软的职业发展道路为不断挑战自己的人而设计

    关于员工的职业发展,年中的时候会专门有一个关于职业发展的讨论(Mid-Year Career Discussion,在公司内部内部简称MYCD)。经理会和员工一对一坐在一起,评估员工现在所处的发展阶段、能力水平等,讨论员工的未来三到五年的职业发展规划,然后进一步制定实施计划。微软给员工的职业发展道路也比较灵活,总体上有个人贡献者(Individual Contributor,简称IC)和管理(Management)两条职业发展轨迹。

    软件测试开发工程师属于IC,也是李敏最初选择的轨迹。在微软,资深工程师很受尊敬也很有影响力。公司为工程师设计了具有挑战性的职业发展道路,所以,在这儿碰到一个为微软服务了十几年的工程师是稀松平常的事情。对于软件测试开发工程师来说,可以一路从Test(初级)做到Test II(中级),Senior Test(高级),甚至Principal Test(首席),随之而来的挑战是测试工作的范围、影响力不断扩大。比如一位Senior Test的挑战可能是对整个产品的测试工作做出很大的贡献,而一位Principal Test面临的挑战则是在整个Microsoft倡导新的测试技术,这都需要多年的积累,也很有挑战性。还有一个职位叫做Test Architect,这个职位负责测试Architect设计出来的architecture,光听听就知道很酷了。

    员工会选择一条职业发展轨迹前进,但也可以根据兴趣和能力进行调整。从2007年开始,李敏的小组需要将部分测试工作外包出去,李敏在经理的指导下开始参与组建和发展外包软件测试组的工作,这让她发掘了自己在管理方面的兴趣和潜力。组建外包测试组的第一步是招人,先确定职位所需要的能力,然后筛选简历,开始面试,多方面考察候选人,最终做出决定。然后是培训工作所需要的知识,老组员带新组员,要求新组员在一周之内学会并可以上手工作。接着是制订一些规范流程,让组员知道怎样去高效地独立工作,也让整个过程更便于管理。比如,为了保证自动化的代码质量,李敏搭建了一个回归测试平台和一个网站,所有的自动化必须在这个平台上通过3次,才能去网站上把它们标记为“自动化完成”。此时这个组能够较好地运作起来了,李敏会和组员定期会进行一对一的谈话,了解他们的状态和遇到的问题等,综合分析之后会想一些办法去优化流程和提高团队的效率。经过观察,她还确定了一些技术能力和综合能力不错的组员,适当授权给他们去担当更多的责任,发挥他们的聪明才智,也减少自己的管理成本。整个过程下来,她发现管理很有意思也很挑战,自己有兴趣也有潜力去做,于是她在一个MYCD里调整了职业发展轨迹。经理了解之后也给与了相应的支持和辅导,比如会建议如何去“打磨”管理方面的技巧,也会抛出问题让她自己去思考该怎么解决、怎样做得更好。

    选择不同的职业发展轨迹是一种挑战,而换个产品甚至迈进一个完全陌生的领域是另一种挑战。她身边就有一些同事选择加入其他的产品组。在这一点上,微软多元化的产品结构给员工提供了特别好的机会,从Windows到SQL Server、Visual Studio,从Office到XBox、MSN等,跨度很大,就像是一个“IT业界”。员工总能找到挑战自己的机会,做熟了这个产品还可以做另外一个产品。在微软,经常可以看到工作了多年依旧保持着高度激情的员工,这恐怕是和公司提供的多元化的职业发展道路是分不开的。

    时间如白驹过隙,2009年已经到来,她所在的组正在做下一个版本的Configuration Manager,她也在带领一个小组负责产品的UI测试工作。

    回顾这三年半的历程,激动人心的挑战、解决问题的成就感以及团队合作的乐趣始终伴随左右。而抬头向前看时,还有太多未知的探索之旅等待着。

    希望大家能喜欢这些心得与经验的分享。

 

 

李敏

    上个月, 近100位大学生软件开发爱好者访问了我们事业部在上海的办公室,我和实习生石超向大家介绍了Azure Services Platform和我们中国团队在其中负责的.NET访问控制服务,并做了一个最新的机器人演示。在此,我们将这个十分钟的小讲座整理成文,希望能让您从一个侧面初步了解这个新的微软云计算平台和其中一个有趣的应用。

    大家也许都听说过火星上面的两个机器人: Spirit和Opportunity。在地球上, 我们自己用Lego Mindstorms也做了一个,我们叫它"the Earth Rover"。这是世界上第一,也是目前唯一利用微软崭新的云计算平台来控制的机器人。更确切来说,我们用Azure Services Platform中的.NET访问控制服务来决定谁能够控制它, 以及使用者有哪些控制权限。在向大家演示这个机器人前, 让我们一起先来了解一下相关的技术背景。

The Earth Rover

    21世纪是个互联网时代,大家都用过很多大型的互联网应用,比如说Facebook、淘宝。 这些应用都有至少两个共同的需求:

1. 计算能力: 公司需要技术部门去购买和维护硬件以及支持这些应用的操作系统;

2. 一系列能提供常用功能的模块。

    大多数的公司内部一般都不具备这些资源或条件,因为这不是他们的主要业务,同时他们也没有这方面的经验和技术。

微软利用在维护许多大型网站和在线应用过程中(例如Hotmail和一系列Windows Live的服务)所累积的经验与技术,创建了一个崭新的云计算平台,希望以此与大家分享这些经验、技术,让各类企业和组织能将更多的精力投入到自己的核心业务上,而这个崭新的平台叫做Azure Services Platform。

    这个平台共有两层(layer),下面的一层叫作"Windows Azure",这是在云端的Windows操作系统。用户能够在上面部署自己的.NET应用,并运行在微软的服务器上面。未来,它也能支持包括用C++等语言在内编写的本机/原属应用程序(native applications)。这就好比一家发电厂提供电能,大家不会购买自己的发电机;Windows Azure提供了计算能力,大家就没有必要为拥有计算能力而购买和维护自己的服务器了。

    在Windows Azure之上是一些积木式服务,包括云端的数据库(SQL Services),以用户为中心的Live Services和通用服务(.NET Services)。我们的机器人是用.NET Services实现的。.NET Services本身分三个子模块: 访问控制服务(Access Control), 服务总线(Service Bus) 和工作流服务 (Workflow)。

azure services platform 2 .net services 2

    在我们的技术演示中,机器人被视作为一个很宝贵的资源,它的主人要防止别人的恶意使用。为了做到这一点, 主人在访问控制服务的网站上设置了一些规则来管理控制人的权限,任何人都需要通过访问控制服务的验证才能使用这个机器人。

Controlling The Robot Five Rules for the Earth Robot

    现在,主人设置了五条规则,每条都对应了机器人的一个功能: 前进,后退,向左转,向右转和停止。如果用户同时拥有这五条规则,他/她就可以让机器人实现全部功能。在这个图里,一位被称作"TesterF"的用户有权使用全部功能。机器人的主人通过.NET访问控制服务也能很灵活的指定其他用户来操作机器人,比如说一个Windows Live ID用户,或者一个Active Directory用户。

    当然, .NET访问控制服务和Azure Services Platform还有很多其他功能,您如果感兴趣访问以下两个网站:
    Azure Services Platform:
http://www.microsoft.com/azure/

    .NET Services: http://www.microsoft.com/azure/netservices.mspx

    如果大家对机器人的实现感兴趣, 我们也画了一张结构图:

earth robot demo diagram 

    这个演示只是一个有趣的使用案例,如果您在家里实现了一个软件+硬件的应用,比如说,某位朋友家里有一套能从互联网控制的圣诞灯, 那么可以考虑使用.NET访问控制服务来允许自己的朋友从互联网开和关灯。您还能想到哪些有趣的使用案例?在这里留言告诉大家吧。

项目经理 辛晓闻

注:在本周末的.NET技术大会上,晓闻和另十位微软中国研发集团服务器与开发部的同事将在Common Language Runtime,.NET Framework,Web Development和Methodology & Process等方面与大家交流。

星期五:

- CLR/.NET Framework 4.0功能增强 [张羿]

- 使用Silverlight构建企业级RIA应用-现在与未来 [郭晓颖]

- 使用Azure Services Platform的.NET Services 搭建您的下一个云-端应用 [辛晓闻, 熊炜]

- Windows Forms Progress and Future [许文斌]

星期六

- Building Web Applications with .NET Now and Future [Matt Gibbs]

- Silverlight Control and Data Binding [范翔]

- Silverlight Networking [尧敏]

- 深入浅出 WF 4.0 [郜建,李丛昱]

- 微软软件研发方法与过程 [徐鹏阳]

大会具体详情请查阅网站:http://conference.softcompass.com/net2009/

 

Out of Band Management简介 —— SCCM 2007 Out of Band Management专题系列之一

Out of Band Management正在逐步成为IT管理的主流技术,本专题系列计划就System Center Configuration Manager 2007中Out of Band Management feature做一些介绍和探讨,来帮助读者了解并使用SCCM 2007中的Out of Band Management技术,系列将包括简介,使用,调错等专题文章。 Out of Band Management是指带外管理技术,是一种不依赖于操作系统就可对目标机器进行管理的技术,目前Intel的AMT(Active Management Technology)和DASH标准(Desktop and mobile Architecture for System Hardware)都提供了Out of Band Management的支持。 在SCCM 2007 SP1,我们将AMT技术整合到SCCM产品之中,此模块被称为Out of Band Management feature。上海研发团队主导了这部分功能的所有设计,开发工作。 点击这里阅读全文。

System Center Configuration Manager Team Blog 正式上线

上周,System Center Configuration Manager 研发团队的博客 ( http://blogs.technet.com/configmgrteam/default.aspx ) 正式上线,这个博客由Configuration Manager 美国研发团队维护,将会集中讨论Configuration Manager相关的话题,与我们中国研发团队的博客互为补充。点击这里阅读全文。

MDAC Component Checker 2.0发布了

2008年12月,在圣诞前夕SQL中国研发中心Data Programmability团队发布了MDAC Component Checker 2.0版本。

Component Checker的产生源于MDAC版本不兼容给应用软件带来的困扰。在MDAC的发展历程中,存在2.1、2.5、2.6、2.7和2.8多个版本。它曾绑定在不同的Microsoft产品中(Microsoft SQL Server、Microsoft Visual Studio、Microsoft Office、Microsoft Back Office以及一些其他的微软产品),也曾作为独立发布软件(madc_typ.exe)在MSDN上发布。现在,MDAC作为系统组件捆绑在Windows XP SP2以及以后的Windows系统中。点击这里阅读全文。

Component Checker 2.0使用简介

通过上一篇博客,我们已经知道Component Checker是一个用来检查MDAC安装版本的软件。简单地说,MDAC(Microsoft Data Access Components 的简称)是微软数据库访问组件,它是Windows平台上应用程序连接和访问数据库的接口。MDAC的应用十分广泛,但是由于历史原因偶尔会遇到兼容性问题,所以使用前通常要先检查MDAC的安装版本。点击这里阅读全文。

使用Trace Management Object监测和诊断SQL Server(一)

大家一定用过Profiler工具,我们可以用它来对SQL Server建立trace来监测某些感兴趣的事件,也可以replay抓到的trace来诊断是哪些SQL语句的执行造成你的SQL Server耗费了大量的CPU资源。但Profiler是个GUI程序,有没有办法通过程序来抓trace和重放trace呢?点击这里阅读全文。

使用Trace Management Object监测和诊断SQL Server(二)

在这篇文章中我们将介绍一个replay trace的示例,通过重放抓到的trace文件来诊断应用程序在SQL Server上运行是否有问题。Replay trace示例: 这个例子模仿你使用Profiler工具对抓到的trace文件进行重放,从而对SQL Server及你的应用程序进行诊断的过程。下面是详细的步骤和描述。点击这里阅读全文。

让Silverlight开发更便捷——Silverlight工具集

CodePlex.com作为微软的开源社区,已经有越来越多的开发人员从中找到自己想要的东西(亦或代码示例,亦或实用工具)来帮助开发。同时,在微软内部,也有越来越多的开发团队选择了这种更轻量便捷的方式来发布一些有趣、实用却暂时无法放入品中的代码和工具。在前几篇博文中,我也介绍了上海开发团队负责维护的codeplex主页(http://www.codeplex.com/clrinterop),以及已经发布的一些有关interop的小工具。今天来介绍一个辅助Silverlight程序开发的codeplex主页——Silverlight工具集(Silverlight Toolkit)。点击这里阅读全文。

CLR Team blog (英文)正式启动

CLR team在微软算得上一个历史悠久的团队了。作为.NET框架的核心引擎,CLR伴随.NET Framework 1.0于2002年正式发布到现在刚发布的CTP版本,经过了几次重大的改进;而CLR开发团队从成立到现在也已有十载春秋。点击这里阅读全文。

CLR 深入浅出:托管/非托管代码互通性最佳实践

不知道各位是否知道在每月发布的MSDN杂志上有一个CLR team负责的专栏,叫做CLR Inside Out。中文或许可以译作《CLR深入浅出》。在该专栏中,CLR team的各个研发人员深入探讨了CLR的各个方面,比如安全性、线程管理、性能管理等等。点击这里阅读全文。

    我们知道所有程序都会和各种资源打交道,硬件资源类型如硬盘,系统资源如句柄,因此如何做好资源相关的测试很重要。大家熟知的是测试资源的泄漏,但这里我想更多的从资源分配失败及恢复角度去谈资源分配测试。

    对于资源通常有如下操作:

1.分配资源

   我们熟知的一个典型例子就是 C语言中'malloc()' 系列函数。

2.释放资源

   同样的一个例子就是C语言中'free()'系列函数。

3.资源计数

   比较常见的例子就是性能计数器,比如文件句柄计数器,它能够提供“有多少文件句柄被打开”的信息

    我们编写软件的时候,我们一般都会经常使用这些资源管理类函数来帮助我们,从而得以申请和释放多种类型的资源。当然我们也会编写一些自己的代码来申请和释放资源。一般情况下,这些代码会处于我们的软件架构的相对底层上。我们可能有一个系统,在这个系统里,我们分配资源,使用资源,还可能管理并监控资源,最后当处理完后释放掉这些资源。同时还存在着当代码运行时替我们分配资源的情况。

    由于各种原因,资源的申请和分配并不总是能够成功的。其中一个原因可能是某种特殊的资源被消耗殆尽了。比如在磁盘空间不够时,我们申请使用更多磁盘资源的话就会失败;还比如内存总是是有限的;句柄空间总是那么多。总之软件有可能因为各种原因而出错,但一个主要的原因就是资源的消耗。

    对于服务型软件而言,提供长期稳定的服务是重要的设计目标之一。从而,相对于客户端程序,它需要运行得更加可靠、健壮。为了确保软件的可靠性和健壮性,我们必须确保它在资源可用率发生异常变动的情况下,它还是可以正常运行。如果某一个程序消耗了所有的内存,那么我们可以假定它肯定会出错了;但如果由于系统内存的不足导致内存分配的偶尔失败,那么我们的软件应不应该完全崩溃?还是应该仅仅让当前操作出错并让软件其他部分能够继续正常运行?同样的问题也适用于其他类型的动态分配并被共享的资源,比如磁盘空间,内存,文件,网络连接等。

    致错测试是一个重要的测试场景,可以帮助我们了解当资源使用达到极限的时候会发生什么。简单地说, 这种测试可以用以下伪代码描述:

Pallocatedthing[<use more than enough space here>]

counter n

While(Pallocatedthing[n++]=allocate(<whatever size you like>))

While(n)

free(Pallocatedthing[n--])

    这种测试很简单,就是申请分配资源直到失败,然后释放掉所有分配的资源。这只是一种最简单的测试,如果你确保它可以工作了,那么还有几件事情等着你去做。

    首先,将它放到一个循环里面,然后执行很多次。它是否依然可以正常工作?

    其次,在它运行的时候观察整个系统,看被测试进程是否有内存,句柄或者其他资源的泄漏。这种场景下的一个典型的BUG就是资源分配函数发生错误时没有被正确处理。即使它不会立即导致崩溃,但仍可能会导致内存泄漏或者错误。这种事情我以前也遇到过。

    如果要更深入此类测试场景,则需要理解资源的依赖关系,以及在软件依次消耗掉所有的这些资源情况下其是否正确处理了所有的资源错误。这方面的一个例子就是处理消息的软件。它将在等待处理的消息在磁盘上保存为一个队列。那么磁盘如果满了的话会发生什么?这种场景可能会比较难设置,它看起来类似于:

1. 限制硬盘空间

2. 将消息注入到队列中

3. 停止从队列中取消息

4. 磁盘满了,会发生什么?相应的工作行为是正确的吗?

5. 重新开始从队列中取消息。是否一切工作正常?

   

    接下来的几个步骤类似于我们上面已经做的,那就是在更多的情况下去重复测试它,并观察结果:

    尝试取出所有的消息,直到队列为空。

    建立一个稳定的消息输入流,但时而暂停并再恢复取出消息,反复执行磁盘空间测试用例,看是否在这样的情况下仍然工作正常? 如果出错的话,是否该出错被正确处理?是否有副作用,比如内存泄漏,句柄泄漏或者数据出错?是否队列的生产者和消费者都正确处理了错误用例?

    在你的软件中还会有很多关于这个主题的情况等待你去挖掘,我不准备将所有可能的情况都列在这里。我想你能够自己考虑这些事情。

 

John Daly

高性能计算美国团队测试经理

翻译:周毅, 高性能计算(HPC)中国团队测试开发工程师

     在最近几次与客户面对面的交流中,我有幸分享了我们团队如何在日常工作中进行敏捷软件开发。毫无疑问,这在中国开发人员中是个热门话题,我也想利用博客这个平台与更多的读者进行书面的交流。当然关于敏捷开发利弊得失的争论有不少,而相关的开发模式也分成了TDD (Test Driven Development), Scrum, XP(eXtreme Programming)等流派。就我个人而言,一个团队是否严格遵循某种既定的敏捷方法并不重要,但一定得选择并采用一种(或几种)最适合自己开发团队和开发项目的。我认为重要的是团队能否遵循《敏捷软件开发宣言》所涉及的12条原则。

    在我深入这一议题前,请允许我介绍一下团队:我们属于微软开发工具部(Developer Division,以下简称DevDiv),这个部门拥有几千名软件工程师,核心产品Visual Studio系列的用户从软件开发爱好者一直到大型企业里的专业开发人员及架构师。

    大量而且复杂的依赖关系、代码改动、紧迫的开发周期等因素使管理软件开发生命周期并按时发布高质量的Visual Studio产品极具挑战性。为了降低风险和复杂度,DevDiv在开发Visual Studio 2008过程中采用了功能分支架构(Feature Branch Structure)和功能小组模型(Feature Crew Model)。其实这一方式之前已在Office开发团队的实践中取得不错的效果。它的最大好处之一就是使负责某个功能的团队在独立开发过程中有更大自由。由于篇幅所限,在这篇博文中我将侧重介绍我们团队是如何进行敏捷软件开发的。

    我们团队负责Visual Studio系列中的Visual Studio Team System Architecture Edition,帮助架构师、运营经理及开发人员以可视化方式构造面向服务的解决方案、降低(软件产品开发的)复杂度。目前我们已开发了基于UML和DSL几个建模工具。这基本上是一个全新项目。

    从产品开发来看,我们属于全球分布式开发,团队分布在三大洲的四个城市,包括亚洲的上海,北美洲的雷德蒙和夏威夷,以及欧洲的剑桥。为了尽可能减少分布式研发对团队间交流所造成的障碍,我们尽量使功能小组的成员集中于一地。基本上,每个功能小组的核心部分都在某一个城市完成,在其他城市可能会有个别工程师参与相关开发。例如,我们在上海就有一个功能小组,其他一些工程师在雷德蒙的公司总部工作。但有时,基于客户场景的特殊要求,我们也会将一个功能小组拆分成若干个,由多个城市的团队同时开发。

    在本文后半部分和之后的系列文章中,我所谈及得敏捷软件开发流程都是同一个功能小组所遵循的,即是我们中国团队所遵循的。

    我们中国团队主要负责开发基于UML的核心图形设计工具,包括即将发布的Logical Class Designer, Use Case Designer。此外,我们还负责在项目中提供建模元素视图功能的Model Explorer。我们所采用的敏捷开发方法是Scrum的修改版。就如我之前提到的,我们认为敏捷开发方法和技术没有哪一种是万灵丹,适合自己才是最好的。我们的团队中已有两位工程师参与过Scrum实践,也因此促成我们最终选择了它。

    下面是一个我们敏捷软件开发流程的概要视图:

 SprintLifeCycle

    产品待开发事项(Product Backlog,视图的左上角)可以被视作一份这个团队以优先级排列的、需要完成的功能需求单:来自相关产品利益相关者(Stakeholders)对产品提出一系列高端要求。例如,我们最初的要求是为客户增加逻辑级(更抽象的)和物理级(更靠近代码)建模提供支持,由此衍生出了高端功能需求,诸如开发在逻辑级方便客户生成逻辑模型、兼容UML的关系图和开发帮助创建无力模型的DSL关系等。然后我们会对将要支持的UML关系图种类按优先级进一步分解(UML共有13种不同的关系图)。产品利益相关者的意见会驱动整个优先级选择过程,最终我们得出五个最重要的关系图:Logical Class Diagrams, Use Case Diagrams, Sequence Diagrams, Activity Diagrams 和Component Diagrams。于是,团队依据当时对产品和市场的了解,以故事标题的形式完成一份产品待开发事项。无疑,整个开发工程中一旦要求发生变化,也会导致需求排列优先级的变更。

    在与客户的交流中,我被问得最多的问题之一是是否需要在敏捷开发过程中创建架构模型设计。和咨询公司一样,我的答复也是:视情况而定:)。围绕Big Design Upfront (BDUF), You Are Not Going to Need It (YAGNI)以及让团队在开始实施新功能时“重构”现有的代码/设计等所存在陷阱的争论也不少,其中有不少值得借鉴。尽管如此,我坚信设计初期存在这么一个阶段可以尽责地做架构设计以生成高端架构。例如,你打算建一个网上贷款流程的应用程序,你可能需要决定在这个架构里有几层。当然,能有这样一个基于最初要求的,并可能随着项目进展有所变更的架构是很重要的。在我看来,重构在敏捷开发中有其重要地位,但是如果是变更基础架构的“大重构”代价就太大了。如果大家感兴趣,我将在之后的文章中与大家探讨架构在敏捷软件开发过程中所扮演的角色。

    在我们团队所遵循的敏捷软件开发实践过程中,我们的项目被分解成类似Scrum的若干个四周sprints或迭代开发周期。尽管没有测试驱动开发(Test Driven Development)或结对编程(Pair Programming),但我们的开发人员会编写单元或签入测试(Unit/Check-in Test)来检查功能,开发和测试工程师也会在一起调试、调查或评审某个特定问题和变更等。我们还会使用极限编程(eXtreme Programming)中的使用者故事(User Story)模式。事实上,我们的产品待开发事项和每个迭代周期中的待开发事项(Sprint Backlog)都会以故事的形式被追溯。这些使用者故事就是描述一个系统的最终用户会如何使用某个特定功能。

    通常,我们都会在一个Sprint阶段的最后一周计划下一个Sprint阶段:通常负责某个功能的团队(主要是主管们)会依据团队需要侧重的故事来进行由下至上的计划;然后再与产品利益相关者对项目中故事优先级的规划相协调;协调后的需求优先级清单一般会在Sprint的第一天完成。团队于是评估这些使用者故事,并完成设计初稿、实施成本,确认故事完成的标志。依据这个设计和成本,团队将承诺这个Sprint将完成的内容。

    今天先谈到这里,下一篇博客我将谈谈我们团队在Sprint阶段的运作。

    祝各位读者新年平安、喜乐!

 

Ramesh Rajagopal

Visual Studio Team Architect 中国团队经理

翻译:郑洁

校译:钱量

More Posts Next page »
 
Page view tracker