发布新日志

  • 面对变化,是接受还是抗拒

    2013-11-26 20:13:05

    最近公司变动非常大,两个老大一个月内不到突然离职,又迎来新的老大,新的风格或者方向。
    所有的PD一下子全部转去做运营,产品无人管理,但是人人都是产品经理,不过也好,测试和开发说了算,不用计较和争论,一个产品很快就可以推出。
    事情是非常非常多,已经不去想了,很多事情都是开发先知道,测试只是在提测的时候才知道,我也想提前了解项目情况,无奈太多了、变化太快了,算了吧,在提测的时候把好关,不让他们蒙混过关就OK了。
  • 需要人呀,需要人呀,杭州的大公司要人呀

    2011-09-05 11:14:23

    阿里云计算公司

    无线测试工程师

    工作地点:杭州

    招骋人数:多人

    职位描述:

    1. 从事手机客户端和多媒体产品测试工作,包括系统、和应用(应用商店、语音、视频、音乐等)

    2. 根据测试计划,定义各种测试类型和相关用例, 主要包括单元测试, 功能测试和系统测试

    3. 部署和执行自动化测试, 针对测试结果, 进行有效的分析和定位,提供质量改进依据和并完成测试报告。

     

    职位要求:

    1.   本科及以上学位,计算机相关专业毕业;

    2.   两年及以上测试,或者1年开发经验,有志于转向测试方向;

    3.   精通至少一种高级语言,例如c++javac#ShellPythonrubyperl等;

    4.   较强的学习和研究能力,有较好的分析问题能力和解决问题能力,并持续改进现有流程和方法

    5.         能够独立和开发人员合作,定位软件缺陷,并且添加相关自动化测试用例进行回归测试;

    6.   熟悉LinuxWindows等操作系统,有Andriod测试经验者优先

    7.   良好的团队合作精神,能承受一定的工作压力;

    有意向请发到 jinqiangyu@alibaba-inc.com

     

  • 周鸿祎谈互联网微创新和用户体验

    2010-08-06 20:26:44

  • 节能车补贴的骗局

    2010-08-06 19:52:18

    好久没碰到骗子,第一次遇到这样的。
    事情是这样:
    前段时间我买了辆车,听说是在节能车的行列里头,能享受3000元的补贴,跟销售商那边也说过了,他们正在给我申请。
    8月2日,有个女的打电话给我(手机 15959484110),声音说话有气无力的,说是杭州车管所,问我是不是买了车,连牌子、车牌号、哪里买的都报出来了,我相信了,女的说节能车补贴的通知单寄到我这里给退回来了,寄到什么什么街道去了,我说那个地址不对,她说今天是最后一天了,给了我一个申请号,让我打一个电话(010-51291987),是国家财政局的.
    按照她的指示,我打过去,报了申请号,接电话也是个女的,说我有什么银行卡,要把钱打到我卡上,让到银行ATM机上把卡插进去,要和她那边的电脑对接一下(听到这里我当时还没反应过来,但心理也怀疑,因为她说有10%的钱补贴,可最近的节能补贴只有3000元)。
    我跑到楼下的农业银行,把卡插到ATM上,然后打电话给“国家财政局”的那女人,她让我按“转账”,我一听就不对了,赶紧挂掉,问银行工作人员,他们说肯定是骗子,不要离她,于是我就罢了。
     
    这里公布下这两个号码,以免其他人上当受骗
    15959484110 15959484110   15959484110
    010-51291987 010-51291987  010-51291987
  • 买车砍价技巧

    2010-07-09 16:17:14

    到了4S店后可以先看看车,坐坐,摸摸,等销售员过来找你。(注:别一进店就急吼吼拉着店员坐下来开杀,那让人家一眼就看出你是吃了秤砣的王八,想不宰你都对不起那刀。)和销售员聊聊车,并表示出你很喜欢这车,但也不时透露出其他牌子的几款车也不错的想法。火候差不多时,可以要求大家坐下来谈谈价格。(注:一定要坐下来谈,这样才让销售人员觉得你有诚意,你要是站着问价格,我保证十有八九是指导价,要不就是一个与网上报价相去甚远的价格)重要提醒:关于寻找谈判的销售人员,请选择男性,男人一般容易冲动,爽快,销售人员也是一样,女的就比较斤斤计较点,谈到最后肯定费力。(各位女侠表那拍我啊)再说女顾客砍男销售肯定有天然优势,男顾客要是砍女销售,那就难罗.
      
      一般坐下后销售会拿出张表来帮你算各项价格,这里需要注意的重点出现了:首先我们把价格分为以下四块,1、净车价,2、购置税,3、保险,4包牌。四块中购置税与保险是与净车价直接挂钩的,净车价砍下来了,税和保险都要重新计算。(注,很多销售会在这里设下陷阱,比如全包四块总价为15万,净车价是13.5万,当你把车价砍下3000时,销售就自然的在总价里帮你扣去3000,变成14.7万买给你。这里其实被他隐瞒了购置税和保险下调的那一块,顾客在这里吃了暗亏)综上所述,我们要砍的目标就是净车价。
      
      砍价时,不要暴露自己的低价,让销售摸不到你的心理价位,逼他保出自己的最低价。注意第二个需要注意的重点出现了:4S店组织一般分3层:销售员—(主管类)—经理,之所以要说一下组织结构,是因为一般各级别能够拿到的优惠标准是不同的。举例来说,比如销售员优惠的最大的幅度是3000,那经理就可能是5000,总经理就可能是8000,各级有各级的限制,要是超过这个幅度,就要向各自的上级请示的。所以很多顾客会在谈判时遇到这种情况,就是谈价时销售员问你是不是今天就买或者能付定金,要是可以的话他去请示下领导,给你个最低价。这个时候你还是不要说出你的心理价,但你可以告诉他,要是价格合适可以交定金,让他去请示领导。请示归来后,你会发现价格下来好大一快,似乎已经到自己心理价位,先别惊喜,很多人到这一步就准备签合同了,千万忍住,这个价很可能还不是他领导同意的最低价,销售一般会给自己留余地,现在砍价战斗才真正开始。
      
      当你看见请示过后的价格后,要露出失望的神色,表示这个价格还是离你的心理价位有一定的差距,然后和他聊聊这车的缺点,已经竞争车型的优点,暗示他要是实在谈不下来只能去别家店看看了。注意第三个需要注意的重点:这时和你一起来的人的作用就体现出来了,举例说明,比如男的说实在谈不笼要去别的地方看看,女的就要表示其实自己挺喜欢这车的之类的理由,让男的欲走还留。其实这都是做给销售看的,让他觉得煮熟的鸭子要飞了,迫使他必须说出刚才领导同意的真正最低价。以上目的达到了,又一个低价诞生了,这是同样不要喜形于色,还是要忍住。继续是比较遗憾的神态,但是要很真诚的安慰对方,告诉销售,他的态度服务很好,我们很感动,出于对他的信任,我们告诉你我们的心理价格,(注:这时销售的报价可能已经在你心理价格以下,那我们就在他的最低价上砍去个1000~2000)报价后,很大度的对他说,我也知道你很为难,要不你再请示一下你们领导,要是可以我们立马交钱。这时一般销售会再次给领导电话的,请示的结果要是满足了你的报价,那恭喜了,你成功了。要是没有达成你的要求,比如不能再便宜或者只能便宜给500,那这时第四个注意重点出现了,就是问销售要领导电话或者直接找领导谈,这一谈下来领导肯定多少还会再让点的。到这个时候,四次冲锋下来,现在的价格基本上已经挤干水分了,可以接受了。
      
      关于赠品
      
      是否到了这时就差不多了呢?离签合同还早呢,细心的同学可能已经发现了,以上谈价过程中没有提到增品,这里是第5个需要注意的重点,那就是千万不要将砍价也要赠品混在一起谈,这要肯定会分散注意力不能集中力量打击敌人的。很多人在谈价过程中会遇到这种情况,就是销售说价格是谈不下来了,我们多送你点东西好了。4S店惯用方法就是送几千的礼包东西随你挑,结果拿他的价目标一看,一个个价格都虚高的离谱,一个几十的脚垫能到几百,几千元的范围也挑不了几个好东西。所以我们在谈价格时要避开赠品,当然你也不要说类似我不要赠品你价格再便宜点的话,这样会把你砍完价格后想磨赠品的路堵死的。你可以对销售说,赠品不值钱,那些都是小事类似的话带过就好了,到最后再和他好好磨。磨赠品的时候,需要注意的就是别光看数量,要注重质量。先从大头磨起,比如贴膜,真皮座套,GPS,地盘装甲,然后才是踏板,脚垫,挡泥板之类。这里技巧不多,如果净车价已经给你砍的很低了,那赠品磨起来的难度就很大了。这里的秘诀就一个字,磨,跟他耗,同去的人旁边帮着说,作用很大。
      
      关于保险:
      
      保险其实网上搜搜有很多信息的,而且保险公司种类繁多,各家实力不同,价格也相差很大,所以不好归纳,但基本都是与4S店以返利的形式挂钩的。要是自己没有做车险的熟人,这里建议还是在4S店做保险比较好,可能价高个两三百,但以后理赔什么的,有4S店出面比较方便快捷,就当花钱买个省心吧。另外提醒下,现在在4S店做保险一般不超过7折,如果超过了,跟他砍。
      
      关于购置税:
      
      这个也有好几种算法,这里算法我采用的是:净车价÷11.7=购置税 以开头的例子计算,13.5万的车,最后砍成13.2万,除了总价便宜3千外,购置税降了=13.5/11.7-13.2/11.7=256.4元,也就是说你实际结算是可以降3256.4元。大家看清了哦,别让4S店把这256.4给漏过去了,那样损失的就是你自己了。
      
      关于包牌:
      
      这个地域性差异就很大了,不好总结归纳,大家见谅。不过有个小提醒,就是关于牌照的框架和车管所的停车费,要跟4S店敲定,包牌就是全包包括那个框架和停车的钱,
      
      因为有很多顾客在上牌时被额外索取了这类钱。
      
      战后篇:
      
      经过一场大战下来,相信大家基本上能得到个令自己满意的战果了,千万别得意忘形哦,后戏还是很重要的。所谓了后戏就是和4S店人员套近乎,建立感情。表示感谢对方的良好服务,态度很好,要介绍亲朋好友也来买之类的(人家被你砍的血淋淋的,说几句热乎话安慰下,也显得咱人品好嘛)其实还不是为了以后保养,维护的时候,大家熟了好办事啊。
      
      匆匆写来,罗嗦了一大堆,大家要是看累了可别怪我哦,没功劳也有苦劳嘛,就希望大家买车后能有个好心情。
      
      最后,我要提出本篇最最最最最重要的需要注意的重点事项:买卖交易,讲究个缘分,实在谈不笼也别争个脸红脖子粗的,要保持风度是不?买了车后期保养维护理赔之类的不还是要麻烦人家的嘛,大家搞僵了对你自己也没好处嘛。再说人家销售也是打工混口饭吃,砍 价 不 是 砍 人,语气态度很重要,别太为难人家了。
      
      好了就到这吧,以上仅是自己的一点个人观点,对的不对的都请大家担待着点,要是各位准备买车的觉得有用的话,大家帮我顶起,大家同喜下,也不枉费我那么辛苦的打字。谢谢大家关注!!!
     
  • URL长度限制

    2010-06-10 16:51:00

    SD项目碰到一个问题,发送isearch请求时,url非常长,特别长的url会被isearch截断(听说4k之后就截断),另外如果在浏览器中输入url,还会受到不同浏览器的长度限制,但程序中采用get方法发送url是没有长度限制的

    1. IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应

    2. 对于Firefox浏览器URL的长度限制为65,536个字符

    3. Safari (Browser) ,URL最大长度限制为 80,000个字符
    4. Opera (Browser),URL最大长度限制为190,000个字符。

    5.Google (chrome),url长度一旦超过8182个字符时,出现如下服务器错误:
    Request-URI Too Large

    The requested URL's length exceeds the capacity limit for this server.
    Apache/2.2.12 (Ubuntu) Server at 127.0.1.1 Port 80

    另外web服务器也会对长度作限制

    1.  Apache (Server)  能接受最大url长度为8,192个字符

    2. Microsoft Internet Information Server(IIS) 能接受最大url的长度为16,384个字符

  • 敏捷测试和传统测试的区别

    2010-05-20 15:44:22

    到底有啥区别?敏捷测试是不是一种噱头,还是和传统测试有本质区别,这个问题困扰着我。
    敏捷开发的宣言:
    个体和交互  胜于  过程和工具
    可工作的软件  胜于  面面俱到的文档
    客户协作  胜于  合同谈判
    响应需求  胜于  遵循计划
    这些宣言如何去理解呢
     

    敏捷宣言 – 个体和交互

    •个体和交互

    1.每个团队成员。(这是必需的,每一个项目组成员都要和别人沟通、互动,除非这个项目就他一个人)

    2.发挥每个成员的特点和长处。 为个体塑造弹性的发挥空间。(刚毕业的人做PD、编程序、做测试哪来什么特点和长处,学习都来不及,所以敏捷开发是很有经验的一棒子人去做一个项目,这样各自可以发挥得淋漓至境;话句话说,不是敏捷开发也要强调发挥个人长处,例如让一个长期做功能测试的人去做编程,让DBA去做功能测试,这明显是错误的嘛)

    3.合作、沟通比单纯的写程序更重要。(合作、沟通,这个任何时候、任何地方、任何项目都是必需的,沟通的目的是确认接下来所做的事情是正确的,或者程序员之间交流经验、讨论技术难点)

    4.团队的意义所在 – 你不是一个人在战斗!(现在软件企业,哪个不在强调团队合作)

    •过程和工具

    1.过程追求标准化,限制了个体的发挥。(对于小项目可以这样做,但是,如果做产品没有标准化,产品的生命力在哪里?为了程序员个人的能力发挥,难道限制产品的扩展性、易用性,代码可以可以不用写注释了吗)

    2.工具-越强大的工具学习成本越高。目标是软件开发,不是学习工具。(谬论,工具是用来提高效率的,怎么会变成拖后腿的东西呢;强大的工具一旦学成,以后可以坐享其好处,人,不能这么短视,项目,也不能这么短视)

    3.选择合适的工具。(合适不合适,各有己见)

    敏捷宣言 – 可以工作的软件

    •可以工作的软件

    1.开发的目的是交付可以工作的软件 (所以敏捷只能再小项目和业务简单的项目中运用)

    2.对用户来说文档还存在一定的想像空间,会造成沟通障碍。(文档又不是一板子钉死的,用户不理解就要解释给用户听,但你总不能只带着一张嘴去跟用户说吧;或者拿着只实现了1/10功能的可交付软件去给用户看?)

    3.最好的文档是代码和团队。(代码是最好的文档?但是别人也要读得懂啊,客户能读得懂吗,难道给客户培训一年再让他们去理解代码?我们程序员居然有人拿这个当理由不写文档,你说我一个测试人员有空去你们的代码吗)

    •面面俱到的文档

    1.没有文档的项目是个灾难(看多大的项目了,小项目没文档照样好好的)

    2.文档的目的是沟通和总结,让大家明白要做什么、怎么做(这个没错)

    3.提倡的文档方式-看图说话(对项目成员要求比较高;图的类型要明确下,别只画个UI,就算图了,还有流程图、用例图等等)

    4.必要的时候也是需要完善文档的(啥时候?)

    (是本书都会教上面这些)

    敏捷宣言 – 客户合作

    •客户合作

    1.绝大多数软件系统是不能直接带来效益的(哪来的结论?论据呢)

    2.客户对自己的需求也不是很明确的,我们需要充当顾问(有的客户确实是这样)

    3.跟客户是一起来完成一件事情的,需要客户的不断反馈(什么叫以客户为中心,这就是)

    •合同谈判

    1.软件公司是指着合同来生存的(在鄙人看来,敏捷适合企业级的ERP\MIS,或者政府级的OA自动化项目,对电子商务类基本不适合)

    2.谈判只能暂缓变化,不能阻止变化(变化是必然的)

    3.合同和谈判是必须的,客户合作是企业长期发展的选择(废话)

    敏捷宣言 – 响应变化

    •响应变化和遵循计划

    1.计划赶不上变化(根本就没有想到后面怎么做,哪来变化,本来就是很多不确定,走到哪算哪)

    2.需求在变化、开发人员对业务的认识在变化、技术点在变化(废话)

    3.长期计划稳定,短期迭代。2周到详细计划、一个月的粗计划、三个月的目标计划。(跟螺瀑布式迭代开发有何区别)

    4.当变化没发生的时候不要猜测变化(废话,能算出会有什么变化,那是神啊)

    5.着力完成本计划内的工作任务,不需要为后期工作预留过多的接口和功能冗余(这难道不是短视么?以前强调的扩展性为什么不要?如果现在不考虑,现在很爽,以后就会很痛苦,会付出几倍的汗水去实现)

    6.力求设计简单清晰、降低耦合、模块可以自说明、大胆重构(降低耦合,说的轻松,没有一定的功力和时间,快速响应能做的出来吗?又要快速出可用的软件,又要低耦合,想得美)

    总结

    •目标是完成可以工作的软件(哪个项目不是呢)

    •文档是用来沟通的中间产物(有些是,有些不是,例如帮助文档是要交付给客户的,甚至需求、设计文档和代码都是,所有权归客户所有)

    •团队合作和内部沟通是很重要的,每个人都要为团队负责同时团队也要为每个人负责。(任何开发模式都要求团队合作,除非项目里只有一人)

    •沟通需要争吵,不是一定要和谐。个体要极力为自己观点补充细节,更要聆听不同意见。但最终要统一意见。(误导别人,团队当然要和谐,但是要敢于发表自己的意见、敢于接受别人的批评)

    •工作是需要方法的,同样沟通也是(题目太大了,说了等于没说,具体是啥方法呢)

    •工作氛围是可以相互影响的,不需要太安静(和感冒一样,这主要取决于团队的领袖)

    •积极面对变化(必需的)

    •工作要:快乐、积极、学习、合作 (不是一个项目能做到的,跟公司的企业文化和激励制度有关)

    敏捷宣言的原则

    •我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意(有没有价值得客户说了算,要是一个软件烦他N次,敏捷也就OVER了)

    •即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。(给客户带来好处,但是给软件开发带来麻烦,老板愿意吗)

    •经常性地交付可以工作的软件,交付间隔可以从几周到几个月,交付时间间隔越短越好。

    •在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。(为什么需要天天?业务是保姆啊,如果业务人员天天和开发人员在一起,那谁和客户天天在一起?)

    •围绕被激励起来的个人来构建项目。给大家提供所需的环境和支持,并且信任大家能够完成工作(....)

    •在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈。(是的,但是不要没思考就和别人谈)

    •衡量进展的重要尺度是可运行的软件。(还是适合小软件)

    •敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期、稳定的开发速度(要响应经常性的需求变化,怎么保证稳定的开发速度?)

    •不断地关注优秀的技能和好的设计会增强敏捷能力。(所以还是需要学习强大的工具)

    •高质量完成本次迭代中最简单的工作是根本。(如何高质量?不是只要软件能运行就可以了吗,每个小任务要又快又高质量完成,怎么可能呢)

    •最好的构架、需求和设计出自于自组织的团队。(废话,如果来自其它团队,沟通不是很麻烦吗)

    •每隔一定时间,团队会在如何才能更有效的工作方面进行反省,然后相应地对自己的行为进行调整。(这个要看团队的领导者如何去主导这个事情,也算是团队的一个文化)

    敏捷开发实践 - 团队组成

    成员分类:

    •团队长

    •业务及需求代表

    •开发人员

    敏捷开发实践 – 结对编程(结对编程就是乌托邦啊

    •两个人在一台机器前共同开发一个功能模块(乌托邦)

    •随时沟通、讨论、画图,随时争抢键盘编码(乌托邦)

    •共同对本模块负责(乌托邦)

    •每天有3-4个小时结对编程就够了,其余时间对系统和技术点研究、测试(以前没有积累吗,什么都要现学现用么,那样质量会高吗)

    •结对编程的个体要经常变换,以便相互学习(说来容易,对方哪有那么容易接手的?两个人能力差不多还行,如果差别较大,那谁跟谁学啊)

    敏捷开发实践 – 任务分解

    •每周项目组长把任务分解成功能点,由队员来结对选择。每个功能点由两个人共同负责,一个人主负责。

    •选择的任务必须按时完成。

    •指定时间对任务的收回以可工作的软件为最高依据。(不用管质量和部署的复杂度吗?)

    •任务尽可能短小,到Function级别(一个任务到底是功能点还是function?就算是function,是哪一层的)

    •任务要分优先级别(必需的)

    •鼓励队员选择非专长功能点,要有相对专长的人配合(不懂啊,为啥这样,提高团队的技能吗,但是这样能保证按时交出可工作的软件吗)

    敏捷开发实践 – 重构

    •单一职责原则

    就一个类而言,应该仅有一个可以引起它变化的原因

    •开放封闭原则

    软件实体(类、模块、函数)应该是可以扩展但不可修改的

    •替换原则

    子类必须能够替换基类

    •依赖倒置原则

    细节依赖于抽象。细节是外层,抽象是内层。

    •接口隔离原则

    不强迫客户依赖他们不使用的方法。接口属于客户,不属于所在类的层次结构。

    总结

    开发项目首要的是解决项目成员之间的合作与分工,解决这个问题之后再选用一个适合团队项目开发和分工的框架引用其中的部分做指导。

    开发还是要尽可能的考虑到位,拿过来就干,每个人依赖沟通,可以培训一下,分析规划和设计是有必要的,总结经验很重要,套路是可变的。

     
  • 单元测试之优化测试用例1

    2010-05-18 17:13:47

    今天灵感突现,写了10几个测试用例,其中一个方法觉得自己想得比较多,给大家分享下
    被测试方法如下
    getSupplyList(int pageNo, int pageSize)

    根据页号和每页条数获取商家信息申请单列表

    Parameters:
    pageNo 页号
    pageSize 每页条数
    Returns:
    返回列表或空(null)

    测试用例如下

    1. testGetSupplyList 

    原理:

    1.1增加三个supply(可以理解成user)

    1.2 调用getSupplyList(1, 20),获得第一页,每页2条

    1.3 验证getSupplyList是否返回20条

    还值得优化的地方:可以验证下返回的supply每个属性值是否正确

    2.testGetSupplyList1

    测试pageNo为0的情况,应该返回第一页的内容

    3. testGetSupplyList2

    测试pageNo为-1的情况

    4. testGetSupplyList3

    测试返回数据的排序情况

    5. testGetSupplyList3

    测试返回数据的排序情况,返回的数据应该根据supplyID顺序排

    6. testGetSupplyList31

    测试pageNo最后一页时

    7. testGetSupplyList4

    测试pageNo超过实际页数时

    8. testGetSupplyList5

    测试pagesize为0和1时

     

    各位看过的,有经验的帮忙说道说道下,这样的单元测试是否可行?

     

  • 今日天气闷热

    2010-05-18 16:53:53

    上图是新浪的天气预报,蛮有意思,发现个问题

    天气舒适,不易发生感冒。这个不准啊,办公室里闷热的不得了,人很头晕,外面倒还比较凉快,但是湿度很大,人感觉很不舒服。

     

  • sonar学习-Cyclomatic complexity圈复杂度

    2010-05-17 13:51:35

    这个词不是很明白,下面是在网上查到的
    解释一
    控制流图是McCabe复杂度计算的基础,McCabe度量标准是将软件的流程图转化为有向图,然后以图论的知识和计算方法来衡量软件的质量。McCabe复杂度包括圈复杂度(Cyclomatic complexity)、基本复杂度、模块涉及复杂度、设计复杂度和集成复杂度等。控制流程图分析是一个静态的分析过程,它提供静态的度量标准技术,一般主要运用在白盒测试的方法中。
    Z$J l8i | J7J!N6{ l'z2B114943 控制流图的一个重要性质是它的可规约性(reducibility)。如果程序中不存在从循环外跳到循环内的goto语句,那么这个程序对应的控制流图是可规约的(reducible),反之这个控制流图就是不可规约的(irreducible)。因此,模块符合结构化程序设计的准则是控制流图可规约的基础。
    Q,_ V s }&`5p0w114943 程序环路复杂性也即为McCabe复杂性度量,它一般常用圈复杂度来描述,记录为V(G)。它用来衡量一个程序模块所包含的判定结构的复杂程度,数量上表现为独立路径的条数,即合理地预防错误所需测试的最少路径条数,圈复杂度大的程序,说明其代码可能质量低且难于测试和维护。经验表明,程序的可能存在的Bug数和圈复杂度有着很大的相关性。51Testing软件测试网 Z i0c ~*n,S'I
    圈复杂度的计算方法很简单,计算公式为:V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,对应的计算公式为:V(G)=区域数=判定节点数+1。
    h r0U&T#@-g o,J o114943 对于多分支的CASE结构或IF-ELSEIF-ELSE结构,统计判定节点的个数时需要特别注意一点,要求必须统计全部实际的判定节点数,也即每个ELSEIF语句,以及每个CASE语句,都应该算为一个判定节点。判定节点在模块的控制流图中很容易被识别出来,所以,针对程序的控制流图计算圈复杂度V(G)时,最好还是采用第一个公式,也即V(G)=e-n+2;而针对模块的控制流图时,可以直接统计判定节点数,这样更为简单。
  • 单元测试之优化用例

    2010-05-06 18:30:22

    最近这个项目,开发人员写了130个方法,但是测试用例写了63个测试用例,代码行覆盖率为80%,分支覆盖率60%,发现有几个问题
    1. 没有按照敏捷开发的原则先写测试用例,而是先写了很多方法(很多方法是空的,没逻辑)
    2. 分支覆盖率比较低,很多else部分没覆盖,有些null没判断
    3. 测试代码冗余非常多,看起来吃力(我后来做了优化,写了一些方法,把经常用的代码放在里面)
     
    我自己java代码不是很熟,边学边做,今天收货还是比较多的
    1. 一个方法返回多个值时,可以再重新写个简单的类,就是做些set\get的事情,例如下面的ResultSet,当然也有其它的方法,我不知道而已
     public ResultSet AddOneSupply(String Pid,String UserName,String Password,String Logo,String Type){
      int Result=0;
      ResultSet res=new ResultSet();
      Supply supply = new Supply();
      UserInfo user = new UserInfo();
      user.setPid(Pid);
      user.setPassword(Password);
      user.setUsername(UserName);
      supply.setUser(user);
      supply.setLogo(Logo);
      supply.setType(Type);
      supply.setCreateTime(new java.util.Date());
      supply.setModifyTime(new java.util.Date());
      Result = merchantService.supplyMerchant(supply);
      res.setSupply(supply);
      res.setiResult(Result);
      return res;
     }
    2. 单元测试进行assert时,尽量用直接查询mysql数据库的方式去校验结果,为此专门写了个类,方便访问mysql和执行SQL语句
     
  • 每日构建初窥

    2010-05-05 10:03:25

    构建工具之一 Hudson
    作用: 联合maven,负责编译代码和单元测试。
    构建工具之二 Sonar
    作用: 随着单元测试会进行覆盖率分析、规则违例分析、代码量分析等(没搞明白到底是Hudson还是Sonar去触发测试的)
     
     
    Hudson里面的一些设置(定时编译、定时测试)
    Build Triggers
     
    Loading...
     
    Loading...
      Projects names
    Multiple projects can be specified like 'abc, def'
     
    Loading...
      Authentication Token Use the following URL to trigger build remotely: HUDSON_URL/job/service_shangdao/build?token=TOKEN_NAME
    Optionally append &cause=Cause+Text to provide text that will be included in the recorded build cause.
     
    Loading...
      Schedule
    Loading...
     
    Loading...
      Schedule
    Loading...
    Build
      Root POM
    Loading...
      Goals and options
    Loading...
      MAVEN_OPTS
    Loading...
      Alternate settings file
    Loading...
     
    Loading...
     
    Loading...
     
    Loading...
     
    Loading...
    Build Settings
     
    Loading...
      Recipients
    Whitespace-separated list of recipient addresses. E-mail will be sent when a build fails.
     
     
     
    .mailHelp{ border: solid #bbb 1px; background-color: #f0f0f0; padding: 1em; margin-bottom: 1em; } hideConfiguredOptions(); addTrigger("Failure"); var advHelpElm = document.getElementById("advancedEmailHelpConf"); advHelpElm.style.display="none";
    Post-build Actions
     
    Loading...
      Files to archive
      Excludes
    Loading...
     
    Loading...
     
    Loading...
     
    Loading...
      Jobs to aggregate
     
    Loading...
      Projects to build
     
     
    Loading...
      Repository URL
      Repository ID
    Loading...
     
    Loading...
     
    Loading...
    Configure email recipients, content, and what should trigger a notification
      Global Recipient List
    Comma-separated list of email address that should receive notifications.
      Default Subject
      Default Content
    Trigger
    Send To Recipient List
    Send To Committers
    Include Culprits
    More Configuration
    Remove
    Failure Help for feature: Email Config
    View More Options (expand)
    Add a Trigger:
    swapEdit("Unstable");swapEdit("Failure");swapEdit("Still-Failing");swapEdit("Success");swapEdit("Fixed");swapEdit("Still-Unstable");
    Still Failing Help for feature: Email Config
    View More Options (expand)
    Success Help for feature: Email Config
    View More Options (expand)
    Fixed Help for feature: Email Config
    View More Options (expand)
    Still Unstable Help for feature: Email Config
    View More Options (expand)
     
    Loading...
      SCP site
      Files to upload
     
    Loading...
      Sonar Installation
      MAVEN_OPTS
    MAVEN_OPTS env var to provide, if not set the plugin will use the MAVEN_OPTS defined by the maven builder config.
      Additional properties
    Additional properties to be passed to the mvn executable (example : -Dsome.property=some.value).

     

     

    30 * * * * -------------表示每小时过后的半小时会编译代码(也就是说每小时都会编译)

    sonar>>Build periodically----------------这个是和sonar的连接处,每次编译完成后会运行sonar

  • 又过了一个普通的五一节

    2010-05-03 09:05:59

    4.30晚上正好有同事回我家所在地,因此免去了坐公交车去车站,再坐大巴车回家的转车之苦.

    第二天老婆去学车,把女儿甩给我,陪女儿在家玩了一天,女儿长大了,但是不怎么懂事,一天当中也有苦有笑,有开心有生气,有时候觉得好烦,没有小孩子多清净,自己想干嘛就干嘛,但这个小城我没有什么关系圈,不知道怎么去玩。

    5.2 去看了一下老婆的表哥,他被摩托车撞了,伤得还不轻,还住在医院里,在病房里,瞎侃了一通,在那里吃了中午饭,然后去了老婆的表妹开的服装店看看。

    表妹还挺能干的,自己出资自己找店进货什么的,已不是过去羞涩的小姑娘了,对顾客还蛮凶的,有的被吓跑,或者被“强”卖,呵呵~~

    老婆在里面看衣服,我坐在门口,看这眼前走过形形色色的人,大部分是外地人,来这里打工的,四川山里人居多,经济条件不好,但小姑娘也爱漂亮,管它什么配不配,漏肩漏背的尽管穿;有的个子非常矮、非常肥,形象实在不太好说,我下次再也不坐那里了

  • mongoDB和mysql对比测试

    2010-04-29 19:43:15

    前段时间,有一个业务想把数据切换到mongoDB,说法是mongoDBa编程简单,部署简单,支持按片存储,可扩展性很好,国外都有大的网站在用。说mysql性能差,是关系型数据库,字段扩展不方便(其实公司对有一个基于mysql的储存系统,完全能扩展字段,因为是key-value形式的)。我就对mongoDB和mySQL两者做了一个性能对比测试。
    环境
    服务器:8核CPU   16G内存
    数据总量:124815963  mongoDB每条数据占用磁盘空间大小是367.6字节,mysql每条数据占用磁盘空间大小是576.3字节;
    mysql版本:mysql  Ver 14.12 Distrib 5.0.77
    mongoDB版本:1.4.1-pre-
    Linux版本:Linux  2.6.18-164.el5
     
    写入对比 由图可见mongodb的吞吐量(即每秒钟的事务处理量)明显比mysql要好,两者响应时间都在1ms左右
    读取对比 单线程时,mongodb的吞吐量比mysql要高一些(高60%)。
    多线程时,mongodb的吞吐量要比mysql低(低20%~50%)。
    另外,mongodb对内存的占有率非常高(80%左右,见"mongoDB"附件1),对cpu要求不高。
  • 性能测试之压力机

    2010-04-29 12:02:55

    性能测试过程中,为了给服务器足够的压力,少不了要使用压力机(即模拟的客户端,戏称肉鸡),压力机如果使用不当,测试结果就会不准确,反映不了服务器的真实性能情况,下面有一些问题自己做一下总结

    1.       压力机自身有瓶颈

    服务器有性能瓶颈,这个大家都了解,但是压力机为什么也有瓶颈,当然有。

    首先,压力机自身有内存、CPU的限制,当loadrunnerjmeter线程数量过多时,压力机处理不过来,会导致数据包接收滞后,延长服务器的响应时间,QPS的统计不准确,这样就造成自身的瓶颈。

    2.       一台压力机设置多少个线程合适?

    这个需要试验若干次,直到找到压力机的瓶颈,看下面的图

    1个线程、2个线程、3个线程时QPS基本上成倍数关系,到了4个线程后,QPS就不成正比了,再增加线程数量只会增加响应时间,QPS增加的很少;

    这样我们就找到了这台压力机的瓶颈,只能用3个线程去压服务器,否则结果不准确。

    load看,应该用5台压力机就可以使服务器的load达到8(假设服务器是8核,load=8是工作压力的上限)

    3.       影响压力机的一些因素

    设置线程的数量是从综合角度考虑的,分开来可以考虑CPU、内存、网卡

    CPU使用总量不要超过80%, 一个CPU基本可以处理一个线程,如上图的压力机是2核的,可以处理3个线程。

    内存使用总量不要超过除系统常驻内存外约80%

    网卡目前用的最多的是100M和千兆,100M的传输速度理论上是12M/s左右,所以压力机所传送的数据不要超过10M/s,如上图传送的数据(假设每条数据2.5K)大约是951*2.5K=2.3M/s, 没有超过网卡的最高流量阈值。

  • UML统一建模语言(一)

    2010-04-28 14:38:26

    从百度上搜到天极网的一个页面,http://soft.yesky.com/lesson/281/2472281.shtml ,快速入门的资料,感觉还蛮有用,UML好多年前学习过,真正用过的机会不多,这次好好学习,好方法宝刀不老,现在还是不过时,值得终生为之学习....
    类图可以分为10个,归为5类
    类型 包含
    静态图 类图、对象图、包图
    行为图 状态图、活动图
    用例图 用例图
    交互图 顺序图、协作图
    实现图 组件图、部署图
     
    对功能测试人员有用的就用例图和和活动图,这两个能够描述参与者(可以是人、硬件、另外一个程序)和系统的所有交互,其它图基本是描述程序级的对象、类行为和关系。
    用例图可以描述出参与者做什么.
    活动图可以描述出参与者什么时候做、怎样做.
    注意:参与者这个词也可以称为角色和执行者,但不建议用角色,在中文里容易搞混,IBM Rational Rose的英文单词是role,翻译成参与者比较好理解。
     
    参与者的泛化关系:泛化关系是一般元素和具体元素之间的一种分类关系。具体元素与一般元素完全一致,但包含一些额外的信息。在允许使用一般元素的场合,可以使用具体元素的实例。 (评注:这是面向对象中用到的概念,如果从类的角度看,那就是两者之间是继承关系)
  • 阿里巴巴“第一次握手”eBay

    2010-04-28 09:28:08

    早报记者 是冬冬

    全球速卖通商户可通过PayPal,收到全球数百万使用PayPal的顾客以当地货币及当地付款方式支付的货款。CFP 图

    昨日,阿里巴巴集团宣布,和海外最大的第三方支付平台PayPal达成战略合作伙伴,PayPal成为阿里巴巴全球速卖通市场的支付方式之一。

    值得注意的是,这是PayPal母公司eBay和阿里巴巴两大竞争对手之间的首次合作。有消息人士向早报记者表示,未来阿里巴巴集团和eBay还会有更深层次合作,双方已开始谈判。

    “小企业贸易更便捷”

    就在之前一天,阿里巴巴集团刚宣布旗下斥资1亿美元打造的全球速卖通市场正式开业,这款被视为“海外版淘宝”的在线平台专为美国市场量身打造,使买家可以直接从出口商处购买商品,大部分是小批量的购买。阿里巴巴方面称,借助全球速卖通,即便是规模很小的企业也可以更优惠的价格为客户提供更具特色的产品。

    自2009年9月速卖通试运营以来,已有300多万种产品上架。虽然阿里巴巴有自己的支付平台支付宝,但缺乏国际知名度的支付平台。而PayPal拥有遍布全球190个市场的8400万个活跃账户,注册商户达800万,可支持24种货币。卫哲认为,将用户限制于一种服务实际上扼杀了消费者和零售商的选择,“开放性是非常重要的,PayPal是最重要的支付方法之一。”

    据介绍,全球速卖通商户将可以通过PayPal,收到全球数百万使用PayPal的顾客以当地货币及当地付款方式支付的货款。且全球速卖通商户不用注册PayPal,而是阿里巴巴通过向用户收取一定的费用来支付给PayPal。具体操作上,速卖通将采用淘宝模式,卖家实行免费注册,按最终成交收取不高于5%的费用;至于对付费申请了高级服务的会员,按照每笔交易收取3%的费用。

    未来或有更深层次合作

    此前,阿里巴巴与eBay的关系一直被外界解读为短兵相接的竞争。2006年,阿里巴巴靠降低佣金费用成功地将eBay基本挤出了中国市场,eBay随后将相关业务注入了Tom集团成立了易趣网,而阿里巴巴则坐稳了电子商务市场龙头老大的位置。据研究公司易观国际的数据,2010年一季度,阿里巴巴在中国2.37亿美元B2B市场上占了74%的份额。

    据《华尔街日报》报道,PayPal总裁Scott Thompson说,互联网有趣的一点就是,与不同的公司有合作关系,同时也存在竞争关系,作为两家企业,可以合作,作为业务的一部分,可以激烈地竞争。

    有消息人士向早报记者表示,未来阿里巴巴集团和eBay还会有更深层次合作,双方已经在开始谈判。

    面对与“冤家”eBay合作的质疑,阿里巴巴CEO卫哲表示,阿里巴巴没有竞争的想法,“我们望远镜里没有竞争对手,只有学习榜样和合作伙伴。”

    其实早在3月初,阿里巴巴董事局主席马云就透露了双方合作的相关内容,马云称,eBay在中国没有失败,只是暂时的挫折,希望未来双方能有合作。不过也正是马云在2008年曾表示,“用望远镜也看不到对手”。

    马云3月参观了eBay在美国加州圣何塞的总部。上个月PayPal已经宣布与中国银联合作。

     

    阿里巴巴的公关合作手法老到,同行之间既有竞争又有合作,有意思;其实个人看,阿里巴巴在海外用paypal是不得已的事情,因为支付宝在海外得不到认同,但是只要能拓展海外市场,依靠PayPal又何妨呢

  • 巨人《万王3》公测 范冰冰变身游戏角色

    2010-04-28 09:17:42

      DoNews4月27日消息 4月27日,巨人网络《万王之王3》将在15时正式开启公测。《万王之王3》代言人范冰冰将化身游戏NPC(游戏里的设置角色),与玩家展开对话。

      据悉,《万王之王3》此次将开放三组服务器,每一组服务器最多能容纳4万人同时在线。此外,官方还准备数组备用服务器,以满足海量玩家第一时间体验到《万王之王3》的魅力。

      作为中国首款图形化网络游戏《万王之王》的最新续作,《万王之王3》是巨人网络今年的重头项目之一。2007年,经史玉柱拍板,巨人网络全面接手《万王之王3》的开发,开发团队超过150人,研发周期超过3年,资金投入超过1亿元人民币。

      据了解,《万王之王3》公测版客户端四大亮点:职业技能全面调整,战争系统逐步完善、界域之战开放,优化装备系统、极品装备更易获得,以及准备了多重线上、线下活动助阵公测。

      由于《万网之王3》拥有欧洲中世纪的文化背景和庞大世界观,已经有美国的制作公司发出拍摄同名电影的邀请。但巨人内部对是否投拍电影仍在考量之中。

    虽然不喜欢玩游戏,但是对史玉柱的运营手法很是佩服,总能赚取到打众的眼光,希望它能成为中国的经典游戏并出口到日本、韩国欧美,期待这一天。

  • 啥是每日构建

    2010-04-27 16:57:11

    在以前的公司,每日构建就是nightly build,每天晚上对所有的代码进行build和跑一次单元测试,第二天程序们就可以收到邮件构建成功或失败的邮件,如果是自己的问题导致失败,那就赶紧去修改bug,执行的效率应该还有一点吧,但是不很深入,大家写单元测试的兴致也不高。
    这次要做的项目叫SD,也是公司里第一个采用敏捷开发的项目,对大家来说,很多东西都是新的。
    这次用的构建工具hudson(Extensible continuous integration server可扩展的集成服务器,具体参考http://hudson-ci.org/)。代码仓库用maven管理,
    底层代码基本上是java,所以打算用junit+hudson+sonar的形式进行每日构建,初步定为每小时构建一次;
    接下来我要熟悉hudson和maven、sonar,这几个工具虽然平时的测试会用到,但是基本没什么了解,得好好学习下。
  • apache之虚拟主机

    2009-02-11 20:02:03

    以前看apache配置文件时发现有一个vhosts_a.conf,打开来后是这样

    <VirtualHost *:80>
        ServerName www.***.com
        ServerAlias ***.com
        DocumentRoot /web/www/yahoo
        DirectoryIndex home.jsp index.htm index.html default.htm index.jsp
        ErrorLog logs/www.***.com-error_log
        CustomLog "|/usr/sbin/cronolog /var/log/httpd/***-access_%y%m%d.log" vhost env=!omit-style
        ErrorDocument 500 "/error.html"
        ErrorDocument 503 "/error.html"
        ErrorDocument 404 "/error2.html"

    </VirtualHost>

    以前听说过虚拟主机,但是不明白其中的意思。原来虚拟主机就是在一个机器上运行多个网站,上面的就是配置www.***.com 这个网站的,当然vhosts_a.conf是一个独立的文件,它会放在 apache_home/conf.d(其实任何一个目录下都可以),这个文件在httpd.conf中被引用。

    当然上面那一段也可以直接写在httpd.conf,只不过写在单独文件看起来清楚一些罢了。

    虚拟主机有两种方式:1. 基于域名 2.基于ip

    如何分辨呢,配置文件(httpd.conf或者vhosts_a.conf均可)中有一个指令:NameVirtualHost ,这个指令如果存在并且设置了,说明是基于域名的,反之则是基于IP的,一般用基于域这种方式,因为IP是有限的。

    VirtualHost 后面的是机器域名或IP,尽量用IP,因为域名的话要经过DNS服务器解析,多一个步骤多一个不稳定,万一DNS不工作了或者不稳定,将会导致apache启动不了或者请求无结果。

    ServerName是网站的名称,如www.yahoo.com,www.google.com

    ServerAlias是网站别名,如你输入yahoo.com也和输入www.yahoo.com一样

    DocumentRoot是网页文件路径,这个必不可少。例如访问 www.yahoo.com/index.html ,实际访问的是/web/www/yahoo目录下的index.html.

    *:80 这里说明一下为什么要用星号,因为有的机器IP是动态分配的,不确定IP,用*号就不用管它IP具体是多少。

     


     

211/212>
Open Toolbar