Sun 13 July, 2008

add to del.icio.us. look up in del.icio.us.
add to furlSat 12 July, 2008

所以,我讲一些自身的经历。
说到QA,首先想起的便是测试。从我刚开始接触编程的时候,我就知道测试是必需的,否则,怎么能够知道自己写的程序是对的,就像考完试需要检查一下卷子一样。那个时候,除了了一些最基本的程序之外,我还写过一些有界面的Windows程序,于是,关于测试,留给我的第一印象就是点这点那,到处乱点。
工作之后,虽然知道了QA这个角色的存在,但很长一段时间都没有和QA在一起工作过,所以,客观的说,那段时间一直觉得QA是一种没有技术含量的工作。直到有一天,一个长时间没有QA的项目,能够卖钱了,领导觉得有必要提高产品质量了,于是派了个QA进到项目组。他是我后来的一个非常好的朋友,当时是部门QA方面的负责人。
我们的项目是一个服务器的应用,所以,从外部的角度来看,主要就是一个发起一个符合我们用到协议的消息包,然后看看得到的应答。其实,我一直对这个项目很有信心,因为它已经在一些地方上线运行了,而且从当时的情况来看,我们还算舒服,没有经常性的被客户从睡梦中叫醒。
QA进行的第一个测试就是发了空消息包,结果系统报错了。我第一反应是“你怎么能这么用”,是的,感情上有些接受不了,甚至有些气愤,我一向很有信心的代码,就这么非常轻松让人给弄崩溃了。稍微平静了一下,我觉得其实也没有什么大不了的,毕竟是自己的代码中真的有问题,所以才让人抓住。
经过一段时间,我越发深刻的认识到QA在项目中的作用,虽然我们在写代码的时候,已经考虑了很多的异常情况,但总还是有很多我们意料之外的情况被QA发现,随着项目的进行,发现和修改的bug越来越多,我们对自己的项目也越发有信心了,不过,回想起之前的代码,那样的产品质量也在线上运行了好长时间,多少有些后怕。
这时QA在我心目中,已经不再是那个没有技术含量的工种,我对QA开始充满了敬畏。真的是敬畏,尊敬和畏惧并存,敬的是他们总能给产品质量带来提升,畏的是他们总能不断在自己感到骄傲的代码中发现问题。和我们的QA聊过几次才知道,原来QA的工作也分验证性和破坏性的,原来他们的工作也是需要缜密思考的,原来他们的工作也是需要很详细的计划。突然发现自己曾经对QA的理解,基本上完全是门外汉的水平,误解是很让人郁闷的,就如同每每我说自己是做软件开发的,家里的邻居通常会说,什么时候有空帮我们家装台机器吧!
后来,我和这个QA兄弟一起跳槽到了另外一个部门。他的工作范围本质上说还是在QA的范畴。由于这个部门做的是偏研究性质的,所以,他的工作名义上称为验证,主要是看部门研发的算法有多大的进步。最开始的时候,一般是一周做一次验证,主要的原因就是因为运行加上总结需要很长的时间,于是,这位兄弟想办法开始把一些工作自动化,随着自动化程度的提高,验证周期也逐渐缩短,后来,我离开了这里,据说,现在这个自动化验证系统已经达到了很方便的程度,只要敲一下命令,它会自动部署到几台机器上运行,然后,搜集结果产生报表。就这样,原本一周一次的过程,简化到几乎随时可以做。如果让我选择这个部门产生出最有价值的东西,我会把票投给这个自动验证系统,甚至超过了部门研发的算法,只可惜养在深闺无人识。
为了讨论这个关于QA的话题,我问了自己一个问题,为什么QA能够想到我们开发人员想不到的地方。我自己给出的答案是,二者站的角度不一样。开发人员通常是站在实现的角度,所以,通常我们会更多的关注如何把这个功能做出来,也就是规定动作,而QA是站在用户的角度,如同我们自己使用软件通常是不会看软件使用手册一样,QA总会用到一些规定动作之外的用法,也就是自选动作,所以,二者之间必然存在一些差别。既然存在差异,QA发现一些自己无法发现的东西。
如同我之前对QA有一些误解,想必也有很多开发人员对QA也存在一些误解。所以,对于QA而言,增加与项目成员之间的沟通应该是一个很好澄清误解的方式。沟通,对于任何项目都很重要,不仅仅局限于开发人员和业务分析人员之间,QA也应该是这个沟通环节中重要的一部分。只要有可能,QA都应该是从项目最初介入,这样一方面保证了QA与项目成员之间在一开始就建立起良好的沟通环境,另一方面,他们的经验和技能可以保证大家在最初的阶段就注意到一些问题,正如我们QA Lead在Agile China所讲的一样,Build Quality In。
这个关于QA的话题的最后,再聊聊ThoughtWorks QA。作为一个ThoughtWorker,除了做好自己本职工作之外,我们也要把自己工作中总结出的好的方面告诉别人,无论是以文章、blog或是讲演的方式,所以,QA也不应该例外。
add to del.icio.us. look up in del.icio.us.
add to furl
Zwei kurze Szenen vom Berg:
Ein kleines, dickes Mädchen kommt zur Frittenbude mit einer leeren
Pappschale in der Hand und fragt: Kann ich Mayo haben?
—
Nimm dir, so viel du willst.
Ein Mädchen, vielleicht 16 oder 17, nimmt ihrem Freund (wohl etwas
älter) die Martini-Flasche weg, leert sie aus und brüllt: Jetzt
gibts nix mehr! Du blamierst mich nicht mehr in der
Öffentlichkeit!
(Tipp: nicht heiraten, wer weiss wie die in 30
Jahren drauf ist.)
Desweiteren fordere ich die Schützendirektion auf, Schützen auf den alten Termin mit gutem Wetter zurück zu verlegen.
Und noch ein Nachtrag zu gestern: Schützen 2022.
Mag es soweit nicht kommen,
Scheene Schütza!
NP: London After Midnight—Kiss
add to del.icio.us. look up in del.icio.us.
add to furl
Welcome to the third edition of This Week in Rails, a weekly report with highlights from the Rails community. My apologies for the delay of this post, the past two weeks have been pretty crazy, so this edition covers the most interesting articles and news from the past two weeks.
Let’s kick off this report with a couple of maintenance releases by Jamis Buck. Both Capistrano 2.4.3 and Net::SSH 2.0.3 were published two weeks ago. If you use them, consider upgrading.
Rails 2.1 has been out for a while now, but in case you didn’t have a chance to catch up yet, this post collects several links to useful resources which will help bring you up-to-date.
The Pathfinder Development’s blog put out three highly interesting posts. The first is More Named Scope Awesomeness by Noel Rappin, while the second and third ones are Pretty blocks in Rails views and DRYing up Rails Controllers: Polymorphic and Super Controllers, both by Josh Symonds. Another good (and quick) recent read about controllers, was MVC: How to write controllers.
The same Noel also published the second part of “Developing iPhone applications using Ruby on Rails and Eclipse” for DeveloperWorks (part 1 and 2).
FiveRuns released a valuable gem called data_fabric which adds support for sharding and replication to Active Record. The same company also has a contest up and they’re offering two free tickets to RailsConf Europe in Berlin. Speaking of conferences, Fabio Akita announced that there will be a Rails Summit Brazil 2008 this coming October in São Paulo. This will be the first event of its kind for the Rails community in South America.
An improved version (i.e. 1.1.1) of the Oracle enhanced adapter was released, as well as version 0.9.5 of the IBM_DB adapter for DB2 and Informix, which adds support for Rails 2.1.
In purely chronological order, I found the following articles to be worth pointing out: Speed up slow Rails development in vista – a handy tip for developers using Vista, Adding Google Maps To Your Rails Applications, Live fulltext search in Ruby on Rails and Useful Flash Messages in Rails.
The Railscasts website published two new episodes, one on testing through Selenium, and another on semi-static pages.
Finally, let’s close this edition on a lighter note. The next time you are about to create an acts_as_an_evil_genius plugin or other imaginatively named one, think about this post. ;-)
If you’d like to read more updates from the Ruby side of things, please head over to This Week in Ruby.
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furlFri 11 July, 2008

