海归网首页   海归宣言   导航   博客   广告位价格  
海归论坛首页 会员列表 
收 藏 夹 
论坛帮助 
登录 | 登录并检查站内短信 | 个人设置 论坛首页 |  排行榜  |  在线私聊 |  专题 | 版规 | 搜索  | RSS  | 注册 | 活动日历
主题: [原创]创业日记-245 (再谈软件质量保障)
回复主题   printer-friendly view    海归论坛首页 -> 海归商务           焦点讨论 | 精华区 | 嘉宾沙龙 | 白领丽人沙龙
  阅读上一个主题 :: 阅读下一个主题
作者 [原创]创业日记-245 (再谈软件质量保障)   
data_scrubber




头衔: 海归准将

头衔: 海归准将
声望: 讲师

加入时间: 2005/01/15
文章: 1237

海归分: 130921





文章标题: [原创]创业日记-245 (再谈软件质量保障) (2242 reads)      时间: 2012-4-23 周一, 10:10   

作者:data_scrubber海归商务 发贴, 来自【海归网】 http://www.haiguinet.com

让一个软件工程师测试自己的程序寻找Bug比杀了他还难受。我亲耳听到过有程序员在抱怨头吩咐的测试任务,尤其是测试自己的程序,“你杀了我吧。”程序员为什么不喜欢测试,对测试工程师为什么总抱有敌意。测试程序Bug不也是为了他们写的程序质量高,最终也是为他们好吗。这其实是一种心理错位。程序员写程序是一种创造行为,建设行为。而测试在程序员看来是一种破坏行为,找茬行为。程序员大多能意识到测试对提高自己程序的质量意义重大,但是这种意识很难低档潜意识里对测试这种“破坏行为”的抵制。于是,要保障软件质量,就需要专业的测试人员,不要指望程序员自己保障软件质量。


在微软,软件测试工程师和软件工程师的比例是1:1,而且,微软的测试工程师不同于很多公司的测试员,他们并不仅仅做手工的功能测试,他们还要负责编写自动测试的案例和脚本,搭建测试环境,除功能测试外,还负责压力测试及性能测试。更好的测试工程师还会进行白盒测试。微软的测试工程师都会写程序,大多也都是计算机软件专业毕业的。他们中很多人将来会转行成为软件工程师,也有一定数量的软件工程师转而去做测试。因为微软有如此专业而优秀的测试工程师,保障了微软产品质量。微软产品一般来说要比苹果公司的产品要复杂的多,因为微软支持的硬件平台比苹果公司要支持的多的多,微软产品的代码量也比苹果公司产品的代码量大得多。这也是为什么Windows及其产品那么“臃肿”的原因。早期的Windows及其产品Bug非常多,“蓝屏”现象层出不穷,甚至在BillG的公开演示中都经常发生,和那时的微软不太重视测试,及硬件平台的标准太过混乱有一定关系。现在的Windows产品质量和苹果的一样好。有些方面甚至胜过苹果公司。这有很多方面的原因,从Vista开始,代码几乎是重写了。软件模块化及面向对象的设计思路的盛行。硬件比以前有了更严格的标准并得到硬件厂商的支持,驱动程序的质量比以前有了很大的提高。还有就是,软件测试的越来越专业化,工具化。


软件中的问题和Bug在越早的阶段发现越容易Fix,越早Fix将来产生问题的机率就越小。所以传统的等到代码完成再测试的行为其实是非常不科学,不经济,不可取的。我经常看到两个程序员这样争执:


“这问题肯定出在你那边,我这边没问题的。”
“不,肯定是你的问题,我不可能出这种问题的。”


到底是谁的问题,鬼才知道。测试人员只能发现问题,但已经无法分辨出是哪一块,哪一段,哪一个的问题了。因为他只能对一整体进行测试。就好像医生看病一样,我能看到你发烧,出汗,但可能引起这种症状的原因太多了。医生不可能把人分开,一块一块地查找问题原因,但软件测试可以。那就是在软件编写的过程中就进行“测试”,植入自测试代码,也就是Unit Test。


