脑袋里装的浆糊咩?总是记不住,总是做不对。。。。要说你多少次???

发布新日志

  • loadrunner手工发送邮件并参数化脚本

    wfl51 发布于 2010-06-30 23:46:08

    /*loadrunner手工编写发送邮件脚本

    测试要求描述:
    1、使用邮件客户端foxmail 6发送邮件;
    2、要求收件人、邮件主题,邮件正文、邮件附件均需要参数化

    测试过程描述:

    使用LoadRunner8.1 协议选择smtp,新建一个空脚本

    在action中编写如下代码
    */

    Action()
    {
    SMTP smtp1; //定义邮件参数变量

    //登录邮箱账户,设置参数化,这里过于简单,后面讲如何参数化附件和正文
    smtp1 = 0;
    smtp_logon_ex(&smtp1, "SmtpLogon",
    "URL=smtp://127.0.0.1",
    "LogonUser=yangdaliang", //参数化用户名
    "LogonPass=ydlpasswd",  //参数化密码
    "CommonName=LoadRunner User", //发件人名称
    LAST);


    //参数化邮件的正文内容,第二个参数为源文件名,存在当前脚本的跟目录,而不是data目录
    //跟附件转换的第三个参数相比,,少了两个参数 附件的描述以及 附件文件名Content-Disposition: attachment;\n  filename=\"outfile1.txt\"\r\n"
    smtp_translate_ex(&smtp1,"test2.txt","Content-Type: text/plain;\n charset=\"gb2312\"\n Content-Transfer-Encoding: base64\n",RAW_CONTENT, "outfile2.txt");
    //参数化附件 其中test.txt以HDSearch.exe及文件为源附件,outfile1.doc和outfile2.exe为编码转换后的附件 多个附件需要多行本代码,可以去当前脚本的根目录查看编码转换后的附件内容,与录制的附件中的文件内容是一
    //致的,第三个参数可以参考录制的中的文件内容进行分析,如果多个附件则存在多个smtp_translate_ex转换函数
    smtp_translate_ex(&smtp1,"test.txt",  "Content-Type: application/octet-stream;\n  name=\"outfile1.txt\"\nContent-Transfer-Encoding: base64\nContent-Disposition: attachment;\n  filename=\"outfile1.txt\"\r\n",BASE64_ENCODED, "outfile1.txt");
    //smtp_translate_ex(&smtp1,"HDSearch.exe" ,  "Content-Type: application/octet-stream;\n  name=\"outfile2.exe\"\nContent-Transfer-Encoding: base64\nContent-Disposition: attachment;\n  filename=\"outfile2.exe\"\r\n",BASE64_ENCODED, "outfile2.exe");

    smtp_send_mail_ex(&smtp1, "SendMail",
    "To=yangdaliang@tengweitek.com",
    "From=yangdaliang@tengweitek.com",   //参数化
    "Subject=this  is  a  test 这是一个测试邮件",
    "ContentType=multipart/mixed;",
    MAILOPTIONS,
    "X-mailer: Foxmail 6, 15, 201, 22 [cn]",  //邮件客户端参数设置
    MAILDATA,
      //AttachRawFile是邮件正文还是邮件附件是根据编码转换后的文件头内容来确定的
    "AttachRawFile=outfile2.txt",  //邮件的主题文件,存放于脚本的根目录
    "AttachRawFile=outfile1.txt",   //源附件1编码转换后的附件
    //"AttachRawFile=outfile2.exe",   //源附件2编码转换后的附件
      LAST);

    smtp_logout_ex(&smtp1); //退出

    smtp_free_ex(&smtp1); //释放变量
       return 0;

    }
  • linux命令实例-文件处理类

    weixiaoyeah 发布于 2010-01-12 11:42:43

    一、批量替换文件中的固定字符串

    使用find命令,查找出目标文件,然后管道使用perl命令进行处理

    exmp:新建文件vi wxy.txt 编辑文件包括123 123abc 45346123 等内容

         希望将文件中的123全部替换为weixiaoyeah

         命令行: find -name '目标文件名wxy.txt'|xargs perl -pi -e 's|被替换字符串123|替换字符串weixiaoyeah|g'

         执行结果,查看文件 less wxy.txt 结果显示 weixiaoyeah weixiaoyeabc 4534weixiaoyeah

    注释:* xargs的使用

         在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。 find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。(摘抄于http://www.linuxsir.org/main/?q=node/137)

         * perl的使用

          一不小心用了一种语言,这个还需要研究一下再写出来,其实使用上和sed awk是有一些相似的。

     

           

     

     

  • oracle 基础

    weixiaoyeah 发布于 2010-06-07 22:12:09

        今天听了一个数据库基础的培训,觉得挺有收获的,以前接触数据库比较少,也就是数据库的基本操作,最近公司做了很多数据库拆分,海量数据存储的项目,有了一些了解。
        这次是走进oracle,重点是了解oracle的相关基础知识。
        大体内容就是介绍了数据库的数据存取原理,数据库 访问的规则方法,索引的使用,其实就是这么几块来回的折腾,怎么建好索引,怎么用好索引,怎么想办法在合适的场景应用适合的访问规则, 也就是得到一个最优的数据库使用方案,都是需要了解这些基础后,结合业务进行设计的。

    一、数据库基础知识

    1、数据块:数据库读取数据的最小单位,也就是说无论 本次取数的记录是否小于数据块,都会将整块的数据读取出来,然后留下自己需要的那条记录。

    2ROWID 记录数据记录的物理地址,可以提供最快的数据库记录访问

    3、数据库访问机制:全表扫描(就是整张表扫描一遍, 效率最低);ROWID访问(根据得到的rowid进行记录访问,但是rowid是不唯一的,使用的时候需小心);stop访问机制(访问到一条符合要求的记录即停止,访问数据是全表的子集,和访问条件相关)

    4B树索引访问

    唯一扫描:前提是每一个key值对应的记录只有一条,这样访问的算法复杂度就是索引树的深度。

    范围扫描:对于一个key有多个记录的数据,这样访问的算法复杂度就是被访问数据在整个数据库数据中占的比例。这个 方法适用于被访问的数据在整体数据的占比不要太大的情况,否和和直接进行数据库访问的差别不大,同时需要耗费索引维护成本。

    快速扫描:只对叶子阶段进行扫描,使用场景就是查看数据库记录数,count*)时使用。

     

    二、案例讲解(几个案例讲解觉得很有帮助,从实际使用出发,尝试进行sql优化)

    1、修改前的sql

    to_char(gmt_create,’ mmdd’)=‘0101’

    在使用索引字段时,使用 了函数,导致了索引引用失败,实际上并没有使用到索引

    修改后的sqlgmt_create between to_date('20090101','yyyymmdd') and to_date('20090102','yyyymmdd')

    2、修改前的sql:

    member_id like ‘%abc%’

    对索引字段进行了模糊查 询,但是索引是不支持左模糊查询的

    改进方案:使用其他的技术手段进行修改

    3、修改前sql:计数为什么有时候count(id)count(*)

    Count*)会使用索引,并且返回结果和实际记录数一致

    Countidcount某个字段,如果非索引字段,会查询数据库,并且如果该字段值 未空,会不做累加,这样结果会有偏差,这点在一些页面展示记录数是非常有用的

    4、修改前: select count(*) from  score where member_id=#member_id#; 为了判断该memberidoffer表中是否有记录

    可以使用数据库的访问机制,有stop访问机制,那么做如下调整,可以让我访问的区块随着该member的记录成数量级的减小,同时再算上每个sqlpv,优化还是很明显的。

    修改后的slqselect count(*) from  score where member_id=#member_id#  and rownum<=1;

    5、分页应用

    修改前:

    SELECT *

      FROM (SELECT t.*, rownum AS rn

               FROM (SELECT *

                        FROM blog.blog_article

                       WHERE domain_id = :1

                         AND draft = 0

                       ORDER BY domain_id, draft, gmt_create DESC) t

              WHERE rownum <= :2)

     WHERE a.rn >= :3

     

    修改后:

    SELECT t.*

      FROM (SELECT rid, rn

               FROM (SELECT ROWID AS rid, rownum AS rn

                        FROM blog.blog_article

                       WHERE domain_id = :1

                         AND draft = 0

                       ORDER BY domain_id, draft, gmt_create DESC)

              WHERE rownum <= :2) a, blog.blog_article t

     WHERE a.rn >= :3

       AND a.rid = t.ROWID

     

    这个就是对索引的充分利 用,使用索引字段,在不用查询数据库的使用,将排序分页都做好,然后再通过rowid去 进行查询展示,效率会提升很多,需要用好索引,是一门艺术。
       

  • 我们的一生是同浮躁斗争的一生——如何克服浮躁情绪

    楠族开心果 发布于 2010-07-15 13:25:47

    大。伴随着社会转型期的社会利益与结构的大调整,每个人都面临着一个在社会结构中重新定位的问题,于是,心神不宁,焦躁不安,迫不及待,就不可避免地成为一种社会心态。

        2.从个人主观方面来看,个人间的攀比是产生浮躁心理的直接原因。“人比人,气死人”。通过攀比,对社会生存环境不适应,对自己生存状态不满意,于是过火的欲望油然而生,因而使人们显得异常脆弱、敏感、冒险,稍有“诱惑”就会盲从。

       

        浮躁是一种冲动性、情绪性、盲动性相交织的病态社会心理,它与艰苦创业、脚踏实地、励精图治、公平竞争是相对立的。浮躁使人失去对自我的准确定位,使人随波逐流、盲目行动,对组织、国家及整个社会的正常运作极为有害,必须予以纠正。

       

        那么怎样才能克服浮躁心理呢?

        1.在攀比时要知己知彼

        “有比较才有鉴别”,比较是人获得自我认识的重要方式,然而比较要得法,即“知己知彼”,知己又知彼才能知道是否具有可比性。例如,相比的两人能力、知识、技能、投入是否一样,否则就无法去比,从而得出的结论就会是虚假的。有了这一条,人的心理失衡现象就会大大减低,也就不会产生那些心神不宁、无所适从的感觉。

        2.要有务实精神

        务实就是“实事求是,不自以为是”的精神,是开拓的基础。没有务实精神,开拓只是花拳绣腿,这个道理是人人应弄懂的。

        3.遇事善于思考

        考虑问题应从现实出发,不能跟着感觉走,看问题要站得高、看得远,切实做一个实在的人。

    克服浮躁,脚踏实地,有容乃大、戒娇戒躁、不紧不慢

    在我们的心灵深处,总有一种力量使我们茫然不安,让我们无法宁静,这种力量叫浮躁。浮躁就是心浮气躁,是成功、幸福和快乐最大的敌人。从某种意义上讲,浮躁不仅是人生最大的敌人,而且还是各种心理疾病的根源,它的表现形式呈现多样性,已渗透到我们的日常生活和工作中。可以这样说,我们的一生是同浮躁斗争的一生。

    天气是一如既往的炎热和沉闷,我的心也像这天气一样,很是浮躁,安不下心来去做一件事情。

    毛主席教导我们说:“世界上怕就怕认真二字。”说的就是如果我们能安下心来认真做一件事情,就没有做不好的。我觉得非常对。我们做事情很多时候都是半途而废,在开始的时候是一腔热血,然后是热情消退,最后完全放弃。是什么原因让我们放弃呢?是浮躁的心理,是急于求成、不愿面对困难的浮躁心理。我们总是在想着事情的最后成果,急于看到我们所作的工作的成果,而这些却不是一天两天能看得出来的,所以我们就觉得这些工作是没有意义的,于是选择了放弃。

    如果我们能够坚持,真正的静下心来,认真地去学习、工作,我们做的会比现在后很多。只有拭去心灵深处的浮躁,才能找到幸福和快乐,那么,幸福和快乐在哪里?幸福和快乐其实就在我们每个人的心里。只要你愿意,你随时都可以支取。在很多时候,我们都急需在心中添把火,以燃起某些希望。在很多时候,我们都急需在心中洒点水,以浇灭某些欲望。你会感觉到,其实我们很幸福,其实我们很快乐。

     

      浮躁心理是一种不能让人心平气和、脚踏实地做事的不良心理,这种心理的产生跟所处的环境和主观有密切的联系。人一旦具有了浮躁心理,就容易见异思迁,急功近利,做什么事情都想以最短的时间达到最大的效果,缺乏耐心和恒心。所以克服浮躁心理对事业的成功有极大的重要性。要想克服浮躁心理首先就得明白浮躁从何而来。

     

    1、浮躁心理的产生跟外界环境的变化有很大的关系。我们所处的社会是急剧变化和转型的社会,每个人的地位都有可能发生变化。今天的亿万富翁可能明天就一贫如洗,今天的穷小子明天也可能成为企业家,每个人都有可能在变化中得到或失去一切。各种不良的社会风气也在侵蚀着人们,如拜金主义,享乐主义等等。因此,在这个复杂而多变的社会环境里,人也容易变得患得患失,好高骛远,不满足自己现有的状况,不断地拔高自己,给自己压力去追寻不切实际的目标。浮躁心理的社会根源就在此。

     

    2、个人内在的因素。社会环境的变化总归是外因,真正引起浮躁心理的还是人心的不满足。有些人在外界的各种冲击下依然能够保持恬静的心态,能够大隐隐于市,但有些人环境的稍微变化就开始不安现状。所以,内因才是引起浮躁心理的根本因素。攀比心理,金钱至上,一夜暴富的思想都在左右着人们焦躁的心灵。

     

    要克服浮躁心理,可以从以下几点做起。

     

    1、有远大的理想还要有实际的行动。有些人每天都会确立一个或几个理想和目标,每天都会幻想当这些目标达成后就会多么多么的受人尊敬,但是却从来没有想到要如何才能达到这些目标,从来都不肯迈出第一步或者经常半途而废。因此,在目标的指引下,应该静下心来,脚踏实地一步一步达到自己的目标。

     

    2、不要高估自己,也不要贬低自己。一些人把自己的能力看得过高,觉得自己不能成功是时运的问题,不安于现有的工作和生活,朝秦暮楚,结果事事无成。还有些人则低估了自己,觉得自己难以面对外界的挑战和机遇,但又不想浪费,于是犹犹豫豫,心神不宁。所谓人贵有自知之明,因此准确的定位自己,清醒的明白自己的优劣势,扬长避短是成功克服浮躁心理的必备条件。认识自己的同时,还要有务实开拓的精神,天上不会掉馅饼,只有自己动手做才能品尝到成功的喜悦。

     

    3、不为攀比而攀比。有时候攀比能使人更加认清自己的不足,能够激发人的斗志,为更加美好的明天而奋斗。这时候攀比是合情合理的,这是人不断追求进步的表现。但是更多的时候,攀比是为了炫耀自己的财富和荣耀,满足自己的虚荣心。为了攀比,不惜斗富,浪费资源,甚至不择手段掠取金钱。如果自己比不过人家,心里就不平衡,焦躁不安,觉得自己失了面子。所以,切忌不要为了攀比而攀比,人活着不是为别人而活,跟别人攀比只是达到别人的状况,适合自己的东西反而失去了。

     

    4、培养自己平淡坦然的生活态度。平淡不意味着不思进取,平淡是指能够平静地看待自己的荣耀和失败,坦然地面对任何变故。在这种心境中坚持自己的原则,遇到问题冷静分析,不因外界的变化而动摇,踏踏实实努力达到自己人生的颠峰。试问浮躁怎么会困扰你的心灵呢?

  • 一个Bug 差点让服务器的文件系统崩溃(转贴)

    wxy1208 发布于 2010-07-16 09:34:43

    昨天,公司的美国客户发邮件给我,说我的软件出问题了,我查来查去,发现居然是服务器上一个目录无法删除,一删除就报 cannot read from the source file or disk. 如果用命令行方式删除,则报  cannot find the specified path。一开始以为是文件系统遭破坏了,用 chkdsk 命令检查,没有发现问题,后来仔细一看,那个不能删除的目录名居然以一个空格字符结尾,而我尝试在资源管理器中创建一个目录以空格结尾结果资源管理器会自 动将末尾的字符删除,用程序创建,结果也一样,这个美国佬是怎么创建这个古怪的目录的?出现这种情况后不但是无法删除这么简单,列目录什么的也会有问题, 这样一来,系统的运行都会有问题,我想到的最坏结果就是可能不得不格式化服务器的硬盘,想到这里我几乎不敢再想下去了!Research了一天,后来终于 找到了解决方案,并且由此还发现问题的起因是我程序上的一个Bug造成,可怕的Bug!

    Windows 的文件系统可以支持特殊字符的文件名,比如以空格结尾,以点号结尾等,有一篇英文的文章说NTFS 支持这些文件名,但FAT不支持,我试了一下,FAT也支持。但Windows API 却对这些特殊文件名进行了限制,也就是说,我们通过程序是无法创建一个以空格或点号结尾的文件名或路径名的。但Copy 和 Move的API 却不做这方面的限制,这导致我们可以从其他的文件系统拷贝或移动一个特殊文件名的文件到Windows 的文件系统,但一旦在Windows的文件系统上创建成功,就无法通过正常途径删除或改名。因为调用API 删除或改名时,API 会首先进行规则检查,如果发现不符合规则,则直接忽略。这两组API 在处理上的不一致,带来一个非常严重的安全问题,可惜微软到了Windows7 还没有去弥补这个问题。

    下面让我们用代码复现这个问题

                try
                {
                    string dir = @"C:\Temp\abc";
                    System.IO.Directory.CreateDirectory(dir); //在C:\Temp 目录下创建abc 这个目录
     
                    string dir1 = @"c:\Temp\Bcd \";
     
                    System.IO.Directory.Move(dir, dir1); //将ABC 移动到"Bcd "这个目录去,注意这里 Bcd后面有个空格
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

    在运行这段代码前,你一定要有一点思想准备,因为一旦运行成功,你的 C:\temp 目录下就有了一个 “Bcd ”这样的古怪的目录,而且你用正常的方法根本无法删除它。如果我在此打住,你一定会为之抓狂。不过没关系,我已经找到了删除它的方法,下面就和大家共享:

     

    Windows 的命令行工具 Del 和 Rd 支持一种方式可以不对输入文件名的合法性进行检查,这种方式是在完整目录名前加一个 \\?\

    比如

    del “\\?\C:\Temp\xxx.” 删除xxx. 这个文件

    删除目录的话

    rd /s “\\?\C:\Temp\xxx.” 删除 xxx. 这个目录

    执行这个命令后,就可以删除这些古怪的文件了。注意,这里一定要输入完整的目录才可以,相对路径不行。

     

    讲到这里,我们知道了原因和解决方案,那么在这里我需要提醒大家我们以后在程序中调用 System.IO.Directory.Move 或者 System.IO.File.Copy , System.IO.File.Move 这些函数前,一定要注意先判断一下输入的目标文件名或目录名的结尾是不是空格或点号,可能还要判断其他情况,但目前我只知道这两种情况,而且结尾是空格非 常有隐蔽性。

  • [论坛] LoadRunner五大经典图书

    danny235 发布于 2010-04-23 12:39:13

    1.性能测试从零开始——LoadRunner入门  >>查看图书
        人不是生下来就会跑。学习也是一样,学LoadRunner就要知道啥是LoadRunner ,就要从零开始,打好基础。

    2.性能测试进阶指南——LoadRunner 9.1实战 >>查看图书
        入了门,就要学习新技术、新工具。该书介绍了LoadRunner 9.1的使用,虽说LoadRunner不是最新的版本,但是是国内现有介绍最新的版本的图书了。

    3.LoadRunner性能测试实战   >>查看图书
        学了就要用,该书算是国内介绍LoadRunner比较早的图书,本书结合实战,侧重脚本开发与性能测试分析方面进行了介绍。

    4.精通软件性能测试与LoadRunner实战  >>查看图书
        该书可以说是比较经典的LoadRunner图书了,它是《软件性能测试与LoadRunner实战》图书的提升与扩展,从多了方便深入的介绍了LR的使用。

    5.LoadRunner虚拟用户开发指南  >>查看图书
        LoadRunner精髓就在虚拟用户的模拟,该书详细介绍了 Vuser脚本的开发。想深入学习LoadRunner的朋友可以看一下。
  • 腾讯的待遇

    sxg_feixue 发布于 2010-02-25 23:40:55

    腾讯的真实收入情况(基本工资、保险、福利、奖金等)

     
      1:应届生薪水开的差不多7W/年,硕10W/年,即便差也差的不多,但招的人还是有一定要求,不是那么好混进去的。
      2:腾讯的福利是互联网企业里算是很好的,只和网易,sina,sohu,TOM,盛大相比,和IBM,微软,华为比,个人感觉行业差距较大,没有可比性,另外个人也不了解。
      3:应届生面试通过,在入职前的确会发50个连号的QQ号,那是用来赠送给班级的同学的,听HR的人说还是很受欢迎的,你想毕业后天隔一方,都用连号的QQ,在一个群里还是挺有意思的。
      4:内部员工可以每月5折限量购买100个Q币,一般找业 务线的同事要二十个充充会员什么的。
      5:腾讯在深圳市内有几条班车线,有公司专用电梯,自己用大楼已经动工,据说08年投入使用。35层,据内部传说不出租,全部自用,个人表示怀疑能用的完么??
      5:腾讯是没有住房公积金的,保险一般按最低交。

      季度,年终,双薪,项目奖金都有的。除非你所在部门很烂,项目连续失败,每月工资收入能拿到税后5千,年入10万基本没有问题。
      6:挖人很厉害,不管从营运到产品到研发,很多牛人都是用很高的价钱挖过来的。也推荐内部举荐形式,有专项伯乐奖金。
      大家都很乐意推荐朋友来面试,如通过,部门经理级10000,teamleader级5000,普通员工级500.
      7:公司管理还算很人性化,多少天病假不扣工资啊,内部活动也挺多的,上QQ当然可以,呵,,,不过你上MSN也没人会过问你基本不犯大错不会裁人。不过现在人多了,有未位淘汰制了
      8:公司对外形象还是比较注意,出差普通员工住宿一级城市550,其他450,出租车全报,补助是另算(我的级别是80块,不高)。
      不过基本不用花钱,补助算是买烟钱了。。吃饭睡觉都在酒店里搞定好了。有业务线同事常出差以前都是去机场买票,现在卡的紧些了,都要通过行政从统一票务公司拿票了。
      8:最后说一点,腾讯是一家互联网公司,研发能在公司受很重视,很大原因还是几个大老板都是技术出身,你去看看其他互联网公司的研发人员就知道腾讯还算是比上不足,比下有余了。当然很多牛人有机会去IBM,去微软自有长远的发展,腾讯才8年历史,要走的路还很长。虽然现在发展过快,管理/执行都出现了一些问题,相信可以慢慢解决。
     前面大家说的有的真,有的假,甚至有的很假!

      1、腾讯的待遇在同行来说算是中上,奖金比较多、比较高,但是要看部门业绩和本人考核情况。
      2、每个月要扣15-20%的工资做考核,不同系统扣的比例不同,季度考核后返回,不过一般你部门不太差的话,扣减的金额基本都返回。
      但是这个方法据说今年要修改。
      3、和雾霭梧桐说的一样,越早进入腾讯待遇越高,尤其是02年进去的,靠分股票很多普通人都成了百万富翁,但现在就没这种事情啦。平均来说,待遇在悄悄往下走,因为人员在急剧膨胀,人力成本要控制了,所以待遇也要控制啦。
      4、听说以应届毕业生进去的待遇比较高,比社招的还高,但是听说(强调,是听说!因为薪金保密,不确定相关说法是否准确)有人反馈实际得到的比当初承诺少,是否这样,我也不知道。
      5、腾讯是没有住房公积金的,保险按最低交,存档案还要交费,以前福利很好,不过现在人员太多,有不少福利都削减了,比如没有旅游福利了。今年还开始了考核评定制度、末位淘汰制度,走了一批老员工,据说内部也有一些不满的情绪,看来是大企业的通病吧。
      6、腾讯有班车接送,企业文化还是很不错的,比起很多公司,其管理还是相当有人情味,但是也必须说其人情味正在变的越来越薄。
      7、那个说上午上班下午打球的人真是瞎扯,白痴!
      腾讯的工作时间写着是到5:30,但是基本没人可以按时下班,6点半算是平均值吧。前线业务人员、技术人员加班更加厉害,有的部门还强制加班,个别部门对于晚上10:00以前下班的员工听说还要批评。而且这样的加班大多是没有加班工资的。
      
      总的来说,如果你有能力,身体也能熬的话,腾讯是不错的选择。但是如果身体不能熬,又想来混腾讯的话,那是不可能的。

  • 常用oracle命令

    羽翼 发布于 2010-01-07 07:54:45

    一、查看系统表:select * from dual;

    二、显示当前日期: select sysdate from dual;

    select to_char(hiredate, 'yyyy"年"MM"月"dd"日" HH24:mm:ss') as time from emp;

    select to_char(sysdate, 'yyyy"年"MM"月"dd"日" HH:mm:ss') as time from dual;

    三、显示当前登录用户:show user; 或 select user from dual;

    四、连接用户:conn system/manager;

    五、查看表的完整结构

    格式:desc 表名;

    1. desc dual
    2. desc user_tab_columns

    六. 查看当前用户拥有哪些表:select * from tab;

    常用工具

    一、sqlplus(cmd)

    二、isqlplus

    三、Oracle 自带的 SQL Plus

    四. 设置事务自动提交: set autocommit on|off;

    三步曲       

    一、建空间

    详细步骤:
    1. create tablespace 空间名
    2. datafile '存放目录路径'
    3. size 数据文件大小 m
    //(可选)4. autoextend on/off (启用或者禁用数据文件)

    二、建用户

    详细步骤:
    1. create user 用户名
    2. identified by 用户密码
    3. default tablespace 空间名
    4. temporary tablespace temp (临时空间名一般用默认的 temp , 当然你也可以自己指定)

    三、授权

    详细步骤:
    1. grant connect to 用户 (为用户授予登陆系统的权限)
    2. grant resource to 用户 (为用户授予操作表空间的权限。例如创建表、序列、视图等)

    说明:

    1. 勿忘 commit !
    2. 每个用户都有一个默认的系统表空间(system)和临时表空间(temp)。
    3. 不能自己给自己授权。
    4. 授于用户很多权限: grant create any table to 用户
    5. 更改用户密码: alter user 用户名 identified by 新密码
    6. 删除用户: drop user 用户名 当用户拥有表空间(模式)时,必须使用 cascade 关键字进行删除用户.
    7. 授权 : grant connect/resource to 用户  撤消: revoke connect/resource from 用户
    8. 授予用户对某张表的操作权限: grant select/update/delete/insert on 表名 to 用户  撤消: revoke select/update/delete/insert on 表名 from 用户
    9. 获得有关数据库的用户信息,包括用户名,加密后的口令,表空间,配置文件,创建日期和锁定状态等 : select * From sys.user_users; 

    建表
    一、格式
    1. create table 表名
      (
        列名 数值类型 [约束] [是否允许为空],
        ......
      );

    说明:
    1. 在同一个空间中不能出现相同的表名
    2. 同一个表中不能出现相同的列名
    2. 列与列之间必须用 ',' 分开,且最后一列不用 ','

    修改表
    一、格式
    1. 更改现有表中列的定义:alter table 表名 modify (列名 数值类型);

    2. 向现有表是添加新列:alter table 表名 add (列名 数值类型);

    3. 删除现有表中的列:alter table 表名 drop column 列名;

    4. 利用现有的表创建新表: create table 新表 as select * from 现有的表
      这样的话新表不仅拥有现有表的结构,还可拥有现有表中所有的记录,即全盘拷贝.
      你也可以只要现有表的结构,而不要现有表的记录.
      例如:
    create table 新表 as select * from 现有的表 where 1=2
    create table 新表(列名1, 列名2, 列名3...) as select id, name, sex...) from 现有的表

    说明:
    1.添加多列要用 ',' 隔开

    删除表
    一、格式
    1. drop table 表名

    重命表(也重命名视图,序列等)
    一.格式
    1. rename 旧表名 to 新表名;

    重命名表
    格式:
    alter table 旧表名 rename to 新表名;

    学会用数据操纵语言(DML){insert update delete select}

    一、格式
    1. insert into 表名(列名1,列名2,...) values(列名1的值,列名2的值...);
    说明: 列名的个数和类型必须和指定的值的个数的类型相一致!

    2. update 表名 set 列1=值,列2=值 ......[where 列=值];
    说明: 在实际的应用中我们会加上 where 条件.要不然它会更新我们表中的所有行.所以我们只是更新指定的行.

    3. delete from 表名 [where where 列=值] 或者 truncate table 表名(不能加条件)
    说明: 在实际的应用中我们会加上 where 条件.要不然它会删除我们表中的所有行.所以我们只是删除指定的行.

    4. select * from 表名 [where where 列=值] 或者 select 列1,列2 from 表名 [where where 列=值]
    说明: 在实际的应用中我们也会加上 where 条件.要不然它会查询出我们表中的所有行.所以我们只是查询指定的行.

    5. 插入来自其它表的记录(但前提是现有的表必须存在且现有的表结构必须与其它表结构相同)
      insert into 现有的表 select * from 其它的表
    或者
      insert into 现有的表(列1,列2)  select 列1,列2 from 其它的表

    6. 选择无重复的行: select distinct 列名 from 表名

    7. 使用别名: 例如 select id as 编号,name as 姓名,pwd as 密码 from userinfo;

    8. 伪列: rowid , rownum

    一. 使用 distinct 关键字选择无重复的记录

    1. select distinct name from userinfo;

    2. select count(distinct name) from userinfo;

    说明:在使用 distinct 关键字选择无重复的记录的时候,筛选条件是以整张表为标准的。

    二. 使用列别名:

    1. select id 编号, name 姓名 from userinfo;

    2. select id as 编号, name as 姓名 from userinfo;

    3. select id as "编号", name as "姓名" from userinfo;

    三. 插入日期类型的值(日期类型的值的默认格式为 dd-mm-yyyy 如:01-3月-08 或 01-3月-2008 或 01/3月/2008 或 01/3月/08))

    例如:
    1. insert into userinfo values(userinfo_seq.nextval,'a','01-3月-2008');
    或者
      insert into userinfo values(userinfo_seq.nextval,'b','22-3月-08');

    2. insert into userinfo values(userinfo_seq.next2val,'c',to_date('2008/03/01','yyyy-mm-dd'));
    或者
      insert into userinfo values(userinfo_seq.nextval,'c',to_date('01/03/2008','dd-mm-yyyy'));

    3. insert into userinfo values(userinfo_seq.nextval,'c',to_date('2008-03-01','yyyy-mm-dd'));

    4. insert into userinfo values(userinfo_seq.nextval,'c',to_date('03-08-01','mm-yyyy-dd'));

    说明:

    1. 使用 TO_DATE 函数转换(to_date('日期','格式转换'),日期与格式必须一致)
    2. 排除插入 日期类型的值的默认格式,插入其它需要 to_date 函数转换的日期格式时,不能出现中文。

    四. 在表中添加主键, 外键约束

    1. 添加主键约束:alter table stuinfo add constraint pk_stuinfo_no primary key(no);

    2. 添加外键约束:alter table stumarks add constraint fk_stumarks_no foreign key (no) references stuinfo(no);

    3. 添加唯一约束:alter table userinfo add constraint uq_userinfo_name unique(name);

    4. 添加检查约束: alter table student2 add constraint ck_sex_student2 check(sex = '男' or sex = '女')

    5. 删除约束:ALTER TABLE table_name DROP CONSTRAINT constraint_name;

    6. 删除主键约束:alter table student drop primary key;

    7. 删除约束(包括相关联的约束): alter table student drop constraint pk_student_id cascade;  --cascade 代表一并删除相关联的约束

    8. 建表同时建约束:(default 代表缺省值)

    create table student
      (
    id number primary key,
    sid number, foreign key(sid) references score(sid),
    name varchar(10) not null unique,
    sex char(2) check(sex='男' or sex='女'),
    address varchar(20) default '地址不详',
    birthday date default sysdate

      );

    9. 禁用约束: alter table student disable constraint pk_student_id cascade;  --cascade 代表一并禁用相关联的约束

    10. 启用约束:alter table student enable constraint pk_student_id;  --不能用 cascade 一并启用相关联的约束

    五.创建索引

    1. 索引分类
    唯一索引
    组合索引
    反向键索引
    位图索引

    2. 索引:是与表关联的可选结构,以加快对表执行sql语句的速度

    3. 创建索引
    create index 索引名 on 表名(列名);

    示例
    create index oditem on order_detail(itemcode);

    4. 唯一索引:确保在定义索引的列中,表的任意两行的值都不相同。oracle 自动为表的主键或唯一键列创建唯一索引

      语法
    create unique index 索引名 on 表名(列名);

      示例
    create unique index ind2 on order_master

    六. 创建序列

    1. 格式:

    create sequence 序列名称
          [increment by n]   --n是一个整数值,用于指定序列号之间的间隔,默认值为1,n可以为负数,表示降序排列     
          [start with n]    --指定要生成的第一个序列号
          [{maxvalue n/nomaxvalue}]                  --指定序列可以生成的最大值
          [{minvalue n/nominvalue}]                  --指定序列可以生成的最小值
          [{cycle/nocycle}]                          --指定序列在达到最大值或最小值之后,是否可以继续从头开始生成值
          [{cache n/nocache}];                      --使用cache选项可以预先分配一组序列号,并将其保留在内存中

    2. 访问序列

    创建了序列之后,可以借助于 oracle 提供的 currval 和 nextval 伪列来访问该序列的值,可以从伪列中选择值,但不能操纵他们的值
    nextval 创建序列后第一次使用 nextval 时,将返回该序列的初始值,以后将返回新值
    currval 返回序列的当前值,即最后一次引用 nextval 时返回的值

    示例:
    select venseq.nextval from dual;
    select venseq.currval from dual;

    在insert语句中使用序列值来添加新数据
    insert into vendor_master(vencode,venname) values ('V'||venseq.nextval,'vijay');

    3. 修改序列

    使用 alter sequence 语句来修改序列的定义,包括
    --设置或删除 maxvalue 或 minvalue
    --修改增量值
    --修改缓存中的序列号的数目

    语法

    alter sequence 序列名
          [increment by n]
          [{maxvalue n/nomaxvalue}]                  --指定序列可以生成的最大值
          [{minvalue n/nominvalue}]                  --指定序列可以生成的最小值
          [{cycle/nocycle}]                          --指定序列在达到最大值或最小值之后,是否可以继续从头开始生成值
          [{cache n/nocache}];
         
    注意,alter sequence 语句不能用于修改 start with 参数的值

    示例

    alter sequence venseq
          maxvalue 15;

    4. 删除序列

    使用 drop sequence 语句从数据库中删除序列

    语法

    drop sequence 序列名

    示例
    drop sequence venseq;

    七. 创建视图

    格式:

    create [or replace][force/noforce] view 视图名
    [(alias[,alias]...)]
    as
      select语句
    [with check opiton[constraint 约束名]]
    [with read only[constraint 约束名]]

    注意:

    or replace 表示如果视图已经存在,此选项将重新创建该视图
    force  如果使用此关键字,则无论基表是否存在,都将创建视图
    noforce 这是默认值,表示使用此关键字时,进当基表存在时才创建视图
    alias  指定由视图的查询所选择的表达式的名称
    with check option 此选项指定只能插入或更新视图可以访问的行
    with read only    此选项确保不能在此视图上执行任何DML操作
  • Qtp经验杂谈

    tangzhongliu 发布于 2010-01-18 18:40:37

      2009年的1月份由于项目需要,我开始接触上了qtp,由于以前别人也没有做过,我只有通过internet来学习qtp,刚开始接触的时候感觉很新奇,感觉这个东西就是记录动作的一个工具。

      很快第一个项目就来了,一边摸索着一边开始做上了第一个qtp项目。这个项目很简单,是测试一个java application程序,主要是测试的内容是,点击这个java程序的所有menu,然后确定对应的窗体是否正确打开。可以说做这个程序就是record-->简单的编辑-->run-->result 这么一个简单过程,纯线性的。上边说的简单的编辑也就是加一些等待时间,加了检查点(标准检查点),在resouce里边导入一个vbs文件,里边简单的写了一些vbs共通函数,关于共通action就有两个一个是login,一个是logout,还有就是对一些对象进行了简单的正则表示。就这样,第一个项目就这样做成了。

      第二个项目来了,但是这次我们首先考虑了共通action,尽可能的抽出共通,由于测试项目的不同,这次也加入了除了标准检查点以外的检查点,例如Bitmaip检查点。由于最大程度的抽出了共通方法,所以这次的作业很轻松。而且,当发生错误的时候,排错和修正错误也变得很方便。

      后来的一些项目,我们又上了Datatable来参数化对象,将脚本和数据实现分离。

      通过qtp项目的锻炼,我总结出了以下几个部分:

      (一)对Qtp项目的把握

      ① 理解式样,编写测试用例

      ② 让每个编写测试用例的担当尽量列出各自需要的共通方法,然后收集所有担当列出的共通,

         将这些共通中的共通提出来作为共通action。

      ③ 首先完成共通action。

      ④ 然后项目开始正常推进。如果在中途发现有共通可以抽出,在影响不太大的情况及时抽出。

      (二)Qtp程序编写流程

      ① 录制脚本

      ② 编辑脚本

        a 作成一个vbs文件,里边追加一些vbs共通方法(例:log出力处理),注意在每个函数结尾处

          将set过的对象都set成nothing,减少内存泄露。

        b 给【对象,输入值,输出值】通过【datatable,环境变数,外部文件读入】进行参数化。

        c 追加检查点。(注意应用正则表达式)

          i 映射到datatable

          ii 映射到环境变量

          iii 映射到随机数

        d 追加一些逻辑判断【if else】,循环判断。

        e 适当追加等待时间

        f 尽量全面的考虑异常情况,并追加异常处理

      ③ 运行以及结果查看

      (三)遇到过的一些问题以及解决方法

      1 对于windows程序中需要打开IE,测试IE画面的时候(例:help画面),如果有多次IE画面打开的话,

        有可能某次就打不开了。

      解决方法:打开IE画面前,需要杀一下IE的进程。

      2 对于IE7版本及以上版本的浏览器,有时候qtp不能识别。

      解决方法:将IE7版本或者以上版本的浏览器设置成单tab显示,因为qtp不能识别多tab浏览器。

      3 .Exist()方法,有的时候判断不是很准确。例如一个窗体或者dialog存在,但是Exist方法判断不存在。

      解决方法:利用别的方法进行判断。

      其实,这些都是些基本的东西,但是在一般的工作当中基本也就足够了,大不了再用点qtp的

      自带对象(例如剪贴板之类的)等。

      再有就是描述性编程,这种编写方式当然要比录制方式要灵活,但是需要考虑的是项目的成本和效率,如果要用描述性编程的话,基本每一步都是手敲的,那么效率会很差,但是,如果项目周期很空闲,那么用描述性编程当然好了。

    不知道大家用没用过TestPartner这个自动化测试工具,这个工具也有对象库和描述性编程,但是通过TestPartner录制的大部分代码都是以描述性语言表示的,所以说对于TestPartner来说用描述性语言会很方便,不用每一行都用手敲。

      如果想要提高qtp自动化脚本编写水平,只有多学学vbs,如果想要做好自动化测试,需要多动脑,不管程序怎么跑,正确的情况和出异常的情况都要考虑到,并且异常的情况也不是只有一种。

      好了,今天就说这些吧。以上都是我个人的一些经验,所以说有的地方说的会有问题,希望各位朋友多交流,共同进步。

  • WEB测试

    navy2008 发布于 2008-09-11 11:49:06

    1. 功能测试
    1.1.链接测试
       链接是 Web 应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面。首先,测试所有链接是否按指示的那样确实链接到了该链接的页面;其次,测试所链接的页面是否存在;最后,保证 Web 应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面,只有知道正确的 URL 地址才能访问。
       链接测试可以自动进行,现在已经有许多工具可以采用。链接测试必须在集成测试阶段完成,也就是说,在整个 Web 应用系统的所有页面开发完成之后进行链接测试。
    1.2. 表单测试
       当用户给 Web 应用系统管理员提交信息时,就需要使用表单操作,例如用户注册、登陆、信息提交等。在这种情况下,我们必须测试提交操作的完整性,以校验提交给服务器的信息的正确性。例如:用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等。如果使用了默认值,还要检验默认值的正确性。如果表单只能接受指定的某些值,则也要进行测试。例如:只能接受某些字符,测试时可以跳过这些字符,看系统是否会报错。
    1.3.Cookies测试
    Cookies 通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用 Cookies 访问了某一个应用系统时, Web 服务器将发送关于用户的信息,把该信息以 Cookies 的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息。
       如果 Web 应用系统使用了 Cookies ,就必须检查 Cookies 是否能正常工作。测试的内容可包括 Cookies 是否起作用,是否按预定的时间进行保存,刷新对 Cookies 有什么影响等。
    1.4.设计语言测试
    Web 设计语言版本的差异可以引起客户端或服务器端严重的问题,例如使用哪种版本的 HTML 等。当在分布式环境中开发时,开发人员都不在一起,这个问题就显得尤为重要。除了 HTML 的版本问题外,不同的脚本语言,例如 Java 、 Javascrīpt 、 ActiveX 、 VBscrīpt 或 Perl 等也要进行验证。
    1.5.数据库测试
       在 Web 应用技术中,数据库起着重要的作用,数据库为 Web 应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在 Web 应用中,最常用的数据库类型是关系型数据库,可以使用 SQL 对信息进行处理。

    在使用了数据库的 Web 应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试。
    2. 性能测试
    2.1.连接速度测试
       用户连接到 Web 应用系统的速度根据上网方式的变化而变化,他们或许是电话拨号,或是宽带上网。当下载一个程序时,用户可以等较长的时间,但如果仅仅访问一个页面就不会这样。如果 Web 系统响应时间太长(例如超过 5 秒钟),用户就会因没有耐心等待而离开。
       另外,有些页面有超时的限制,如果响应速度太慢,用户可能还没来得及浏览内容,就需要重新登陆了。而且,连接速度太慢,还可能引起数据丢失,使用户得不到真实的页面。
    2.2.负载测试
       负载测试是为了测量 Web 系统在某一负载级别上的性能,以保证 Web 系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问 Web 系统的用户数量,也可以是在线数据处理的数量。例如: Web 应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现象? Web 应用系统能否处理大量用户对同一个页面的请求?
    2.3.压力测试
      负载测试应该安排在 Web 系统发布以后,在实际的网络环境中进行测试。因为一个企业内部员工,特别是项目组人员总是有限的,而一个 Web 系统能同时处理的请求数量将远远超出这个限度,所以,只有放在 Internet 上,接受负载测试,其结果才是正确可信的。
       进行压力测试是指实际破坏一个 Web 应用系统,测试系统的反映。压力测试是测试系统的限制和故障恢复能力,也就是测试 Web 应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到 Web 应用系统崩溃,接着当系统重新启动时获得存取权。
       压力测试的区域包括表单、登陆和其他信息传输页面等。
    3. 可用性测试
    3.1.导航测试
       导航描述了用户在一个页面内操作的方式,在不同的用户接口控制之间,例如按钮、对话框、列表和窗口等;或在不同的连接页面之间。通过考虑下列问题,可以决定一个 Web 应用系统是否易于导航:导航是否直观? Web 系统的主要部分是否可通过主页存取? Web 系统是否需要站点地图、搜索引擎或其他的导航帮助?
       在一个页面上放太多的信息往往起到与预期相反的效果。 Web 应用系统的用户趋向于目的驱动,很快地扫描一个 Web 应用系统,看是否有满足自己需要的信息,如果没有,就会很快地离开。很少有用户愿意花时间去熟悉 Web 应用系统的结构,因此, Web 应用系统导航帮助要尽可能地准确。
       导航的另一个重要方面是 Web 应用系统的页面结构、导航、菜单、连接的风格是否一致。确保用户凭直觉就知道 Web 应用系统里面是否还有内容,内容在什么地方。
    Web 应用系统的层次一旦决定,就要着手测试用户导航功能,让最终用户参与这种测试,效果将更加明显。
    3.2.图形测试
       在 Web 应用系统中,适当的图片和动画既能起到广告宣传的作用,又能起到美化页面的功能。一个 Web 应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有:
       ( 1 )要确保图形有明确的用途,图片或动画不要胡乱地堆在一起,以免浪费传输时间。 Web 应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面。
       ( 2 )验证所有页面字体的风格是否一致。
       ( 3 )背景颜色应该与字体颜色和前景颜色相搭配。
       ( 4 )图片的大小和质量也是一个很重要的因素,一般采用 JPG 或 GIF 压缩。
    3.3.内容测试
       内容测试用来检验 Web 应用系统提供信息的正确性、准确性和相关性。
       信息的正确性是指信息是可靠的还是误传的。例如,在商品价格列表中,错误的价格可能引起财政问题甚至导致法律纠纷;信息的准确性是指是否有语法或拼写错误。这种测试通常使用一些文字处理软件来进行,例如使用 Microsoft Word 的 " 拼音与语法检查 " 功能;信息的相关性是指是否在当前页面可以找到与当前浏览信息相关的信息列表或入口,也就是一般 Web 站点中的所谓 " 相关文章列表 " 。
    3.4.整体界面测试
       整体界面是指整个 Web 应用系统的页面结构设计,是给用户的一个整体感。例如:当用户浏览 Web 应用系统时是否感到舒适,是否凭直觉就知道要找的信息在什么地方?整个 Web 应用系统的设计风格是否一致?
    对整体界面的测试过程,其实是一个对最终用户进行调查的过程。一般 Web 应用系统采取在主页上做一个调查问卷的形式,来得到最终用户的反馈信息。
       对所有的可用性测试来说,都需要有外部人员(与 Web 应用系统开发没有联系或联系很少的人员)的参与,最好是最终用户的参与。
    4. 客户端兼容性测试
    4.1.平台测试
       市场上有很多不同的操作系统类型,最常见的有 Windows 、 Unix 、 Macintosh 、 Linux 等。 Web 应用系统的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应用可能在某些操作系统下能正常运行,但在另外的操作系统下可能会运行失败。
       因此,在 Web 系统发布之前,需要在各种操作系统下对 Web 系统进行兼容性测试。
    4.2.浏览器测试
       浏览器是 Web 客户端最核心的构件,来自不同厂商的浏览器对 Java ,、 Javascrīpt 、 ActiveX 、 plug-ins 或不同的 HTML 规格有不同的支持。例如, ActiveX 是 Microsoft 的产品,是为 Internet Explorer 而设计的, Javascrīpt 是 Netscape 的产品, Java 是 Sun 的产品等等。另外,框架和层次结构风格在不同的浏览器中也有不同的显示,甚至根本不显示。不同的浏览器对安全性和 Java 的设置也不一样。
       测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。
    5. 安全性测试
    Web 应用系统的安全性测试区域主要有:
       ( 1 )现在的 Web 应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等。
       ( 2 ) Web 应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如 15 分钟)没有点击任何页面,是否需要重新登陆才能正常使用。
       ( 3 )为了保证 Web 应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。
       ( 4 )当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。
       ( 5 )服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。
    6. 总结
       本文从功能、性能、可用性、客户端兼容性、安全性等方面讨论了基于 Web 的系统测试方法。
    基于 Web 的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战。基于 Web 的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。

  • 如何编写测试代码

    xixiaking 发布于 2008-07-24 14:50:01

    使用VU时,测试代码是自动生成的,但了解手工编写测试代码的方法,有助于更好地实施单元测试。这里用一个简单的例子,说明如何编写测试代码进行单元测试。可以用一个简单的方式来组织测试代码:一个类对应一个测试类,一个函数对应一个测试函数。

    产品类:
    class CMyClass 
    {
    public:
        int Add(int i, int j);
        CMyClass();
        virtual ~CMyClass();

    private:
        int mAge; //年龄
        CString mPhase; //年龄阶段,如"少年","青年"
    };

    建立对应的测试类CMyClassTester,为了节约篇幅,只列出源文件的代码:
    void CMyClassTester::CaseBegin()
    {
        //pObj是CMyClassTester类的成员变量,是被测试类的对象的指针,
        //为求简单,所有的测试类都可以用pObj命名被测试对象的指针。
        pObj = new CMyClass();
    }

    void CMyClassTester::CaseEnd()
    {
        delete pObj;
    }
    测试类的函数CaseBegin()和CaseEnd()建立和销毁被测试对象,每个测试用例的开头都要调用CaseBegin(),结尾都要调用CaseEnd()。

    接下来,我们建立示例的产品函数:
    int CMyClass::Add(int i, int j)
    {
        return i+j;
    }
    和对应的测试函数:
    void CMyClassTester::Add_int_int()
    {
    }
    把参数表作为函数名的一部分,这样当出现重载的被测试函数时,测试函数不会产生命名冲突。下面添加测试用例:
    void CMyClassTester::Add_int_int()
    {
        //第一个测试用例
        CaseBegin();{ //1
        int i = 0;    //2
        int j = 0;    //3
        int ret = pObj->Add(i, j); //4
        TEST_ASSERT(ret == 0);     //5
        }CaseEnd();                //6
    }
      第1和第6行建立和销毁被测试对象,所加的{}是为了让每个测试用例的代码有一个独立的域,以便在多个测试用例中使用相同的变量名。
      第2和第3行是定义输入数据,第4行是调用被测试函数,这些容易理解,不作进一步解释。第5行是预期输出,它的功能是当实际输出与预期输出不同时自动报错,TEST_ASSERT(exp)是一个断言宏,表示当exp的计算结果为真时,测试通过,否则,输出报告错误的信息。
      示例中的格式显得很不简洁,2、3、4、5行可以合写为一行:TEST_ASSERT(pObj->Add(0, 0) == 0);但这种不简洁的格式却有很大的优点,因为它一目了然,易于建立多个测试用例,并且具有很好的适应性,同时,也是极佳的代码文档。
      建立了第一个测试用例后,最好编译并运行测试,以排除语法错误,然后,使用拷贝/修改的办法建立其他测试用例。由于各个测试用例之间的差别往往很小,通常只需修改一两个数据,拷贝/修改是建立多个测试用例的最快捷办法。
      
    上面是一个最简单的例子,下面再举一个涉及成员变量的例子,这是产品函数:
    void CMyClass::Grow(int years)
    {
        mAge += years;

        if(mAge < 10)
            mPhase = "儿童";
        else if(mAge <20)
            mPhase = "少年";
        else if(mAge <45)
            mPhase = "青年";
        else if(mAge <60)
            mPhase = "中年";
        else
            mPhase = "老年";
    }

        这是测试函数中的一个测试用例:
        CaseBegin();{
        int years = 1;
        pObj->mAge = 8;
        pObj->Grow(years);
        TEST_ASSERT( pObj->mAge == 9 );
        TEST_ASSERT( pObj->mPhase == "儿童" );
        }CaseEnd();

      前面说过,如果以函数作为测试单元,成员变量的初始值可以看作是输入数据的一部分,其结果值是输出数据的一部分。示例中,首先设定成员变量mAge的初始值,运行被测试函数,在预期输出中,断言成员变量mAge的结果值。如果需要,运行被测试函数前还可以调用其他成员函数,例如:执行被测试函数前可能需要读取文件中的数据保存到成员变量,或需要连接数据库,这些操作称为前置操作。
      为了访问私有成员,可以将测试类定义为产品类的友元类。例如,定义一个宏:
      #define UNIT_TEST(cls) friend class cls##Tester;
      然后在产品类声明中加一行代码:UNIT_TEST(ClassName)。

      实际上,测试代码中还可能涉及到其他数据,例如全局变量、文件中的数据,或数据库中的数据,后文会作进一步的论述。
  • 安装与卸载测试

    紫梦 发布于 2007-11-21 18:24:34

    一、安装测试

    • 常规功能测试

      0、安装手册给的所有步骤得到验证;
      1
      、安装过程中所有缺省选项得到验证;
      2
      、安装过程中典型选项得到验证;
      3
      、测试各种不同的安装组合,并验证各种不同组合的正确性(包括参数组合,控件执行顺序组合,
      产品安装组件组合,产品组件安装顺序组合(b/s))
      4、安装界面的所有信息都显示正确、没有错误别子、没有二义性;
      5、安装界面的每个按钮都进行校验有效性;
      6、安装后是否能产生正确的目录结构和文件,文件属性正确;
      7、安装后动态库是否正确;
      8、安装后软件能否正确运行;
      9、安装后没有生成多余的目录结构,文件,注册表信息,快捷方式等;
      10、如果安装程序有重新安装功能的话,要考虑重新安装是否正常。


    • 增强测试

      1、验证用户机器已安装相同产品的情况下再进行安装,安装程序是否有进行相应校验;
      2、安装测试应该在所有的运行环境上进行验证(手册上指定如:操作系统(XP\2000\2003),数据库,硬件环境,网络环境等)
      3、安装路径要考虑几种情况:a、安装路径较长;b、安装路径中包含空格;c、安装路径包含中文;d、安装路径包含特殊字符;e、安装路径编码规范校验(比如c:crm或c:/crm)
      4、硬盘分区、可用空间校验:a、硬盘空间不足;b、硬盘分区不存在(如用户机器不存在F盘,安装路径输入F盘);c、空间本来充足的情况下,在安装过程中往磁盘空间放入大量文件,导致磁盘空间不足的情况。
      5、目的安装文件夹为只读的情况;
      6、在安装过程中人为访问其他软件,比如安装过程中打开word文档或打开IE上网;
      7、同时运行两个安装程序的情况:验证同时运行相同的安装程序及同时运行不同的安装程序两种情况;
      8、在笔记本环境下进行安装卸载,因为有很多产品在笔记本中会出现问题,尤其是系统级的产品
      9、考虑文件被占用的情况下进行程序回滚或卸载;
      10、校验执行安装包的系统权限,即以系统管理员权限进行安装及非系统管理员权限进行安装;

    • 异常测试

      1、安装过程中计算机断电,要保证重新插上电源,重新安装可以正常安装;
      2、安装过程中计算机重启,要保证计算机重启后,重新安装可以正常安装;
      3、安装过程中安装进程被迫停止(即手动停止进程),要保证重新安装可以正常安装;
      4、安装包如果有创建数据库步骤,则要考虑在创建数据库步骤时数据库服务停止,安装包是否进行友好提示;重启数据库服务后,是否还可以重新安装;


    二、卸载测试

    1、文件删除情况---卸载后是否删除安装时所创建的文件及文件夹(如:程序安装在几处的)、非安装目录(向系统其它地方添加的文件及文件夹),它们包括(exe,dll,配置文件等) ,快捷方式-(桌面,菜单,任务栏,系统栏,控件面板,系统服务列表等)

    2、复原方面---卸载后,系统能否恢复到软件安装前的状态(包含目录结构、动态库,注册表,系统配置文件,驱动程序,关联情况等)(专门的测试工具regsnap)

    3、卸载方式--程序自带卸载程序/系统的控件面板卸载/其它自动卸载工具(如:优化大师)

    4、卸载状态--程序在运行/暂停/终止等状态时的卸载

    5、
    非正常卸载情况-卸载软件过程中,取消卸载进程,或计算机断电,或计算机重启;然后,启动计算机后,重新卸载软件,如果软件无法卸载,则重新安装软件,安装之后再重新卸载。

    6、卸载环境--不同的(操作系统,硬件环境,网络环境等)下进行卸载

    7、卸载后,该系统是否对其他的应用程序造成不正常影响(如操作系统,应用软件等)

    8、健壮性测试:在用户机器上进行反复的安装-卸载-再安装



     

  • QTP的登陆脚本设计

    belie 发布于 2007-06-25 10:09:26

    由于一直以来事情都比较多,最近上课还有其它的事情,所以本来答应一个朋友把脚本帮他写一些,但是耽误了3-4天了,实在不好意思。这里把脚本简单说一下,我们分析一下。
        当时问题是这样的,“我的错误的用户名就没办法登陆”,其实含义就是脚本最好能处理成功的用户名错误的用户名,那么这里涉及到脚本的设计。

    目标如下:
    1.    脚本需要处理成功和失败的用户的登陆
    2.   数据驱动

    设计开发脚本如下:


    第一步录制脚本如下
    Browser("智能变电巡检仪系统4.0").Page("智能变电巡检仪系统4.0").WebEdit("txtLoginName").Set "吕巍"
    Browser("智能变电巡检仪系统4.0").Page("智能变电巡检仪系统4.0").WebButton("登 录").set ""
    Browser("智能变电巡检仪系统4.0").Page("Page").Syn
    Browser("智能变电巡检仪系统4.0").Close

    以上为录制的正确的用户名,下边录制错误的用户名
    Browser("智能变电巡检仪系统4.0").Page("智能变电巡检仪系统4.0").WebEdit("txtLoginName").Set "xx"
    Browser("智能变电巡检仪系统4.0").Page("智能变电巡检仪系统4.0").WebButton("登 录").set ""
    出现错误提示“该用户不存在”

    第二步 增强脚本

    现在需要设计的是一套脚本驱动所有的测试数据,这样可以驱动所有的用例数据,qtp中提供了datatable。
    但是有数据驱动也要做一个事情就是如何处理错误的用户名和正确的用户名,如何结合起来呢?
    这里我把datatable看作存放测试用例的地方,里面放入测试数据,还放入测试的预期结果。这样我的设计已经出现雏形了。
    我把datatable设计为三列

    username  password status
    吕x               
    xxx       xxxx     该用户不存在

    第三列放入最后执行的结果,我设计的是空为成功登陆,如果有信息就用实际运行的结果和这一列对比.好了万事俱备只欠东风了

    修改脚本如下:
    Dim iStatus

    Browser("智能变电巡检仪系统4.0").Page("智能变电巡检仪系统4.0").WebEdit("txtLoginName").Set DataTable("username", dtLocalSheet)
    Browser("智能变电巡检仪系统4.0").Page("智能变电巡检仪系统4.0").WebButton("登 录").set DataTable("password", dtLocalSheet)
    iStatus = DataTable("status", dtLocalSheet)

    If   iStatus=""  Then
      Browser("智能变电巡检仪系统4.0").Close
    End If


    If   iStatus="该用户不存在"    Then
         Reporter.ReportEvent micFail, "登陆", "登陆失败."
    End If

    Browser("智能变电巡检仪系统4.0").Close

    第三步,设置脚本运行过程

    打开tests-〉settings
    设置RUN TAB页面下Datatable iterations中Run On all rows

    这样就完成了整个脚本的设计工作,以上通过一个简单例子吧脚本的设计和软件的功能结合起来,达成脚本的设计效果。

  • QuickTestProfessional基本使用示例(原创)

    junqinghuang 发布于 2008-05-26 15:17:40

    QuickTestProfessional基本使用示例(原创)

    1          设置脚本间的间隔时间

    Wait(2),单位:秒

    2          循环语句while

    i=0

    do while(i<10)

    Window("Opera").Restore

    Window("Opera").WinObject("OperaWindowClass").Click 446,232

    Window("Opera").WinObject("OperaWindowClass").Click 461,278

    i=i+1

    loop

    3         循环语句for

    For i=1 to 3

           Window("Opera").Restore

    Window("Opera").WinObject("OperaWindowClass").Click 446,232

    Window("Opera").WinObject("OperaWindowClass").Click 461,278

    Next

    4          判断语句

    Do while(i<20)

    Browser("XX项目").Page("XX项目").Frame("wap").Link("啤酒").Click

    wait(2)

    Browser("XX项目").Page("XX项目").Frame("wap_2").Link("商铺详情").Click

    wait(2)

    i=i+1

    If i=5 Then

           Exit do

    End If

    Loop

    5          With语句

    Do while(i<20)

    With Browser("XX项目")

    .Page("XX项目").Frame("wap").Link("生活家居").Click

    .Page("XX项目").Frame("wap_5").Link("出租(火爆招租中)").Click

    .Page("XX项目").Sync

    With .Page("XX项目")

    .Frame("wap_6").Image("image").Check CheckPoint("image")'检查点

    .Frame("wap_6").Link("返回XX首页").Click

    .Sync

    .Frame("wap").Check CheckPoint("生活家居")'检查点

    End with

    End with

    i=i+1

    If i=3 Then

        i=21

    End If

    Loop

    6         检查点

    Browser("XX项目").Page("XX项目").Frame("wap").Link("生活家居").Click

    Browser("XX项目").Page("XX项目").Frame("wap_5").Link("出租(火爆招租中)").Click

    Browser("XX项目").Page("XX项目").Sync

    Browser("XX项目").Page("XX项目").Frame("wap_6").Image("image").Check CheckPoint("image")'检查点

    Browser("XX项目").Page("XX项目").Frame("wap_6").Link("返回XX首页").Click

    Browser("XX项目").Page("XX项目").Sync

    Browser("XX项目").Page("XX项目").Frame("wap").Check CheckPoint("生活家居")'检查点

    7           引用函数

    Function  hjq(i)

       msgbox("hjq")

    End Function

     

    Do while(i<20)

    '开始

    Browser("XX项目").Page("XX项目").Frame("wap").Link("啤酒").Click

    wait(2)

    Browser("XX项目").Page("XX项目").Frame("wap_2").Link("商铺详情").Click

    '详情

    i=i+1

    If i=3 Then

        i=21

    End If

    Call hjq(i)

    Loop

    8           引用action

    录制action1,在step->action properties中设置该actionreuseable action

    录制action2,在inser->call to exiting action,选择action1

    OK

    9           参数化

    keyword view中设置对象的value为参数,并设置值

    With Browser("XX项目_2").Page("XX项目")

           With .Frame("wap_2")

                  .WebEdit("key").Set "1"

                  .WebButton("").Click

           End With

           .Frame("wap_3").Link("重新搜索").Click

           With .Frame("wap")

                  .WebEdit("key").Set DataTable("p_Text", dtGlobalSheet)

                  .WebButton("").Click

           End With

           .Sync

    End With

    10       Vbs随机读取一行文本内容

    '随机读取文件中的一行

    randomize 

    set fso=createobject("scrīpting.filesystemobject")  '创建文件系统对象

    set a=createobject("scrīpting.dictionary")  '类似于二维数组

    set file=fso.opentextfile("D:\hjq.txt")  '打开文件

    do while file.atendofstream<>true 

    m=m+1  'm记录文件中文本行数

    a.add m,file.readline  'file.readline读取某行记录

    loop 

    file.close  '关闭文件

    h=int(rnd*m) 

    msgbox "" & h & ":  " & a(h) ,4096,"随机内容"

    msgbox "1:  " & a(1) ,4096,"内容"

    msgbox "2:  " & a(2) ,4096,"内容"

    msgbox "3:  " & a(3) ,4096,"内容"

    11       二维数组的使用

    set a=createobject("scrīpting.dictionary")  '类似于二维数组

    a.add 0,"返回XX首页"

    a.add 1,"返回XX首页"

    a.add 2,"返回XX首页"

    a.add 3,"返回XX首页"

     

    For i=0 to 3

     

    With Browser("XX项目").Page("XX项目")

           With .Frame("wap")

                  .WebEdit("key").Set "1"

                  .WebButton("").Click

           End With

           .Frame("wap_2").Link(a(i)).Click

           .Sync

    End With

    Next

    12       从文件读取文本,并赋予参数

    set fso=createobject("scrīpting.filesystemobject")  '创建文件系统对象

    set a=createobject("scrīpting.dictionary")  '类似于二维数组

    set file=fso.opentextfile("D:\hjq.txt")  '打开文件

    wait(2)

    do while file.atendofstream<>true

    With Browser("XX项目").Page("XX项目")

           With .Frame("wap")

                  .WebEdit("key").Set  file.readline

                  .WebButton("").Click

           End With

           .Frame("wap_2").Link("返回XX首页").Click

           .Sync

    End With

    loop 

    file.close  '关闭文件

    13       读取csv文件并分割字符串

    Dim aasplit

    set fso=createobject("scrīpting.filesystemobject")  '创建文件系统对象

    set file=fso.opentextfile("D:\hjq.csv")  '打开csv文件

    wait(2)

    Do while file.atendofstream<>true

        aasplit=split(file.readline,",")',分割字符串

     

           For i=0 to UBound(aasplit)

     

                  With Browser("XX项目").Page("XX项目")

                         With .Frame("wap")

                                .WebEdit("key").Set  aasplit(i)

                                .WebButton("").Click

                         End With

                         .Frame("wap_2").Link("返回XX首页").Click

                         .Sync

                  End With

                 

           Next

     

    loop 

    file.close  '关闭文件

    14       怎样识别弹出的web窗口和对象

    1,  进入object identification

    2,  enviroment中选择web

    3,  选择某个test object class,如browser

    4,  添加mandatory properties

    5,  确定

    6,  重新录制脚本

    7,  OK

    15       Vbs写文件

    set fs =createobject("scrīpting.filesystemobject")

    if (fs.fileexists("c:\hjq.txt")) then

    set f =fs.opentextfile("c:\hjq.txt",8)

    f.write chr(13)+chr(10)

    f.write "hello"

    f.write chr(13)+chr(10)

    f.writeline "beijing"

    f.close

    else

    set f=fs.opentextfile("c:\hjq.txt",2, true)

    f.writeblanklines 2 '写入2个空行

    f.write "china"

    f.close

    end if

     

    16       基本函数

    QTP的基本使用函数:

    1, 获取对话框相应的文字: GetVisible Text

    2, 查找相应的字符串: instr (1,查找目标字符串,所查找的字符串)

    3, 随机数的获取: Randomnumber.Value() cstr(int(Rnd*10)+1)

    4, 等待函数: Wait(秒数)

    5, 获取数组下标: UBound (数组名)

    6, 拆分数组: Split(MyString, ",", -1, 1)

    7, 可执行步骤: OptionalStep

    8, 报告信息: Reporter.ReportEvent 3, "Save Step", "Out of cycle!"

    9, 判断对话框是否存在: .exist

    10,事件过滤函数:Reporter.Filter=过滤条件(0123)0代表显示所有的errorwarning,1,显示error,2,显示waining,3,任何errorwarning都不显示。

    11,循环函数:do … loop untilfor…to… then next,while.

    12,数据表格:DataTable,向外赋值,Dim aa = DataTable.value(“CellingName”,”ActionName”).

    13,获得对象属性的三种方法GetTOPropertyGetTOProperties,GetROProperty,GetTOProperty获得程序中对象当前的属性,GetTOProperties获得当前属性所有集合,GetROProperty获得的是录制时对象所获得的属性。

    14,检查点方法check和输出指定属性值output

    15,函数Descrīption,可以获得某页面同标签的属性进行操作。

    16,函数nagative可以随便跳转页面到指定的URL

    17,函数Object可以获得当前页面同属性的控件。

    18,函数Focus可以让控件获得焦点,函数Blur则是失去焦点,click单击,dbclick双击。

    19,函数setAttribute可以设置控件属性,getAttribute可以获得属性。

     

    ( 本文为junqinghuang 原创,转载请注明出处)

  • qtp中的数据库、文件操作

    wonew1228 发布于 2008-04-07 21:06:15

    1.datatable

            QTP本身程序就给我们提供了这么一个数据表,我们可以把测试数据或测试用例填入这个数据表中.

    如:设计用例

       username  passwd

    case1  mercury mercury

    case2 xxxxxxx xxxxxx

    录制脚本

    For i=1 to Datatable.GetRowCount
    Dialog("Login").WinEdit("Agent Name:").Set DataTable("username", dtGlobalSheet)
    Dialog("Login").WinEdit("Password:").Set DataTable("passwd", dtGlobalSheet)
    Dialog("Login").WinButton("OK").Click
    datatable.GlobalSheet.SetNextRow
    Next

            本例是验证一个登录系统,通过DataTable不同的用例设计,驱动起这段脚本,达到测试的效果.当然上面的例子中还少一个很重要的步骤,那就是结果比较.如果不能进行结果比较的自动化测试不能够称为自动化测试.
            当然我们这里主要讲的是数据驱动,所以不在对上面的例子进行补充.

    2.文本文件

            我们可以把文本文件当成数据文件,通过对文本文件的读写操作,来实现数据驱动.

    例:文本文件内的内容

      mercury,mercuy

    读文件的代码

    Function writeorderno(orderno)
    Dim fso, myfile,username,passwd
    Set fso=CreateObject("scrīpting.FileSystemObject")
    Set myfile=fso.openTextFile("C:\testing.txt",1,false)
    tmp=split(myfile.readline,",")
    username=tmp(0)
    passwd=tmp(1)
    myfile.close
    End Function

    写文本文件的代码

    Function writeorderno(orderno)
    Dim fso, myfile
    Set fso=CreateObject("scrīpting.FileSystemObject")
    Set myfile=fso.openTextFile("C:\result1.txt",8,false)
    myfile.writeline orderno
    myfile.close
    End Function

    3EXCEL文件

            我们可以把EXCEL文件当成数据文件,通过对EXCEL文件的读写操作,来实现数据驱动.

            可以把EXCEL文件当作对象的方式来完成写的操作

    Dim Excel,ExcelSheet
    Set Excel=CreateObject("Excel.Application")
    Set ExcelSheet=CreateObject("Excel.Sheet")
    ExcelSheet.Application.visible=true
    ExcelSheet.ActiveSheet.Cells(1,1).value=1
    ExcelSheet.ActiveSheet.Cells(1,2).value=2
    ExcelSheet.ActiveSheet.Cells(1,3).value=3
    Excel.Save "C:\test.xls"
    Set ExcelSheet=Nothing

            用ADO的方式连接EXCEL文件来做读的操作


    Dim conn,input,filename
    filename="D:\公基本情况(tb_gsgk)-标准格式.xls" '
    Set conn= createobject("ADODB.Connection")
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="&filename&";Extended Properties='Excel 8.0;hdr=yes'"
    Set input= createobject("ADODB.Recordset")
    input.Open "select * from [公基本情况-标准格式$] " ,conn,2,2
    input.close
    Set input=nothing

    4.数据库

            可以利用设计数据表,把测试数据和测试用例放在数据表里,用ADO或者其他任何可以访问连接数据库的方式连接数据库,来实现数据驱动

       Dim res,cmd,sql
    Set Res=createobject("adodb.recordset")
    Set Cmd=createobject("adodb.command")
    Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=xhq;Data Source=192.168.191.142"  '这句话是连接数据库的数据源,要做修改
    Cmd.CommandType = 1
    sql="selec t * from 表 where name=username"
    Cmd.CommandText = sql
    Set res = Cmd.Execute()
    Set res = nothing
    Set cmd.ActiveConnection = nothing
    Set Cmd= nothing

    以上四种方法都可以帮助我们实现数据驱动,应该说数据驱动在自动化测试中运用的比较的广泛,才有必要拿出来探讨一下.

  • 面试试题(转)

    ssy2010 发布于 2007-09-03 09:55:17

     

    面试题目:
    01. 为什么要在一个团队中开展软件测试工作?
    因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。
    02. 您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
    我曾经做过web测试,后台测试,客户端软件,其中包括功能测试性能测试,用户体验测试。最擅长的是功能测试
    03. 您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同04. 的测试类型的区别与联系(如功能测试、性能测试……)
    测试类型有:功能测试,性能测试,界面测试。
    功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。
    性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
    界面测试,界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。
    区别在于,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。界面测试更关注于用户体验上,用户使用该产品的时候是否易用,是否易懂,是否规范(快捷键之类的),是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户无意输入无效的数据,当然考虑到体验性,不能太粗鲁的弹出警告)?做某个性能测试的时候,首先它可能是个功能点,首先要保证它的功能是没问题的,然后再考虑该功能点的性能测试
    05.  请试着比较一下黑盒测试白盒测试单元测试集成测试系统测试、的区别与联系。
    黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
    白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
      软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
    1、是否有不正确或遗漏的功能?
    2、在接口上,输入是否能正确的接受?能否输出正确的结果?
    3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
    4、性能上是否能够满足要求?
    5、是否有初始化或终止性错误?
      软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:
    1、对程序模块的所有独立的执行路径至少测试一遍。
    2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
    3、在循环的边界和运行的界限内执行循环体。
    4、测试内部数据结构的有效性,等等。
    单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
          单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。
    集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。
    系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。(常见的联调测试)
           系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。
    验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
    验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样。
    06. 测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?
    软件测试计划是指导测试过程的纲领性文件,包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。
    测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)
    07. 您认为做好测试计划工作的关键是什么?
    1. 明确测试的目标,增强测试计划的实用性
    编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确
    2.坚持“5W”规则,明确内容与过程
    “5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。
    3.采用评审和更新机制,保证测试计划满足实际需求
    测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。
    4. 分别创建测试计划与测试详细规格、测试用例
    应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。
    08. 您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
    1.等价类划分
    划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.
    2.边界值分析法
      边界值分析方法是对等价类划分方法的补充。测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.
      使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.
    3.错误推测法
      基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.
      错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况. 输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例.
    4.因果图方法
      前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等. 考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例. 这就需要利用因果图(逻辑模型). 因果图方法最终生成的就是判定表. 它适合于检查程序输入条件的各种组合情况. 
    08.您认为做好测试用例设计工作的关键是什么?
    白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果
    黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题
    09. 请以您以往的实际工作为例,10. 详细的描述一次测试用例设计的完整的过程。
    就说最近的这次网站功能的测试吧
    首先:得到相关文档(需求文档和设计文档),理解需求和设计设计思想后,想好测试策略(测试计划简单点就OK了),考虑到测试环境,测试用例,测试时间等问题。
    第二步:设计测试用例,测试策略是:把网站部分的功能点测试完,然后在进行系统测试(另外个模块呢有另一个测试人员负责,可以进行联调测试),网站模块的测试基本是功能测试和界面测试(用户并发的可能性很小,所以不考虑):这次的网站的输入数据呢是使用数据库中的某张表记录,如果表中某一数据记录中新加进来的(还没有被处理的,有个标志位),网站启动后会立刻去刷那张表,得到多条数据,然后在进行处理。处理过程中,会经历3个步骤,网站才算完成了它的任务。有3个步骤呢,就可以分别对这3个步骤进行测试用例的设计,尽量覆盖到各种输入情况(包括数据库中的数据,用户的输入等),得出了差不多50个用例。界面测试,也就是用户看的到的地方,包括发送的邮件和用户填写资料的页面展示。
    第三步:搭建测试环境(为什么这个时候考虑测试环境呢?因为我对网站环境已经很熟了,只有有机器能空于下来做该功能测试就可以做了),因为网站本身的环境搭建和其他的系统有点不同,它需要的测试环境比较麻烦,需要web服务器(Apache,tomcat),不过这次需求呢,网站部分只用到了tomcat,所以只要有tomcat即可
    第四步:执行测试
    11. 您以往是否曾经从事过性能测试工作?如果有,12. 请尽可能的详细描述您以往的性能测试工作的完整过程。
    是的,曾经做过网站方面的性能测试,虽然做的时间并不久(2个月吧),当时呢,是有位网站性能测试经验非常丰富的前辈带着我一起做。
    性能测试类型包括负载测试,强度测试,容量测试等
          负载测试:负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。
          强度测试: 强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况。
          容量测试:确定系统可处理同时在线的最大用户数  
    在网站流量逐渐加大的情况下,开始考虑做性能测试了,首先要写好性能测试计划,根据运营数据得出流量最大的页面(如果是第一次的话,一般是首页,下载页,个人帐户页流量最大,而且以某种百分比),
    Web服务器指标指标:
    * Avg Rps: 平均每秒钟响应次数=总请求时间 / 秒数;
    * Successful Rounds:成功的请求;
    * Failed Rounds :失败的请求;
    * Successful Hits :成功的点击次数;
    * Failed Hits :失败的点击次数;
    * Hits Per Second :每秒点击次数;
    * Successful Hits Per Second :每秒成功的点击次数;
    * Failed Hits Per Second :每秒失败的点击次数;
    * Attempted Connections :尝试链接数;

    13. 您在从事性能测试工作时,14. 是否使用过一些测试工具?如果有,15. 请试述该工具的工作原理,16. 并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。
    17. 您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?
    18. 在您以往的工作中,19. 一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
    20. 您以往所从事的软件测试工作中,21. 是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,22. 请结合该工具描述软件缺陷(Bug)跟踪管理的流程。
    23. 您认为在测试人员同24. 开发人员的沟通过程中,25. 如何提高沟通的效率和改善沟通的效果?维持测试人员同26. 开发团队中其他成员良好的人际关系的关键是什么?
    27. 在您以往的测试工作中,28. 最让您感到不29. 满意或者不30. 堪回首的事情是什么?您是如何来对待这些事情的?
    31. 在即将完成这次笔试前,32. 您是否愿意谈一些自己在以往的学习和工作中获得的工作经验和心得体会?(可以包括软件测试、过程改进、软件开发或者与此无关的其他方面)
    33.     你对测试最大的兴趣在哪里?为什么?
    最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。曾经在无忧测试网上看到一篇文章,是关于如何做好一名测试工程师。一共罗列了11,12点,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的1,2点我没有把握,其他点我都很有信心做好它。
    刚开始进入测试行业时,对测试的认识是从无忧测试网上了解到的一些资料,当时是冲着做测试需要很多技能才能做的好,虽然入门容易,但做好很难,比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席,因为我喜欢我的专业),但看到测试比开发更难更有挑战性,想做好测试的意志就更坚定了。
    不到一年半的测试工作中,当时的感动和热情没有减退一点(即使环境问题以及自身经验,技术的不足,做测试的你一定也能理解)。
    我觉得做测试整个过程中有2点让我觉得很有难度(对我来说,有难度的东西我就非常感兴趣),第一是测试用例的设计,因为测试的精华就在测试用例的设计上了,要在版本出来之前,把用例写好,用什么测试方法写?(也就是测试计划或测试策略),如果你刚测试一个新任务时,你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的),而技术基础可就没那么简单了,这需要你自觉的学习能力,比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的,后台是怎么响应用户请求的?测试环境如何搭建?这些都需要最早的学好。至少在开始测试之前能做好基本的准备,可能会遇到什么难题?需求细节是不是没有确定好?这些问题都能在设计用例的时候发现。
    第二是发现BUG的时候了,这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug,还有一部分bug需要测试的过程中更了解所测版本的情况获得更多信息,补充测试用例,测试出bug。还有如何发现bug?这就需要在测试用例有效的情况下,通过细心和耐心去发现bug了,每个用例都有可能发现bug,每个地方都有可能出错,所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细了,bug都在里面发现的)。如何描述bug也很有讲究,bug在什么情况下会产生,如果条件变化一点点,就不会有这个bug,以哪些最少的操作步骤就能重现这个bug,这个bug产生的规律是什么?如果你够厉害的话,可以帮开发人员初步定位问题。
    34. 你的测试职业发展是什么?
    测试经验越多,测试能力越高。所以我的职业发展是需要时间累积的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年累积测试经验,按如何做好测试工程师的11,12点要求自己,不断的更新自己改正自己,做好测试任务。
    35. 你自认为测试的优势在哪里?
    优势在于我对测试坚定不移的信心和热情,虽然经验还不够,但测试需要的基本技能我有信心在工作中得以发挥。
    36. 你以前工作时的测试流程是什么?
    公司对测试流程没有规定如何做,但每个测试人员都有自己的一套测试流程。我说下我1年来不断改正(自己总结,吸取同行的方法)后的流程吧。需求评审(有开发人员,产品经理,测试人员,项目经理)->需求确定(出一份确定的需求文档)->开发设计文档(开发人员在开始写代码前就能输出设计文档)->想好测试策略,写出测试用例->发给开发人员和测试经理看看(非正式的评审用例)->接到测试版本->执行测试用例(中间可能会补充用例)->提交bug(有些bug需要开发人员的确定(严重级别的,或突然发现的在测试用例范围之外的,难以重现的),有些可以直接录制进TD)->开发人员修改(可以在测试过程中快速的修改)->回归测试(可能又会发现新问题,再按流程开始跑)。
    37. 当开发人员说不38. 是BUG时,39. 你如何应付?
    开发人员说不是bug,有2种情况,一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动,3方商量确定好后再看要不要改。二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的依据是什么?如果被用户发现或出了问题,会有什么不良结果?程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其实有些真的不是bug,我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题。如果确定是bug的话,一定要坚持自己的立场,让问题得到最后的确认。
    23.你为什么想离开目前的职务?
    因为公司运作情况并不理想,公司需要调整部门体系,公司考虑到缩减部门人员,所以大批量的裁员(有6,7个),这是我的第一份工作,对公司也有较深的感情,因为在这里我找到了职业理想(就是测试),所以公司需要精简人员,我自愿退出。虽然很舍不得,但我将会有新的发挥能力的舞台。
      24:你对我们公司了解有多少?

      25:你找工作时,最重要的考虑因素为何?
    工作的性质和内容是否能让我发挥所长,并不断成长。
    26:为什么我们应该录取你?
    您可以由我过去的工作表现所呈现的客观数据,明显地看出我全力以赴的工作态度。
      27:请谈谈你个人的最大特色。
    我的坚持度很高,事情没有做到一个令人满意的结果,绝不罢手。
    28.白箱测试和黑箱测试是什么?什么是回归测试?
        29。单元测试、集成测试、系统测试的侧重点是什么?
        30。设计用例的方法、依据有那些?
        31。一个测试工程师应具备那些素质和技能?
        32.集成测试通常都有那些策略?
        33.你用过的测试工具的主要功能、性能及其他?
        34.一个缺陷测试报告的组成
        35.基于WEB信息管理系统测试时应考虑的因素有哪些?
    36.软件测试项目从什么时候开始,?为什么?
         37.需求测试注意事项有哪些?
         38.简述一下缺陷的生命周期
         39.测试分析测试用例注意(事项)?
    你在你所在的公司是怎么开展测试工作的?是如何组织的?
    你认为理想的测试流程是什么样子?
    你是怎样工作的?
    软件测试活动的生命周期是什么?
    请画出软件测试活动的流程图?
    针对缺陷采取怎样管理措施?
    什么是测试评估?测试评估的范围是什么?
    如果能够执行完美的黑盒测试,还需要进行白盒测试吗?为什么?
    测试结束的标准是什么?
    软件验收测试除了alpha,beta测试以外,还有哪一种?
    做测试多久了?
    以前做过哪些项目?
    你们以前测试的流程是怎样的?
    <答:测试计划-测试用例设计-测试执行-测试分析报告>
    用过哪些测试工具?
    为什么选择测试这行?
    <答:它是一个新兴的行业,有发展潜力,而且很锻炼人,需要掌握更多的技能,比做开发要更难>
    为什么值得他们公司雇用?
    如果我雇用你,你能给部门带来什么贡献?
    如何从工作中看出你是个自动自觉的人
    你的工作通常能在时限内完成吗.(我想问一下就是她问这个问题的动机是什么)
    通常你对于别人批评你会有什么样的反应
    如果明知这样做不对,你还会依主管的指过去做吗
    如果你接到一个客户抱怨的电话,你确知无法解决他的问题,你会怎么处理
    你觉得什么样的人最难相处
    为什么值得他们公司雇用?
          帮助公司提高软件质量和测试部门的技术水平
    如果我雇用你,你能给部门带来什么贡献?
          分享我的测试经验和测试技能,提高测试部门技术水平
    如何从工作中看出你是个自动自觉的人
         自动自觉范围太广
          1. 工作成果
          2. 工作质量  
    你的工作通常能在时限内完成吗.(我想问一下就是她问这个问题的动机是什么)
          在有足够的资源和合理的工作量的情况下,完全可以按时完成,并能比一般人做的更好
    通常你对于别人批评你会有什么样的反应
      有错即改,无措勉之
    如果明知这样做不对,你还会依主管的指过去做吗
         在公司内部下级是否有申诉渠道?
    如果你接到一个客户抱怨的电话,你确知无法解决他的问题,你会怎么处理
        为什么抱怨?是怎么样的问题?
         如果是客服问题,提交客服部门解决
        如果是质量问题,分析原因,下一版本改进
    你觉得什么样的人最难相处
         自以为是的人
    什么叫单元测试?
    请就软件测试人员应该具备什么样的基本素质说说你的看法。
    请就如何在开发中进行软件质量控制说说你的看法
     简述软件测试的意义,以及软件测试的分类

    1、功能测试,性能测试,界面测试,安全测试(可以简单点,比如只涉及到COOKIES里的内容),压力测试(商业性质的网站) 等等,B/S软件也要根据其具体功能采用不同的测试策略。
    2、态度、责任心、自信、敏锐的观察力、良好的发散思维
    3、先设计后开发模式,加强单元测试,加强代码走查,有一套完整的白盒测试方法。关键是加强开发人员的质量意识,增进程序员向工程师水平发展。
    4、意义嘛,就自己想吧。软件测试的分类,这个很多人都按各种方法去分。无明确答案给你。

    对测试的理解——基本的测试知识,对测试是否认可? 75。
       3、谈一谈过去自己的工作——了解经历、提供进一步提问的素材,表达能力  
    测试技能
    测试设计的方法并举例说明——测试技术的使用
    测试工具——熟悉程度,能否与当前工作匹配?
    如何做计划?如何跟踪计划?——日常工作能力
    如果开发人员提供的版本不满足测试的条件,如何做?——与开发人员协作的能力
    熟悉unix系统、oracle数据库吗?——是否具备系统知识
    做过开发吗?写过哪些代码?——开发技能
    阅读英语文章,给出理解说明?——部分英语能力
    文档的意义——是否善于思考?(最简单的概念,不同层次的理解)
    假如进入我们公司,对我们哪些方面会有帮助?——讲讲自己的特长
    随便找一件物品,让其测试——测试的实际操作能力
    软件测试的方法有?
    软件测试的过程?
    有一个新的软件,假如你是测试工程师,该如何做?
    软件测试分哪两种方法?分别适合什么情况?
    2。一套完整的测试应该由哪些阶段组成?分别阐述一下各个阶段。
    3。软件测试的类型有那些?分别比较这些不同的测试类型的区别与联系。
    4。测试用例通常包括那些内容?着重阐述编制测试用例的具体做法
    5。在分别测试winform的C/S结构与测试WEB结构的软件是,应该采取什么样的方法分别测试?他们存在什么样的区别与联系?
    6。在测试winform的C/S结构软件时,发现这个软件的运行速度很慢,您会认为是什么原因?您会采取哪些方法去检查这个原因?
    7。描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程
    你在五年内的个人目标和职业目标分别是什么?
      分析这个问题是用来了解你的计划能力的,通过这个问题,面试人同时还可以知道你的目标是否符合企业对你的安排。
      错误回答我想在将来的某个时候考虑这个问题。如今企业的领导者更换频繁,我认为做太多的个人计划是荒谬可笑的,不是吗?
      评论这种回答属于令人反感的一类。首先,当有人想了解你的目标时,"将来的某个时候"这种通俗说法并不奏效。其次,认为企业很脆弱,领导者更换频繁,这种说法毫无疑问会令人反感,而且也是不合理的。最后,认为做计划可笑,看不起这个问题,而且反问面试人,这些都注定了这样的求职者最终会失败。
      正确回答从现在起的五年之内,我希望能够在一个很好的职位上待几年,而且最好有一次晋升,然后就期待着下一步。不管是向上提升,还是在企业内横向调动,对我个人来说,我希望找到一家企业——一家愿意做相互投入的企业——待上一段时间。
      评论这个问题没有回答得过分具体(那样可能会产生漏洞),而且它表明你有雄心,并且思考过在企业中的成长方式。通过表达横向调动和向上提升的愿望,表明你是一个有灵活性的人。
     问题23 你怎样做出自己的职业选择?
      分析 面试人提出这个问题是为了了解求职者的动机,看看他(她)应聘这份工作是否有什么历史渊源,是否有职业规划,是不是仅仅在漫无目的地申请很多工作。
      错误回答 我一直都想在企业界工作。自孩提时代起,我就梦想自己至少也要成为大企业的副总裁。
      评论 除了难以令人相信之外,这种回答还存在一个问题:它表明求职者会对副总裁以下的职位不感兴趣。
      正确回答 在上大学四年级前的那个夏天,我决定集中精力在某一领域谋求发展。尽管我是学商业的,但是我不知道自己最终会从事哪一行业的工作。我花了一定的时间考虑自己的目标,想清楚了自己擅长做的事情以及想从工作中得到的东西,最后我得出了一个坚定的结论,那就是这个行业是最适合我的。
      评论 这种回答表明,求职者认真地做过一些计划,缩小了自己的关注点,而且也认准了前进的方向。这种回答还表明,求职者理解个人职业规划的重要性,并且有能力做出认真的个人决策。
    1. 你都用什么测试方法
    2.怎么编写案例
    3.怎么才能够全面的测试到每一个点
    1. 你都用什么测试方法
    针对不同的产品或者系统或者模块,有不同的测试方法。总体而言有白盒测试和黑盒测试。
    2.怎么编写案例
    案例的编写与测试阶段的定义有很大的关系。系统测试和unit测试的案例可能不同。总体而言测试案例根据系统的需求而定。
    3.怎么才能够全面的测试到每一个点
    测试的全面性主要需要在设计测试计划的时候考虑,从测试策略,产品需求等等多个角度考虑从而定义全部的测试点。
    1、谈谈软件测试技术,以及如何提高
    2、谈谈软件测试职业发展,以及个人的打算
    3、谈谈软件测试在企业的地位,也可以结合软件生命周期来谈
    有可能清晰的思路比确切的答案更重要
    在这里,主要说下笔试和面试的问题,希望大家共同参考。
        1,一般公司里实际的软件测试流程是什么样的?你们公司又是怎样的?
        2,软件工程师要具有那些素质?
        3,你会哪些测试工具?怎么操作?
        4,你能不能说下你的3到5年的职业计划(规划)
        5,你觉得你来应聘有那些优势?
    其余的还好说,但就第4个问题,我感到不好说哦!希望大家给个意见
    第一关:首先要自我介绍,自己的性格怎么样,目前的工作经历积累了一些什么经验取得了些什么值得一说的成果。然后要说说对软件测试怎么看?还有对于软件测试有什么自己的想法。为什么会想到要做这行(因为我的简历上的工作经历没有关于测试方面的)。哦,还有期望薪资。
    第二关:认为软件测试人员所要具备的基本素质,如果遇到问题会怎样处理,如果得不到研发人员的配合(就是研发说这个不是问题)你又会怎么处理?然后就是一些基本概念,比如软件测试的流程有哪些?如果我上任了,首先会怎么开始自己的工作计划。
    (前两关通过了后面这个就好过多了)
    第三关:像我介绍了一下公司的情况,告诉我主要针对什么内容的测试,会不会使用数据库。告诉我大概要做哪些内容,详细的可以上岗以后慢慢熟悉。
    大概就这么多了,这对没有经过这一关的不知道有没有帮助,仅供参考吧
    我觉得就像李波说的,关键是要给对方留下好印象:)

    面试官最后会问你有什么问题要问吗。作为应聘者的你一般不要说没问题问,这会给面试官留下你不太重视这份工作的坏印象。所以如果你想得到这份工作的话应该抓住这最后的表现自己的机会:
    你可以问:
    1.        贵公司近期和远期的发展目标是什么?
    2.        贵公司的主要竞争对手有哪些?
    3.        贵公司有多少开发人员有多少测试人员?
    4.        贵公司又进一步扩充测试人员的计划吗?
    5.        如果我有幸能进入贵公司的话,我有怎么样的发展?
    6.        测试人员的沟通能力很重要,贵公司有规范的沟通渠道吗?
    7.        请介绍一下贵公司的福利情况。
    8.        请问我什么时候能知道结果?

  • 软件测试面试

    ssy2010 发布于 2008-05-19 16:41:03

    前段时间公司招聘软件测试人员,虽然基本上都是招的应届毕业生,但我还是从现实以及网络上找到了一些应聘软件测试/QA的面试问题集,当然这个也都不会有标准答案的,现在只是以偶的一点理解加上网上的一些内容列举出来供有需要的XDJM们作一下参考:
    1. 首先一般都是比较老套点的问题:介绍一下你的经历。
       HOHO......这个问题我想谁都被问过吧,注意一下重点,不要紧张慢慢说就OK了。
    2. 老套话说了就可以马上切入正题了。根据你的经验说说你对软件测试/质量保证的理解?
        这个就要仁者见仁、智者见智了,也基本上都是书上的东东,如果能有一些自己独特的想法那就最好啦,呵呵 。
    3. 理解完了那当然就要问一下是不是对软件测试了解啰。这就轮到问软件测试的流程是什么,你原先的公司又是怎么的流程了?
        前面个问题也还是书本上的东西,一般介绍软测的书上都有,实际上国内一般的中小公司根本就达不到书上所说的那些个测试规范,测试流程也是如此,没办法,这就是现在我们整个大的测试环境,这个问题照着书上说的办就行了,后面那个知道该怎么做了吧,尽量把原来公司的测试流程言简意赅的表达出来。
    4. 接着问题就可以有一大堆了,这些问题很多都是要看自己的测试经验以及对测试的理解来作答了,如:
        (1) 你对SQA的职责和
    工作活动(如软件度量)的理解:
    SQA就是独立于软件开发的项目组,通过对软件开发过程的监控,来保证软件的开发流程按照指定的
    CMM规程(如果有相应的CMM规程),对于不符合项及时提出建议和改进方案,必要是可以要高层经理汇报以求问题的解决。通过这样的途径来预防缺陷的引入,从而减少后期软件的维护成本。SQA主要的工作活动包括制定
    SQA工作计划,参与阶段产物的评审,进行过程质量、功能配置及物理配置的审计等;对项目开发过程中产生的数据进行度量等等;
       (2) 说说你对软件
    配置管理的理解:
    项目在开发的过程中要用相应的配置管理工具对配置项(包括各个阶段的产物)进行变更控制,配置管理的使用取决于项目规模和复杂性能及风险的水平。软件的规模越大,配置管理就显得越重要。还有在配置管理中,有一个很重要的概念,那就是基线,是在一定阶段各个配置项的组合,一个基线就提供了一个正式的标准,随后的工作便基于此标准,并且只有经过授权后才能变更这个标准。配置管理工具主要有CC,VSS,CVS等,偶只用过CVS,对其它的不熟悉
       (3) 怎样写测试计划和
    测试用例
    简单点,测试计划里应有详细的测试策略(测试方法等),合理详尽的资源安排等,至于测试用例,那是依赖于需求(包括功能与非功能需求)是否细化到功能点,是否可测试等。 
       (4) 说说主流的软件工程思想(如CMM,CMMI,RUP,XP,PSP,TSP等)的大致情况以及你对它们的理解:

       CMM:SW Capability Maturity Model 软件能力成熟度模型,其作用是用于软件过程的改进、评估及软件能力的评鉴

       CMMI:Capability Maturity Model Integration 能力成熟度模型集成 CMMI融入了大部分最新的软件管理实践,同时弥补了SW-CMM模型中的缺陷
    RUP:rational unified process 是软件工程化过程。它提供了在开发机构中分派任务和责任的纪律化方法.它的目标是在可预见的日程和预算前提下确保满足最终用户需求的高质量产品,个人认为:它的核心观念是开发的迭代,每个公司可以根据自身的软件开发的流程和待开发项目的特点对RUP进行适当的剪裁,制定出符
    合自己的软件开发流程。
        XP:extreme program,即极限编程的意思,适用于小型团队的软件开发,想上面第三个问题就可以结合原型法采用这样的开发流程。要明白测试对于xp开发的重要性,强调测试(重点是单元测试)先行的理念。编程可以明显提高代码的质量,持续集成对于快速定位问题很有好处。
        PSP ,TSP 分别是个体软件过程(Personal Software Process),群组软件过程(Team Software Process)大家都知道,CMM只是告诉你怎么做但并没有告诉你如何做,所以PSP/TSP就是告诉你企业在实施CMM的过程中如何做,PSP强调建立个人技能(如何制定计划、控制质量及如何与其他人相互协作等等)而TSP着重于生产并交付高质量的软件产品(如何有效地规划和管理所面临的项目开发任务等等)
    总之,单纯实施CMM,永远不能真正做到能力成熟度的升级,只有将实施CMM与实施PSP和TSP有机地结合起来,才能发挥最大的效力。因此,软件过程框架应该是CMM/PSP/TSP的有机集成。
       (5) 对项目管理、白盒测试、单元测试、自动测试、性能测试、压力测试工具的了解程度和实际使用经验。(其实基本上也就是MI和Rational工具):
    这个就要看个人的了,没法说了
       (6) 其它一些具体的技术知识(如各种计算机语言的了解程度、数据库等);
    5. 还有问一下你是怎样保证软件质量的,也就是说你觉得怎样才能最大限度地保证软件质量?
    测试并不能够最大限度的保证软件的质量,软件的高质量是开发和设计出来的,而不是测试出来的,它不仅要通过对软件开发流程的监控,使得软件开发的各个阶段都要按照指定的规程进行,通过对各个阶段产物的评审,QA对流程的监控,对功能及配置的审计来达到开发的最优化。当然测试也是保证软件质量的一个重要方
    式,是软件质量保证工程的一个重要组成部分。
    6. 然后紧接着就基于目前中国的国情,大多数公司的软件项目进度紧张、人员较少、需求文档根本没有或者很不规范,你认为在这种情况下怎样保证软件的质量?(大多数公司最想知道的就是在这种困难面前你该怎么保证软件的质量,因为这些公司一般就是这种情况-----既不想投入过多又想保证质量,faint )
    出现以上的情况,如果仅仅想通过测试来提高软件质量,那几乎是不可能,原因是没有足够的时间让你去测试,少而不规范的文档导致测试需求无法细化何谈足够且有针对性进行测试。所以,作为公司质量保证的你应该先后项目经理确定符合项目本身最适合的软件生命周期模型(比如RUP的剪裁,原型法),明确项目的开发流程并督促项目组按照此流程开展工作,所有项目组成员(项目经理更加重要)都要制定出合理的工作计划,加强代码的单元测试,在客户既定的产品交付日期范围之内,进行产品的持续集成等等,如果时间允许可以再配合客户进行必要的系统功能测试
    7. 差不多了就该问一些只和软件测试相关的问题了,如:
       (1) 你觉得怎样才能做一个(或者,怎样才能算一个)优秀的测试工程师?(faint,这个问题好像是必问的,答案也无非是什么要求全面的技术能力、缜密的逻辑思维、出色的沟通能力、还要有怀疑精神、幽默感、洞察力等等。啥叫优秀啊?该有的能力都有,不该有的也有,而且个个能力还都是出色的,这就是优秀,呵呵,
    开玩笑的,反正这个问题差不多就这样,具体的什么要求网络上也到处都有。
        (2) 还有其它的如对自己优缺点的评价、自己的职业理想、为何离开上一家公司、自己在职业生涯中印象最深的事情、能否出差和加班、能否承受压力和挑战、薪水要求、何时能到岗等等这些啥面试都要回答的问题,这个就只能自己斟琢着办了。
        (3) 另外还有一个重要的问题就是语言能力啦,尤其是英语水平,这个的话每个具体的公司都有不同的要求,也就没啥好说的了。
    差不多基本上就是这些了,如果有需要的可以有针对性的google一下,hoho...仅供参考!

    做好软件测试的一些关键点
    本文作者 未知 摘自 机电之家
    1.测试人员必须经过测试基础知识和理论的相关培训。
    2.测试人员必须熟悉系统功能和业务。
    3.测试必须事先要有计划,而且测试方案要和整个项目计划协调好
    4.必须事先编写测试用例,测试执行阶段必须根据测试用例进行
    5.易用性,功能,分支,边界,性能等功能性和非功能性需要都要进行测试
    6.对于复杂的流程一定要进行流程分支,组合条件分析,再进行等价类划分准备相关测试数据
    7.测试设计的一个重要内容是要准备好具体的测试数据,清楚这个测试数据是测哪个场景或分支的
    8.个人任务平均每三个测试用例至少应该发现一个BUG,否则只能说明测试用例质量不好
    9.除了每日构建的冒烟测试可以考虑测试自动化外,其它暂时都不要考虑去自动化。


    软件测试员自身素质培养
      (1) 首先,应对软件测试感兴趣和对自己有自信,如果具备了这两点,那么在开发过程中不管遇到什么样的困难,我相信你一定能克服。
      (2) 善于怀疑,世界上没有绝对正确的,总有错误的地方,具有叛逆心理,别人认为不可能发生的事,我却认为可能发生。别人认为是对的,我却认为不是
    对的。
      (3) 打破砂锅问到底的精神,对于只出现过一次的bug,一定找出原因,不解决誓不罢休。
      (4) 保持一个良好的心情,否则可能无法把测试作好。不要把生活中的不愉快的情绪带到工作中来。
      (5) 做测试时要细心,不是所有的bug都能很容易的找出,一定要细心才能找出这些bug。
      (6) 灵活一些,聪明一点,多制造一些容易产生bug的例子。
      (7) 在有条件的情况下,多和客户沟通,他们身上有你所需要的。
      (8) 设身处地为客户着想,从他们的角度去测试系统。
      (9) 不要让程序员,以“这种情况不可能发生”这句话说服你,相反,你应该去说服他,告诉他在客户心里,并不是这样的。
      (10) 考虑问题要全面,结合客户的需求、业务的流程、和系统的构架,等多方面考虑问题。
      (11) 提出问题不要复杂化,这一点和前面的有点矛盾,如果你是一新手,暂时不要管这一点,因为最终将有你的小组成员讨论解决。
      (12) 追求完美,对于新测试员来说,努力的追求完美,这对你很好,尽管有些事无法做到,但你应该去尝试。
      (13) 幽默感,能和开发小组?br />

  • UAT测试概览

    judy.peng 发布于 2008-05-15 17:02:35

       UAT,(user acceptance Test),用户接受度测试 
            以下是它的一些一般步骤;仅供参考 
            一步:用户培训手册准备(就是针对要进行UAT测试的对象,及要进行培训的用户,准备一些培训资料:一般是测试对象使用/功能手册及要培训的用户的个人资料等等:就跟教师上课进行备课差不多) 
            二步:测试脚本发放(如果你公司采用自动化测试,那么每一个功能或一个模块等都有对应的测试脚本,可以把这些测试脚本分发给特点的人员;如果采用手工测试,就要把详细描述一个功能或模块的文档分给相关人员(当然自动化测试也要分发)) 
            三步:用户补充业务测试场景和测试数据(就是:请有代表性的一些最终用户根据实际应用环境及一些常用处理的数据,来给一些补充与建议,越贴近实际应用越好) 
            四步:顾问补充测试步骤(你可以请项目专家,测试经理,或专门的测试,开发等顾问对测试步骤进行补充) 
            五步:培训资料及测试脚本文档的确定与最终输出(一般到此,各种资料都基本确定,这时可以将它们进行打印,或形成特别的电子文档) 
            六步:测试策略的制定(如嵌入测试策略等) 
            七步:测试用户的确定(大体上从培训人员中选取,因为不能每个接受培训的人员都是资格去测试的,这里你可以通过一些考核来实现人员的筛选等等) 
            八步:由专门的测试组织机构确定测试地点,并发出通知 
            九步:测试网络环境的搭建和保障(包括网络,系统,硬软件,包括一些case工具等 
            十步:组织进行测试 
            十一步:评审分析提交的问题(这就进入了一般bug处理过程,形成了一个循环) 
            UAT测试的重点,我想主要体现在以下几个方面 
            一是:培训的资料表述要准确全面,易懂等(这是理论基础) 
            二是:人员选择,要典型有代表性(用户基础) 
            三是:测试流程步骤(要周密) 
            四是:测试策略制定(确定一个适合测试对象及测试人员的测试策略) 
            五是:问题的表达与处理(因为测试者不是专业开发测试人员,对于问题的表达可能不能到位,或根本就不是那种问题,这就存在如何复现与转化问题等)

  • 测试人员容易遗漏一些隐藏的缺陷

    ypeony 发布于 2008-07-18 13:43:34

    测试人员容易遗漏一些隐藏的缺陷

      通常软件测试会暴露软件中的缺陷,经过修正后可以保证软件系统的功能满足需求并正确运行。但是,在系统测试和确认测试中,测试人员容易遗漏一些隐藏的缺陷。众所周知,软件测试不可能发现所有的缺陷,而软件开发周期各个阶段仍然存在注入缺陷的可能,但是,有一些缺陷是测试中容易忽略的,也就是说,通过测试方法和用例可以充分暴露这些缺陷,遗憾的是,它们往往被忽略或者某种原因忘记测试了,这就给软件留下了隐患或者危机。这些容易被忽略的缺陷包括:

      1、安装缺陷

      通常项目组完成代码后,发布时候安装打包是最后一个环节,而软件测试人员通常在测试的时候,没有仔细的测试这一部分,而把用例集中在其他功能上。安装时候的缺陷通常通过拷贝而不是运行安装程序方式给测试人员安装软件,结果正式安装时候出现问题,引起例如控件没有注册,注册表没有导入等。删除时候没有注意安装文件夹是否存在用户文件,造成数据丢失;使用绝对路径;安装顺序没有说明书。

      2、配置文件

      有些文件在ini等配置文件中写出了管理员口令密码等信息,而且是明文的!这是一个安全隐患。另外,有些安装文件的 XML 文件,为了方便在数据库和中间层连接文件中写入了Admin 口令和密码。作为一个合格的软件测试人员,必须检查这些可以用记事本打开的文件。因为,一个稍有常识而且喜欢探索的用户,可能从中获取信息而成为不自觉的黑客。所以,配置文件可能成为软件安全方面的一个缺陷。

      3、网页安全缺陷

      现在网站开发已经注意到:登陆网站进入其内部网页后,直接拷贝网址,然后粘贴到另一IE 窗口输入,可以绕过登陆直接访问。也许商业网站很关注这个问题,但是很多行业软件却很容易忽略。

      网页安全缺陷还可能存在于 IE 弹出的子窗口。有些设计不严格的软件,在主页面关闭的时候子页面还可以运行,这是一个明显的漏洞,而且还大大增加了错误发生的几率。

      4、判断顺序/逻辑缺陷

      对界面进行多个输入判断的时候,非常容易出现这种问题。例如判断年月顺序,判断长度,判断非空等。假如操作员仅仅满足单个条件,保存不能成功;而按界面从上之下顺序一一满足条件之后,保存是没有问题的。但是,改变一下输入的次序,校验失效。例如,一一满足条件之后,不保存,倒过来将上面的输入改成非法输入,然后保存,结果居然也能成功,这是因为原先的判断由于发生过,或者根据语句顺序只检查最后一个判断,所以没有报错。这种错误尤其在 Java scrīpt 脚本的页面中要注意。能够保存不能保证数据正确,有可能引起系统崩溃或者后续数据错误。所以,在测试的时候,不要按照正常的顺序输入,而是要打乱步骤,看看代码是否强健,是否在判断逻辑上没有错误。良好的代码应该经得起折腾,至少保存时会再此全部进行判断,而不只是简简单单走到判断的最后一行。

      5、调试语句和冗余信息

      维护项目和升级改造的推广系统最容易潜伏这类缺陷。典型表现在没有删除或者屏蔽调试语句。弹出一个界面不友好的提示信息,会使不明真相的用户产生误以为系统发生了严重故障,从而引起对软件的不信任感。页面中某个角落存在当前客户不需要的冗余按钮和功能也是一种缺陷。多余的功能会使用户以为是额外附加部分而去使用,其结果可想而知;而多余的按钮会误导好奇心强的用户操作,产生不必要的错误。

      同样值得关注的还有参数设置,由于没有实际数据,开发人员在调试或者单元测试的时候,习惯性的进行自我设定而忘了删除,软件测试人员可能会忽略掉了这部分测试,也可能导致在客户现场发生错误而影响系统发布和验收。

      6、不可重现的故障

      新参加软件测试的人员或者新来的开发人员总是要问,不可重现的缺陷是否需要记录,有必要吗?回答是肯定的。测试必须如实的记录发生的问题,也许不能重现,或者使非软件系统本身问题,但是,可能这些偶然性背后是有规律的,不记录这些,就不可能发现这些规律。

      7、多节点的逆向流转缺陷

      当前软件不少喜欢使用工作流来驱动。工作流的问题,就是可能出现多个流向分支。测试容易忽略的部分,就是工作流多节点的逆向流转。例如,通过不通过涉及两个分支,但是流程逆转的时候,有可能不是回到上一节点而是平级的另一个节点去了。软件测试要格外注意这类用例的设计。另外,有些时候默认分支在向前的时候是有默认值的,例如默认通过,那么保存的时候要提示用户是否通过,否则可能由于操作疲劳而走错了节点,引起回退。

      8、输入框缺陷

      试过往输入框粘贴数据而不是直接输入吗?可能这里会出现问题。按 Ctrl+V 的时候,输入框会根据长度大小自动截断输入长度。但是用鼠标,截断可能会失效。有一次测试人员就是用这种方法把一篇 Word 文档输入进去了,保存的时候,数据库崩溃。有些网站登陆的口令****可以拷贝下来的,只要放在剪贴板里面马上明文显示。

      输入框可以说是问题最多的部分,能够引起的麻烦也很多。日期、数字、文本等等,都需要耐心的测试一下。

      9、界面布局缺陷

      曾经有一次,项目经理回来向测试部反映一个问题,客户对界面不满意。原因很简单,因为界面上删除按钮和保存按钮挨得很近。结果有些操作不熟练的业务人员,很容易误按。这个问题是测试人员没有意料到的,因此注意关闭、删除、退出按钮与保存、下一步等按钮的距离。类似的按钮应按此规则排列分布。

      界面布局还可能发生在窗口最大化和最小化上,有可能窗口缩小的时候没有下拉框或不匹配分辨率,对用户来讲,这个错误实在很低级。有些用户由于操作习惯,非常不喜欢腾出手使用鼠标,尤其是大量输入的界面,因此,要注意设置键盘的快捷方式。还有,按 Tab定位到下一焦点时要注意顺序,避免跳转太灵活而让操作人员感到无从适应,在界面进行维护或者修改的时候,不要忘了软件测试开发人员是否无意改变了这些快捷方式和跳转顺序。

      10、版本和补丁包的环境问题

      理论上讲,这属于兼容性测试应该覆盖的问题。有些客户很喜欢更新最新的软件版本或者微软时不时打些补丁包,问题就出现了。有时候升级不一定是好事。这些问题最好在测试的时候增加几个用例,多用不同软件版本的机器跑一跑。软件测试有个定律是:你没跑过的地方,就一定会出事。经常听到开发人员抱怨,怎么我的机器没问题,你的机器就有事了呢?这不能完全靠配置管理员解决问题,环境配置项是大家最容易忽略的。

      11、用户管理缺陷

      用户管理的角色和授权需要好好研究一下,作过测试的人员都知道,有时候为了测试的方便,测试用户都是具有超级权限的用户。而且,比较容易忽略用户管理这一部分的测试。往往发往客户的时候,很多测试用户都没有删除。

      另外,有些接口的用户和口令,到软件使用寿命结束都没有更改过。在一次测试中,软件测试人员发现,给一个用户授超级用户权限,之后更改这个用户为受限权限。使用中发现,用户居然没有真正回收权限,用户管理界面上没有任何不对。及早准备用户管理用例,不要等到测试快结束时候才想起。

      12、常识缺陷

      从逻辑或者统计学上讲,计算机是允许如此处理的,但是从常识上来讲,这些情况不可能发生。例如电话号码不可能出现小数点,终止时间不能大于开始时间等等。除此之外,常识还要结合业务特点来进行判断,因此,开发和测试人员要格外注意对自己知识的培养以及增加对需求细节的了解。不能因为一味追求进度而采用最简单的代码来实现,对用户来说,这些错误可能是很荒谬的。

      尽管我们不可能完美的测试一个软件,但是我们仍然可以改进我们的软件测试。每次测试结束,及时总结测试中的不足,进一步完善用例。思考一下那些容易忽略的软件缺陷,能提高对软件测试的认识,提高所在组织软件的质量。

  • 转:关于测试的一些技巧和经验

    聂霞 发布于 2008-07-02 10:33:56

  • 转:关于测试的一些技巧和经验

    2008-07-01 22:59:51

    在制定测试计划的时候,就要考虑到测试的风险,并抉择要执行哪些测试,并放弃哪些测试;测试计划的评审应该让开发人员参与;测试模型的制作应该尽可能贴近用户,或者站在用户的使用立场上来观测软件,此时应该能发现更多的问题。

     由于测试发现问题,在解决问题后还要重新测试,因此测试的时间可能会比实际更长一些

     识别和注意少数重要的方面,而忽略多数次要的方面,有时候少数的问题足以致命,这些问题将是软件测试结果中重要性最高的错误。

     错误的定位有时是很难的,要找出必然发生的前因后果,而不至于因为描述错误而误导开发人员。有时候确实存在错误不能重建的问题。解决办法之一是在错误报告中给予说明。

     对错误的描述,应该是准确、完整而简练。因为描述的问题或者不完整的描述会引起开发人员的误解,其后果是可以想见的。

     有时有经验的测试人员凭借直觉就可以发现一些问题,这可称为“错误猜测”。

     测试人员容易犯2种错误:一是测试人员发生判断错误,将本没有错误的系统行为报告为错误,或者将错误指定了过高的严重级别,或者过高估计了问题的严重性,这样会引起开发人员的不信任,产生一种象“狼来了”一样的效果;二是测试人员将错误的严重性或优先级定得过低,从而产生“测试逃逸”,这样会造成产品质量的风险。以上两种错误应该尽量避免
  • 转载:应该考虑进行何种测试

    2008-07-01 22:54:04

    黑盒测试(Black box testing)  ____不考虑内部设计和代码,根据需求和功能进行测试

    白盒测试 (White box testing) ── 根据应用软件的代码的内部逻辑,按照代码的语句、分支、路径和条件进行测试。

    部件测试 (Unit testing) ——最小范围的测试,针对特定的函数和代码模块进行测试。因为需要了解程序的设计和代码的细节才能进行,所以部件测试一般是程序员。而不是由测试人员来做。除非应用软件的结构设计良好,而且代码也写得清楚,否则部件测试并非易事。也许需要开发测试驱动模块或测试工具。

    递增的综合测试(incremental integration testing)——不断进行的测试过程,每增加一个新的功能模块,都进行测试。这要求一个应用软件在最终完成之前,各功能模块要相对独立,或者已根据需要开发出测试驱动软件。这种测试可由程序员或测试人员进行。

    综合测试(integration testing)——对应用软件的各个部分进行组合测试,来检查各功能模块在一起工作是否正常,“部件“可以是代码模块、独立的应用程序、也可以是网络中的客户/服务器应用软件。这种测试特别使用客户/服务器环境和分布式系统

    功能测试(functional testing)——对一个应用软件的功能模块进行黑盒测试。这种测试应当由测试人员进行。但这并不意味着程序员在推出软件之前不进行代码检查。(这一原则适用于所有的测试阶段。)

    系统测试 —— 针对全部需求说明进行黑盒测试,包括系统中所有的部件

    端到端测试 (end-to-end testing) ── 类似于系统测试,但测试范围更“宏观”一些。模仿实际应用环境,对整个应用软件进行使用测试。例如与数据库进行交互作业、使用网络通信、与其他硬件、应用程序和系统之间的相互作用是否满足要求。

    健全测试 (sanity testing) ── 是一种典型的初始测试。判断一个新的软件版本的运行是否正常,是否值得对它作进一步的测试。例如,如果一个新的软件每 5 分钟就破坏系统、大大降低系统的运行速度、或者破坏数据库,那么这样的软件就算不上是“健全”的,不值得在目前状态下进行进一步的测试。

    回归测试 (regression testing) ── 每当软件经过了整理、修改、或者其环境发生变化,都重复进行测试。很难说需要进行多少次回归测试,特别是是到了开发周期的最后阶段。进行此种测试,特别适于使用自动测试工具。

    认同测试 (acceptance testing) ── 基于说明书的、由最终用户或顾客来进行的测试。或者由最终用户/顾客来进行一段有限时间的使用。

    负荷试验 (load testing) ── 在大负荷条件下对应用软件进行测试。例如测试一个网站在不同负荷情况下的状况,以确定在什么情况下系统响应速度下降或是出现故障。

    压力测试 (stress testing) ── 经常可以与“负荷测试”或“性能测试”相互代替。这种测试是用来检查系统在下列条件下的情况:在非正常的巨大负荷下、某些动作和输入大量重复、输入大数、对数据库进行非常复杂的查询,等等。

    性能测试 (performance testing) ── 经常可以与“压力测试”或“负荷测试”相互代替。理想的“性能测试”(也包括其他任何类型的测试) 都应在质量保障和测试计划的文档终予以规定。

    可用性测试 (usability testing) ── 是专为“对用户友好”的特性进行测试。这是一种主观的感觉,取决于最终用户或顾客。可以进行用户会见、检查、对用户会议录像、或者使用其他技术。程序员和测试人员通常不参加可用性测试。

    安装/卸载测试 (install/uninstall testing) ── 对安装/卸载进行测试 (包括全部、部分、升级操作)

    恢复测试 (recovery testing) ── 在系统崩溃、硬件故障、或者其他灾难发生之后,重新恢复系统的情况。

    安全测试 (security testing) ── 测试系统在应付非授权的内部/外部访问、故意的损坏时的防护情况。这需要精密复杂的测试技术。 

    兼容性测试 (compatability testing) ── 测试在特殊的硬件/软件/操作系统/网络环境下的软件表现。

    认同测试 (acceptance testing) ── 看顾客是否对软件满意。

    比较测试 (comparison testing) ── 与竞争产品进行比较,以找出弱点和优势。

     α 测试 (alpha testing) ── 在开发一个应用软件即将完成时所进行的测试。此时还允许有较小的设计修改。通常由最终用户或其他人进行这种测试,而不是由程序员和测试人员来进行。

     β 测试 (beta testing) ── 当开发和测试已基本完成,需要在正式发行之前最后寻找毛病而进行的测试。通常由最终用户或其他人进行这种测试,而不是由程序员和测试人员来进行。

  • 转载:软件评测师学习笔记--黑盒测试

    2008-07-01 22:28:30

    软件评测师学习笔记之一-黑盒测试

    2005-4-18
     黑盒测试
    一. 黑盒测试概述(2.10 黑盒测试)
    1
    .定义
    也称功能测试,它是通过测试来检测每个功能是否都能正常使用
    把程序看成一个黑盒子,完全不考虑程序内部结构和内部特性,着眼于程序外部结构,不考虑内部逻辑结构
    在程序接口进行测试,只检查程序功能是否按照需求说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息
    主要针对软件界面和软件功能进行测试
    2
    .试图发现的错误类型
    功能不正确或遗漏
    界面错误(输入能否正确的接受?能否输出正确的结果)
    数据库访问错误(如数据结构定义错误或外部信息(如数据文件)访问错误)
    性能错误
    初始化和终止错误
    3
    .黑盒测试用例设计方法
    1 等价类划分法:把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类的其他值
    2 边界值分析法:通过选择等价类边界的测试用例。不仅重视输入条件边界,而且也必须考虑输出域边界
    3 错误推测法:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例的方法
    4 因果图法:从用自然语言书写的程序规格说明的描述中找出因(输入条件)和果(输入或程序状态的改变),可以通过因果图转换成判定表
    5 判定表驱动法:利用判定表进行测试用例的设计
    6 正交试验设计法:使用已设计好的正交表格来安排试验,并进行数据分析的一种方法,目的是用最少的测试用例达到最高的测试覆盖率
    7 功能图法:用功能图形象地表示程序的功能说明,并机械地生成功能图的测试用例。功能图模型由状态迁移图和逻辑功能模型构成
    二. 黑盒测试用例设计方法
    1
    .等价类划分法
    1)划分基础:需求规格说明书中输入、输出要求
    2)等价类:某个输入域的子集合;分为有效等价类和无效等价类
    有效等价类:指对于程序规格说明书来说是合理的、有意义的输入数据构成的集合。利用有效等价类可以检验程序是否实现了规格说明书中的功能和性能
    无效等价类:与有效等价的定义恰巧相反
    3)划分等价类原则(6条)
    序号 输入条件(数据) 划分等价类
    规定了取值范围值的个数 一个有效等价类两个无效等价类
    规定了输入值的集合规定了必须如何的条件 一个有效等价类一个无效等价类
    是一个布尔量 一个有效等价类一个无效等价类
    输入数据的一组值(n个),并且程序对每一个输入值分别进行处理 n个有效等价类一个无效等价类
    规定必须遵守的规则 一个有效等价类(符合规则)若干个无效等价类
    在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类
        
    4 列出等价类表
    在确定了等价类之后,建立等价类表,列出所有划分出的等价类
    输入条件 有效等价类 无效等类
    …… …… ……
    5 确定测试用例步骤
    第一步:为每个等价类规定一个惟一的编号
    第二步:设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步骤,最后使得所有有效等价类均被测试用例所覆盖
    第三步:设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步骤,最后使得所有有效等价类均被测试用例所覆盖
    小结:采用等价类划分方法设计测试用例,按照划分等价类、列出等价列表、确定测试用例三个步骤完成,目标是把可能的测试用例组合缩减到仍然足以满足软件测试需求为止。
    2
    .边界值分析法
    1 边界类型
    边界条件:可以在产品说明书中有定义或者在使用软件过程中确定
    次边界条件:在软件内部,也称为内部边界条件
    其他边界条件:如输入信息为空(对于此类问题应建立单独的等价类空间)、非法、错误、不正确和垃圾数据
    2)边界值的选择方法(遵循原则)
    序号 输入条件(数据) 输入边界值数据
    规定了取值范围 刚刚达到这个范围刚刚超越这个范围
    规定值的个数 最大个数、比最大个数大1最小个数、比最小个数少1
    根据规格说明书的每个输出条件,使用 原则12
    输入或输出是个有序集合 集合的第一个、最后一个元素
    程序中使用一个内部数据结构 内部数据结构边界上的值
    分析规格说明,找出其他可能的边界
    3)例子:
    允许文本输入1255个字符:测试用例-12552540256
    程序读写软盘:测试用例-文件很小、等于软盘容量限制之内、空、超过
    程序允许在一张纸上打印多个页面:测试用例-只打印一页,规定最大页,0页,大于允许最大页数
    3
    .错误推测法
    基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例
    4
    .因果图法
      
    侧重于输入条件的各种组合,各个输入情况之间的相互制约关系
    1 因果图设计方法
    从用自然语言书写的程序规格说明的描述中找出因果,通过因果图转换成判定表
    2 因果图导出测试用例步骤
    第一步:分析程序规格说明的描述中,哪些是原因,哪些是结果。原在因常常是输入条件或是输入条件的等价类,结果是输出条件
    第二步:分析程序规格说明的描述中语义的内容,并将其表示成连接各个原因与各个结果的因果图
    第三步:标明约束条件
    第四步:把因果图转换成判定表
    第五步:为判定表中每一列表示的情况设计测试用例
    查看(607) 评论(0) 收藏 分享 管理

271/212>
Open Toolbar