add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
“ The only true currency in this bankrupt world is what we share with someone else when we’re uncool. ”
Lester Bangs in Almost Famous
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
Wer das Schützenfest kennt, weiss: Ganz Biberach steht jetzt jedenfalls kurz vor der absoluten Extase und einer Woche ungehemmten Alkoholgenusses—ganz Biberach? Nein, der Autor dieser Worte musste natürlich letzten Monat von einer Zecke gestochen werden, ist seitdem auf Doxy und darf daher nix trinken. Fertig ist das ganze hoffentlich am “Bauernschützendienstag”. Super.
Das soll jedoch der Berichterstattung hier nicht schaden, ganz im Gegenteil: Frei nach dem Motto der Journaille—Eure Gunst, unser Sterben—gibts hier täglich knallharte Information vom Berg. Und diesmal werd ich mich auch noch an alles erinnern können.
In letzter Minute müssen die Kameras halt doch weg, wer hätte das gedacht? Hatten wir das nicht schon mal? Nix gelernt. Der beste Teil: Bott “vermutet, dass “hier absichtlich mit der Zeitschiene gefahren wird. Man versucht, die Dinge aufzuschieben.”” Also wenn hier jemand auf Zeit spielt, dann war das ja wohl die Stadt. Die Methode war ja schon fraglich und wurde zu Recht kritisiert.
Ich freue mich jedenfalls schon auf eine
Scheene Schütza!
NP: A Place To Bury Strangers—Missing You
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furlThu 10 July, 2008

