发布新日志

  • 高效开发与彻底测试

    2007-12-04 08:58:36Top 3 Digest 3

    高效开发与彻底测试。 一、“千般路”与“磨豆腐”


    很久以前听一个故事:从前有个小伙子,少时有大志,长大后却无好营生,开了个豆腐作坊,每天磨豆腐累得腰酸背疼。每到夜深人静,小伙子辗转反侧,总想找条更好的“事业之路”,可是想过千百条、尝试过几十条路,都走不通。夜不成寝,白天干活更累,小伙子不由慨叹:“晚上想过千般路,白天还得磨豆腐”。


    不久以前看过一篇文章:《CMM欺骗了中国的软件业》,内容是对CMM热的反思。CMM当然不会主动欺骗人,实际上是我们的软件业自己欺骗自己。我们从来不缺少“某某模式”,“面向某某”,“某某认证”等等听起来美妙无比的东西,问题是实际的研发过程中能做得到码?现实是残酷的,美妙的概念漫天飞舞,开发过程仍然是作坊式的,正是:“晚上想过千般路,白天还得磨豆腐”。


    中国的故事通常都有圆满的结局,现在接着说“磨豆腐”的故事。过了很长时间,小伙子终于面对现实,不再沉迷于不切实际的空想,用心磨好豆腐,闲时琢磨些个窍门,慢慢地,他的豆腐质量越来越好,每天产量也越来越多,作坊越开越大,成了远近闻名的“豆腐老板”,后来,他做起了别的生意,发现年轻时的空想,其实很多都是可行的,因为现在“能力”和“财力”都不同了。


    再说软件开发。我们不反对任何理论、技术、方法、模式等等,但第一,您的企业或团队做得到吗?不要做“如果开发时间延长一倍,就可以做到”之类毫无意义的假设。第二,做了真的有效益吗?效益是指扣除成本之后的收益。如果不具备这两点,那么还是不要整天想着“千般路”,首先想想如何好好的“磨豆腐”吧。


    对于所有软件开发来说,代码编写都是无可逃避的“磨豆腐”。改进代码编写工作,高率效低成本地开发出高质量的代码,对于软件产品能否在激烈的竞争中胜出,对于软件企业的生存和发展,都具有重要的现实意义。


    本文是Visual Unit应用的范例项目C++代码文档生成器的主题文档,叙述的正是改进代码编写工作的方法和工具,所有内容均经过实战检验,具有"可行"和"效益"两个特征,"可行"是指较低门槛或没有门槛,凭现有条件即可实施;"效益"是指能产生立竿见影的效果。


    本文所援引的范例项目,模拟最糟糕的开发团队,最混乱的开发流程:由很少写代码的测试和预研部门开发,人员不固定,时间也不固定,谁有空就写上一些;没有设计,没有文档,基至也不在代码文件中保存编码人员的信息,成员完全依赖于阅读代码和测试用例来理解其他成员写的代码;除了简单的命名规则外,没有其他规范,甚至连一个函数原则上不能超过50行之类的基本规范也没有(范例中有超过200行的函数CMacro::Unwind(),一万多条路径)。任何开发团队和开发流程都会好于范例项目的开发团队和开发流程,因此,范例所展示的方法和工具,具有"广泛可行性"。


    本文介绍如何进行高效编码调试和实现彻底的单元测试。编码调试是任何软件开发都无可逃避的工作,在Visual Unit的支持下编码调试,只是把本来就一定要做的工作改变一下方式,不需要多做什么,就可以大幅提高编程效率和质量;另一方面,Visual Unit彻底改变了单元测试难于实施或成本昂贵的局面,无论团队中开发与测试人员的比例是怎么样的,都可以轻松快捷地实现彻底的单元测试。


    二、高效编码调试

    任何软件开发,都离不开编码调试。对于稍为复杂一点的函数,一般来说,编写几行代码,就要执行一下,看它们是否按预想的工作,然后再继续写,写完后还要将各种可能输入都执行一下。如何执行?一般由别的代码来调用,也就是说需要驱动,驱动通常是在开始编写函数实现代码之前建立,这样才能一边编写一边调试。驱动大致可分为自然驱动和专门驱动。

    自然驱动:利用项目中已有的代码作为驱动,通常是在被调试的函数中加断点,从界面执行一个需要调用该函数的功能,调试器中断时就可以调试了;专门驱动:为需要调试的函数编写专门的驱动代码,通过执行驱动代码来执行被调试函数。


     

    自然驱动的主要优点是不需要其他工作就可以直接调试,甚至感觉不到需要驱动,主要缺点是输入数据通常是公共的,即很多代码都使用相同的输入源进行调试,实际输入往往是经过其他代码处理后的中间结果,要针对各种可能输入都进行调试往往很困难,造成调试不全面,程序员的思维受到局限,难于做到全面地考虑各种可能输入。


     

    专门驱动的主要优点是输入数据是专门针对于被测试程序,容易做到比较全面,程序员的思维也会比较全面,对编写功能齐全的健壮的程序很有好处,要针对某种特定输入进行调试比较容易,缺点是需要花费大量的时间来编写驱动代码。


     

    显然,自然驱动的主要问题是不全面,代码错误较多,专门驱动的主要问题是编写驱动代码很费时。有没有更好的方法,既不需要编写驱动代码,又能方便且全面地调试?有 !这就是自动驱动,即在Visual Unit的支持下编码调试,不但无需费时间写驱动代码,更拥有多种独特的便利,可以大幅提高编码调试的质量和效率。


     

    Visual Unit是单元测试工具,但也是高效编程调试的支持环境,在Visual Unit的支持下调试,既全面又省时:


     

    自动生成驱动代码,但又可以方便地设定调试输入;


     

    测试用例编辑器列出全部输入,可以很方便地检查是否全面。


     

    除了上述优点外,在Visual Unit的支持下调试,还可以:


     

    可视化地选择调试输入;


     

    调试过程中还可以切换输入;


     

    无限制的后退,重复。


     

    上述仅是免费的个人版的功能,对于企业版用户,实际上大多数单步调试都可以省略:


     

    自动输出参数、成员变量的输入输出值,返回值,用户也可以用简单的语法输出任何变量或表达式的值,这些数值都是上下文相关的;


     

    显示在一个用例下,程序所执行的代码,可以很方便地查看程序是否按预想的流程执行。


     

    程序无论多复杂,无非就是执行一些代码,读写、计算一些数据,因此,上述两方面信息已完整地描述了程序行为,一眼就能看出程序干了什么,通常可以很快判断程序是否按预想的工作并找到出错原因,比单步调试要快得多。


     

    下面以实例来进一步分析三种调试方式的优缺点。这里所用的示例是范例项目中的CExFunction::ParseOneParameter()函数,这是一个很普通的函数,读者也可以随便拿其他有些复杂度的代码来比较。该函数的功能是解析C++代码中的一个参数,原形如下:


     

    PARAMETER* CExFunction::ParseOneParameter(CTokenList& iList);


     

    PARAMETER 是保存一个参数对象的结构,定义如下:


     

    struct PARAMETER


     

    {


     

    CString type; //参数类型


     

    CString name; //参数名


     

    CString defVal; //缺省值


     

    CString array; //如果参数是数组,保存[]及[]内的文字常量


     

    };


     

    参数iList是一个输入参数(范例的命名规则是用i表示输入参数),传递由C++代码中的一个参数经过词法分析转换获得的记号对象序列,例如参数int* pi,将转换为三个记号对象,分别对应于:int, *, pi。该函数将记号对象序列解析到一个PARAMETER结构的指针中,并作为返回值返回。


     

    在这个示例中,如果要进行比较全面的调试,输入至少要考虑以下可能:


     

    普通输入,如int i;


     

    类型中有符号,如int* pi;


     

    类型中有多个符号,如int*& pi;


     

    模板类,如CList list;


     

    带缺省值,如int i=0;


     

    数组,如int ai[10];


     

    类型有多个单词,如const unsigned int& i;


     

    缺少参数名,如const int;


     

    我们在编写这个函数的实现代码前,首先建立调试驱动,以例边编码边执行调试。


    自然驱动

    假设界面和要调用这个函数的其他代码都已完成。在函数的入口处插入断点,以调试方式运行工程,在界面中选择要生成文档的工程目录,点击"生成文档",程序中断时就可以调试了。这种方式相信所有程序员都很熟悉,并且很多人都会认为这种方式最省时.

     

  • 世间什么才是最珍惜的

    2007-06-16 09:33:16Top 1 Digest 1

        在很久很久以前,有一座圣安禅寺,每天都有许多人上香拜佛,香火很旺。在圣安禅寺前的横梁上有个蜘蛛结了张网,由于每天都受到香火和虔诚的祭拜的熏陶,蜘蛛便有了佛性。经过了一千多年的修炼,蜘蛛佛性增加了不少。

      忽然有一天,佛祖光临了圣安禅寺,看见这里香火甚旺,十分高兴。离开寺庙的时候,不经意间抬头看见了横梁上的蜘蛛。佛祖停下来,问这只蜘蛛:“你我相见总算是有缘。我来问你个问题,看你修炼了这一千多年来,有什么真知灼见?”蜘蛛遇见佛祖很是高兴,连忙答应了。佛祖问到:“世间什么才是最珍贵的?”蜘蛛想了想,回答到:“世间最珍贵的是‘得不到’和‘已失去’。”佛祖点了点头,离开了。

      就这样又过了一千年的光景,蜘蛛依旧在圣安禅寺的横梁上修炼,它的佛性大增。一日,佛祖又来到寺前,对蜘蛛说道:“你可还好,一千年前的那个问题,你可有什么更深地认识吗?”蜘蛛说:“我觉得世间最珍贵的是‘得不到’和‘已失去’。”佛祖说:“你再好好想想,我会再来找你的”。

      又过了一千年,有一天,刮起了大风,风将一滴甘露吹到了蜘蛛网上。蜘蛛望着甘露,见它晶莹透亮,顿生怜爱之意。蜘蛛每天看着甘露很开心,它觉得这是三千年来最开心的几天。突然,又刮起了一阵大风,将甘露吹走了。蜘蛛觉得一下子失去了什么,感到很寂寞和难过。这时佛祖又来了,问蜘蛛:“这一千年,你可好好想过这个问题:世间什么才是最珍贵的?”蜘蛛想到了甘露,对佛祖说:“世间最珍贵的是‘得不到’和‘已失去’。”佛祖说:“好,既然你有这样的认识,我让你到人间走一遭吧。”

      就这样,蜘蛛投胎到了一个官宦家庭,成了一个富家小姐,父母为她取了个名字叫蛛儿。一晃,蛛儿到了16岁了,已经成了个婀娜多姿的少女,长的十分漂亮,楚楚动人。

      这一日,皇帝决定在后花园为新科状元郎甘鹿举行庆功宴席。席间来了许多妙龄少女,包括蛛儿,还有皇帝的小公主长风公主。状元郎在席间表演诗词歌赋,大献才艺,在场的少女无一不被他折服。但蛛儿一点也不紧张和吃醋,因为她知道,这是佛祖赐予她的姻缘。

      过了些日子,说来很巧,蛛儿陪同母亲上香拜佛的时候,正好甘鹿也陪同母亲而来。上完香拜过佛,二位长者在一边说上了话。蛛儿和甘鹿便来到走廊上聊天,蛛儿很开心,终于可以和喜欢的人在一起了,但是甘鹿并没有表现出对她的喜爱。蛛儿对甘鹿说:“你难道不曾记得16年前,圣安禅寺的蜘蛛网上的事情了吗?”甘鹿很诧异,说:“蛛儿姑娘,你漂亮,也很讨人喜欢,但你想像力未免太丰富了一点吧。”说罢,和母亲离开了。

       蛛儿回到家,心想,佛祖既然安排了这场姻缘,为何不让他记得那件事,甘鹿为何对我没有一点的感觉?

      几天后,皇帝下诏,命新科状元甘鹿和长风公主完婚,蛛儿和太子芝草完婚。这一消息对蛛儿如同晴空霹雳,她怎么也想不通,佛祖竟然这样对她。几日来,她不吃不喝,穷究急思,灵魂就将出壳,生命危在旦夕。太子芝草知道了,急忙赶来,扑倒在床边,对奄奄一息的蛛儿说道:“那日,在后花园众姑娘中,我对你一见钟情,我苦求父皇,他才答应。如果你死了,那么我也就不活了。”说着就拿起了宝剑准备自刎。

      就在这时,佛祖来了,他对快要出壳的蛛儿灵魂说:“蜘蛛,你可曾想过,甘露(甘鹿)是由谁带到你这里来的呢?是风(长风公主)带来的,最后也是风将它带走的。甘鹿是属于长风公主的,他对你不过是生命中的一段插曲。而太子芝草是当年圣安禅寺门前的一棵小草,他看了你三千年,爱慕了你三千年,但你却从没有低下头看过它。蜘蛛,我再来问你,世间什么才是最珍贵的?”蜘蛛听了这些真相之后,好像一下子大彻大悟了,她对佛祖说:“世间最珍贵的不是‘得不到’和‘已失去’,而是能把握现在的幸福。”话刚说完,佛祖就离开了,蛛儿的灵魂也回位了,睁开眼睛,看到正要自刎的太子芝草,她马上打落宝剑,和太子深深地拥抱着……

     

  • 测试答案

    2007-06-21 13:24:02

    ★测试结果:

     

    A型的人:

     

      你的行动力和适应能力都超极强,无论是在多么大的逆境之中,都能过关斩将,开创出一番新的天地。拥有如此力量的你,最适合去做一些劳动身体方面的工作。比方说运动选手啦、每天要跑来跑去的采访记者啦、外务员、推销员等。

     

      B型的人:

     

      你非常喜欢和人交往,最擅长的就是观察人心。不论是当一个听众或是一个说话的人,你对于处理复杂的人际关系都非常拿手。运用这样的才能,你非常适合做接待客人的工作,比方说:店员啦、旅馆的工作人员、柜台接待、或是自己开咖啡厅当老板,都是非常速配的哦!

     

      C型的人:

     

      你拥有非常敏锐的判断力和一双观察入微的眼睛。知性就是你的武器,你非常地冷静、且非常地细心,再困难的问题也都能迎刃而解!所以你应该去找一份能好好运用你聪明头脑的工作。例如:老师、秘书和计算机有关的工作、出版情报方面、广告公司、研究方面的工作,或是自己动笔写写书,都非常适合你。

     

      D型的人:

     

      你对于美的方面非常地敏感,简单地说,你是一个很感性的人。你非常喜欢运用自己的创造力去做出与众不同的东西。不管是绘画方面、裁缝设计、或是乐器等等,你都得心应手。如果要找工作当然也要找可以激发你创作欲的工作啰!例如:雕塑家、珠宝设计、插画家、室内设计师等等,都能将你的才能完全地发挥出来!

     

      E型的人:

     

      你天生就具有一种不可思议的魅力,而且全身散发出神秘的气息。你对于隐藏真正的自己非常拿手,所以有当艺人的天分,在大众面前表演的工作最适合你,例如:模特儿、演员等,还有占卜师或是算命,你也可以试试看哦

  • 测试你最适合的行业~超准的哦~

    2007-06-21 12:25:32

    ★问 题:

     

      假设有一天,你在梦中乘着船去寻宝,请运用你的想象力,回答下面的问题。最后再将点数加起来,就可以知道最适合你的工作了~

     

      1.你所乘的船是那一种?

      A。海盗船。

      B。小船。

      C。木筏。

     

      2.有多少人和你一起去?

      A。几十个人。

      B。几个人。

      C。只要你自己1人。

     

      3.如果可以带一只动物,你要带那一种?

      A。狗。

      B。猫。

      C。小鸟。

     

      4.你认为什么东西可以守护你?

      A。从母亲那边拿来的娃娃。

      B。从父亲那边拿来的宝剑。

      C。在海边捡到的小石子。

     

      5.船会往什么方向出发呢?

      A。东。

      B。西。

      C。南。

      D。北。

     

      6.你想要的东西是?

      A。藏在很深洞窟中的宝藏。

      B。沈在海底的宝藏。

      C。放在废弃的古老神殿中的宝藏。

     

      7.当你往大海前进,这时海平线彼方出现了一个巨大的黑影,你认为是什么?

      A。别艘船经过。

      B。只是一大片黑云罢了。

      C。大恐龙出现了。

     

      8.在航海的途中,有一样东西遗失了,是什么东西?

      A。水。

      B。食物。

      C。火。

      D。指南针。

     

      9.经过长久的航行,终于到达了藏宝地点,这时,有位恶魔出现了,并在你身边说了一句话,你觉得他说了什么?

      A。根本就没有宝藏,你被骗了。

      B。宝藏早就被拿走了。

    C。你是不可能找到宝藏的!死心吧!

     

      10.你终于找到了宝藏了!当你打开箱子的那一剎那,你想,你看到了什么?

      A。金银珠宝。

      B。可以看见未来的镜子。

      C。可以将你所带的动物变回人类的解药。

     

    ★计分表

     

    题目1 2 3 4 5 6 7 8 9 10

     

    A 1 1 1 2 1 1 1 2 1 2

     

    B 2 2 3 1 3 2 2 4 3 3

     

    C 3 3 2 3 2 3 3 3 2 1

     

    D       4    1

     

    ★计分方式请按照分数表计算。

     

      1014分的人→A型

     

      1519分的人→B型

     

      2027分的人→C型

     

      2832分的人→D型

     

    32分以上的人→E型

  • 爱琴海的传说

    2007-06-19 14:05:51

        在远古的时代,有位国王叫弥诺斯,他统治着爱琴海的一个岛屿克里特岛。弥诺斯的儿子在雅典的阿提刻被人阴谋杀害了。为了替儿子复仇,弥诺斯向雅典的人民挑战。在神的惩罚下,雅典正充满灾荒和瘟疫。在弥诺斯的挑战下,雅典人向弥诺斯王求和。弥诺斯要求他们每隔9年送7对童男童女到克里特岛。

      弥诺斯在克里特岛建造一座有无数宫殿的迷宫,迷宫中道路曲折纵横,谁进去都别想出来。在迷宫的纵深处,弥诺斯养了一只人身牛头的野兽米诺牛。雅典每次送来的7对童男童女都是供奉给米诺牛吃的。

      这一年,又是供奉童男童女的年头了。有童男童女的家长们都惶恐不安。雅典的国王爱琴的儿子忒修斯看到人们遭受这样的不幸而深深不安。他决心和童男童女们一起出发,并发誓要杀死米诺牛。

      雅典民众在一片哭泣的悲哀声中,送别忒修斯在内的七对童男童女。忒修斯和父亲约定,如果杀死米诺牛,他在返航时就把船上的黑帆变成白帆。只要船上的黑帆变成白的,就证明爱琴国王能再见到自己的儿子忒修斯了。

      忒修斯领着童男童女在克里特上岸了。他的英俊潇洒引起弥修斯国王的女儿,美丽聪明的阿里阿德涅公主的注意。公主向忒修斯表示了自己的爱慕之情,并偷偷和他相会。当她知道忒修斯的使命后,她送给他一把魔剑和一个线球,以免忒修斯受到米诺牛的伤害。

      聪明而勇敢的忒修斯一进入迷宫,就将线球的一端拴在迷宫的入口处,然后放开线团,沿着曲折复杂的通道,向迷宫深处走去。最后,他终于找到了怪物米诺牛。他抓住米诺牛的角,用阿里阿德涅公主给的剑,奋力杀死米诺牛。然后,他带着童男童女,顺着线路走出了迷宫。为了预防弥诺斯国王的追击,他们凿穿了海边所有克里特船的船底。阿里阿德涅公主帮助他们,并和他们一起逃出了克里特岛,启航回国。经过几天的航行,终于又看到祖国雅典了。忒修斯和他的伙伴兴奋异常,又唱又跳,但他忘了和父亲的约定,没有把黑帆改成白帆。翘首等待儿子归来的爱琴国王在海边等待儿子的归来,当他看到归来的船挂的仍是黑帆时,以为儿子已被米诺牛吃了,他悲痛欲绝,跳海自杀了。为了纪念爱琴国王,他跳入的那片海,从此就叫爱琴海。
  • 基于Web的系统测试方法

    2007-06-16 18:21:10


    基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战。基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。
    本文从功能、性能、可用性、客户端兼容性、安全性等方面讨论了基于Web的系统测试方法。
    随着Internet和Intranet/Extranet的快速增长,Web已经对商业、工业、银行、财政、教育、政府和娱乐及我们的工作和生活产生了深远的影响。许多传统的信息和数据库系统正在被移植到互联网上,电子商务迅速增长,早已超过了国界。范围广泛的、复杂的分布式应用正在Web环境中出现。Web的流行和无所不在,是因为它能提供支持所有类型内容连接的信息发布,容易为最终用户存取。
    Yogesh Deshpande和Steve Hansen在1998年就提出了Web工程的概念。Web工程作为一门新兴的学科,提倡使用一个过程和系统的方法来开发高质量的基于Web的系统。它"使用合理的、科学的工程和管理原则,用严密的和系统的方法来开发、发布和维护基于Web的系统"。目前,对于web工程的研究主要是在国外开展的,国内还刚刚起步。
    在基于Web的系统开发中,如果缺乏严格的过程,我们在开发、发布、实施和维护Web的过程中,可能就会碰到一些严重的问题,失败的可能性很大。而且,随着基于Web的系统变得越来越复杂,一个项目的失败将可能导致很多问题。当这种情况发生时,我们对Web和Internet的信心可能会无法挽救地动摇,从而引起Web危机。并且,Web危机可能会比软件开发人员所面对的软件危机更加严重、更加广泛。
    在Web工程过程中,基于Web系统的测试、确认和验收是一项重要而富有挑战性的工作。基于Web的系统测试与传统的软件测试不同,它不但需要检查和验证是否按照设计的要求运行,而且还要测试系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。然而,Internet和Web媒体的不可预见性使测试基于Web的系统变得困难。因此,我们必须为测试和评估复杂的基于Web的系统研究新的方法和技术。

    一般软件的发布周期以月或以年计算,而Web应用的发布周期以天计算甚至以小时计算。Web测试人员必须处理更短的发布周期,测试人员和测试管理人员面临着从测试传统的C/S结构和框架环境到测试快速改变的Web应用系统的转变。

    一、功能测试

    1、链接测试

    链接是Web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面。首先,测试所有链接是否按指示的那样确实链接到了该链接的页面;其次,测试所链接的页面是否存在;最后,保证Web应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问。

    链接测试可以自动进行,现在已经有许多工具可以采用。链接测试必须在集成测试阶段完成,也就是说,在整个Web应用系统的所有页面开发完成之后进行链接测试。

    2、表单测试

    当用户给Web应用系统管理员提交信息时,就需要使用表单操作,例如用户注册、登陆、信息提交等。在这种情况下,我们必须测试提交操作的完整性,以校验提交给服务器的信息的正确性。例如:用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等。如果使用了默认值,还要检验默认值的正确性。如果表单只能接受指定的某些值,则也要进行测试。例如:只能接受某些字符,测试时可以跳过这些字符,看系统是否会报错。

    3、Cookies测试

    Cookies通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies访问了某一个应用系统时,Web服务器将发送关于用户的信息,把该信息以Cookies的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息。

    如果Web应用系统使用了Cookies,就必须检查Cookies是否能正常工作。测试的内容可包括Cookies是否起作用,是否按预定的时间进行保存,刷新对Cookies有什么影响等。

    4、设计语言测试

    Web设计语言版本的差异可以引起客户端或服务器端严重的问题,例如使用哪种版本的HTML等。当在分布式环境中开发时,开发人员都不在一起,这个问题就显得尤为重要。除了HTML的版本问题外,不同的脚本语言,例如Java、java scrīpt、 ActiveX、VBscrīpt或Perl等也要进行验证。

    5、数据库测试

    在Web应用技术中,数据库起着重要的作用,数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中,最常用的数据库类型是关系型数据库,可以使用SQL对信息进行处理。

    在使用了数据库的Web应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试。

    二、性能测试

    1、连接速度测试

    用户连接到Web应用系统的速度根据上网方式的变化而变化,他们或许是电话拨号,或是宽带上网。当下载一个程序时,用户可以等较长的时间,但如果仅仅访问一个页面就不会这样。如果Web系统响应时间太长(例如超过5秒钟),用户就会因没有耐心等待而离开。

    另外,有些页面有超时的限制,如果响应速度太慢,用户可能还没来得及浏览内容,就需要重新登陆了。而且,连接速度太慢,还可能引起数据丢失,使用户得不到真实的页面。

    2、负载测试

    负载测试是为了测量Web系统在某一负载级别上的性能,以保证Web系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web系统的用户数量,也可以是在线数据处理的数量。例如:Web应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现象?Web应用系统能否处理大量用户对同一个页面的请求?

    3、压力测试

    负载测试应该安排在Web系统发布以后,在实际的网络环境中进行测试。因为一个企业内部员工,特别是项目组人员总是有限的,而一个Web系统能同时处理的请求数量将远远超出这个限度,所以,只有放在Internet上,接受负载测试,其结果才是正确可信的。

    进行压力测试是指实际破坏一个Web应用系统,测试系统的反映。压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web应用系统崩溃,接着当系统重新启动时获得存取权。

    压力测试的区域包括表单、登陆和其他信息传输页面等。

    三、可用性测试

    1、导航测试

    导航描述了用户在一个页面内操作的方式,在不同的用户接口控制之间,例如按钮、对话框、列表和窗口等;或在不同的连接页面之间。通过考虑下列问题,可以决定一个Web应用系统是否易于导航:导航是否直观?Web系统的主要部分是否可通过主页存取?Web系统是否需要站点地图、搜索引擎或其他的导航帮助?

    在一个页面上放太多的信息往往起到与预期相反的效果。Web应用系统的用户趋向于目的驱动,很快地扫描一个Web应用系统,看是否有满足自己需要的信息,如果没有,就会很快地离开。很少有用户愿意花时间去熟悉Web应用系统的结构,因此,Web应用系统导航帮助要尽可能地准确。

    导航的另一个重要方面是Web应用系统的页面结构、导航、菜单、连接的风格是否一致。确保用户凭直觉就知道Web应用系统里面是否还有内容,内容在什么地方。

    Web应用系统的层次一旦决定,就要着手测试用户导航功能,让最终用户参与这种测试,效果将更加明显。

    2、图形测试

    在Web应用系统中,适当的图片和动画既能起到广告宣传的作用,又能起到美化页面的功能。一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有:

    (1)要确保图形有明确的用途,图片或动画不要胡乱地堆在一起,以免浪费传输时间。Web应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面。

    (2)验证所有页面字体的风格是否一致。

    (3)背景颜色应该与字体颜色和前景颜色相搭配。

    (4)图片的大小和质量也是一个很重要的因素,一般采用JPG或GIF压缩。

    3、内容测试

    内容测试用来检验Web应用系统提供信息的正确性、准确性和相关性。

    信息的正确性是指信息是可靠的还是误传的。例如,在商品价格列表中,错误的价格可能引起财政问题甚至导致法律纠纷;信息的准确性是指是否有语法或拼写错误。这种测试通常使用一些文字处理软件来进行,例如使用Microsoft Word的"拼音与语法检查"功能;信息的相关性是指是否在当前页面可以找到与当前浏览信息相关的信息列表或入口,也就是一般Web站点中的所谓"相关文章列表"。

    4、整体界面测试

    整体界面是指整个Web应用系统的页面结构设计,是给用户的一个整体感。例如:当用户浏览Web应用系统时是否感到舒适,是否凭直觉就知道要找的信息在什么地方?整个Web应用系统的设计风格是否一致?

    对整体界面的测试过程,其实是一个对最终用户进行调查的过程。一般Web应用系统采取在主页上做一个调查问卷的形式,来得到最终用户的反馈信息。

    对所有的可用性测试来说,都需要有外部人员(与Web应用系统开发没有联系或联系很少的人员)的参与,最好是最终用户的参与。

    四、客户端兼容性测试

    1、平台测试

    市场上有很多不同的操作系统类型,最常见的有Windows、Unix、Macintosh、Linux等。Web应用系统的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应用可能在某些操作系统下能正常运行,但在另外的操作系统下可能会运行失败。

    因此,在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试。

    2、浏览器测试

    浏览器是Web客户端最核心的构件,来自不同厂商的浏览器对Java,、java scrīpt、 ActiveX、 plug-ins或不同的HTML规格有不同的支持。例如,ActiveX是Microsoft的产品,是为Internet Explorer而设计的,java scrīpt是Netscape的产品,Java是Sun的产品等等。另外,框架和层次结构风格在不同的浏览器中也有不同的显示,甚至根本不显示。不同的浏览器对安全性和Java的设置也不一样。

    测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。


    五、安全性测试

    Web应用系统的安全性测试区域主要有:

    (1)现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等。

    (2)Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。

    (3)为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。

    (4)当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。

    (5)服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。
  • 遥远的距离

    2007-06-12 12:14:38

    世界上最遥远的距离 

                             ——泰戈尔  
         世界上最远的距离  
         不是 生与死  
                             而是 我就站在你的面前你却不知道我爱你  

                  世界上最远的距离  
                  不是 我就站在你的面前你却不知道我爱你  
                  而是 明知道彼此相爱 却不能在一起  

                  世界上最远的距离  
                  不是 明知道彼此相爱 却不能在一起  
                  而是 明明无法抵抗相思  
                  却还得故意装作丝毫不把你放在心里  

                  世界上最远的距离  
                  不是 明明无法抵抗相思 却还得故意装作丝毫不把你放在心里  
                  而是 用自己冷漠的心 对爱你的人  
                  掘了一条无法跨却的深渠

Open Toolbar