qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

敏捷测试理论以及实践(5)

 以前在《结合工具来实现敏捷开发》这篇文章中,我已经谈到了我们公司目前的开发情况,在这里也不再重复介绍了,反正主要就是用 TechExcel的 DevSuite 系统来进行管理整个流程。至于很多人可能会问,既然敏捷了为啥还要用工具,其实我是这么想的,敏捷开发/测试,如果对于简单的项目而言,用工具反而会效率下降,因为就这么几行代码,这么几个功能,一下子就可以弄好了,弄个工具反而浪费时间。

  但是对于稍微大的项目而言,可能不用工具就没法很好地管理项目了,比如说好了,一个团队在一个迭代周期中做了10个功能,测试人员一天发现了40个Bug,但是修的人(由于部分人还在做功能)每天最多只能修20个,那剩下的20个Bug怎么办,当然是延迟到下一天修了,一个迭代周期往往是一周到二周,假设两周好了,如果每天都能多余20个Bug的话,就累积了200个未修的Bug,假设没有缺陷管理工具的话,我这些Bug可能只用Excel文档管理一下,Excel对于单个用户而言,保存信息其实做得很不错,报表也很Ok,但是想想这么多开发和测试需要打开同一个Excel文件,做查看,做更新,我相信Excel数据会被搞乱,而且Excel没法做跟踪,没法设置流程,也就是比如说我想知道这个Bug经历过几个状态,经历过几个人的处理,我应该是没法找到的。

  所以工具有用么,我觉得还是有用,对于大中型项目,既然想用敏捷,我还是建议用工具,不然的话,这个敏捷最后肯定会变成不敏捷的。 就像乘坐公交车一样,如果就是100米的路,我劝你还是走路(敏捷)算了,因为公交车还要起步、停车和等红绿灯了,也许你走得都比它快;如果是10公里的路,您当然会选择公交车(工具)。对于敏捷而言,因为是有很多迭代周期组成,每个迭代周期其实相当于一个100米,但是很多迭代周期组合在一起就变成了10公里了。真正的敏捷,它只是一种指导思想,没规定你必须怎么做(也就出现各式各样的实现方式),所以,在正常的工作中,我们需要根据每个公司的实际情况来搭配符合你们实际情况的敏捷模式。

  大家在百度上,只要搜索“敏捷测试”,我相信可以找到一大堆的内容,有概要的,有详细的,仔细看看,大家会发现很多人认为敏捷肯定是这样子的,那样子是不对的,当然大家对于“这样子“的描述又都不是太相同,分析一下,无非就是两种原因,一种纯粹是自己瞎想的,可能稍微有点底子,但是没实际用过,就按自己的想法,乱分析一番;另外一种就是真正在用的,所以就用自己公司的情况来解释一下敏捷。当然,我其实也是结合自己公司的情况在说敏捷,所以我不会苛求大家一定要采用我的理论,只是希望大家能从我的文章里发现一点对你们来说有用的知识,那我就很开心了。

  好了,闲话少说了,不管您有没有理解为什么要用工具,我还是继续下去了(有问题可以私聊)。

  对于TechExcel的DevSuite,以前也介绍过,也一直用到现在,感觉挺好用,不过在这里也不多介绍了,就给个图和然后把我们会用到的产品做个交代,不然之后万一提到某个产品,大家可能不知道是啥了。

  其中对于敏捷测试而言,需要用到的主要是以下三个产品:

  1、DevSpec:需求管理,用于测试人员(设计测试人员)检查功能的设计

3、DevTest:测试管理工具,用于管理测试用例,以及用测试用例来生成测试计划并且实施测试(包括自动化测试)

  这三个产品可以集成在一起用,也可以分开单独用,当然我们是集成起来用的。

  接下来我就按照测试的实际流程来介绍一下敏捷测试在我们公司的具体实现情况。

  1、需求设计阶段:

  我们公司也是开发产品的,主要是开发CRM方面的产品,和其他软件企业也一样,我们每个版本的发布首先是需要先收集客户需求开发相应功能、自己研发出新功能以及查看研究并超越竞争对手的功能。

  这部分的工作主要是在DevSpec进行,DevSpec是主要用来管理需求和分配需求让开发去开始做的,它会对每个功能(不管是客户的,自己的,或者研究竞争对手得出的)新建一个条目项,每个条目都会有自己的属性,包括标题,负责人,状态等,反正你想加什么属性都可以自定义的。然后负责人登录系统就可以看到分配给他的条目,他处理完了就必须把状态改到下一个状态,并且分配到适当的其他负责人。对于测试而言,我们设置有一个状态叫做“测试审核”状态,一般一个需求点到了这个状态,咱们设计测试人员就会去处理这个需求,处理的方式,一般就是从原始的文档入手,去看看现在的设计是不是符合原始的文档,如果有出入的话,他就会去和设计人员交流一下,然后把这个条目打回“需要重新设计”状态,设计人员弄完就会重新更改状态,最后测试人员审核通过后,就可以进入“待开发“状态了。

  这里强调一点,在这个阶段,所谓的设计测试人员,并不一定必须是专职的,他可能是项目经理或者是其他人,但是他一定是一个有能力来判断设计思路是否符合要求并且有权力让设计人员重新去设计的人。

  这就是需求设计阶段,测试人员要做的事情。下面贴个DevSpec的图作为今天文章的结尾。(未完待续)

posted @ 2011-11-18 14:56 顺其自然EVO 阅读(150) | 评论 (0)编辑 收藏

量化项目管理案例:缺陷趋势预测利器(8)

     摘要: 理论知识终于告一段落啦。接下来要和大家分享的是S型曲线模型中的重要模型——Gompertz模型和Logistic模型在公司内部实际项目中的应用。下面的数据都是来自于公司内部实际项目,应用主要分4个场景:进入测试阶段前、测试阶段过程中、测试退出时、以及其它的应用。下面将依据场景,从测试阶段开始一直到结束,分阶段介绍S型曲线的应用。  ● 进入测试阶段前的缺陷发现目...  阅读全文

posted @ 2011-11-18 14:54 顺其自然EVO 阅读(602) | 评论 (2)编辑 收藏

