渔舟唱晚的天空
——welkinwalker的遐想
上一页 1 2 3 4 5 6 ··· 12 下一页
摘要: SWEorSoftware Engineer。写功能代码,并发布到终端用户。他们写设计文档、设计数据结构,并且花大量的时间write和review代码。他们要写大量的测试,包括测试驱动设计、单元测试、参与小、中、大的测试。他们对任何他们碰过的代码质量负责,包括写的、修复的、修改的。SETorSoftware Engineer in Test。也是一个开发者,但是他的侧重点在于可测性。他们review设计,并且审阅代码的质量、风险。他们重构代码并且使他们具备更好的可测性。他们编写单元测试框架、自动化测试框架。从写代码这个角度来看,他们是SWE的伙伴,但是他们关心的是如何从代码层面上提高质量、测试 阅读全文
posted @ 2012-04-18 11:05 welkinwalker 阅读(702) 评论(0) 推荐(0) 编辑
摘要: 首先明确,质量是测试不出来的。有个比喻很有意思:不能通过反复测试来提高质量,这就好像你不能通过反复称重来减肥一样。在Google,质量不等于测试,有些公司则不然。“质量不能通过测试而植入”这个是老生常谈了,我们不必去怀疑他的正确性。从手机到软件,如果你没有在一开始就把它构建好,那么他永远不会正确的工作。如果你不知道一开始不重视质量的代价,那么去问问陷入“召回门”的汽车厂吧。“质量不能通过测试而植入”这话本身并不通俗,它也不是一个准确的描述。可是为什么这么说?因为显然,如果没有测试你不可能开发出什么高质量的东西。对啊,如果你不测试,你怎么知道你开发出来的东西就是高质量的呢?解决这个问题的简单方法 阅读全文
posted @ 2012-04-18 11:05 welkinwalker 阅读(539) 评论(0) 推荐(0) 编辑
摘要: google在公司的大层面组织上有很多的Focus Area,search, apps, ads, mobile, operating system这些都是不同的FA。测试隶属于其中的一个FA,这个FA的名字叫Engineering Productivity。这个FA由很多纵向的横向的学科构成,测试是其中最大的一个学科。Eng Prod这个FA由下面的部分组成:product team。公司内部使用的工具还有开源工具都由它来生产,这些都是提高生产率的工具,包括代码分析工具、IDE、case管理工具、自动化测试工具、编译工具、编译系统、代码版本控制工具、code review工具、bug dat 阅读全文
posted @ 2012-04-18 11:04 welkinwalker 阅读(1470) 评论(0) 推荐(0) 编辑
摘要: 写在前面的几句废话最近在项目的过程中接触了lex 和 yacc,他们可以帮助我们来实现自己的领域语言。最典型的应用就是可以帮助我们来实现自定义测试脚本的执行器。但是,这里也有一个限制,就是测试脚本要做的基本事情必须有现成的C语言库来实现,否则就做不到了;如果基本的操作是用java来做的,那么还可以用Antlr,这里不对Antlr做详细介绍。lex是什么?教科书上把lex的作用的作用叫做“词法分析lexical analysis”,这个中文叫法非常让人看不明白(叫做“符号提取”更合适),其实从它的英文单词lexical上来看他的意思其实是非常清楚的。lexical,在webster上的解释是:o 阅读全文
posted @ 2012-04-09 15:50 welkinwalker 阅读(15666) 评论(6) 推荐(6) 编辑
摘要: #在英语里面叫做 pound在C语言的宏定义中,一个#表示字符串化;两个#代表concatenate举例如下:#include<iostream>voidquit_command(){printf("Iamquitcommand\n");}voidhelp_command(){printf("Iamhelpcommand\n");}structcommand{char*name;void(*function)(void);};#defineCOMMAND(NAME){#NAME,NAME##_command}#definePRINT(NAME 阅读全文
posted @ 2012-03-30 10:56 welkinwalker 阅读(19716) 评论(1) 推荐(0) 编辑
摘要: linux中有两种方式管理守护进程(其实只要是调用了deamon函数的程序都能成为守护进程):standalone方式。进程被放到/etc/init.d中,启动方式可以选在用/sbin/service XXX restart,也可以用/etc/init.d/XXX restart。这两种方式本质一样都是运行了/etc/init.d/目录下面的某个脚本,这里面的脚本按照规范都要支持start stop restart这样的参数。这一类的程序都会作为一个单独的服务运行。super deamon方式。这种方式运行的进程都会注册到xinetd这进程,从外面看只有这一个进程,发给注册进程的消息都由xin 阅读全文
posted @ 2011-12-09 16:14 welkinwalker 阅读(3100) 评论(0) 推荐(0) 编辑
摘要: base.hpp的代码:#ifndef_H_DYNAMIC_H#define_H_DYNAMIC_H#include"Base.h"#include<iostream>#include<map>usingnamespacestd;template<typenameT>Base*createT(){returnnewT;}structBaseFactory{typedefstd::map<std::string,Base*(*)()>map_type;staticBase*createInstance(std::stringco 阅读全文
posted @ 2011-12-06 19:23 welkinwalker 阅读(2057) 评论(0) 推荐(0) 编辑
摘要: map的输入由inputformat定制,这是一个java中的interface。要实现里面的两个方法,一个是inputsplit,recordreader,前者决定了怎么从最初的输入做partition,后者决定了怎么从读inputsplit。map的数量由inputsplit的数量决定,而reduce的数量则取决于partitioner接口的实现的数量决定。combine是在map后做的reduce。对于每个map真正的顺序应该是:先map,然后对map的结果根据key做sort,然后再对于sort的结果进行combine。map后面还包含多个步骤:shuffle--> merge 阅读全文
posted @ 2011-12-01 16:13 welkinwalker 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 先说对于key的全排序。其实如果只有一个partition,则最终的结果肯定是全排序的,因为一个partition对应一个reduce的task,然而reduce的输入本来就是对key有序的。当然只有一个partition不能体现出分布式的威力。如果是分多个partition呢,则只要确保partition是有序的就行了。比如:partition1中的最小值比partition2的最大值要大。但是这里又有另外一个问题,就是你在定义每个partition的边界的时候,可能会导致每个partition上分配到的记录数相差很大,这样数据最多的partition就会拖慢整个系统。这时候我们期望的就是每 阅读全文
posted @ 2011-12-01 15:21 welkinwalker 阅读(12227) 评论(0) 推荐(0) 编辑
摘要: 迁移过程分为两部分,一部分是要迁移slave上的数据;还有一部分是要迁移master上的数据;对于slave上的任务信息,只要把workspace下的所有数据拷贝到新的slave上的workspace目录下既可上面的事情做完了,在新的hudson master上并看不到相关的job。这个时候还要迁移master的数据,同样的要把数据从旧的master上拷贝到新的master,但是这还不够,还不能在页面上看到job信息,最关键的一部是要在hudson的管理界面中点击“读取设置”(英文版的叫 Reload Configuration From Disk),点击后等待一段时间,所有的任务就全部成功导 阅读全文
posted @ 2011-11-30 11:11 welkinwalker 阅读(1295) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 12 下一页