Categories
程式開發

“我代碼寫完了,QA可以測了。”



{“ type”:“ doc”,“ content”:[{“type”:”paragraph”,”attrs”:{“indent”:0,”number”:0,”align”:null,”origin”:null},”content”:[{“type”:”text”,”text”:”我们经常说一些团队很乱,不正规。表面上说的是流程,其实是团队的三观。”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”三观不正的团队很难走远。今天以测试为例,说说我观察的几种三观,自低到高分别是:”},{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“流氓級,碼農級,懵懂級,入門級,工匠級”},{“ type”:“ text”,“ text”:“。”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:“ center”,“ origin”:null},“ content”:[{“type”:”text”,”text”:”01″}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:“ center”,“ origin”:null},“ content”:[{“type”:”text”,”text”:”流氓级”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“典型語錄”}]},{“ type”:“ blockquote”,“ content”:[{“type”:”paragraph”,”attrs”:{“indent”:0,”number”:0,”align”:null,”origin”:null},”content”:[{“type”:”text”,”text”:”我代码写完了,QA可以测了。”}]}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“解讀”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”公司招程序员进来是为了做出可用的软件,不是做出半成品。如果天经地义地让QA测自己的半成品,是不是把你的工资分一半给 QA?”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”现实中流氓的往往不是员工,而是管理者。这种做法或三观都是管理者制定的,程序员也是受害者,一不小心成了流氓。”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“正確的三觀”}}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”开发(任何角色)的职责是把事情做好,如果为此你需要测试,那就去测试吧。”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:“ center”,“ origin”:null},“ content”:[{“type”:”text”,”text”:”02″}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:“ center”,“ origin”:null},“ content”:[{“type”:”text”,”text”:”码农级”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“典型語錄”}]},{“ type”:“ blockquote”,“ content”:[{“type”:”paragraph”,”attrs”:{“indent”:0,”number”:0,”align”:null,”origin”:null},”content”:[{“type”:”text”,”text”:”我做完了,但是还没测。”}]}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“解讀”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”你去买房,交房时开发商说:“房子盖好了,但是能不能住人,我们还没检查。”你窝火吗?”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“正確的三觀”}}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”测试和开发不是两件事,测试活动是开发过程的一部分。没有“开发完了,但是没有测试”这种说法,那就叫“没有开发完”。”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:“ center”,“ origin”:null},“ content”:[{“type”:”text”,”text”:”03″}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:“ center”,“ origin”:null},“ content”:[{“type”:”text”,”text”:”懵懂级”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“典型語錄”}]},{“ type”:“ blockquote”,“ content”:[{“type”:”paragraph”,”attrs”:{“indent”:0,”number”:0,”align”:null,”origin”:null},”content”:[{“type”:”text”,”text”:”我做完了也测了,需要补一些单元测试。”}]}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“解讀”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”这种补单元测试的做法,基本上是因为公司要求写单元测试。想想,筑墙的师傅会先筑好墙,再来用线坠测试它直不直吗?”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”说这种人懵懂是因为他们以为单元测试只是测试,不管代码写的多长,都硬是写个单元测试把生产代码调用一遍,不出错就行了;有Assertion就算厉害了;至于逻辑覆盖率,那是啥?”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph”,“ attrs”:{“ indent”: 0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“正確的三觀”}}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”要写单元测试,首先要让代码要可测。可测很难,所以单元测试不是测试,它首先是设计。”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:“ center”,“ origin”:null},“ content”:[{“type”:”text”,”text”:”04″}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:“ center”,“ origin”:null},“ content”:[{“type”:”text”,”text”:”入门级”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“典型語錄”}]},{“ type”:“ blockquote”,“ content”:[{“type”:”paragraph”,”attrs”:{“indent”:0,”number”:0,”align”:null,”origin”:null},”content”:[{“type”:”text”,”text”:”这些xx场景不用测了,你帮我看看yy情况下有没有问题。”}]}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“解讀”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”这种程序员已经有了 Test First 的思路,他们对自己交付的东西心里很有数,知道哪些场景已经被单元测试覆盖,哪些没有。”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”没有覆盖到的逻辑,他们要么自己测,要么请求QA帮忙测。他们还会跟QA讨论或者建议这个逻辑该用“测试金字塔”的哪一层来测。”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”marks”:[{“type”:”strong”}],“ text”:“正確的三觀”}}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”不要总是让QA告诉自己有什么bug,应该告诉QA有什么bug。”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:“ center”,“ origin”:null},“ content”:[{“type”:”text”,”text”:”05″}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:“ center”,“ origin”:null},“ content”:[{“type”:”text”,”text”:”工匠级”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}},{“ type”:“ paragraph” ,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null},“ content”:[{“type”:”text”,”text”:”留个白,你心目中的工匠级程序员或团队是如何对待测试的呢?欢迎留言。”}]},{“ type”:“ paragraph”,“ attrs”:{“ indent”:0,“ number”:0,“ align”:null,“ origin”:null}}}

}