软件测试目标——“整个场面我Hold住!”

 在学术家族树beta版本中,我们将重视软件开发中的测试

  OBJECTIVE

  我们的目标呢,就是经过测试之后软件的质量得到有效的保证,在已经考虑到的所有场面都可以“Hold住”。

  As much as I concern,

  1、所有设计中的功能都能实现
  2、代码经过review
  3、用户界面经过用户的试用
  4、系统的反应时间可以忍受
  5、发现的bug或者都已解决,或者下一个iteration解决
  6、各种极端情况都可以Handle
  7、数据可靠
  8、Last but not least, 不存在版权问题

  下面我们详细说一下各个部分。

  1、所有设计中的功能都能实现

  UI在开发之前就是有设计蓝图的,所以具体应该实现什么功能是非常确定的,这个也比较方便检查。UI开发人员在完成开发的时候就可以确定这些功能是否都已实现。为了减少差错,可以再由测试人员进行double check。原始的用户也可以报告bug。

  2、代码经过review

  为了提高代码质量,review是非常有必要的。既是对代码的double check,也验证了写出的代码确实能够比较容易地被今后的维护人员读懂。

  3、用户界面经过用户的试用

  这个在1中已经阐述。

  值得提出的一件事就是,关于国际化(Internationalization的测试),即使保证我们的产品也可以被全世界的用户可以方便使用。除了界面的文字语言问题,还涉及到东西放思维差异等等。

  比较幸运的是,我们的开发人员中就有一位欧洲瑞士的同学,我们的Daily Scrum也是使用英语的。从而使得我们的产品和国际化并不遥远。为了保证这方面的质量,还可以找一些国际友人来进行使用并反馈。

  4、系统的反应时间可以忍受

  在去年的一个版本中,查询和反应时间非常缓慢,到了一种难以忍受的情况。

  所以今年我们要格外重视这方面的情况。

  具体在做好了之后,我们会在不同的网络环境(公司内部、北京市电信网络、美国雷德蒙德总部网络、安徽合肥中科大教育网络)进行使用测试,确保我们的反应时间得到用户满意的迅捷成都。

  5、发现的bug或者都已解决,或者下一个iteration解决

  测试的阶段不可避免要发现很多bug,发现bug多不是坏事,发现的少也不一定是好事。

  关键的是,尽可能暴露出所有存在的问题,并且尽我们最大的努力进行改进,fix the bug.

  6、各种极端情况都可以Handle

  各种边界条件往往是出问题的地方。

  在我们beta版本上周刚刚demo,在准备数据的过程中我们就特意准备了各种极端条件的数据。

  比如说:

  A)老师数量为0, 或学生数量为0

  B)老师数量最多(4), 学生数量最多(79)

  C)还有学生分属很多不同的工作机构的情况

  确保我们的系统在不同情况下都可以得到一个比较美观、可靠的界面。

  7、数据可靠

  我们所挖掘到的师生关系对是需要经过验证的。

  暂时由于数量庞大,而我们人员有限,往往采用抽样人工验证的方法。

  在条件具备的情况,我们会编写脚本、测试程序等对关心的内容进行机器验证。

  8、Last but not least, 不存在版权问题

  确保我们的代码都是原创,或者没有使用本公司外的代码。

posted @ 2011-11-18 14:50 顺其自然EVO 阅读(162) | 评论 (0)编辑 收藏