Unit Test的精髓就是,“凡是测试不到的代码,就不值得去写”。Unit Test要能测试到这个单位内所有代码。所有代码的执行路径也要能测试到。而谁最适合去做这件事,程序员。程序员不喜欢测试是因为手工测试不好玩,机械,单调,没有难度和挑战。但如果让程序员自己写测试自己程序的程序,他们就不那么抵触了。你说你代码没问题,只有把你所有的Unit Testing都跑通过才算数。Unit Testing帮助程序员找到大多数的“愚蠢”Bug,忘加判断了,随手改动某个值,某个变量,某段代码后引起的连锁反应。更重要的是,通过编写Unit Test,程序员真正做到对自己的代码有了信心。将来出问题时,不会变得一筹莫展,乱猜,乱碰,无从下手。Unit Test是从程序员这方面进行软件质量控制的第一步。


第二步是Code Review。大多数Bug都是由于新手程序员造成的。而且犯的错误都大同小异。那为什么不让有经验的老手帮帮这些菜鸟呢。靠菜鸟自学成材,那公司要交很多学费的。于是帮助菜鸟们尽快成材,同时又能在程序员这个层面就保障代码质量的另一个重要机制 - Code Review出台了。初级程序员写代码会有很多问题,命名不规范(将来读程序,维护程序会很麻烦),编码不严谨(边界判断没有,异常处理没有),方法笨拙(缺乏一些编程技巧)等等。如果能在Check In之前先让老程序员看看,这些小问题很快就能被指出来,这样,菜鸟们才能学到东西,尽快成长起来。而且,这样还有个好处,就是Build能不被破坏。现在的软件工程都是几个人,几十个人甚至几百个人同时协作,每人负责一小块,然后有个工程(Build)负责把每个人的小块连接成一个整体,这个Build一般会每天晚上源码库中拉出最新的代码,编译,连接,部署,最后再执行所有的Unit Test和集成测试代码,把最终测试结果存成Log,并发出Email通知所有程序员。整个Build过程全是自动的。如果Build过程中出现问题,那对不起,第二天所有人就没有一个“干净”的Build,就无法往下进行工作了。这种情况叫Build Break。谁的代码造成Build Break,谁就是全民公敌。在微软,有一次一个程序员Break Build了,第二天早上,另一个程序员拿着充气橡胶棒冲进他的办公室在他头上狠狠地砸了几下,让他长点记性。Build Break是Felony(重罪),在软件工程王国里,够得上判终身监禁的,那就是你可能永远失去Check In代码的权力,你写的任何代码都要让别人Review过,并用别人的名义Check In。任何工程师都不愿意被别人看成是菜鸟,而Break Build往往就是菜鸟经常干的事情。Code Review可以帮助菜鸟在还没有成长起来之前,承担一部分责任,同时传授技巧,培养菜鸟的良好编程习惯,帮助菜鸟们尽快成长的一种手段。虽然它会占用资深工程师的很多宝贵时间,但是它对菜鸟可是非常宝贵的一种学习手段。在微软,资深工程师有义务做Code Review,自己的工作安排中,Code Review是很重要的一块,它算业绩考核一部分的。而且资深工程师之间还经常做Code Review,这也是一种相互学习的手段。


Unit Test加Code Review可以帮助程序员提高自己的代码质量,但这还远远不足以解决软件产品质量的问题。于是就有了专业的软件测试工程师。他们做什么呢?他们是软件质量的最终把关者。


软件测试最早是一件非常枯燥乏味的工作,在硅谷,往往是美国人做产品设计,中国人,印度人做软件编码和开发,俄国人做测试。记得当时我们公司的俄国人测试小组每天重复地翻来覆去地做着同样的测试工作,任劳任怨,但真是枯燥乏味。后来随着自动化测试技术的提高,那些重复劳动很多就被自动化测试脚本代替了。最早的软件测试员也因此有了更大的职业发展,开始向软件测试工程师升级了。有越来越多的测试工具,测试环境也越来越复杂,测试也从原来的经验走向科学,走向工程。专业测试工程师在项目初期就参与进来,程序员在做设计和编码的时候,测试工程师们也没有等待,他们已经开始编写各种自动化测试的用例和脚本了。程序员在搭建开发环境时,测试环境也同步搭建出来了。压力测试,性能测试指标这时也可能都定下了。测试工程师们会参与项目讨论,项目设计方案制定,项目计划协调等各种项目会议。一个核心思想就是越早测试软件,就会越早发现问题和Bug,而越早发现问题和Bug,就越容易解决。当然,最终,产品质量就一定越高。用户就一定越满意。


