一剑飞虹

道可道非常道,名可名非常名
posts - 75, comments - 62, trackbacks - 0, articles - 17
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2009年6月18日

[转]软件测试与Junit实践 P29
测试参与的5个阶段:

需求阶段

这个阶段的测试工作表现为需求复审会议,要求测试人员具备项目所涉及的行业知识、良好的客户沟通、熟练的工具使用技能等综合素质,因为本阶段加入了对UML用例图和顺序图的运用,所以测试人员需要对大量的UML图例进行业务复审。

设计阶段

这个阶段的测试工作表现为设计复审会议,复审会议综合了对设计模型、数据模型、界面原型、事件驱动模型等工件的复审工作,该阶段对测试人员的综合素质要求最高。

实施阶段

让一个没有半点编码经验的人做单元级测试是个天方夜谭,没有编程经验的测试人员根本无法把握这个阶段的工作。虽然大部分人认为实现人员应该全面负担单元测试工作,但是作为测试人员,你就真的放心他们所做的吗?你还是需要经常进行代码抽查之类的测试活动。

测试阶段

这个阶段的某些行为是新入测试行业人员或者不成熟项目管理者的一个精神寄托,比如所谓的简单粗糙的功能测试(就是模拟用户的行为或者是模拟自己的行为把软 件用一遍)。前者终于找到了进入软件行业的最低门槛,后者找到了雇佣廉价劳动力和分离企业闲置人员的理由,这真是中国软件行业的悲哀。
本阶段对测试人员有更高级的要求,比如开发一些测试工具或者测试驱动程序。

部署阶段

这一块面临项目或者产品的最终交付,测试工作的重要性尤为突出。如果输出是组件形式,我们需要进行装配测试,这要求测试人员有编写模拟测试环境的能力。如 果输出是产品形式,我们要做不同操作系统的安装测试和产品适应性测试,这要求测试人员有多系统的操作能力。如果输出是同产品不同版本形式,我们要分离不同 版本产品做版本差异性测试。

posted @ 2009-06-18 17:55 greatqn 阅读(11) | 评论 (0)编辑

2009年6月10日

偶得EMMA:http://www.ibm.com/developerworks/cn/java/j-lo-emma/

照葫芦画瓢,很快就把自己的单元测试套上EMMA。文章里已经介绍很详细了,照示例项目,改几个目录就OK了。

emma报表如下:

name class, % method, % block, % line, %
all classes 48%  (182/382) 42%  (1837/4375) 14%  (14960/107942) 18%  (4099.4/22681)

block:空行,注释等

line:代码行。<--这东东好啊。

emma小巧,简单,实用。

posted @ 2009-06-10 16:52 greatqn 阅读(30) | 评论 (0)编辑

2009年5月12日

魏文王问名医扁鹊说:“你们家兄弟三人,都精与医术,到底哪一位最好呢?”
扁鹊答说:“长兄最好,中兄次之,我最差。”
文王再问:“那么为什么你最出名呢?”
扁鹊答说:“我长兄治病,是治病于病情发作之前。由于一般人不知道他事先能铲除病因,所以他的名气无法传出去,只有我们家的人才知道。我中兄治病,是治病于病情处起之时。一般人以为他只能治轻微的小病,所以他的名气度只及于本乡里。而我扁鹊治病,是治病于病情严重之时。一般人都看到我在经脉上穿针管来放血,在皮肤上熬药等大手术,所以以为我的医术高明,名气因此响遍全国。”

对质量管理来说,测试是最未的一个,因为他能找出一堆bug,面上看着热闹。所以现在说到质量就会说测试。但测试是不会改善软件质量的。

流程控制次之,RUP也好,敏捷也好,SCRUM也好,它能够理顺开发流程,对质量有促进作用。但流程与质量没有必然的联系。

真正影响软件质量的,是人。是开发团队。

posted @ 2009-05-12 16:08 greatqn 阅读(93) | 评论 (0)编辑

2009年5月7日

java开源项目:http://easymock.org/ 

这里简单记录一下使用方法:

1.下载easymock.jar,放到项目lib目录下。

2.测试代码:

HttpServletRequest request = EasyMock
        .createMock(HttpServletRequest.
class);
EasyMock.expect(request.getParameter(
"ffff")).andReturn("33333");
EasyMock.expect(request.getParameter(
"ffff")).andReturn("444");
EasyMock.expect(request.getRealPath(
"/")).andReturn("fffffffff")
        .anyTimes();