谈测试体系规范的推行

 这几天在考虑这么一个问题:测试被慢慢认可了之后,为什么测试的价值还得不到体现?为什么测试体系还是得不到广泛的推广?以下是我个人的一些分析。

  1、测试体系的整体概念

  一直以来,我都觉得这个问题挺概念化的,就是说出来后让人抓不住重点的感觉。要说某个具体的技术细节,很明确。比如说Weblogic的调优,可能会有人很快联想到:连接池、JVM、线程数等等。但是测试体系是什么?有点虚。

  在多次听测试人员的报怨之后,我觉得现有规范可能是影响测试体系建设的第一要素。当然,领导还要强力支持。先说测试规范,后面再说其他因素的影响。

  首先,要把软件测试和质量保证分开来。尽管现在大部分公司把测试人员叫做QA工程师,尽管这一叫法是错的(个人认为是错的),还是被一些人屁颠屁颠接受并推广去了。好吧,这些概念性的问题,我们先不认真的追究了。测试体系在我的意识里是:为了尽可能找到系统的缺陷的和评估系统,对应测试需求,使用相应的管理方式,按照流程和方法进行系列的测试动作,并最终产生符合规范的测试产品的过程描述。在这一过程中,有几个词是要体现在测试体系里的,就是:管理、流 程、规范、方法。

  要推广测试体系,首先要求的个人素质,就是要有整体的体系概念。这样说起来好像有点太正式了,有点累。换个角度说:现在有没有太多的人有测试体系的整体概念?如果有,知道不知道自己在这个体系中处在什么位置?职责是什么?

  曾经看到一些公司和人生套CMMI、RUP、ISO之类的规范标准(这几套东西的角度是不一样的),但是由于推广的方式太生硬而导致人的意识转换不过来。最后不了了之。尽管过了什么认证,也是推倒重来,恢复旧制。理由很简单:这些体系不适合我们,还是我们自己对体系比较清楚。测试体系也同样如此。精髓没有领会到,就生套,是不可能推广开的。记得有人说,进一家公司是一个“固化—僵化—优化”的过程。而我觉得大部分人连固化还没走出第一步,就觉得回头才是岸了。

  前一阵子为一个客户推行测试体系,其实从技术角度来说,基本上都可以实现了。但是通过反复沟通,才知道客户想要的体系只是要一个可控制的PDCA过程,于是我把体系整个给缩小了,客户才觉得这是他要的。实际上很多内容已经删减了。如果做一个项目的话,我觉得客户要的这种是可以直接和做事相关的。而如果要为一个公司建立一套完整的体系,显然这样只能留下记录,而留不下体系中其他的关键部分。

  要让相关人员有测试体系的整体概念。向与推行体系必然相关的人培训体系概念,阐述体系的优点。当然也会有缺点,所以才需要变更流程。

  2、利润驱动的影响

  无可厚非,追求利润永远是公司的第一要务。在很多时候,我们不得不为利润让路。有时候就是因为一直是这样,才导致了我们的测试体系不可能完全建立起来。我们只能绕着客户转。

  最近大领导组织开了一个会,就是建立一套完整的测试体系。在这个体系的各个部分,都有相应的文档来支持。当时我画了一个大概的思维框架图,包括的内容很广泛;其中有每个职位上的人在什么样的阶段、按照什么流程和规范、做什么样的事情、做成什么样子,等等。都有相关的模块来维护其完整性。领导一看,觉得不错。接下来就要提到如何落地。在参考了很多意见之后,决定落实成为一种可以按时间推移而实行的方法。但后来实际情况是:做事是需要时间的,在某些时候,一个人要兼顾好几个事情,就不得不为与客户有关的事情让路。自从年后,我画了一个小范围内的PDCA流程图之后,就开始为客户的一个方案而不停打字。这件事情,也就此放下。

  这是暂时现象,还是大部分时候都是这样?我想在其位的人一定深有体会。我们经常可以看到听到或者亲身经历需求经常变更的事情,不仅是业务需求,测试需求也是这样。做事情的人不知道上层的人怎么想的,但是只有做事情的人知道怎么才能做得更完善。有时,有些客户只是要一个自己认为重要的结果。其实对整个系统来说,这个结果意义并不大。我曾经做过一些以客户为核心的业务。比如,客户只需要知道系统在当前配置下的性能状态。也许客户只需要响应时间,认为用户数是很关键的数据。于是他们迫切地想得到这个数据,但是没有考虑到整个系统的性能表现应该是从不同角度来关注的。在这个过程中,其实我们可以关注一下如何做得更完善,从而逐步丰富体系。

  如果仅从当前项目出发,个人认为:从长远的发展来看,这种做法是会降低利润的。当然,没有完整的体系。很多时候,我们做一件事情,可能重复了好多次,前后都没有历史资源可以借鉴。其实是有的,只是没有人去整理。没有形成知识管理库。大部分公司以目录式的结构来管理文档,这也没有什么。但是文档散乱得不成样子,就让人接受不了了。如果下定决心去做一个体系的建立,可能会导致当前的事情会有些滞后,但是会让后面的工作顺利进行。可能有人提出异议,认为即使这样也不见得能提高多少工作效率,于是举出N个例子来说明。我只能说:创建的体系有问题,要变更。利润驱动的一个最大误区就是:太关注眼前的利益而放弃了长远的利益。这和人生的规划如出一辙。有些人花了四年的时候,好好学习大学课程,毕业后找工作,可以很快上手;而有些人玩了四年,出来后,找工作处处碰壁。

  所以个人认为,在利润驱动时,不要忘记长远的利益规划。在近期利润可以平衡的前提下,应该尽量以长远的眼光来看事情,一点一点积累。按流程说明来控制近期要做的事情,往往也不会增加太多工作量。只是需要在平时工作中灌输体系控制的思想。

  3、领导支持不力

  和朋友聊天时,说到公司里的测试人员不足,测试不被重视的现象,这是老生常谈的话题。有很多人报怨:领导是如何如何不理解测试,如何如何不理解测试的重要性,等等。有个问题他们没有描述到的是:测试带来的直接和间接的利润究竟是多少?这是个比较难确定的问题。但是如果这个问题回答不好,让领导们感觉不到利润的提升,想让他们重视测试还是比较难的。还有一个大环境的问题:我们都知道测试行业的发展没有几年,或者说普遍认识到测试的重要性还没有几年,以前只有少数人在做,而现在大部分人都意识到了应该做测试。但仅是意识到而已,并没有形成测试必做的传统。那就意味着:可能是意识到了,但不知如何发展下去。

 80年左右的人现在也差不多30岁左右了,这些人接受的教育和工作时做的测试可能稍微多一些,但是他们大部分是中层领导(普遍情况),或者说更多的是干活的人。中层领导要想推广测试体系几乎是不可能的事情。他们能做的只是局部更新。这是不是意味着,只有这一代中有测试体系的概念、并且身体力行的人做了上层领导后,才有可能推动全面的测试体系?果真如是,恐怕还要等几年了。商鞅变法成功是因为有秦孝公的支持,秦孝公是个天才领袖。而测试的天才领袖在哪儿?同样有了天才领袖和可堪大用的人,还是要面对老世族的攻击。而这场战争至少要打两代人的时间。软件测试体系如果要推行,纵然有人可以做,在大部分的企业里,估计也要等到媳妇熬成婆。

  在其职,有其能,才能谋其事。所以这个要求的是个人的机会和能力。

  4、执行不力

  这个问题出现的前提是第3点中的描述已经不是问题。执行碰到的最大问题是与旧制度的冲突。要知道,让人改变一种习惯是很难的事情。要让一个企业改变习惯,就更难。还记得在以前公司里推行ISO这个体系时,开始时,每个人学按照ISO来做些事情还可以。但突然改变以前的习惯很难受。终于到了不能承担的时候,还是恢复了旧制度。ISO相关的内容成了公司在市场上的一个说辞。但是为了满足这个体系,公司每到要再次评审的时候,要耗费大量人力来再次修正。

  执行不力的另一个大问题是意识不到体系的重要性。从而得不到广泛的支持。很多人在报怨的同时,没有考虑到一个本质的问题:就是自己处在什么样的位置上,应该负什么样的责任,这件事情是这个职位上做得了的事情吗?这一点我反复强调,就是因为现在很多职位的责任不清晰。直接导致了很多人都觉得做了自己不应该做的事。这一点在体系中会通过角色职责做清楚的描述。所以要让每个人理解到整个体系存在的必要性,再来理解个人的角色职责就不会出现这个问题。这样使体系的执行也就更有中坚基础。

  这个问题要依赖第3点中的问题解决。就是要有相应权力的人推行。这是最直接的。要不然还是比较麻烦。

  5、人治还是体系方法治?

  此部分只讲述软件测试方面的内容,不妄言公司的全面管理。

  我们知道具体的技术细节是有方法可以参考的,比如测试用例的覆盖率,是可以从技术角度来计算出来的(计算需要时间和相应知识支撑)。但是,在大部分情况下,我们碰到的现象还是:领导分配哪个模块让谁来负责测试,这个测试人员只从业务角度来写瀑布似的用例描述,最后执行这个测试用例。这样的覆盖率是没办法计算的。而有些人还妄图从这样的执行结果中去计算覆盖率。最后只能不了了之。这里导致了一个后果就是测试的充分性得不到保障,发布后的系统又出现新问题并且没有人为此承担责任。这就是拍脑袋形成的现象。

  我们知道,人治是一种主观的判断。我觉得你不行,我是领导,你就是不行。这样的描述让人清晰地感觉到:一个人的职位和他的主观判断严重影响到后续的质量。我记得看过一句话:一个公司的老板的个人素质决定了这个公司的企业文化和前途。暂不说这句话的合理性,应该有很多人同意这句话说的是对的。所谓仁政、周礼、井田制,已经在很多人的潜意识里扎下了根。

  那体系方法治呢,明确了一些扯不清的职责,也让人在项目的各个阶段中,知道了自己应该做什么,做成什么样子。做不到,要么是能力不行,要么是规范有问题,需要变更。在经过裁决之后,如果是前者,可以通过换人、培训等手段解决;如果是后者变更体系方法就好了。不会出现头脑一晕、停滞不动的现象。也不会出现像有些人说的,我现在脑子都大了,不知道领导到底要我做什么,也不知道做成什么样子,才算是领导满意了。这里说的是公司内部,如果涉及到客户,其判断的规范标准就是客户的满意度。从大结构上理解各个层面,然后去做,这是我认为有效的控制质量的办法。

  那是不是说体系治就万无一失了呢?当然不是,因为事是人做的,而涉及到人,变数就很大的。还是需要人治的辅助。灵活综合运用,才能见实效。建议固化体系制度为根本。当形成强大的体系传统时才考虑人治参与其中,但一定要有所侧重,并在见到实效后立即回归体系制度。

  6、什么是适合的体系?

  在交流中我发现很多人把体系看得很死,好像说到CMMI就应该按初始级、管理级、已定义级、量化管理级、最佳化级一层层发展上去,或者说到RUP就得按照先启、精化、构造、移交这样的步骤来做。我想说的是,如果你要过CMMI的认证,完全有按照要求做的必要。而要是我们觉得都不适合,完全可以自己去制定一个体系,借鉴是没有问题的,只要符合就行。并且,这些建议采纳不采纳,也是我们自己决定的。要做,就落到实地来做。别空摆一个架子。而有些人有潜意识 里的排斥心理:我们要有自己的流程,我们不按照任何成熟的流程来做。好像自己拍拍脑袋,体系就出来了。搞到最后,依旧是不了了之。从规划到实现,不管是对的错的,如果只有规划没有实现,是如何也无法落地的。

  所以有画饼的能力,也要有把饼做成的能力。

  7、总结

  当有了整体的测试体系概述之后,即使有利润驱动,也应该与此同时关注一下体系的建立。因为客户对公司的测试需求也是在测试体系之内的。再加上有领导的支持和一批有执行力的人推广整个体系,测试体系才会有可能发展起来。而在这一过程中,尽可能避免人治的手段。只有这样才能使体系有生存的空间,否则将使苦心建立的体系很快就荡然无存。