add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
“ Always do sober what you said you’d do drunk. That will teach you to keep your mouth shut. ”
Ernest Hemingway
add to del.icio.us. look up in del.icio.us.
add to furl
IM
add to del.icio.us. look up in del.icio.us.
add to furlTue 08 July, 2008

“ There are several good protections against temptation, but the surest is cowardice. ”
Mark Twain
add to del.icio.us. look up in del.icio.us.
add to furlMon 07 July, 2008

周末没有休息,和几个同事参与了一个类似于CodeJam的活动,两天做一个小系统,开发工具还是ROR。不同的是,这次是和客户的开发人员一起工作。
客户的开发人员之前没有接触过ROR开发,所以,这次活动开发的需求,可以说是小得不能再小了。与其说这个活动是为了开发这个系统,倒不如说是给他们进行一个展示,一方面,展示我们的工作方式,另一方面,展示ROR开发的威力。
最初,我并不了解和我们一起工作的这些开发人员的水平,所以,我以为主要的精力要放在开发上。等我真正开始工作,写上几行代码的时候,我才发现,对于这些从来没有了解过Ruby和Rails的人来说,就是简简单单的几行代码,也需要我用大量的口舌去解释。这时,我突然意识到,对这个项目而言,写多少代码其实已经变得不那么重要了,同他们的沟通,远要比写几行代码重要得多。
虽然和我们一起开发的这些人都有一些开发经验,但他们之前的工作经验并没有给他们提供像我们这样开发的机会,所以,需要解释的,不只是ROR的技术,更多的是一种工作方式。比如,第一天下午的时候,我几乎大多数时间是在和人解释测试,不是如何TDD,而是讨论为什么要做测试,以及测试和业务代码的关系。他们会问,我写完一个功能,刷一下页面,看看结果不就可以了,为什么要写测试,他们会问,测试代码在运行时起到怎样的作用,他们会问,如果测试不影响业务代码,我为什么要写它,等等。这个时候,我不得不把思路拉回到我刚刚接触这些概念的时候,给他们提供一个合理的解释。
总结的时候,这些开发人员普遍的感觉是大开眼界,这时,有一种自豪感在心底升起,正如gigix所说,这种一出手就能给人带来震动的感觉,很好。
这是一个非常好学的团队,在开发过程中,他们会不断提出各种各样的问题,因为我们所做的几乎一切都与他们原有的工作方式有着巨大的差异。两天时间,不仅仅是我,所有参与这次活动的ThoughtWorker都解释了大量的东西,以致于每天结束时,都会有一种口干舌燥的感觉。
不过,他们也有一些担心,如果我们离开,失去了我们的支持,他们该如何走下去。这是一个非常好,而且也非常现实的话题。这种开发方式在ThoughtWorks是一种理所当然,而在他们的开发团队,因为原有开发习惯在作祟,会让他们遇到很多问题。我们能够给出的,只是一部分建议,可能要他们更多的探索和坚持,以及也许日后与我们的进一步合作。
对于他们而言,这是改变的开始。
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
The $451.24 Denon AKDL1 Dedicated Link Cable
Right up there with the BiC Kugelschreiber Cristal Kugelschreiber Cristal schwarz review
add to del.icio.us. look up in del.icio.us.
add to furlSun 06 July, 2008

add to del.icio.us. look up in del.icio.us.
add to furl