EasyMock.replay(request);
System.out.println(request.getRealPath(
"/"));
System.out.println(request.getParameter(
"ffff"));
System.out.println(request.getRealPath(
"/"));
System.out.println(request.getParameter(
"ffff"));
EasyMock.verify(request);
3.creatMock 生成一个mock对象。

4.expect 注入方法调用后的返回值,可以设置调用次数,每次的返回值可以不同。

5.replay 切换到播放模式,调用次数超过设置值时会报错。

6.verify 回收。

posted @ 2009-05-07 19:40 greatqn 阅读(93) | 评论 (0)编辑

2009年4月22日

这篇文章以前也看过,不过这类文章不同的人,不同的时间去阅读,会产生不同的感觉。

全文:横梁上的蜘蛛

世间最珍贵的不是‘得不到’和‘已失去’,而是现在能把握的幸福。

对开发来说,我们期望有设计,能把架构搭得很灵活,不要经常修修补补。我们期望有测试,能把系统里的问题都找出来,不要突然蹦出个bug,搞得措手不及。我们期望一开始把文档写全一点,改点功能时不要把代码从头全翻一遍。我们期望有充足的人手,我们期望有充裕的工期,我们期望有安静的环境,我们期望有更快的机器,。。。

这些‘得不到’和‘已失去’的东西,都是让人很憧憬,很向往。但我们要面对现实,要把握现在。重构,测试,文档,过去没有的,就现在开始补全。不要只停留在憧憬上。

在环境不可改变的时候,我们可以改变自己,用微笑去面对困难。

posted @ 2009-04-22 22:55 greatqn 阅读(104) | 评论 (0)编辑

2009年4月2日

公司准备做cmmi3,前期与咨询公司做了一下接触,对整体过程有了点粗浅认识.先做一下笔记,以待日后验证.

cmmi的22个过程域,略过,听到这个数字就头大一倍.

将度量谨慎地用于绩效管理.过早地应用,会使收集到的数据失真.

对拿到的数据能采取什么行动?以此验证数据是否有用.

质量是开发出来的,不是测试出来的.

Bussiness First,Model Second.

过程改进是为了帮助企业商业目标的实现,不是为了改进而改进.

3级把过程稳定(每枪都能打个5环),4级改进过程(向8,9环靠拢),5级创新过程(10环).

工程师定义:在规定时间内,按照客户的要求,生产高质量的产品.

统计过程控制(Statistical Process Control),一到高端就看到数学的影子,原来统计这么做应用的.太高深,听了就想睡.

TOC约束理论(Theory of Constraints):一根链条,如果想要增加它的强度的最快最有效的办法,不是把每个链条都加强,而是找出最弱那一个把它加强就好了,然后依次继续找出最弱的加强,直到整体强度达到你的要求。跟打蛇打七寸,擒贼先擒王一个道理.

 

posted @ 2009-04-02 20:58 greatqn 阅读(12) | 评论 (0)编辑

2009年3月15日

"懒惰.傲慢和缺乏耐性"是程序员的三大美德.

懒惰,因为你一直致力于减少需要完成的工作总量.

缺乏耐性,因为一旦让你浪费时间去做本该计算机做的事,你就会怒不可遏.

傲慢,因为被荣誉感冲昏头的你会把程序写得让谁都挑不出毛病来.

--Larry Wall

posted @ 2009-03-15 23:15 greatqn 阅读(64) | 评论 (0)编辑

2009年3月11日

使用svn co http://jqueryjs.googlecode.com/svn/tags/1.3.2 获取jquery的1.3.2版本.

查看日志,这个目录copy form path:/trunk/jquery.这是标准的trunk,tags目录方案.

项目包含三个目录build,src,test.

src 240k,test 1.4M.光看这大小就能感觉到测试是件多么重要的事情.

根目录下就看到了build.xml,还有Makefile.都是自动构建的文件.怀着敬仰的心情,打开build.xml文件学习一下.

1.<property description="Source Folder" name="SRC_DIR" value="src"  />

属性,每一项都有description进行描述.哎,人家就是仔细,回头把自家的也都加上.

2.<loadfile description="Version to build" property="version" srcfile="version.txt" />

version.txt文件里就一个版本号1.3.2,加载进来做为version属性.