posted @ 2011-11-18 14:49 顺其自然EVO 阅读(154) | 评论 (0)编辑 收藏

B/S架构测试环境搭建_SQLServer篇(Win32系统)

前言:此篇讲解在Win32系统下SQLServer创建数据库和用户(建立测试环境必需),顺带讲下用户和登录名的区别,不对之处,欢迎拍砖。

  一、创建数据库:

  (1)SQLServer安装过程中有一个需要注意的地方,设置各个系统的账户和密码,见下图:

图1 设置所有的账户和密码

  其他的没什么需要留意的了,只需按照提示一步步走完就算安装成功了。

  (2)SQLServer安装完成后,在“开始”--“程序”--“SQLServer”--“SQLServer Management Studio”中打开SQLServer的管理页面,系统会弹出连接DB的对话框,选择对应数据库引擎、服务器名称、连接方式和对应的用户名和密码(有个默认的sa用户,初始密码为空,登陆成功后可以修改)。

图2 SQLServer登陆页面

  (3)连接成功后可以查看当前连接的对象资源管理器,此时系统中的数据库只有系统默认的,我们测试时候需要新建对应的数据库,一方面是为了不影响系统数据库的结构,另一方面测试也需要一个纯净的环境。

  (4)右键数据库,选择新建数据库,输入数据库名称,此时可以选择该数据库的Owner(系统当前存在的登录名),如果不选择,系统默认将Owner设定为当前登录的登录名。设置该DB的数据库文件,初始大小,自增等变量,以及对应的存放位置,此处和create database Database_Name On primary(...) Log On(...)这种语法是一致的,需要指定的话填写对应的内容,不需要的话系统会保持默认。

 (5)接下来是创建用户,展开该DB,在“安全性”栏中右键“用户”,输入对应的用户名,并选择映射的登录名,选择对应的架构和角色成员(个人觉得ddladmin一般情况下就可以了,害怕权限小了影响使用可以选择owner,每个角色对应的权限帮助文档中有详细的说明),至于用户名和登录名之间的映射关系放在下一段中讲。

  (6)用户建立完成后可以使用测试工具或写代码测试连接,user/password是登陆名。登录名的CRUD在对象资源管理器的“安全性”的“登录名”下,创建的时候选择映射的用户(第三栏)和选择默认的DB。不选择系统将默认处理。(SQLServer默认端口号是1433,占用了可以用命令netstat -a -o -n查看)。

图3 测试SQLServer连接

  二、登录名和用户名:

  (1)登录名顾名思义是用来登录SQLServer系统的,用户名是数据库的user,在SQLServer中,两者之间是一种多对多的映射关系。

  (2)需要使用系统的时候,登录名是必须的,没有登录名就无法使用SQLServer系统,但是登陆成功后你能够有多少权限使用某个数据库,取决于该登录名映射的用户名的权限。一个登录名可以映射不同数据库的多个用户,同理一个用户也可以映射多个登录名,但是在同一个数据库中,一个登录名只能有一个用户与之映射。

  (3)在创建数据库时,如果不指定owner,系统会把当前登录名设置成该DB的owner,那么当前的登录名就会映射到该DB创建时默认的用户dbo上,其他的登录名在未手动设置关联用户时关联该DB中默认guest用户。owner可以使用该DB的任何功能。guest用户的权限则小的多。

  暂时先总结这么多,基本的测试环境搭建,SQLServer功能很强大,算是入门级的,希望对大家有帮助。