09年9月,我们3D商城的第一版上线了。问题很多,但是可以用,我最终还是决定放弃第一版,开发第二版,采用新的技术,开发新的平台。这是个艰难的决定,因为这意味着原先半年来的努力都将成为泡影。但因为我们所倚仗的开源技术不成熟,很多问题不是我们自己能解决的了的,所以我还是坚持了重新开发的决心。


10年5月份,我们了解到淘宝也在秘密进行一个3D购物社区项目叫“淘花源”,而且已经进入内测阶段,不久就要面世。我们非常紧张。派出“间谍”进入淘宝,去搜集相关情报。并拿到一个淘宝内测帐号,登录进去,搜集测试反馈和信息。最后我们列了一个表。分析结果显示,淘宝用的技术和我们第一版是非常接近的,也是基于开源的。是同一类,甚至同一个技术,淘宝投入比我们大一个数量级的资金,人员也是我们好几倍,结果内测显示,严重的30多个问题中,有25个是我们第一版都已经解决了的。剩下的几个问题是开源软件本身的问题,在开源的论坛上也没解的问题。也就是说,淘宝的淘花源项目在产品质量,稳定性,功能及性能等各方面都还落后我们半年前的已经下线的产品。我们原先的担忧变成沾沾自喜。果不然,几个月后,淘宝的这个团队解散,项目胎死腹中,淘花源最终没有上线。据说,是马云自己亲手枪毙的这个项目。


我一直以来对公司产品的质量不满意,远远没有达到我理想中的标准。也因为如此,我一直都非常重视产品质量,在设计,开发,测试等各个环节都不遗余力地推行科学的质量管控体系。公司IDC机房的线上服务器仅四台(我们现在的流量非常小,大多只是展示而已),但公司内部测试的服务器就有12台之多。从功能,到压力,性能测试都齐全。我们也引入自动化测试的工具和概念,Daily Build像心跳一样每天掌握着开发的节奏。我们在软件质量方面的努力也终于得到大多数客户,投资人,和顾客的认可。有个投资人就曾经对我说过,你们公司的技术是我考察过的所有3D公司里最好的。我虽然有些得意,但我知道,我其实还可以做得更好。做得更完美,当然,当公司有更多资金和条件的时候。比起很多有钱,有人,有条件的公司来说,他们缺的是不知道如何提高软件质量。这既是一种理念也是一门科学。

作者:data_scrubber海归商务 发贴, 来自【海归网】 http://www.haiguinet.com









相关主题
[原创]创业日记-525 (终将被遗忘的时代) 海归商务 2015-6-08 周一, 11:47
[原创]创业日记-524 (我就爱传播负能量) 海归商务 2015-6-05 周五, 12:19
[原创]创业日记-506 (追求意义才能卓越) 海归商务 2015-3-24 周二, 09:41
[原创]创业日记-498 (历史上的宗教改革)- 向柴静致敬 海归商务 2015-3-02 周一, 13:17
[原创]创业日记-485 (其实我们都不懂爱) 海归商务 2015-1-14 周三, 11:43
[原创]创业日记-476 (做了一个反动的梦) 海归商务 2014-11-12 周三, 11:43
[原创]创业日记-472 (史玉柱与虚拟中国) 海归商务 2014-10-17 周五, 11:31
[原创]创业日记-464 (能源,能源,能源) 海归商务 2014-8-12 周二, 10:15

返回顶端
阅读会员资料 data_scrubber离线  发送站内短信
显示文章:     
回复主题   printer-friendly view    海归论坛首页 -> 海归商务           焦点讨论 | 精华区 | 嘉宾沙龙 | 白领丽人沙龙 所有的时间均为 北京时间


 
论坛转跳:   
不能在本论坛发表新主题, 不能回复主题, 不能编辑自己的文章, 不能删除自己的文章, 不能发表投票, 您 不可以 发表活动帖子在本论坛, 不能添加附件不能下载文件, 
   热门标签 更多...
   论坛精华荟萃 更多...
   博客热门文章 更多...


海归网二次开发,based on phpbb
Copyright © 2005-2024 Haiguinet.com. All rights reserved.