3.<concat destfile="${JQ}">
        <fileset dir="${SRC_DIR}" includes="intro.js" />
   <fileset dir="${SRC_DIR}" includes="core.js" />
</concat>

合并文件

4.<replaceregexp match="@VERSION" replace="${version}" flags="g" byline="true" file="${JQ}" />

正则替换文本.

5.<apply executable="java" parallel="false" verbose="true" dest="${DIST_DIR}">
            <fileset dir="${DIST_DIR}">
                <include name="jquery.js" />
            </fileset>
            <arg line="-jar" />
            <arg path="${YUICompressor}" />
            <arg value="--charset" />
            <arg value="ANSI" />
            <arg value="-o" />
            <targetfile />
            <mapper type="glob" from="jquery.js" to="jquery.min.js" />
        </apply>

压缩js,清理空格,注释,还可以重命名变量,用a,b,c代替.这个真是好东西啊,以前找过好久都没找到.

6.<java jar="${JAR}" fork="true">
            <arg value="${BUILD_DIR}/build/pack.js" />
            <arg value="${JQ}" />
            <arg value="${JQ_PACK}" />
        </java>

js加密,打包.这个出来的文件是最小的.

7.<java jar="${JAR}" fork="true">
            <arg value="${BUILD_DIR}/runtest/test.js" />
       </java>

js也有单元测试,真是大开眼界.

 

posted @ 2009-03-11 23:28 greatqn 阅读(136) | 评论 (0)编辑

2009年2月1日

这套模板是两三年项目积累下来的一个框架模板,应该说这类三层架构的代码生成器已经很多。用数据库表驱动的生成模式也快过时了,时髦一点的应该是ROR这种模型驱动的方式。不过呢自己用用,能提高工作效率就行。以前学习asp.net的时候,从duwamish,petshop上学到不少东西。这次拿点东西出来,主要是做一下自我总结,促进一下交流。只要能帮上你一点忙,也算咱为中国的软件事业发过一点光了。

本模板实现的是单表的CURD操作,包含基本的列表和编辑操作aspx页面。剩下的多表关联,分页查询在项目中的比例不会很大,是卡性能的地方,也是手工编码需要发挥一下的地方。

本模板不当,不足的地方,欢迎大家来电指正。

正文:Web项目三层架构Codesmith模板[Greatqn Templates V1.0]

posted @ 2009-02-01 22:25 greatqn 阅读(1554) | 评论 (0)编辑

2009年1月22日

一直没明白trunk branches tags的意思,今天问了一下google,来理解一下。

trunk:主线,开发过程中的工作目录
branches:支线,临时分支,定制化需求
branches/order008
branches/order009
tags:发布目录,不做修改
tags/release-1.0
tags/release-1.1

场景一:
产品开发已经基本完成,并且通过很严格的测试,这时候我们就想发布我们的1.0版本,不再提交代码
1. svn copy svn://server/trunk svn://server/tags/release-1.0 -m "1.0 released"

场景二:
有一个客户想对产品做定制,我们可以从已发布库中选择一个版本,做为起点来开发
1. svn copy svn://server/tags/release-1.0 svn://server/branches/order009 -m "定单009" 

场景三:
有一天,突然在trunk下的core中发现一个致命的bug,那么所有的branches一定也一样,这时需要进行分支合并
1. svn -r 148:149 merge svn://server/trunk branches/order008
2. svn -r 148:149 merge svn://server/trunk branches/order009
其中148和149是两次修改的版本号。

由于我们是给自己公司的网站源码做配置管理,没有明确的trunk branches tags区分。我们以SCRUM的形式做开发,一般保持两个版本线,一条主线A,一条支线B。A与运行版本保持一致,B做为Sprint开发的工作目录。A,B都可以提交代码,视情况在A,B之间进行部分合并。Sprint开发完成后,进行总合并,并选择其中一条继续做主线,移除另一条。下一期Sprint开始的时候,继续A,B两条线的开发。
这样做的目的,也是为了适应自己的配置需求,在进行B线开发时,经常会有A线的改动。A线的代码保持最新,可更新到运行环境的能力。混乱经常发生在合并A,B的时候,不过长痛不如短痛,用一时的混乱,换取长期的稳定。

posted @ 2009-01-22 10:21 greatqn 阅读(308) | 评论 (0)编辑