posted @ 2011-11-18 14:46 顺其自然EVO 阅读(534) | 评论 (0)编辑 收藏

软件测试人员如何写软件测试求职简历

有个测试同仁让我帮她看看她的简历,看完简历后我的直觉就是“这位测试同仁两年的测试白干了”。简历是一块敲门石,但这块敲门石是什么材质的,恐怕人见人智,然而什么样的简历才能是一块金质敲门石呢,下面是我的一个些个人见解,希望能给正在或正准备寻找更好发展机会的测试同仁们有所帮助。

  针对在测试行业中已经有所感悟的人-凸现项目经验优势:在公司允许的范围内,把你参与的项目做一个简单的介绍。比如你参与的项目的体系结构,实现技术等等。这些东西能在一定程度上体现你对测试项目了解的程度,熟知程度,从而也能体现出你的经验到底有哪些。比如,我们可以在我们的项目介绍中告诉对方我们采用的4层架构:数据库 ,中间件,webservice,客户端,采用的c/s模式等等,如果你觉得可以,我们列举我们的数据库采用的是什么,中间件采用的是什么等等,在简单描述了项目之后,你可以非常坦诚的告诉你所求职的公司,在这个项目中你主要负责的部分,比如主要负责哪个层次的测试,主要负责的是测试执行还是测试设计等等。

  对测试能力的描述。这一块很多人喜欢一概罗列,其实在我看来这是个大忌。一概罗列通常并不能体现出一个人的能力,有些人走得是测试管理路线,他擅长的一定是流程流程方面的掌控能力,有些人是走性能测试路线,他擅长的一定是具体的某个或者某些工具的使用。千万不要把自己描述成一个无所不能的,这在我看来,往往是一个无所特长的人。

  如果可以,请加入一些测试方面的独特见地。我非常不喜欢的就是一旦问什么,都是书上的一套东西搬出来了,其实书本与现实有时有很大的差别,适时的表现出自己的独特见地,能证明你是一个活学活用的人,这样的人在任何一个单位都非常的吃香。

  针对测试新人,切记“诚实的原则”:有些人可能没有吸引人眼球的学历,毕业院校,但请你大方的写出来,大胆的告诉你求职的公司,只有你认可自己,才能希望别人认可你,如果你加入这家公司,你也可以硬气的工作。学历,毕业院校可能成为你面试过程中的一点障碍,可是学历,毕业院校只能证明你的过去,并不能代表你的未来。现在大部分公司更认可一个人的能力,学历,毕业院校只是你一点出彩的地方而已。

  有些人明明对测试这个行业并不熟悉,却喜欢在简历中吹嘘自己的精通这,精通那,其实即使你获得了面试的机会,但面试的过程中,我自信你一定洋相百出,最终的结果依然是淘汰。所以,请你大大方方的告诉你求职的公司,你是一个新人,你现在的测试能力到底在一个什么样的程度,很多公司需要自己培养适合自己的测试工程师 ,你的坦诚能为你收获更多。

posted @ 2011-11-18 14:45 顺其自然EVO 阅读(169) | 评论 (0)编辑 收藏

你不是一个人在战斗——软件项目团队模型

摘要:

  俗话说“三个臭皮匠胜过诸葛亮”,但实际工作情况往往是“三个诸葛亮不如一个臭皮匠”!

  软件开发是智力型团队,如何发挥每个人的作用,并将所有人的力量扭成一股强大的项目团队战斗力,这是项目团队模型要重点解决的问题。

  大纲:
  1、传统项目团队模型
  2、实际项目团队模型
  3、MSF的项目团队模型
  4、实用团队模型
  5、什么才是合适的项目团队模型?

  正文:

  传统项目团队模型

  什么是项目团队模型?简单地说就是项目以怎样的方式组建团队,软件开发项目团队的传统团队模型如下:

  项目组在项目经理的带领下,各角色协调工作,为项目成功而努力!

  各角色的具体职责如下:

  项目经理:整体协调项目,编制计划及保证计划执行,推动项目成功。

  系统分析员:分析系统需求,保证系统需求既满足客户要求,同时保证技术可行性;指导项目技术方案及系统架构设计。

  软件设计师:细化系统设计。

  程序员:编码实现设计。

  测试工程师:测试系统,保证系统满足需求。

  实施工程师:部署、调试系统,培训客户,协助客户推动系统上线运行。

  配置管理员:对整个项目周期中的工作产品实施配置管理。

  QA:质量保证工程师,保证开发过程按照既定的要求进行,保证工作产品符合既定的规范。

  这个传统团队模型有两大特点:

  1、一个团队总有一个头(这也是我们的惯性思维),这个头就是项目经理。

  2、假设各种专业的角色能协调工作,并能各自发挥所长。

  我们希望项目团队能有一个强大的头领,加上一班专业人才,共同为项目成功而努力。

  但实际情况有这么理想吗?

  项目经理会埋怨手下能力不够、不主动报告工作、不主动承担责任......

  而项目组成员会埋怨项目经理不够强,只会叫他干活,不授权,更加不会传授知识......

  实际项目团队模型

  我们实际项目的团队结构,往往是这样的:




 实际情况与理想的传统模型比较,有以下重大差异:

  1、项目经理身兼多职。

  很多项目往往没有专职的系统分析员和软件设计师,项目经理兼任需求分析与软件设计的工作,甚至还需要负责编码的工作。

  图中系统分析员、软件设计师这两个角色都是虚线框,意思就是表示这两个角色往往只是虚位,难以落实具体的专职的人员。

  项目经理要做的事情太多了,往往没有办法专注项目管理,项目计划相关的文档能免则免,项目设计文档能少则少。

  2、测试工程师、实施工程师低人一等。

  很多公司公司的测试工程师、实施工程师会“低人一等”,开发人员有天生的优越感,而项目经理往往是由开发人员升任的,项目经理会有意无意地将测试工程师、实施工程师摆低一级。各角色如果不能平等的工作,项目团队战斗力自然大受影响。

  造成这种不平等的原因主要有两个:一就是开发人员的天生优越感,二就是整体来说我们的测试工程师、实施工程师水平确实还不够

  在我们公司其实也有这样的“不平等”情况,我花了很多时间营造“平等”的氛围,我的主要办法有:

  1)通过各种途径不断强调项目团队各专业人才的重要性。

  2)想尽办法提高测试工程师与实施工程师的水平。

  3、配置管理员、QA再低人一等,甚至可有可无。

  图中这两种角色是灰色的,这两者可能是整个项目团队中最“惨淡”的角色了!

  好一点的公司都会有配置管理员,但往往被当作文员来看待,而有些公司甚至没有专职的配置管理员,项目经理甚至没有想到要配置管理这回事。QA是一个四面不讨好,到处惹人非议的角色,可以说是项目组中最“差”的职位了。

  造成这局面原因也主要有两个:一就是大家的习惯性思维认为这两个职位就是最不重要的,二就是我们的配置管理员、QA的水平还不够的问题。

  对于配置管理工作,其实实质就是项目生命周期中各种工作产品的管理工作,我认为项目经理应该发挥更大的作用,而我们的配置管理员应该嵌入到项目的具体中去完成工作,而不要只抱着配置管理的大道理来工作。

  QA确实是最痛苦的职位,优秀的QA需要有资深的项目经验,但有资深项目经验的人大都不愿意做QA,这是多么矛盾和痛苦啊!

  简单地说,实际的项目团队结构有以下严重问题:

  1、团队的头不能专职项目管理。

  2、项目团队中各专业人才要么缺失、要么严重不平等。

  MSF的项目团队模型

  MSF,全称是Microsoft Solution Framework,微软解决方案框架,是微软进行研发活动的方法论。

  MSF的团队模型非常特别,它没有团队的头领:

此图来自MSF的官方资料

  微软的团队是没有项目经理的,由6类角色组成,分别是产品经理(Product Management)、程序经理(Program Management)、开发(Development)、测试(Test)、发布管理(Release Management)、用户体验(User Experience)。

 各类角色负责的职责如下:

  该模型的几个重要特点:

  1、没有所谓的项目经理。

  程序经理这个角色可以说是最接近项目经理的了,他需要编制计划及跟踪计划执行,但在行政级别上,他不是大家的头,大家都是平等的,大家只是处在不同专业的角度来负责工作。

  2、强调项目团队是由各专家组成的。

  软件开发活动是高强度高挑战的智力活动,我们需要由各类专家共同负责协调工作,每位专家都是同等重要的。

  3、用户体验是我们常常忽略的部分。

  用户体验简单地说就是用户使用软件时的感觉,软件的颜色、布局、文字、行为等等会直接影响用户使用软件的满意度。目前我们国内的项目组,往往没有用户体验设计环节,也没有专职的用户体验设计师。

我第一次学习MSF团队模型时让我很震动,该模型体现了以人为本的开发模式,让团队中的每个人都极受鼓舞,但该模型在实际工作中很难完全应用,主要原因如下:

  1、各专业人才水平参差不齐。

  我的个人感觉国内以上六类角色的水平由高到低排列,大致这样:开发、程序经理、产品管理、测试、发布管理、用户体验,而用户体验基本是空白。各专业人才能力不相当,就无法组成“无头领”的团队,充分发挥各种角色的作用。

  2、各专业人才水平全部没达到要求。

  哪怕是水平最高的开发角色,我们的平均水平跟微软的相比还是相差太远,那就更加不需要提其他角色了。

  3、团队协助能力差。

  我们的团队基本不会“team work”,我们从小到大的教育就基本没有“team work”的教育。

  MSF常常也被人以“太理想化”质疑,MSF所描述的世界只是软件开发的乌托邦而已。难道我们的现实情况就决定了我们的项目团队水平吗?我们没有办法建立一种实用的项目团队模型,让我们的项目团队能持续进步吗?

  实用团队模型

  我带领过很多团队,其中不少是带领应届生或者是工作经验还不多的工程师,团队中每个人的能力如果还不能塑造好,确实无法让团队高效运作。而项目初期我做的很多事情,都是通过项目具体工作来训练大家、提高每个人水平的事情。

  我们的计算机相关教育并没有训练出合格的各类专业人才,但我们这般计算机从业者都是充满激情和追求进步的,基于这样的现状,我觉得应该有合适的团队模型能让我们的项目团队自学习,然后逐步发挥各专业人才的作用。

  我们光抱怨我们的教育制度是没有用的,我们需要实用的团队模型来解决当前的实际问题。我在实际项目中的项目团队模型,通常是这样的:




 角色和人并一定是一一对应的,一个人可以戴多个角色的帽子,一种角色也可能由多个人担当。

  上述模型有8种角色:项目经理、产品经理、软件设计师、用户体验设计师、测试工程师、实施工程师、配置管理员、QA。

  前面六种角色分别与MSF的程序经理、产品经理、开发、用户体验、测试、发布管理角色类似。

  我基本上是很认可MSF的项目管理思想的,但为了适应实际情况,我做了一些必要的调整。

  1、让综合能力比较强的人担当项目经理。

  这个人不一定非常强,但只要他是项目组所有人中综合能力最强的人就可以了。项目经理除了领导项目团队,他需要更关注项目成员的成长。项目经理进行相关决策的时候,应该充分发挥大家的参与性。

  2、各角色是同等重要的。

  无论是测试工程师、实施工程师、配置管理还是QA,他们都和开发人员是平等的。哪怕是项目经理也不是高高在上的,项目经理只是比大家稍微高级别一点,之所以这样也是因为各角色的水平还不是很够,我们需要一个项目带领人。

  3、持续总结与进步。

  犯错不可怕,只需要能不断学习不断总结不断进步就可以了。整个项目小组是学习型成长型的团队,要人人勇于承担责任,不怕犯错,遇到问题一起来总结进步!

  4、强调用户体验的重要性。

  用户体验其实是很重要的工作,但往往被我们忽视,而现实情况是我们基本没有用户体验方面的高校教育,各公司在这方面的基础也比较薄弱。我在实际工作中,会把用户体验的责任落实到实施工程师与测试工程师头上,要求他们多从客户的角度来思考软件应该如何设计。另一方面,我会要求项目组成员或者我自己亲自编写出用户体验设计文档,让整个项目小组来评审。希望通过这系列的工作,培养出公司自己的用户体验设计师。

  什么才是合适的项目团队模型?

  其实没有固定的标准,各种项目管理理论都会有它自己的见解。无论是传统的团队模型,还是MSF的团队模型,各种理论都会基于某些假设,我们实际工作中应用这些知识时,应充分认识当前我们的水平和存在的问题,针对性地调整模型将其转化为合适的情况,并在实际工作中持续改善它。

  从我的经验看来,以下几点是很重要的:

  1、项目中的每个人尽管水平和能力不一致,但应该都被平等的对待,所有人对项目同等重要。

  2、水平和能力较高的人,应该承担更多责任,并且有责任推动项目组人员提高水平。

  3、“学习、总结、进步”,是每个项目团队应该具备的基本特点。

  4、项目各角色的划分其实是灵活的,但项目所有人员的整体能力和水平,应该能覆盖实用项目团队模型的8种角色。如果缺失某种角色,或者某种角色的水平较低,项目组则应该有计划地去增强这部分的水平。

  5、项目组中所有人承担的工作负荷和责任应该大致均等。

  通过本文,希望能为各位打造高效的项目团队带来有益的启发。

posted @ 2011-11-18 14:43 顺其自然EVO 阅读(193) | 评论 (0)编辑 收藏

Java流缓冲区问题

     摘要: 听着张孝祥老师关于缓冲区知识的课,发现还是有一些没有掌握,动手试了一下,果然发现了问题。  先讲一下关于java缓冲区的知识,应用程序和IO设备之间存在一个缓冲区,一般流是没有缓冲区的,但是如果存在缓冲区,就会发现很大的问题。  错误代码如下:为了确保问题发生,我使用了BufferedOutputStream,使得手动构造出了一个缓冲区。import java.io.*; &n...  阅读全文

posted @ 2011-11-18 14:37 顺其自然EVO 阅读(1024) | 评论 (0)编辑 收藏

!!!!!!!Unbuntu中Java安装配置

Sun JDK的安装基本上有两种方式: 

  1. 通过Ubuntu提供的包管理工具进行安装 

Ubuntu在其包仓库里都包括有JDK的安装,只要sources.list设置正确,通过apt-get, aptitude, Synaptic Package Manager等都能安装,而且相关的设置也容易得多;在Ubuntu的新  发布版本里都带了JDK5.0,和JDK6.0的安装支持,而且版本都比较高,和Sun官方的发布没有很大的 版本落差.以Ubuntu7.10来说,提供的JDK5的版本为:1.5.0.13,JDK6的版本是1.6.03,算是很新的版本了. 

这种安装方式缺点是:对JDK具体版本的可选择性不是很灵活,你若是想安装最新的JDK版本,或由于特殊的原因必须安装特定的JDK版本,可能就比较费劲了。 

所以,若以此种方式安装JDK,请先通过apt-cache search, aptitude, Synaptic Package Manager等工具查询你的Ubuntu发行版本可安装的JDK版本是否能符合你的开发要求;具体安装 步骤请看参阅部分提供的文档。 

2. 通过Sun网站提供的自解压包进行手动的安装 

这种方式显然有它的好处: 可自由选择JDK版本,能进行灵活的配置。其实JDK的配置是很简单的:能让系统找到JDK所在的目录(JAVA_HOME),以便调用其目录中bin目录下的相关命令脚本。 

在此以Ubuntu7.10系统,Sun JDK 6.0 update 4为例说明一下具体的安装方式: 

2.1.  从Sun站点下载jdk 6.0.4的Linux自解压文件 jdk-6u4-linux-i586.bin; 

2.2. 安装配置 

cd /usr/local/lib 
sudo cp /home/jdk-6u4-linux-i586.bin ./ 
sudo chmod +x jdk-6u4-linux-i586.bin 
sudo ./jdk-6u4-linux-i586.bin
 
执行最后一步命令后便在当前目录下多了一个“jdk1.6.0_04“的目录,里面是jdk-6u4-linux-i586.bin解压后JDK的全部文件; 
由于Ununtu本身带了gij的JVM实现,所以当你在Terminal输入:  "java -version"时会显示: 
java version "1.5.0" 
gij (GNU libgcj) version 4.2.1 (Ubuntu 4.2.1-5ubuntu5)
 
的相关信息。也就是系统中有两个JVM实现,而且gij JVM还被其它的Ubuntu工具或软件使用;所以这种情况下就得使用 Debian提供的“update-alternatives“工具来完成程序多版本实现的选择了: 
sudo update-alternatives --display java 
发现系统只列举了gij  JVM;因为jdk6是通过手动解压安装的。 
现在输入下面的两行命令: 
sudo update-alternatives --install /usr/bin/java java /usr/local/lib/jdk1.6.0_04/bin/java 60 
sudo  update-alternatives --install /usr/bin/java java /usr/bin/gij-4.2 40 

注意1,2行尾的60,40是优先级;现在把JDK6设为了首选; 
输入: ls -l /etc/alternatives/java 发现JVM已经指向了jdk6的解压目录: 
lrwxrwxrwx 1 root root 35 2008-01-25 17:55 /etc/alternatives/java -> /usr/local/lib/jdk1.6.0_04/bin/java 

cd /usr/bin 
sudo cp java java.bak 
sudo ln -sf /etc/alternatives/java . 


现在再执行: 
java -version 

java version "1.6.0_04" 
Java(TM) SE Runtime Environment (build 1.6.0_04-b12) 
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing) 


若想变更JVM实现,输入: 
sudo update-alternatives --config java 
进行配置; 

2. 3. 设置环境变量 

在/etc/profile中加入如下的内容: 

JAVA_HOME=/usr/local/lib/jdk1.6.0_04 
JRE_HOME=/usr/local/lib/jdk1.6.0_04/jre 
CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib 
export JAVA_HOME JRE_HOME CLASSPATH 


okey, JDK安装配置完成。 


安装与配置IDE 

  1. Eclipse的安装与配置 

1.1 从eclise.org下载Eclipse开发平台 
如类似以下的文件:eclipse-java-europa-fall2-linux-gtk.tar.gz. 

1.2 解压文件 
sudo mkdir /usr/local/dev 
sudo mkdir /usr/src/dev 
sudo cp eclipse-java-europa-fall2-linux-gtk.tar.gz /usr/src/dev/ 
cd /usr/src/dev 
tar zxvf eclipse-java-europa-fall2-linux-gtk.tar.gz  -C /usr/local/dev
 

1.3 建立一个Eclipse可执行文件 
sudo touch /usr/bin/eclipse 意思是新建立一个空文件,因为在/usr/bin下面没有eclipse这个文件的。
sudo chmod 755 /usr/bin/eclipse 意思是让这个空文件可以被所有人读写的权限
sudoedit /usr/bin/eclipse
  这就相当于Windows下面的快捷方式一样
内容如下: 
#!/bin/sh 
export ECLIPSE_HOME="/usr/local/dev/eclipse" 
$ECLIPSE_HOME/eclipse $*
 

然后按ctrl+x退出;

现在打开Terminal,执行"eclipse"应该能打开Eclipse了。 

1.4 添加Eclipse到Gnome菜单中 
sudoedit /usr/share/applications/eclipse.desktop 
内容如下: 
[Desktop Entry] 
Encoding=UTF-8 
Name=Eclipse 
Comment=Eclipse IDE 
Exec=eclipse 
Icon=/usr/local/dev/eclipse/icon.xpm 
Terminal=false 
Type=Application 
Categories=GNOME;Application;Development; 
StartupNotify=true
 

  2. Netbeans的安装与配置    

2.1 从netbeans.org下载Netbeans开发平台 
如类似以下的文件: netbeans-6.0-javase-linux.sh. 

2.2 安装文件 
sudo cp netbeans-6.0-javase-linux.sh /usr/src/dev/ 
cd /usr/src/dev 
sudo chmod 755 netbeans-6.0-javase-linux.sh 
sudo ./netbeans-6.0-javase-linux.sh 

执行最后一步后,出现安装界面,选择安装目录和JDK的位置,确定后完成安装,在当前目录生成了“netbeans-6.0"目录,里面是Netbeans的内容。 

2.3 建立一个Netbeans可执行文件 
sudo touch /usr/local/bin/netbeans 
sudo chmod 755 /usr/local/bin/netbeans 
sudoedit /usr/local/bin/netbeans
 
内容如下: 
#!/bin/sh 
#!/bin/sh 
export NETNEANS_PATH="/usr/local/dev/netbeans-6.0/bin" 
$NETNEANS_PATH/netbeans $* 



2.4 添加Netbeans到Gnome菜单中 
sudoedit /usr/share/applications/netbeans.desktop 
内容如下: 
[Desktop Entry] 
Encoding=UTF-8 
Name=NetBeans6.0 
Comment=Sun Netbeans IDE 
Exec=netbeans 
Icon=/usr/local/dev/netbeans-6.0/nb6.0/netbeans.png 
Terminal=false 
Type=Application 
Categories=GNOME;Application;Development; 
StartupNotify=true
  

  3. IntelliJ Idea的安装与配置  

3.1 从jetbrains.com下载IntelliJ开发平台 
如类似以下的文件:idea-7.0.2.tar.gz. 

3.2 解压文件 
sudo cp idea-7.0.2.tar.gz  /usr/src/dev/ 
cd /usr/src/dev 
sudo tar zxvf idea-7.0.2.tar.gz   -C  /usr/local/dev 
sudo mv idea-7590 idea 


3.3 更改/etc/profile 
IntelliJ Idea启动将JAVA_HOME命名为"IDEA_JDK"  或"JDK_HOME",所以需在/etc/profile中添加JDK_HOME设置,更改后的/etc/profile为: 

JAVA_HOME=/usr/local/lib/jdk1.6.0_04 
JDK_HOME=/usr/local/lib/jdk1.6.0_04 
JRE_HOME=/usr/local/lib/jdk1.6.0_04/jre 
CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib 
export JAVA_HOME JDK_HOME JRE_HOME CLASSPATH 
       
之后重启系统; 

3.4 建立一个Idea可执行文件 
sudo touch /usr/bin/idea 
sudo chmod 755  /usr/local/bin/idea 
sudoedit  /usr/local/bin/idea
 
内容如下: 
#!/bin/sh 
export IDEA_PATH="/usr/local/dev/idea/bin" 
$IDEA_PATH/idea.sh$*
 

3.5 添加IntelliJ Idea到Gnome菜单中 
sudoedit /usr/share/applications/eclipse.desktop 
内容如下: 
[Desktop Entry] 
Encoding=UTF-8 
Name=Idea 
Comment=IntelliJ Idea 7 
Exec=idea 
Icon=/usr/local/dev/idea/bin/idea32.png 
Terminal=false 
Type=Application 
Categories=GNOME;Application;Development; 
StartupNotify=true
 

  4. Emacs下的配置  
请参考我写的另一篇文章: Emacs下配置Java开发环境 

参阅资料: 

1.  到Sun java站点下载JDK实现。 

2. 请参考Ubuntu Java文档中通过包管理工具的实现。 

3. serios.net中有关于Debian, Ubuntu下安装配置JRE,JDK的精彩说明。 

4. 参考How to Install Sun Java on Debian的另外一种安装方式。 

5. 参考update-alternatives的文档,看相关命令的操作。 

6. 到Eclipse站点下载Eclipse IDE for Java Developers. 

7. 看Ivar Abrahamsen关于Ubuntu下配置Elipse的精彩说明. 

8. 到Netbeans站点下载Netbeans IDE. 

9. 到Jetbrains站点下载IntelliJ IDEA.

posted @ 2011-11-18 11:19 顺其自然EVO 阅读(1144) | 评论 (0)编辑 收藏

深入了解HTML5

http://www.comsharp.com/GetKnowledge/zh-CN/It_News_K701.aspx

posted @ 2011-11-18 10:11 顺其自然EVO 阅读(542) | 评论 (0)编辑 收藏

仅列出标题
共394页: First 上一页 362 363 364 365 366 367 368 369 370 下一页 Last 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