工作中切忌浮躁。以平和的心态面对生活。快乐每一天

发布新日志

  • 软件测试面试题(软通动力,博彦科技,奇虎,瑞星,中软)

    2009-11-27 20:20:26

     

    转来面试题,有时间多看看,多积累经验。

    1。软通动力面试笔答
      
    1.白箱测试和黑箱测试是什么?什么是回归测试?

    2.单元测试、集成测试、系统测试的侧重点是什么?
    单元测试的重点是系统的模块,包括子程序的正确性验证等。
    集成测试的重点是模块间的衔接以及参数的传递等。
    系统测试的重点是整个系统的运行以及与其他软件的兼容性。

    3.设计用例的方法、依据有那些?
       白盒测试用例设计有如下方法:基本路径测试\等价类划分\边界值分析\覆盖测试\循环测试\数据流测试\程序插桩测试\变异测试.这时候依据就是详细设计说明书及其代码结构吧;
    黑盒测试用例设计方法:基于用户需求的测试\功能图分析方法\等价类划分方法\边界值分析方法\错误推测方法\因果图方法\判定表驱动分析方法\正交实验设计方法.依据是用户需求规格说明书,详细设计说明书

    4.一个测试工程师应具备那些素质和技能?
    掌握基本的测试基础理论
    本着找出软件存在的问题的态度进行测试,即客观吧,不要以挑刺形象出现
    可熟练阅读需求规格说明书等文档
    以用户的观点看待问题
    有着强烈的质量意识
    细心和责任心
    良好的有效的沟通方式(与开发人员及客户)
    具有以往的测试经验
    能够及时准确地判断出高危险区在何处.

    5.集成测试通常都有那些策略?
    大爆炸集成;自顶向下集成;自底向上集成;三明治集成;分层集成;基干集成;基于功能的集成;基于消息的集成;基于风险的集成;基于进度的集成.
    6.你用过的测试工具的主要功能、性能及其他?

    7.一个缺陷测试报告的组成?
    缺陷跟踪报告:
    编号
    如:ut-dt00016
    标题
    如:文字排版功能.字间距.MarchCalculator计算错误
    版本号
    如:V1.3
    执行状态
    如:空白/草稿/提交/审批/分发/正在修改/修改完毕/正在确认/关闭…
    修改记录
    如:2003年7月2日;肖睿编制/修改;原因
    测试环境和版本号码、程序编写人员
    错误严重程度和优先级别
    错误详细描述
    重现步骤和方式、对应的测试记录编码
    附件
    建议修改方式
    修改内容、结果及修改人员签字/日期

    8.基于WEB信息管理系统测试时应考虑的因素有哪些?
    一、功能测试
        1、链接测试
        2、表单测试
        3、Cookies测试
        4、设计语言测试
        5、数据库测试
    二、性能测试
        1、连接速度测试
        2、负载测试
        3、压力测试
    三、可用性测试
        1、导航测试
        2、图形测试
        3、内容测试
        4、整体界面测试
    四、客户端兼容性测试
        1、平台测试  
        2、浏览器测试
    五、安全性测试

    9.软件本地化测试比功能测试都有哪些方面需要注意?

    10.软件测试项目从什么时候开始,?为什么?
    软件测试应该在需求分析阶段就介入,因为测试的对象不仅仅是程序编码,应该对软件开发过程中产生的所有产品都测试,并且软件缺陷存在放大趋势.缺陷发现的越晚,修复它所花费的成本就越大.

    11.需求测试注意事项有哪些?
    一个良好的需求应当具有以下特点:

    完整性:每一项需求都必须将所要实现的功能描述清楚,以使开发人员获得设计和实现这些功能所需的所有必要信息。
    正确性:每一项需求都必须准确地陈述其要开发的功能。
    一致性:一致性是指与其它软件需求或高层(系统,业务)需求不相矛盾。
    可行性:每一项需求都必须是在已知系统和环境的权能和限制范围内可以实施的。
    无二义性:对所有需求说明的读者都只能有一个明确统一的解释,由于自然语言极易导致二义性,所以尽量把每项需求用简洁明了的用户性的语言表达出来。
    健壮性:需求的说明中是否对可能出现的异常进行了分析,并且对这些异常进行了容错处理。
    必要性:“必要性”可以理解为每项需求都是用来授权你编写文档的“根源”。要使每项需求都能回溯至某项客户的输入,如Use Case或别的来源。
    可测试性:每项需求都能通过设计测试用例或其它的验证方法来进行测试。
    可修改性:每项需求只应在S R S 中出现一次。这样更改时易于保持一致性。另外,使用目录表、索引和相互参照列表方法将使软件需求规格说明书更容易修改。
    可跟踪性:应能在每项软件需求与它的根源和设计元素、源代码、测试用例之间建立起链接链,这种可跟踪性要求每项需求以一种结构化的,粒度好(f i n e - g r a i n e d )的方式编写并单独标明,而不是大段大段的叙述。



    12.简述一下缺陷的生命周期

    13.分析测试用例注意(事项)?
    1.为什么要写用例:
    我们编写测试用例,有如下的好处:
    便于团队交流:假如说一个测试团队有10个成员,大家测试的时候都各自为政,没有统一的标准,测试的效率无疑会大打折扣;如果大家都遵循统一的用例规范去写,就会解决这一问题。
    便于重复测试 :大家知道,软件在实际开发过程中是会有不同版本的,比如会从1.0升级到10.0,那么如果不写测试用例的话,在测试10.0版本的时候,你能完全记得1.0版本时你做过哪些测试吗?测试用例就像一个备忘录一样,便于重复测试。
    便于跟踪统计:这一点是针对测试经理或是项目经理来说的,项目负责人通过看测试用例的执行情况,就能了解到项目目前的概况,比如已经执行了哪些测试,还有哪些测试没有执行,测试没有通过的地方主要集中在哪些模块等。
    便于用户自测:尤其是项目软件,有的时候用户希望自己测试一下软件产品,但是用户大都是非专业人士,他需要根据你写好的用例来更好的检验产品的质量
    说了这么多编写测试用例的优点,那它有没有缺点呢?有一个明显的缺点就是需要花费大量的时间,通常编写测试用例的时间比实际执行测试的时间还要长,这一点大家会在实际工作中有深刻的体会

    2.什么时候写用例:
    什么时候写用例?这个问题没有统一的标准答案,但有一点可以肯定,就是测试用例要尽早编写。 大家认为在哪个阶段开始写用例比较好呢?
    通常,我们都会在测试设计阶段来写用例,即《需求规格说明书》和《测试计划》都已完成之后



    二。瑞星笔试题(15道)
      
    1.一台计算机的IP是192.168.10.71子网掩码255.255.255.64与192.168.10.201是同一局域网吗?
    2.internet中e-mail协仪,IE的协仪,NAT是什么,有什么好处,能带来什么问题?DNS是什么,它是如何工作的?
    3.PROXY是如何工作的?
    4.win2k系统内AT命令完成什么功能,Messenger服务是做什么,怎么使用?
    5进程,线程的定义及区别
    6,32位操作系统内,1进程地址空间多大,进程空间与物理内存有什么关系?
    7网络攻击常用的手段,防火墙如何保证安全.
    8如何配静态IP,如何测网络内2台计算机通不通,PING一次返几个数据包?
    9WIN9X与WINNT以上操作系统有"服务"吗,服务是什么,如何停止服务?
    10AD在WIN2KSERVER上建需什么文件格式,AD是什么?XP多用户下"注销"与"切换"的区别.
    11UDP可以跨网段发送吗?
    12最简单的确认远程计算机(win2K以上)某个监听端口是正常建立的?
    13软件测试的定义,测试工作是枯燥反复的,你是如何理解的?黑盒,白盒,回归,压力测试的定义.
    14winrunner,loadrunner是什么,区别
    15磁盘分区如何分类,请举例说明安装操作系统的注意事项.
    (1小时答题)


    三。中软的面试题

      
    一.     简答题.
    1.     避免死锁的方法有哪些?
    2.     在Sybase数据库中注册用户与数据库用户有什么区别?
    3.     在MS SQL_Server 数据库中通过什么约束保证数据库的实体完整性
    4.     内存有哪几种存储组织结构.请分别加以说明
    5.     JAVA中的Wait() 和notify()方法使用时应注意些什么?
    6.     用户输入一个整数.系统判断,并输出是负数还是非负数,请设计测试用例.
    7.     操作系统中的同步和互诉解决了什么问题
    8.     UNIX 中init
    二.     编写类String 的构造函数,析构函数和赋值函数
    已知类String 的原型为
    class string
    {
    public:
    string(const char *str=null);//普通构造函数
    string(const string &other);//拷贝构造函数
    ---string(void);
    string &operate=(const string &other);//赋值函数
    private:
    char * m-data;//用于保存字符串
    };
    请编写string 的上述4个函数
    三.     有关内存的思考题
    1.     void getmemory(char *p)
    { p=(char*)mallol(100);
    }
    void test(void)
    {
    char * str =null;
    getmemory(str);
    strcpy(str,”hello,world”);
    printf(str);
    }
    请问运行Test函数会有什么样的结果
    2.     char*getmemory(void)
    { char p[]=”hello world”;
    return p;
    }
    void test(void)
    {
    char *str=null;
    str=Getmemory();
    printf(str);
    } 请问运行Test 函数会有什么样的结果.

    三。奇虎面试题

      

    前三道程序题
    (下面的题不排序,有笔试题,也有面试题)
    4、怎么划分缺陷的等级?
    5、怎么评价软件工程师?
    6、软件工程师的素质是什么?
    7、怎么看待软件测试?
    8、软件测试是一个什么样的行业?
    9、图书(图书号,图书名,作者编号,出版社,出版日期)
       作者(作者姓名,作者编号,年龄,性别)
       用SQL语句查询年龄小于平均年龄的作者姓名、图书名,出版社。
    10、你的职业生涯规划
    11、测一个三角形是普通三角形、等腰三角形、等边三角形的流程图,测试用例。
    12、写出你常用的测试工具。
    13、lordrunner分哪三部分?
    14、希望以后的软件测试是怎么样的一个行业?
    15、.软件测试项目从什么时候开始?
       我答:从软件项目的需要分析开始。
         问:为什么从需求分析开始?有什么作用?

    四。北京博彦科技笔试+面试



    笔试题

    1.文件格式系统有哪几种类型?分别说说win95、win98、winMe、w2k、winNT、winXP分别支持那些文件系统。
    2.分别填入一个语句,完成下面的函数,通过递归计算数组a[100]的前n个数之和。
    Int sum ( int a[],int n )
    {
       if (n>0) return___________________________;
       else return________________________;
    }

    3.写出你所知道的3种常用的排序方法,并用其中一种方法设计出程序为数组a[100]排序。
    4.什么是兼容性测试?兼容性测试侧重哪些方面,请按照优先级用矩阵图表列出。
       (这题的第二问我不会答,所以原题目记得不是很清楚,大家能看明白问什么就好)
    5.我现在有个程序,发现在WIN98上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题?
    6.翻译,中——英,有关P2P点对点文件传输的原理。
    7.翻译,英——中,有关互联网的发展对商务、学习、交流的影响。

    笔试完了是初步的面试
    先问了个问题:FAT16/FAT32/NTFS 哪个的安全性最好,为什么?(不会答)
    又做了两道题,
    一题是关于C++类的继承,看程序写出输出结果,A是虚类,B继承A,跟一般C++的书上的习题差不多。
    一题是写出在32位机器下,计算几个变量的size,

  • LInux 命令技巧(转)

    2009-11-27 19:59:08

     

    新手刚刚接触Linux的时候可能处处感到不便,不过没有关系,接触新的事物都有这样的一个过程,在你用过Linux一段时间后,你就会逐渐了解Linux其实和Windows一样容易掌握。
      由于操作和使用环境的陌生,如果要完全熟悉Linux的应用我们首先要解决的问题就是对Linux常用命令的熟练掌握。本章我们就来介绍Linux的常用基本命令。

      首先启动Linux。启动完毕后需要进行用户的登录,选择登陆的用户不同自然权限也不一样,其中“系统管理员”拥有最高权限。

      在启动Linux后屏幕出现如下界面显示:

      ……

      Red Hat Linux release 9 (Shrike)

      Kernel 2.4.20.8 on an i686

      login:

      输入:root(管理员名)后,计算机显示输口令(password:),输入你的口令即可。当计算机出现一个“#”提示 符时,表明你登录成功!

      屏幕显示Linux提示符: [root@localhost root]#_

      这里需要说明的是“Red Hat Linux release 9 (Shrike)”表示当前使用的操作系统的名称及版本。“2.4.20.8”表示Linux操作系统的核心版本编号。“i686”表示该台电脑使用的CPU的等级。

      下面我们来介绍常用基本命令

    一、注销,关机,重启

      注销系统的logout命令

      1,Logout 注销是登陆的相对操作,登陆系统后,若要离开系统,用户只要直接下达logout命令即可:

      [root@localhost root]#logout

      Red Hat Linuxrelease 9(Shike)

      Kernel 2.4.20.8 on an i686

      Login: ← 回到登陆的画面

      2,关机或重新启动的shutdown命令

      Shutdown命令可以关闭所有程序,依照用户的需要,重新启动或关机。

      参数说明如下:

       立即关机:-h 参数让系统立即关机。范例如下:

      [root@localhost root]#shutdown –h now ← 要求系统立即关机

       指定关机时间:time参数可指定关机的时间;或设置多久时间后运行shutdown命令,范例如下:

      [root@localhost root]#shutdown now ← 立刻关机

      [root@localhost root]#shutdown +5 ← 5分钟后关机

      [root@localhost root]#shutdown 10:30 ← 在10:30时关机

       关机后自动重启:-r 参数设置关机后重新启动。范例如下:

      [root@localhost root]#shutdown -r now ← 立刻关闭系统并重启

      [root@localhost root]#shutdown -r 23:59 ← 指定在23:59时重启动

      3,重新启动计算机的reboot命令

      顾名思义,reboot命令是用来重新启动系统的。常用的参数如下:

       -f 参数:不依正常的程序运行关机,直接关闭系统并重新启动计算机。

       -I 参数:在在重新启动之前关闭所有网络接口。

      虽然reboot命令有个参数可以使用,但是一般只需要单独运行reboot命令就可以了
       任务调度命令

      计算机有很多程序需要周期性的被运用,例如清理磁盘中不要的暂存盘、备份系统数据、检查远程服务器的邮件等。对于这些重复性的工作,其实不需要每次都辛苦地运行这些程序。可利用任务调度命令,指定系统定期在某个时间运行这些程序,轻轻松松完成想要执行的工作。

      任务调度的crond常驻命令

      crond 是Linux用来定期执行程序的命令。当安装完成操作系统后,默认便会启动此任务调动命令。crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作,便会自动执行该工作。由于任务调度中间的操作过程十分繁杂,我们只将任务调度文件的写法介绍给大家,供大家参阅:

      Minute Hour Day Month DayOfWeek Command

      在这段文字中除了“Command”是每次都必须指定的字段以外,其他自动皆可视需求自行决定是否指定。

    六、任务调度的系统工作

      /ect/crontab/文件是Linux系统工程的任务调度设置文件,其默认的内容如下:

      SHELL=/bin/bash ← 指定执行任务调度工作时所使用的SHELL

      PATH=/shin:/bin:/usr/sbin:/usr/bin ← 指定命令搜索的路径

      MAILTO=root ← 指定将输出结果给root用户

      HOME=/ ← 指定跟目录


      

    七、任务调度的个人工作

      除了上述任务调度的系统工作外,一般用户则可利用crintab命令,自行设置要定期执行的工作。

      每个用户可执行crontab –e命令,编辑自己的任务调度设置文件,并在此文件加入要定期执行的工作。以下范例为tony用户编辑的任务调度设置文件:

      [tony@free rony]$ crontab –e

      执行上述命令后,即会进入VI文本编辑器自行编辑任务调度的工作。

    八、删除调度工作任务

      如果不想再定期执行任务调动中的工作,则可执行crontab –r命令删除所有任务调度的工作。范例如下:

      [tony@free rony]$ crontab –r ← 删除任务调度中的工作

      [tony@free rony]$ crontab -1 ← 再查看一次任务调度中的工作

      no crontab for tony ← 已经没有任何任务调度工作

    九、打包、压缩与解压缩

      由于这是每一个Linux用户都会经常用到的基本功能,因此我们将介绍最常见到的打包、压缩和解压缩程序。

      1,打包文件的tar命令

      tar命令位于/bin目录中,它能将用户所指定的文件或目录打包成一个文件,不过它并不做压缩。一般Unix上常用的压缩方式是先用tar命令将许多文件打包成一个文件,再以gzip等压缩命令压缩文件。tar命令参数繁多,以下举例常用参数作说明:

       -c:创建一个新的tar文件;

       -v:显示运作过程信息;

       -f:在:指定文件名称;

       -z:调用gzip压缩命令执行压缩;

       -j:调用bzip2压缩命令执行压缩;

       -t:参看压缩文件内容;

       -x:解开tar文件。

      在此举一常用范例:

      [tony@free data]# tar cvf data.tar * ← 将目录下所有文件打包成data.tar

      [tony@free data]# tar cvf data.tar.gz * ← 将目录所有文件打包成data.tar再用gzip命令压缩

      [tony@free data]# tar tvf data.tar * ← 查看data.tar文件中包括了哪些文件

      [tony@free data]# tar xvf data.tar * ← 将data.tar解开

      2,压缩与解压缩

      tar命令本身没有压缩能力,但是可以在产生的tar文件后,立即使用其他压缩命令来压缩,省区需要输入两次命令的麻烦。

       使用-z参数来解开最常见的.tar.gz文件:

      [tony@free data]# tar –zxvf foo.tar.gz ←将文件解开至当前目录下

       使用-j参数解开tar.bz2压缩文件:

      [tony@free data]# tar –jxvf linux-2.4.20tar.bz2 ←将文件解开至当前目录下

       使用-Z参数指定以compress命令压缩

      [tony@free data]# tar –cZvf prcture.tar.Z*.tif 将该目录下所有.tif打包并命令压缩成.tar.Z文件

    十、其他常用命令

      Linux可用的命令相当多,本章我们只举例几个常用的命令进行说明,在以后的章节中,还会接触到许多其他命令。

      1,修改密码的passwd命令

      passwd(password)命令可让用户变更密码。范例如下:

      [tony@free tony]$ passwd

      Changing password for user tony

      Changing password for tony

      (current)UNIX password: ← 输入原密码

      New password: ← 输入新密码

      Retype new password ← 在此输入新密码

      passwd: all authentication tokens updated successfully ← 密码修改成功

      2,创建引导盘的mkbootdisk命令

      如果安装系统时,并没有制作引导盘,或者引导盘已经损害,可以在安装系统之后,利用mkbootdisk命令创建一张新的引导盘:

      [root@free root]# mkbootdisk ‘uname -r’

      执行上述指令便可以成功的创建一张引导盘了。请保存好出盘,已备紧急之用。

      3,显示与设置时间的date、clock和ntpdate命令

      date 命令可以显示当前日期时间。范例如下:

      [tony@free rony]$ date

      -9月 8 10:00:00 CST 2006

      CST为中部标准时间

      clock命令也可以显示出系统当前的日期与时间,不过clock命令默认不允许一般用户执行,请用root账号执行:

      [root@free root]# clock

      公元2006年9月8日(周五)10时00分00秒 0.112604 seconds

      如果系统时间不正确要想更改,可以使用date命令来设置时间。用root账号如下操作:

      [root@free root]# date 09091200 ← 将时间设定为9月9日12点00分

      用户有时可能会苦于不知道标准时间。没关系,当前网络上也有校对时服务器提供的标准时间。因此可执行ntpdate命令,将系统时间设成与校时服务器一致:

      [root@free root]# ntpdate stdtime.microsoft.com ← 与微软校时服务器校时。

      然后再执行一次date命令,就会发现系统时间已经更改。不过这样还没有结束,还需要执行clock –w 命令将更改的时间写入计算机的CMOS中,这样下次启动时才会使用更改过的时间。 范例如下:

      [root@free root]# clock –w

    常用的基本命令我们就先介绍到这里,现在我们来讲些新手在使用过程中遇到的一些疑难问题的解决方法以及在操作过程中的一些应用技巧。
    一、如何进入文字模式

      当安装Linux时,可选择自动后要进入文字模式或时图形模式。如果选择的时文字模式则可略过此说明;若是直接进入X Window的图形模式,仍可以使用下列方式,进入文字模式:

      1,在X Window中打开文字模式窗口

      在默认的GNOME窗口环境为例,在X Windows 下进入文字模式最简单的方式,就是在桌面空白处单击鼠标右键,执行“新增终端命令”,打开文字模式窗口。在文字模式窗口中可以用 Shift+Page Up和Shift+Page Dwon 键来卷动窗口内容。

      2,切换虚拟主控制台进入文字模式

      Linux主机在主控制台(console)下提供了7个虚拟主控台,在每一个虚拟主控台中可以运行各自的程序。可以在登陆X Window系统后的任何时间,按下Ctrl+Alt+Fn键来切换到其他的虚拟主控台。其中的Fn是指F1~F7的功能键。

      3,启动直接进入文字模式

      要设置启动时直接进入文字模式,可以使用任何一个文本编辑器,打开/etc/inittab文件,在文件中查找“id:5:initdefault:”这一段文字,并将其改为“id:3:initdefault:”即可。

    二、etc/inittab设置错误,导致无法启动

      若修改/etc/inittab后无法正常启动,则可以在启动时采用单人模式进入系统,重新修改inittab设置文件以解决问题。

      若使用GRUB为引导装载程序时,只要在启动显示菜单画面时,按a键,并在命令行输入一下参数以进入单人模式:

      grub append > ro root=LABEL=/s ← 只要在命令行原来的语句后,加“S”即可

      使用LILO为引导装载程序时,同样在启动显示LILO菜单画面时,按Ctrl+X键,切换到文字模式的LILO登录画面,并输入以下参数即可:

      boot: linux s ← 表示系统直接讲进入单人模式

    三、如何查询命令的用法

      在linux系统中,如果用户某命令的功能不大清楚,可以使用man命令查询帮助:

      [root@free root]# man shutdown ← 以man命令查询稍后要介绍的shutdown命令的用法。

      大多数命令的语法,还可以通过-h或—help参数查询。例如shutdown命令的语法可以运行shutdown –h或上述的man shutdown 命令查得。

    四、避免按Ctrl+Alt+Del重新启动系统

      在linux中直接按下Ctrl+Alt+Del三个键后就会重新启动,如果不希望任何人利用这组组合键随意重新启动计算机,请用文本编辑器修改/etc/inittab文件:

      #ca::ctrlaltdel:/sbin/shut down –t3 –r now ← 在此之前加上“#”。

      存盘后重新启动计算,以后就无法用Ctrl+Alt+Del 键重新启动了。

    五、文字模式下的中文信息出现乱码,怎么办

      在此版的Red Hat Linux中,若是在X Window打开文字模式窗口,以文字模式操作,则所有中文文件名、月份,甚至部分信息都可以正常的以中文显示。但在文字模式的虚拟控制台中,这些中文信息,则会变成乱码,此时请如下操作,可将此信息改成英文显示:

      [root@free root]$ LANG=C

      [root@free root]# ls –l

      运行LANG=C命令后原来以中文显示(乱码)的部分,变成英文了

      若想改回原来的设置,则只要再执行LANG=zh_CN命令即可:

      [root@free root]$ LANG=zh_CN

    六、看不到中文文件名

      如果加载的存储介质中含有中文文件名,需要再运行mount命令,再加上“-o iocharset=cp950”参数,这样才能看到此保存媒体内的中文文件名。例如加载光盘就可以执行以下命令:

      [root@free root]# mount –o iochatset=cp950/dev/cdrom/mnt/cdrom

    七、如何调换光盘

      当光盘已经被加载成为一个目录时,按下光驱上面的退出按钮,将无法退出光盘,必须先将光盘卸载后,才能退出光盘。

      若当前所在之处就是光盘加载目录(如/mnt/cdrom),或有其他用户正在此目录下,将无法成功的卸载它,当然也不能退出光盘:

      [root@free root]# umount/mnt/cdrom

      umount:/mnt/cdrom: device is busy ← 此光盘正在被使用中

      先将工作目录切换到别处,或要求其他用户离开此目录,才可卸载目录并退出光盘。而更换关盘之后,记得要将光盘再次加载才能使用。

    八、允许一般用户加载光盘或软盘

      Linux 操作系统默认只允许root用户才能运行mount命令,若是一般用户执行上述命令,则会出现以下的错误信息:

      [root@free root]# mount/dev/cdrom/mut/cdrom

      mount:only root can do that ← 只有root用户才能执行此命令

      因此若要允许一般用户也能加载光盘或软盘,请修改/ect/fstab/设置文件:

      /dev/cdrom/mut/cdrom udf,iso9660 noauto,owner,kudzu,ro,user ← 若要让一般用户也加载光盘,请在此处加上“,user”项目。

      Linux的其他应用指令还有很多,我们将在日后的学习和应用中随遇随教。


    二、文件与目录的操作

      列出文件列表的ls命令

      1,ls(list)命令是非常有用的命令,用来显示当前目录中的文件和子目录列表。配合参数的使用,能以不同的方式显示目录内容。范例如下:

       显示当前目录的内容:

      [tony@free tony]$ ls

      Desktop mail myinstall.log test.txt ← 有两个目录及两个文件夹

       当运行ls命令时,并不会显示名称以“.”开头的文件。因此可加上“-a”参数指定要列出这些文件。范例如下:

      [tony@free tony]$ ls –a

       以“-s”参数显示每个文件所有的空间,并以“-S”参数指定按所有占用空间的大小排序。范例如下:

      [tony@free tony]$ ls –s –S

      总计36

      4 Desktop 4 mail 24 myinstall.log 4 test.txt

       在ls命令后直接加上欲显示的目录路径,就会列出该目录的内容。范例如下:

      [tony@free tony]$ ls –l/usr/games

      2,切换目录的cd命令

      cd(change directory)命令可让用户切当前所在的目录。范例如下:

      [tony@free home]$ cd tony ← 切换到当前目录下的tony子目录

      [tony@free tony]$ cd .. ← 切换到上一层目录

      [tony@free home]$ cd / ← 切换到系统根目录

      [tony@free /]$ cd ← 切换到用户主目录

      [tony@free tony]$ cd /usr/bin ← 切换到/usr/bin目录

      3,创建目录的mkdir命令

      Mkdir(make directory)命令可用来创建子目录。下面的范例会在所在目录下创建tool子目录。

      [tony@free tony]$ mkdir tool

      4,删除目录的rmdir命令

      rmdir(remove directory)命令可用来删除“空”的子目录。范例如下:

      [tony@free tony]$ rmdir tool ← 删除tool目录
    5,复制文件的cp命令

      cp(copy)命令可以将文件从一处复制到另一处。一般在使用cp命令将以个文件复制成另一个文件或复制到某个目录时,需要指定原始文件名与目的文件名或目录。范例如下:

      [tony@free tony]$ cp data1.txt data2.txt ← 将data1.txt复制成data2.txt

      [tony@free tony]$ cp data3.txt /tmp/data ← 将data3复制到/tmp/data目录中

       显示复制过程:加入-v参数可显示命令执行过程。范例如下:

      [tony@free tony]$ cp zip.txt zip2.txt ← 一般状态下不会显示复制过程

      [tony@free tony]$ cp –v zip.txt zip3.txt ← 以-v显示复制过程

      zip.txt ->zip3.txt

       递回复制:加入“-R”参数可同时复制目录下的所有文件及子目录。范例如下:

      [tony@free tony]$ cp –v –R * backup ← 将所有文件(含子目录文件)复制到backup目录

      6,删除文件或目录的rm命令

      rm(remove)命令可以删除文件或目录。范例如下:

      [tony@free tony]$ rm myfile ← 删除指定的文件

      [tony@free tony]$ rm * ← 删除当前目录中的所有文件

      rm命令的常用参数如下:

       强迫删除:使用-f参数时,rm命令会直接删除文件,不再询问。范例如下:

      [tony@free tony]$ rm –f *.txt ← 强迫删除文件

       递回删除:-r 也是一个相当常用的参数,使用此参数可同时删除指定目录下的所有文件及子目录。范例如下:

      [tony@free tony]$ rm –r data ← 删除data目录(含data目录下所有文件和子目录)

      [tony@free tony]$ rm –r * ← 删除所有文件(含当前目录所有文件,所有子目录和子目录下的文件)

      强制删除指定目录:当使用-r参数删除目录时,若该目录下有许多子目录及文件,则系统会不间断地询问,以确认您的确要删除目录或文件。若已确定要删除所存目录及文件,则可以使用-rf参数,如此一来,系统将直接删除该目录中所有的文件及子目录,不再询问。范例如下:

      [tony@free tony]$ rm –rf tmp 强制删除tmp目录及该目录下所有文件及子目录

       显示删除过程:使用-v 参数。范例如下:

      [tony@free tony]$ rm –v
    7,让显示画面暂停的more命令

      为了避免画面显示瞬间就闪过去,用户可以使用more命令,让画面在显示满一页时暂停,此时可按空格键继续显示下一个画面,或按Q键停止显示。

       当使用ls命令查看文件列表时,若文件太多则可以配合more命令使用。范例如下:

      [tony@free bin]$ ls –al

      more

       单独使用more命令时,可用来显示文字文件的内容。范例如下:

      [tony@free tony]$ more data.txt

      8,连接文件的cat命令

      cat(concatenate) 命令可以显示文件的内容(经常和more命令搭配使用),或是将数个文件合并成一个文件。范例如下:

       逐页显示 preface.txt的内容:

      [tony@free tony]$ cat preface.txt

      more

       将preface.txt 附加到outline.txt文件之后:

      [tony@free tony]$ cat preface.txt >> outline.txt

       将new.txt和info.txt合并成readme.txt文件:

      [tony@free tony]$ cat new.txt info.txt >readme.txt

      9,移动或更换文件,目录名称的mv命令

      mv (move)命令可以将文件及目录移动到另一个目录下面,或更换文件及目录的名称。范例如下:

      [tony@free backup]$ mv a.txt .. ← 将a.txt文件移到上层目录

      [tony@free backup]$ mv z1.txt z3.txt ← 将 z1.txt改名成z3.txt

      [tony@free backup]$ cd.. ← 切换到上一层目录

      [tony@free tony]$ mv backup.. ← backup 目录上移一层
    10,显示当前所在目录的pwd命令

      pwd(print working directory)命令可显示用户当前所在的目录。范例如下:

      [tony@free tony]$ pwd

      /home/tony ← 当前所在目录为“/home/tony”

      11,查找文件的locate命令

      locate 命令可用来搜索包含指定条件字符串的文件或目录。范例如下:

      [tony@free tony]$ locate zh_CN 列出所有包含“zh_CN”字符串的文件和目录。

      由于locate命令是从系统中保存文件及目录名称的数据库中搜索文件,虽然系统会定时更新数据库,但对于刚新增或删除的文件、目录,仍然可能会因为数据库尚未更新而无法查得,此时可用root身份运行updatedb命令更新,为此数据库得内容正确。

      12,搜索字符串得grep命令

      grep 命令可以搜索特定字符串来并显示出来,一般用来过滤先前得结果,避免显示太多不必要得信息。范例如下:

      [tony@free etc]$ grep text *.conf ← 搜索当前目录中扩展名为.conf且包含“text”字符串得文件。

      grep:amd.conf: ← 拒绝不符权限得操作

      grep:diskcheck.conf: ← 拒绝不符权限得操作

      grep:grub.conf ← 拒绝不符权限得操作

       若您是使用一般权限的用户运行,上例的输出结果会包含很多如“拒绝不符权限的操作之类的错误信息,可使用-s参数消除。

      [tony@free etc]$ grep –s text *.conf

      13,重导与管道

      重导(redirect)可将某命令的结果输出导文件中,它有两中命令:“>”和“>>”。“>”可将结果输出到文件中,该文件原有的内容会被删除:“>>”则将结果附加到文件中,原文件内容不会被清除。范例如下:

      [tony@free tony]$ ls –a>dir.txt ← 将ls –a命令执行结果输出到dir.txt文件。

      [tony@free tony]$ cat data1.txt >> data2.txt ← 将 data1.txt 内容附加到data2.txt文件之后。

      通道(pipe)命令的符号是“ ”,可将某命令的结果输出给另一命令,一下范例将ls命令的输出结果传给grep命令过滤:

      [tony@free etc]$ ls

      gerp conf ← 搜索并显示ls命令运行结果中包含有“conf”字符串

      在举一个删除文件或目录的例子,可以利用yes命令重复输出“y”字符的特性,将结果传给rm命令,如此即可避免重复输入“y”:

      [tony@free tony]$ yes

      rm –r mydir

    三、使用光盘及软盘

      在Linux的文字模式下要使用光盘或软盘,并不是只将光盘或软盘放入即可,用户需要运行加载的命令,才可读写数据。所谓加载就是将存储介质 (如光盘和软盘)指定成系统中的某个目录(如/mnt/cdrom或mnt/floppy)。通过直接存取此加载目录,即可读写存储介质中的数据。以下就来看看文字模式下的加载及卸载命令。

      1,加载的mount命令

      要使用光盘时先把光盘放入光驱,然后执行加载的mount命令,将光盘加载至系统中:

      [tony@free tony]# mount/dev/cdrom/mut/cdrom ← 加载光盘

      同理,使用软盘之前也需要和光盘一样,必须先加载后才能使用:

      [tony@free tony]# mount/dev/fd0/mut/floppy ← 加载软盘

      2,卸载的umount命令

      如果不需要使用光盘或软盘,则需先执行卸载命令之后,才能将光盘或软盘退出。范例如下:

      [tony@free tony]# umount / mnt/cdrom ← 光盘卸载

      在不使用软盘时执行umount 命令卸载软盘,再将软盘拿出

      [tony@free tony]# umount / mnt/ ← 软盘卸载

    四、在后台运行程序

      用户有时的程序有可能要花费很多时间,如果将它放在前台运行,将导致无法继续做其他事情,最好的方法就是将它放在后台运行,甚至可能希望在用户注销系统后,程序还可以继续运行。让我们看看那如何实现这一目的。

      1,在后台运行程序的&、bg命令

      将程序放到后台运行的最简单方法就是在命令最后加上“&”,范例如下:

      [tony@free root]# updatedb & ← 在后台执行 locate 数据库更新命令

      [tony@free root]# bg ← 将更新操作放到后台运行

      2,前台运行的程序fg命令

      如果用户当前已有程序在后台运行,可以输入fg命令,将它从背景中移到前台运行:

      [tony@free root]# fg ← 放到前台执行的命令会显示出来

      3,在退出后让程序继续运行的nohup命令

      此命令可使用户退出系统后,程序继续运行。范例如下:

      [tony@free rony]$ nohup myserver &

      然后用户就可以退出了,当再次登录的时候,可以用ps –aux命令看到程序仍在后台中运行。

  • 登陆、添加、删除、查询模块的测试点(转载)

    2009-11-25 16:59:36

     

    以前在这里看到一篇文章说,要积累各个常用模块的测试点,然后到需要测试的时候就根据这些测试点设计测试用例,我觉得这是一个好方法,就决定总结一下。我的实际经验不多,根据我在论坛中学到的零散的东西和自己的想象,总结出以下几点,欢迎各位继续补充。

      1、登陆  2、添加  3、查询  4、删除

      1、登陆

      ①        用户名和密码都符合要求(格式上的要求)

      ②        用户名和密码都不符合要求(格式上的要求)

      ③        用户名符合要求,密码不符合要求(格式上的要求)

      ④        密码符合要求,用户名不符合要求(格式上的要求)

      ⑤        用户名或密码为空

      ⑥       数据库中不存在的用户名,不存在的密码

      ⑦        数据库中存在的用户名,错误的密码

      ⑧        数据库中不存在的用户名,存在的密码

      ⑨        输入的数据前存在空格

      ⑩        输入正确的用户名密码以后按[enter]是否能登陆

      2、添加

      ①        要添加的数据项均合理,检查数据库中是否添加了相应的数据

      ②        留出一个必填数据为空

      ③        按照边界值等价类设计测试用例的原则设计其他输入项的测试用例

      ④        不符合要求的地方要有错误提示

      ⑤        是否支持table键

      ⑥        按enter是否能保存

      ⑦        若提示不能保存,也要察看数据库里是否多了一条数据

      3、删除

      ①        删除一个数据库中存在的数据,然后查看数据库中是否删除

      ②        删除一个数据库中并不存在的数据,看书否有错误提示,并且数据库中没有数据被删除

      ③        输入一个格式错误的数据,看是否有错误提示,并且数据库中没有数据被删除。

      ④        输入的正确数据前加空格,看是否能正确删除数据

      ⑤        什么也不输入

      ⑥        是否指出table键

      ⑦        是否支持enter键

      4、查询

      精确查询:

      ①        输入的查询条件为数据库中存在的数据,看是否能正确地查出相应得数据

      ②        输入正确的查询条件以前加上空格,看是否能正确地查出相应的数据

      ③        输入格式或范围不符合要求的数据,看是否有错误提示

      ④        输入数据库中不存在的数据

      ⑤        不输入任何数据

      ⑥        是否支持table键

      ⑦        是否支持enter键

      模糊查询:

      在精确查询的基础上加上以下一点:

      ①        输入一些字符,看是否能查出数据库中所有的相关信息

    用户注册和密码修改测试点

      一.用户注册

      只从用户名和密码角度写了几个要考虑的测试点,如果需求中明确规定了安全问题,Email,出生日期,地址,性别等等一系列的格式和字符要求,那就都要写用例测了~

      以等价类划分和边界值法来分析

      1、填写符合要求的数据注册: 用户名字和密码都为最大长度 (边界值分析,取上点)

      2、填写符合要求的数据注册 :用户名字和密码都为最小长度 (边界值分析,取上点)

      3、填写符合要求的数据注册:用户名字和密码都是非最大和最小长度的数据(边界值分析,取内点)

      4、必填项分别为空注册

      5、用户名长度大于要求注册1位(边界值分析,取离点)

      6、用户名长度小于要求注册1位(边界值分析,取离点)

      7、密码长度大于要求注册1位(边界值分析,取离点)

      8、密码长度小于要求注册1位(边界值分析,取离点)

      9、用户名是不符合要求的字符注册(这个可以划分几个无效的等价类,一般写一两个就行了,如含有空格,#等,看需求是否允许吧~)

      10、密码是不符合要求的字符注册(这个可以划分几个无效的等价类,一般写一两个就行了)

      11、两次输入密码不一致(如果注册时候要输入两次密码,那么这个是必须的)

      12、重新注册存在的用户

      13、改变存在的用户的用户名和密码的大小写,来注册。(有的需求是区分大小写,有的不区分)

      14、看是否支持tap和enter键等;密码是否可以复制粘贴;密码是否以* 之类的加秘符号显示

      二.修改密码

      当然具体情况具体分析哈~不能一概而论~

      实际测试中可能只用到其中几条而已,比如银行卡密码的修改,就不用考虑英文和非法字符,更不用考虑那些TAP之类的快捷键.

      而有的需要根据需求具体分析了,比如连续出错多少次出现的提示,和一些软件修改密码要求一定时间内有一定的修改次数限制等等。

      1、不输入旧密码,直接改密码

      2、输入错误旧密码

      3、不输入确认新密码

      4、不输入新密码

      5、新密码和确认新密码不一致

      6、新密码中有空格

      7、新密码为空

      8、新密码为符合要求的最多字符

      9、新密码为符合要求的最少字符

      10、新密码为符合要求的非最多和最少字符

      11、新密码为最多字符-1

      12、新密码为最少字符+1

      13、新密码为最多字符+1

      14、新密码为最少字符-1

      15、新密码为非允许字符(如有的密码要求必须是英文和数字组成,那么要试汉字和符号等)

      16、看是否支持tap和enter键等;密码是否可以复制粘贴;密码是否以* 之类的加秘符号

      17、看密码是否区分大小写,新密码中英文小写,确认密码中英文大写.

      18、新密码与旧密码一样能否修改成功.

      有个朋友问我,注册的时候测试了密码长度,修改的时候为什么还要测试。

      我在这里举个我亲身经历的例子,以前我玩一个游戏,叫恋爱盒子,在游戏里我把密码改成了xuewufengtian,后来怎么也上不去了。因为资料填写不全无法找回密码。后来我在一次注册过程中发现,注册的时候密码长度最长是10位,这时我灵机一动,用了原来的用户名和xuewufengt的的密码就进去了。 这表明,修改密码时候的最大长度和注册及登陆的时候密码最大长度有可能是不一致的。

  • 重新拾起对测试的爱

    2009-05-21 15:30:20

    好长时间没来维护自己的空间,今天突然想写点什么东西。

    通过最近的工作,发现对于测试有了更多的了解。测试一个业务类的软件,需要对需求业务非常的了解,否则影响测试效果

  • 今天刚发现的一个不错的网站

    2008-10-16 14:20:26

    www.3atesting.com 里面有很多测试的东西,真不错
  • SQL语句大全(转)

    2007-10-26 14:00:39

    语 句 功 能

      --数据操作

      SELECT --从数据库表中检索数据行和列

      INSERT --向数据库表添加新数据行

      DELETE --从数据库表中删除数据行

      UPDATE --更新数据库表中的数据

      --数据定义

      CREATE TABLE --创建一个数据库表

      DROP TABLE --从数据库中删除表

      ALTER TABLE --修改数据库表结构

      CREATE VIEW --创建一个视图

      DROP VIEW --从数据库中删除视图

      CREATE INDEX --为数据库表创建一个索引

      DROP INDEX --从数据库中删除索引

      CREATE PROCEDURE --创建一个存储过程

      DROP PROCEDURE --从数据库中删除存储过程

      CREATE TRIGGER --创建一个触发器

      DROP TRIGGER --从数据库中删除触发器

      CREATE SCHEMA --向数据库添加一个新模式

      DROP SCHEMA --从数据库中删除一个模式

      CREATE DOMAIN --创建一个数据值域

      ALTER DOMAIN --改变域定义

      DROP DOMAIN --从数据库中删除一个域

    --数据控制

      GRANT --授予用户访问权限

      DENY --拒绝用户访问

      REVOKE --解除用户访问权限

      --事务控制

      COMMIT --结束当前事务

      ROLLBACK --中止当前事务

      SET TRANSACTION --定义当前事务数据访问特征

      --程序化SQL

      DECLARE --为查询设定游标

      EXPLAN --为查询描述数据访问计划

      OPEN --检索查询结果打开一个游标

      FETCH --检索一行查询结果

      CLOSE --关闭游标

      PREPARE --为动态执行准备SQL 语句

      EXECUTE --动态地执行SQL 语句

      DESCRIBE --描述准备好的查询

      ---局部变量

      declare @id char(10)

      --set @id = '10010001'

      select @id = '10010001'

  • 同行blog

    2007-10-25 15:54:12

  • 电子书下载网址

    2007-09-28 09:16:01

    http://www.itpub.net/325522,1.html

    测试书籍的推荐:

      http://www.cntesting.com/hphtml/?thread-7346.html

      软件测试好书下载和推荐:

      http://www.51testing.com/recommend.htm

      英文测试网站:

      http://www.softwareqatest.com/

      http://www.testingcraft.com/

      http://www.qacity.com/

    测试网站

    1, www.51testing.com   
       估计是国内比较出名的了

    2,http://www.testage.net/      
       测试时代

    3,http://www.sawin.cn/SawinPilot/saSubTech.asp?SubClass=Test

    4,http://www.io.com/~wazmo/qa/  
       列出了一些与软件测试相关的网站和文章--外国网

    5,http://www.mtsu.edu/~storm/
       外国网

    6,www.qaforums.com
       提供软件测试,自动化测试,测试管理,测试工具等主题的即时讨论--外国论坛--这个不错

    7,http://www.faqs.org/faqs/software-eng/testing-faq/
       即时讨论-外国网

    书库
    http://book.httpcn.com/
    http://www.manyi100.com/
    http://www.netyi.net/

  • TCP IP

    2007-09-26 17:42:19

    这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础。TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。
    TCP/IP整体构架概述

    TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:

    应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。

    传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。

    互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。

    网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。

    TCP/IP中的协议

    以下简单介绍TCP/IP中的协议都具备什么样的功能,都是如何工作的:
    网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。

    IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。
    高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好象是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。

    TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。

    面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。


    UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网落时间协议)和DNS(DNS也使用TCP)。欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。

    4.ICMP

    ICMP与IP位于同一层,它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。

    TCP和UDP的端口结构

    TCP和UDP服务通常有一个客户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。

    两个系统间的多重Telnet连接是如何相互确认并协调一致呢?TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:
    源IP地址 发送包的IP地址。
    目的IP地址 接收包的IP地址。
    源端口 源系统上的连接的端口。
    目的端口 目的系统上的连接的端口。
    端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25、Xwindows使用6000。这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯。

  • 有点担心未来

    2007-09-26 11:24:36

    最近总是担心自己的未来,想,就这样一直下去吗?在一个私人企业,目前状况也不受什么重视,在这企业呆两三年了,一直都是这样,估计以后也没什么大发展。想想以后,真不知道做什么?现在找一个工作这么难,更别提进事业单位了,真是前途渺茫
  • 最近有点懒散

    2007-09-26 09:00:09

    最近生活有点懒散,书也不爱看了,什么都不想,有点混沌。这种状态一点都不好,非常不好,有时候半夜醒了就睡不着。看来这人还得生活充实才能睡个好觉

    晚上不能看电视了、看碟了,要多学学专业技术、学学english。。。。。。要学的东西太多了

  • 读《计算机测试技术》--黑盒测试-总结一

    2007-09-26 08:57:25

    看了黑盒测试的方法--等价类划分总结

    等价类划分,什么是等价类,就是测试软件的效果是等价的集合。凡是在这个集合中的数据,对于测试软件的结果是相同的。所以说,等价类划分关键就是把类别划分好。等价类划分分为有效等价类和无效等价类。

    有效等价类是软件的正常的输入数据

    无效等价类即能够让软件产品产生错误的数据。

     

  • erp功能测试(转)

    2007-09-19 16:06:30

    ERP功能测试最佳实践:10个步骤确保ERP系统的可靠性
    文章出处:Mercury 作者: 发布时间:2006-06-01

     

    介绍

    企业资源规划(ERP)软件应用为企业提供管理大规模关键业务功能的能力,包括产品规划、部件采购、库存维护、和供应商的互动交流、提供客户服务,以及订单跟踪等。有些ERP解决方案还可能包括一些财政和人力资源方面的应用模块。尽管这些应用通常不会直接生成效益,但是它们能让企业以一种有效的、切合实际的方式使用现有的客户数据,帮助合理化企业的业务活动,为企业新的和当前的客户提供高质量的服务。

     

    ERP应用通常使用一个单一的、中央数据存储器来服务于所有的模块。因此,当这些应用产生了性能问题时,很有可能影响到使用同一存储器的所有业务领域。ERP和共享数据结构间的这种关系决定了它必须实施稳固的测试和监测程序才能确保企业关键应用的健康运行。 

     

     

    目录

    介绍

    步骤1:初始规划和收集需求

    步骤2:定义测试目标和选择合适的测试

    步骤3:定义目的,以满足测试目标

    步骤4:发现功能测试案例

    步骤5:文档记录关键的业务流程

    步骤6:开发模块化的测试组件

    步骤7:建立测试实验室

    步骤8:掌握和利用“冒烟测试”

    步骤9:执行回归测试

    步骤10:分析缺陷和创建测试报告

    Mercury QuickTest Professional

    ERP应用的功能测试

    更多信息

     

     

    由于业务流程交易跨越企业中的多个部门和区域,并且涉及ERP应用本身的多个模块,因此测试ERP应用应该采用一种整体的方式。当验证这些业务流程的功能时,关键在于捕获自动化测试解决方案中的业务流程测试,用于实现快速的测试重复。由于ERP应用跨越多个业务领域,存在不可避免的复杂性,因此,对每个ERP应用以及每个应用发布版本展开功能测试是非常重要的。

     

    每个ERP实施中都会面临的主要挑战之一就是确保应用在上线之前能满足所有的业务需求。关键在于测试和验证这些应用的运作情况是否符合设计要求。在数千个客户实施基础上,美科利已经编纂了一套最佳实践,来确保关键业务应用的功能。在下文中将详细描述10个关键步骤,使用这些步骤能为企业的关键ERP应用来设计和实施有效的功能测试程序。

     

    步骤1:初始规划和收集需求

    在任何一个环境中,功能测试的最重要阶段之一就是规划。对于ERP应用来说,这个步骤就更为重要了,因为其中涉及环境的复杂性以及推动这些应用实施的错综复杂的业务需求。不完善的规划可能导致失望的结果和不完整的测试覆盖面。经过深思熟虑的规划使您能避免一种“垃圾进,垃圾出(garbage in, garbage out)”的局面,使企业能衡量和最大化他们的测试工作,获取更多的投资回报(ROI)。

     

    许多公司购买预先打包的ERP解决方案,希望能实现业务管理各个领域的快速整合。然而,这种被称之为“vanilla”的ERP打包方案必须经过客户定制,才能部署到它所要支持的业务中去。从逻辑上来说,收集需求是规划阶段的起点,因为开发人员通常根据需求来定制ERP应用;测试人员使用它来测试系统和客户定制项目;而最终用户使用它进行用户接受测试和终结测试。通过提前仔细地定义需求,测试人员可以规划和管理那些更加注重业务需要的测试。接着,需求可以同测试和实际测试结果(被识别的缺陷)相结合,以全面覆盖所有的功能测试。

     

    步骤2:定义测试目的和选择合适的测试

    测试人员通过创建主要的测试目的,将决定所需的特定测试类型。 测试目的、项目计划和团队结构也将从这些测试目标中形成。当功能测试一个ERP实施时,有多种不同的验证测试需要执行:

     

    l          数据映射:由于许多ERP实施和后端大机系统紧密地集成在一起,因此测试ERP应用所显示的数据和在大机系统中被发现的数据之间的数据映射是十分关键的。很可能在大机系统中隐藏着一些陈旧的或无效的数据,这些数据会引起应用当中的问题。

    l          业务流程测试:应该使用测试来验证各种业务流程是否正确运作。由于工作流对强化业务规则来说是非常重要的,因此测试应该覆盖整个整合系统中的所有导航项目和直接功能。应用的业务规则和启动项必须通过全面地测试,确保所有规则能被正确地执行。

    l          权限控制系统ERP权限控制系统决定了用户可以使用哪些信息,用户在这些信息中可以看到哪些数据。当涉及到供应链和合作伙伴入口时,将会增加安全方面的考虑。从用户界面的角度出发测试安全性可以确保严格执行验证规则。数据驱动的测试使IT人员能使用具有不同登录凭证的相同脚本去验证安全规则。

    l          回归测试:每次部署一个“Code Drop”时,对位于这些程序的每个对象的功能进行回归测试是非常重要的。这其中包括测试它的存在、功能、值等等。“code drop”指的是任何一次新的ERP应用、补丁程序和/hot fix的发布。

     

    步骤3:定义目标,以满足测试目的

    当完成所有的目的定义,选择好测试类型,接下去就要创建一系列的阶段目标来实现所定义的目的。一套最普通的初始阶段目标包括:

    l          分析应用功能,并识别关键业务流程。在一个ERP应用中的关键业务流程实例就是“服务请求”的创建。

    l          建立“冒烟测试”,在开发周期中快速执行该类测试。冒烟测试不应深入被测试应用的功能,而是应该测试关键的业务功能。例如,用户是否能够创建可以和“Trouble Ticket”相应的活动。

    l          在每次正式发布形成后运行冒烟测试。

    l          着手创建自动化测试来降低手动运行冒烟测试的成本。

     

    实现了这些初始阶段目标之后,应该建立一套后续阶段目标。

    l          分析应用,展开功能识别,这将扩大测试范围,涵盖超过75%的总的应用功能数量。(取得100%的脚本自动化测试是非常困难的,因为自动化测试工具无法进行如可用性测试这样的事宜。)

    l          建立可持续运作的自动化测试,从而降低测试的工作量。

     

    步骤4:区分功能测试案例

    在区分测试案例时,关键要记住,重要的业务功能必须在应用中才能发挥作用。由于每个企业具有独特的业务需求,大多数企业即使完成了基本的或标准的实施,也无法上线。因为那些客户定制的区域必须经过彻底地测试才能保证上线时功能的稳定。ERP应用的主要优势之一就是能和现有的大机系统集成,来满足必要的业务需求。再者,因为这些集成不是标准(非客户定制)实施,它们必须经过严格地测试。

     

    最初,要避免用各种不同的方法去测试相同的功能。开发团队经常会强调一个应用应具有完美架构,可以灵活地让用户通过不同的方式来完成他们的日常任务。关键在于要经常部署测试案例,确保需求驱动、user-path的覆盖面。初期测试应该具有一些共有的特性:

     

    l          它们应该测试关键的业务功能。

    l          它们应该测试应用的关键业务流程。

    l          它们应该识别出经客户定制过的ERP应用的测试区域。

    l          应用功能应该稳定,不在主要开发范围之内。

    l          初期测试应该是冒烟测试的候选方式。

     

    一旦初期自动化测试创建完成,并成功地运行后,测试目标通常会改变,测试包会扩张。这种扩张通常表现为在功能成熟之后,增加更多的测试到测试包中。还可以在应用问题区域,如和大机系统的界面中增加测试,从而对该区域展开持续地检查。

     

    步骤5:文档记录关键的业务流程

    当记录那些将要成为测试脚本的业务流程时,收集所有和测试案例相关的信息是非常重要的。每个测试案例需要具备一份和被测业务区域相关的目的说明。测试案例的目的应该是和满足一个需求或一系列需求有关。关键之处还在于,要文档记录下逻辑步骤,在整个系统中执行这些步骤可以实现测试的需求。由于使用测试案例可以衡量业务流程的成功与否,因此,文档中应该指出,需要验证哪些内容才能保证测试的成功。

     

    除了为测试案例而展开的执行和验证操作外,还需要在测试案例中成功地执行适用的数据值。这种数据可以是来自数据库的主数据(master data)、或是能够凭空增加的用户创建输入数据、或者在脚本创建之前被置入数据库的准备数据。

     

    步骤6:开发模块化的测试组件

    创建模块化测试脚本是非常重要的。测试的模块化能够使开发人员创建单元测试(unit test),在整个系统完成之前,测试ERP应用模块和模块的定制项目。接着,被用于单元测试的模块测试会移交给QA测试人员,他们会将模块测试和测试包结合在一起,来满足特定的测试目标。美科利提供一款最新的功能测试解决方案(即“业务流程测试”),它能帮助企业管理与业务组件和端到端流程验证有关的所有测试案例。

     

    步骤7:建立测试实验室

    建议建立一个QA测试实验室,作为ERP应用的测试和调优整体战略的一个组成部分。在一个独立的测试实验室中运行测试的主要优势在于,机器配置可以达到一种理想的状态,因而减少了由于机器配置不完善而引起的各类问题。此外,当模块定制完成之后,开发人员和测试人员可以在新代码发布之前,使用该实验室来运行单元测试。

     

    步骤8:掌握和利用“冒烟测试”

    在大多数ERP应用中,不完善的发布浪费了大量的测试工作。通常,当开发团队完成一个发布版本后将移交给测试团队,接着展开为期数天的测试过程。而测试结果往往是软件的发布版本存在重大的和根本的问题,不值得再进行深入地测试。不幸地是,当开发人员着手为该发布版本增加新的功能时,测试团队已经浪费了几天的时间去发现其薄弱之处。

     

    改变这种情况的捷径就是建立一种“冒烟测试”,它可以覆盖关键的业务功能。冒烟测试结合了手动测试和自动化测试,可以在短时间内被创建和运行(通常在1个小时之内)。运行冒烟测试可以为开发团队提供发布版本质量方面的快速信息反馈,帮助他们集中力量解决严重阻滞的问题,而不是一些新的特性。冒烟测试所利用的脚本可以从开发人员已经创建的单元测试中获取。

     

    步骤9:执行回归测试

    回归测试包应该覆盖关键的业务流程,应该在每个新的ERP应用版本发布时运行。回归测试不同于冒烟测试注重测试核心的业务功能,它能更加深入地测试应用的功能。正如前文所提到的,由供应商和任何定制所带来的应用更新都可能对应用功能和性能产生负面影响,必须在每次发布版本之后进行测试。

     

    步骤10:分析缺陷和创建测试报告

    ERP应用准备就绪的重要指标之一就是被识别的系统缺陷数量。在执行测试时,测试中产生的失误必须被跟踪和分析。一种稳固的功能测试解决方案应该能跟踪和汇报所有存在于业务流程中的缺陷。测试团队可以利用这类信息来衡量和管理缺陷是如何被优先级划分、修复、重复测试和关闭的。

     

    用全面的报告来完整记录所有的测试流程和结果,这也是非常重要的一项工作,可以使测试团队能正确分析测试结果,同时在未来测试中重复使用测试案例和脚本。

     

    美科利QuickTest Professional

    Mercury QuickTest Professional™提供功能和回归测试自动化方面的业界最佳解决方案――可覆盖每个主要的软件应用和环境,包括来自OraclePeopleSoftSAPSiebleERP应用。这种新款的自动化测试解决方案采用一种关键词驱动测试的理念,能够完全简化测试的创建和维护。有了美科利QuickTest Professional的关键词驱动方式,测试自动化专家就能通过一种和关键词视图(Keyword View)相互同步的、集成的脚本和纠错环境,进入到基层测试和目标领域中去。

     

    美科利QuickTest Professional同时满足了技术和非技术用户的需要。它使高质量应用部署的过程变得更为快捷和经济,同时风险也更小。它和Mercury Business Process Testing™(美科利业务流程测试)协同工作,使非技术型的对象专家(subject matter expert)也能参与到质量流程中。

     

    美科利业务流程测试使对象专家无需任何编程知识,就能创建、数据驱动和执行测试自动化。它降低了自动化测试维护的经常性费用,将测试自动化和文档记录两个流程合并为一。它使对象专家和业务分析人员可以根据业务流程测试框架中所定义的业务概念来衡量应用实施的质量。

     

    ERP应用的功能测试

    通过使用美科利QuickTest Professional和美科利业务流程测试,QA团队可以开发和利用统一的、可重复的测试流程,更快、更经济和更便捷地对ERP应用就绪情况提前作出决策。当初期功能测试计划完成之后,测试团队可以使用美科利解决方案来自动验证ERP应用中所有业务交易的完整性。美科利解决方案从业务流程的角度出发,展开ERP应用测试。这些解决方案通过执行分步操作――如更新库存信息,或从供应商处定购某部分商品,就像在实际生产操作中一样来测试ERP应用。

     

    当在测试创建阶段捕获了业务流程后,美科利QuickTest Professional和美科利业务流程测试将ERP业务相关信息与输入数据相互分离。测试人员可以根据选择列表,改变选择项和数据条目。使用同一数据对应用展开反复测试通常不会取得实际结果。要真实地验证应用的功能,测试人员需要不同的数据包来模拟多个用户的实际操作行为。美科利产品允许用户直接输入测试数据,或从一个数据库中导入数据,从而创建一个实际的、数据驱动的测试方案。通过这种方式,测试人员就能使用可变的输入数据,分析实际的ERP业务流程。

     

    打包的ERP应用通常具有很高的复杂性。创建一个简单的记录定制可能会对其它记录或整体性能产生无法预料的影响。当更新发布(甚至是简单的定制更新),都需要对所有业务流程展开全面彻底地测试,而不仅仅是测试变更所发生的区域。这样,测试人员就能衡量更新会对应用产生的影响,确保不会引起缺陷的产生。

  • erp测试

    2007-09-19 15:39:20

    测试这么长时间的erp了,总感觉应该写点什么。

    测试erp,最重要的是要精通业务,这样业务逻辑组合才能灵活。而且要熟知数据库设计,各个业务间的回填关系,有些时候数据的不准确性单单从界面上是看不出来的,只有从数据库中查看能够一清二楚。所以数据库还是要了解一些的。

    erp测试应该从以下几个方面考虑

    1 首先保证单个功能的实现

    2 保证本功能的数据准确

    3 单个功能的流程能够走通,erp主要是对业务流的管理,所以流程是最基本的

    4 单个功能都没什么问题后,需要查看相关业务间的紧密关系,功能的影响、数据的影响

    5 统计数据是否准确,尤其是比较大的综合查询

    以上几方面都是从大的框架上去测试,细小的测试还很多,尤其是一些业务组合测试,要考虑全面,否则就会漏掉一块,后果很严重!!!!

  • 用友面试

    2007-09-19 15:27:00

    用友通知面试了,我最后考虑还是不去了,不知道是个正确的还是错误的选择。任何事情都是有利有弊阿
  • 面试试题(转)

    2007-09-03 09:47:27

    面试题目:
    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.        请问我什么时候能知道结果?

  • 统一建模语言(转)

    2007-08-29 17:27:12

     Unified Modeling Language (UML)又称统一建模语言标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。

          面向对象的分析与设计(OOA&D)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物。它不仅统一了Booch、Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模语言。 

      
    一. 标准建模语言UML的出现   


          公认的面向对象建模语言出现于70年代中期。从1989年到1994年,其数量从不到十种增加到了五十多种。在众多的建模语言中,语言的创造者努力推崇自己的产品,并在实践中不断完善。但是,OO方法的用户并不了解不同建模语言的优缺点及相互之间的差异,因而很难根据应用特点选择合适的建模语言,于是爆发了一场“方法大战”。90年代中,一批新方法出现了,其中最引人注目的是Booch 1993、OOSE和OMT-2等。  
      
          Booch是面向对象方法最早的倡导者之一,他提出了面向对象软件工程的概念。1991年,他将以前面向Ada的工作扩展到整个面向对象设计领域。Booch 1993比较适合于系统的设计和构造。  
      
          Rumbaugh等人提出了面向对象的建模技术(OMT)方法,采用了面向对象的概念,并引入各种独立于语言的表示符。这种方法用对象模型、动态模型、功能模型和用例模型,共同完成对整个系统的建模,所定义的概念和符号可用于软件开发的分析、设计和实现的全过程,软件开发人员不必在开发过程的不同阶段进行概念和符号的转换。OMT-2特别适用于分析和描述以数据为中心的信息系统。  
       
          Jacobson于1994年提出了OOSE方法,其最大特点是面向用例(Use-Case),并在用例的描述中引入了外部角色的概念。用例的概念是精确描述需求的重要武器,但用例贯穿于整个开发过程,包括对系统的测试和验证。OOSE比较适合支持商业工程和需求分析。  
      
          此外,还有Coad/Yourdon方法,即著名的OOA/OOD,它是最早的面向对象的分析和设计方法之一。该方法简单、易学,适合于面向对象技术的初学者使用,但由于该方法在处理能力方面的局限,目前已很少使用。  
     
          概括起来,首先,面对众多的建模语言,用户由于没有能力区别不同语言之间的差别,因此很难找到一种比较适合其应用特点的语言;其次,众多的建模语言实际上各有千秋;第三,虽然不同的建模语言大多同,但仍存在某些细微的差别,极大地妨碍了用户之间的交流。因此在客观上,极有必要在精心比较不同的建模语言优缺点及总结面向对象技术应用实践的基础上,组织联合设计小组,根据应用需求,取其精华,去其糟粕,求同存异,统一建模语言。  
      
           1994年10月,Grady Booch和Jim Rumbaugh开始致力于这一工作。他们首先将Booch 93和OMT-2 统一起来,并于1995年10月发布了第一个公开版本,称之为统一方法UM 0.8(Unitied Method)。1995年秋,OOSE 的创始人Ivar Jacobson加盟到这一工作。经过Booch、Rumbaugh和Jacobson三人的共同努力,于1996年6月和10月分别发布了两个新的版本,即UML 0.9和UML 0.91,并将UM重新命名为UML(Unified Modeling Language)。  
      
           1996年,一些机构将UML作为其商业策略已日趋明显。UML的开发者得到了来自公众的正面反应,并倡议成立了UML成员协会,以完善、加强和促进UML的定义工作。当时的成员有DEC、HP、I-Logix、 Itellicorp、 IBM、ICON Computing、MCI Systemhouse、Microsoft、OracleRational Software、TI以及Unisys。这一机构对UML 1.0(1997年1月)及UML 1.1(1997年11月17日)的定义和发布起了重要的促进作用。  
      
          UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它溶入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。  
       
          面向对象技术和UML的发展过程可用上图来表示,标准建模语言的出现是其重要成果。在美国,截止1996年10月,UML获得了工业界、科技界和应用界的广泛支持,已有700多个公司表示支持采用UML作为建模语言。1996年底,UML已稳占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准。1997年11月17日,OMG采纳UML 1.1作为基于面向对象技术的标准建模语言。UML代表了面向对象方法的软件开发技术的发展方向,具有巨大的市场前景,也具有重大的经济价值和国防价值。  
     
    二. 标准建模语言UML的内容  


          首先,UML融合了Booch、OMT和OOSE方法中的基本概念,而且这些基本概念与其他面向对象技术中的基本概念大多相同,因而,UML必然成为这些方法以及其他方法的使用者乐于采用的一种简单一致的建模语言;其次,UML不仅仅是上述方法的简单汇合,而是在这些方法的基础上广泛征求意见,集众家之长,几经修改而完成的,UML扩展了现有方法的应用范围;第三,UML是标准的建模语言,而不是标准的开发过程。尽管UML的应用必然以系统的开发过程为背景,但由于不同的组织和不同的应用领域,需要采取不同的开发过程。  
      
          作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分。  
      
          (1) UML语义 描述基于UML的精确元模型定义。元模型为UML的所有元素在语法和语义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人而异的最佳表达方法所造成的影响。此外UML还支持对元模型的扩展定义。  
      
          (2) UML表示法 定义UML符号的表示法,为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。  
      
          标准建模语言UML的重要内容可以由下列五类图(共9种图形)来定义:  
      
          ?第一类是用例图,从用户角度描述系统功能,并指出各功能的操作者。  
      
          ?第二类是静态图 (Static diagram),包括类图、对象图包图。其中类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(类的属性和操作)。类图描述的是一种静态关系,在系统的整个生命周期都是有效的。  
      
          对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。  
      
          包由包或类组成,表示包与包之间的关系。包图用于描述系统的分层结构。  
      
          ?第三类是行为图(behavīor diagram),描述系统的动态模型和组成对象间的交互关系。其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件。通常,状态图是对类图的补充。在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图。  
          而活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。  
      
          ?第四类是交互图(Interactive diagram),描述对象间的交互关系。其中顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;合作图描述对象间的协作关系,合作图跟顺序图相似,显示对象间的动态合作关系。除显示信息交换外,合作图还显示对象以及它们之间的关系。如果强调时间和顺序,则使用顺序图;如果强调上下级关系,则选择合作图。这两种图合称为交互图。  
      
          ?第五类是实现图 ( Implementation diagram )。其中构件图描述代码部件的物理结构及各部件之间的依赖关系。一个部件可能是一个资源代码部件、一个二进制部件或一个可执行部件。它包含逻辑类或实现类的有关信息。部件图有助于分析和理解部件之间的相互影响程度。  
      
          配置图定义系统中软硬件的物理体系结构。它可以显示实际的计算机和设备(用节点表示)以及它们之间的连接关系,也可显示连接的类型及部件之间的依赖性。在节点内部,放置可执行部件和对象以显示节点跟可执行软件单元的对应关系。  
      
          从应用的角度看,当采用面向对象技术设计系统时,首先是描述需求;其次根据需求建立系统的静态模型,以构造系统的结构;第三步是描述系统的行为。其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图(包含包)、对象图、组件图和配置图等五个图形,是标准建模语言UML的静态建模机制。其中第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、顺序图和合作图等四个图形,是标准建模语言UML的动态建模机制。因此,标准建模语言UML的主要内容也可以归纳为静态建模机制和动态建模机制两大类。 


     UML的组成

    三. 标准建模语言UML的主要特点  


          标准建模语言UML的主要特点可以归结为三点:  
          (1) UML统一了Booch、OMT和OOSE等方法中的基本概念。  
      
          (2) UML还吸取了面向对象技术领域中其他流派的长处,其中也包括非OO方法的影响。UML符号表示考虑了各种方法的图形表示,删掉了大量易引起混乱的、多余的和极少使用的符号,也添加了一些新符号。因此,在UML中汇入了面向对象领域中很多人的思想。这些思想并不是UML的开发者们发明的,而是开发者们依据最优秀的OO方法和丰富的计算机科学实践经验综合提炼而成的。  
      
          (3)UML在演变过程中还提出了一些新的概念。在UML标准中新加了模板(Stereotypes)、职责(Responsibilities)、扩展机制(Extensibility mechanisms)、线程(Threads)、过程(Processes)、分布式(Distribution)、并发(Concurrency)、模式(Patterns)、合作(Collaborations)、活动图(Activity diagram)等新概念,并清晰地区分类型(Type)、类(Class)和实例(Instance)、细化(Refinement)、接口(Interfaces)和组件(Components)等概念。  
    因此可以认为,UML是一种先进实用的标准建模语言,但其中某些概念尚待实践来验证,UML也必然存在一个进化过程。 
      
    四. 标准建模语言UML的应用领域  


          UML的目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应用领域。其中最常用的是建立软件系统的模型,但它同样可以用于描述非软件领域的系统,如机械系统、企业机构或业务过程,以及处理复杂数据的信息系统、具有实时要求的工业系统或工业过程等。总之,UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模。  
      
          此外,UML适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段。在需求分析阶段,可以用用例来捕获用户需求。通过用例建模,描述对系统感兴趣的外部角色及其对系统(用例)的功能要求。分析阶段主要关心问题域中的主要概念(如抽象、类和对象等)和机制,需要识别这些类以及它们相互间的关系,并用UML类图来描述。为实现用例,类之间需要协作,这可以用UML动态模型来描述。在分析阶段,只对问题域的对象(现实世界的概念)建模,而不考虑定义软件系统中技术细节的类(如处理用户接口、数据库、通讯和并行性等问题的类)。这些技术细节将在设计阶段引入,因此设计阶段为构造阶段提供更详细的规格说明。  
       
          编程(构造)是一个独立的阶段,其任务是用面向对象编程语言将来自设计阶段的类转换成实际的代码。在用UML建立分析和设计模型时,应尽量避免考虑把模型转换成某种特定的编程语言。因为在早期阶段,模型仅仅是理解和分析系统结构的工具,过早考虑编码问题十分不利于建立简单正确的模型。  
          UML模型还可作为测试阶段的依据。系统通常需要经过单元测试集成测试系统测试验收测试。不同的测试小组使用不同的UML图作为测试依据:单元测试使用类图和类规格说明;集成测试使用部件图和合作图;系统测试使用用例图来验证系统的行为;验收测试由用户进行,以验证系统测试的结果是否满足在分析阶段确定的需求。  
      
          总之,标准建模语言UML适用于以面向对象技术来描述任何类型的系统,而且适用于系统开发的不同阶段,从需求规格描述直至系统完成后的测试和维护。

    五、标准建模语言UML的静态建模机制

    任何建模语言都以静态建模机制为基础,标准建模语言UML也不例外。

    UML的静态建模 机制包括用例图(Use case diagram)、类图(Class diagram)、对象图(Object diagram )、包(Package)、构件图(Component diagram)和配置图(Deployment diagram)。

    1. 用例图

    (1) 用例模型(Use case model) 长期以来,在面向对象开发和传统的软件开发中,人们根据典型的使用情景来了解需 求。

    但是,这些使用情景是非正式的,虽然经常使用,却难以建立正式文挡。用例模型由I var Jacobson在开发AXE系统中首先使用,并加入由他所倡导的OOSE和Objectory方法中。

    用例方法引起了面向对象领域的极大关注。自1994年Ivar Jacobson的著作出版后,面向 对象领域已广泛接纳了用例这一概念,并认为它是第二代面向对象技术的标志。

    用例模型描述的是外部执行者(Actor)所理解的系统功能。用例模型用于需求分析阶 段,它的建立是系统开发者和用户反复讨论的结果,表明了开发者和用户对需求规格达成 的共识。

    首先,它描述了待开发系统的功能需求;

    其次,它将系统看作黑盒,从外部执行者 的角度来理解系统;

    第三,它驱动了需求分析之后各阶段的开发工作,不仅在开发过程中保 证了系统所有功能的实现,而且被用于验证和检测所开发的系统,从而影响到开发工作的 各个阶段和 UML 的各个模型。

    在UML中,一个用例模型由若干个用例图描述,用例图主要 元素是用例和执行者。

    (2) 用例(use case) 从本质上讲,一个用例是用户与计算机之间的一次典型交互作用。

    以字处理软件为例 ,"将某些正文置为黑体"和"创建一个索引"便是两个典型的用例。在UML中,用例被定义成 系统执行的一系列动作,动作执行的结果能被指定执行者察觉到。        

    在UML中,用例表示为一个椭圆。

    图1显示了一个金融贸易系统的用例图。其中,"风险 分析","交易估价","进行交易","设置边界","超越边界的交易","评价贸易","更新帐目 "等都是用例的实例。

    概括地说,用例有以下特点:

    ·用例捕获某些用户可见的需求,实现一个具体的用户目标。

    ·用例由执行者激活,并提供确切的值给执行者。

    ·用例可大可小,但它必须是对一个具体的用户目标实现的完整描述。

    (3) 执行者(Actor) 执行者是指用户在系统中所扮演的角色。其图形化的表示是一个小人。

    图1中有四个 执行者:贸易经理、营销人员、售货员和记帐系统。在某些组织中很可能有许多营销人员 ,但就该系统而言,他们均起着同一种作用,扮演着相同的角色,所以用一个执行者表示。

    一个用户也可以扮演多种角色(执行者)。例如,一个高级营销人员既可以是贸易经理,也 可以是普通的营销人员;一个营销人员也可以是售货员。在处理执行者时,应考虑其作用 ,而不是人或工作名称,这一点是很重要的。

    图1中,不带箭头的线段将执行者与用例连接到一起,表示两者之间交换信息,称之为 通信联系。执行者触发用例,并与用例进行信息交换。单个执行者可与多个用例联系;反 过来,一个用例可与多个执行者联系。对同一个用例而言,不同执行者有着不同的作用:他 们可以从用例中取值,也可以参与到用例中。

    需要注意的是,尽管执行者在用例图中是用类似人的图形来表示的,但执行者未必是 人。例如,执行者也可以是一个外界系统,该外界系统可能需要从当前系统中获取信息,与 当前系统有进行交互。在图1中,我们可以看到,记帐系统是一个外界系统,它需要更新帐 目。

    通过实践,我们发现执行者对提供用例是非常有用的。面对一个大系统,要列出用例 清单常常是十分困难。这时可先列出执行者清单,再对每个执行者列出它的用例,问题就 会变得容易很多。

    (4) 使用和扩展(Use and Extend) 图1中除了包含执行者与用例之间的连接外,还有另外两种类型的连接,用以表示用例 之间的使用和扩展关系。使用和扩展是两种不同形式的继承关系。 当一个用例与另一个用例相似,但所做的动作多一些,就可以用到扩展关系。

    例如图 1中,基本的用例是"进行交易"。 交易中可能一切都进行得很顺利,但也可能存在扰乱顺 利进行交易的因素。

    其中之一便是超出某些边界值的情况。例如,贸易组织会对某个特定 客户规定最大贸易量,这时不能执行给定用例提供的常规动作,而要做些改动。我们可在 "进行交易"用例中做改动。但是,这将把该用例与一大堆特殊的判断和逻辑混杂在一起, 使正常的流程晦涩不堪。

    图1中将常规的动作放在"进行交易"用例中,而将非常规的动作 放置于"超越边界的交易" 用例中,这便是扩展关系的实质。 当有一大块相似的动作存在于几个用例,又不想重复描述该动作时,就可以用到使用 关系。

    例如,现实中风险分析和交易估价都需要评价贸易,为此可单独定义一个用例,即" 评价贸易",而"风险分析"和"交易估价"用例将使用它。 请注意扩展与使用之间的相似点和不同点。它们两个都意味着从几个用例中抽取那 些公共的行为并放入一个单独用例中,而这个用例被其他几个用例使用或扩展。

    但使用和 扩展的目的是不同的。

    (5) 用例模型的获取 几乎在任何情况下都会使用用例。用例用来获取需求,规划和控制项目。

    用例的获取 是需求分析阶段的主要任务之一,而且是首先要做的工作。大部分用例将在项目的需求分 析阶段产生,并且随着工作的深入会发现更多的用例,这些都应及时增添到已有的用例集 中。

    用例集中的每个用例都是一个潜在的需求。

    a. 获取执行者 获取用例首先要找出系统的执行者。可以通过用户回答一些问题的答案来识别执行 者。

    以下问题可供参考:

    ·谁使用系统的主要功能(主要使用者)。

    ·谁需要系统支持他们的日常工作。

    ·谁来维护、管理使系统正常工作(辅助使用者)。

    ·系统需要操纵哪些硬件。

    ·系统需要与哪些其它系统交互,包含其它计算机系统和其它应用程序

    ·对系统产生的结果感兴趣的人或事物。

    b. 获取用例 一旦获取了执行者,就可以对每个执行者提出问题以获取用例。以下问题可供参考:

    ·执行者要求系统提供哪些功能(执行者需要做什么)?

    ·执行者需要读、产生、删除、修改或存储的信息有哪些类型。

    ·必须提醒执行者的系统事件有哪些?或者执行者必须提醒系统的事件有哪些?怎样 把这些事件表示成用例中的功能?

    ·为了完整地描述用例,还需要知道执行者的某些典型功能能否被系统自动实现? 还有一些不针对具体执行者问题(即针对整个系统的问题):

    ·系统需要何种输入输出?输入从何处来?输出到何处?

    ·当前运行系统(也许是一些手工操作而不是计算机系统)的主要问题?

    需要注意,最后两个问题并不是指没有执行者也可以有用例,只是获取用例时尚不知 道执行者是什么。

    一个用例必须至少与一个执行者关联。还需要注意:不同的设计者对用 例的利用程度也不同。例如,Ivar Jacobson说,对一个十人年的项目,他需要二十个用例 。

    而在一个相同规模的项目中,Martin Fowler则用了一百多个用例。我们认为:任何合适 的用例都可使用,确定用例的过程是对获取的用例进行提炼和归纳的过程,对一个十人年 的项目来说,二十个用例似乎太少,一百多个用例则嫌太多,需要保持二者间的相对均衡。

    2. 类图、对象图和包 数千年以前,人类就已经开始采用分类的方法有效地简化复杂问题,帮助人们了解客 观世界。

    在面向对象建模技术中,我们使用同样的方法将客观世界的实体映射为对象,并 归纳成一个个类。类(Class)、对象(Object)和它们之间的关联是面向对象技术中最基本 的元素。

    对于一个想要描述的系统,其类模型和对象模型揭示了系统的结构。在UML中,类 和对象模型分别由类图和对象图表示。

    类图技术是OO方法的核心。图1显示了一个金融保 险系统的类图。

    (1) 类图 类图(Class Diagram)描述类和类之间的静态关系。与数据模型不同,它不仅显示了 信息的结构,同时还描述了系统的行为。类图是定义其它图的基础。

    在类图的基础上,状 态图、合作图等进一步描述了系统其他方面的特性。

    (2) 类和对象 对象(Object)与我们对客观世界的理解相关。我们通常用对象描述客观世界中某个 具体的实体。

    所谓类(Class)是对一类具有相同特征的对象的描述。而对象是类的实例( Instance)。建立类模型时,我们应尽量与应用领域的概念保持一致,以使模型更符合客观 事实,易修改、易理解和易交流。

    类描述一类对象的属性(Attribute)和行为(behavīor)。在UML中,类的可视化表示为 一个划分成三个格子的长方形(下面两个格子可省略)。

    图1中,"客户"就是一个典型的类 。 类的获取和命名 最顶部的格子包含类的名字。

    类的命名应尽量用应用领域中的术 语,应明确、无歧义,以利于开发人员与用户之间的相互理解和交流。

    类的获取是一个依 赖于人的创造力的过程,必须与领域专家合作,对研究领域仔细地分析,抽象出领域中的概 念,定义其含义及相互关系,分析出系统类,并用领域中的术语为类命名。一般而言,类的 名字是名词。 类的属性 中间的格子包含类的属性,用以描述该类对象的共同特点。

    该项可省略。

    图1中"客户"类有"客户名"、"地址"等特性。属性的选取应考虑以下因素: *原则上来说,类的属性应能描述并区分每个特定的对象;

    *只有系统感兴趣的特征才包含在类的属性中; *系统建模的目的也会影响到属性的选取。 根据图的详细程度,每条属性可以包括属性的可见性、属性名称、类型、缺省值和约 束特性。

    UML规定类的属性的语法为: 可见性 属性名 : 类型 = 缺省值 {约束特性} 图1"客户"类中,"客户名"属性描述为"- 客户名 : 字符串 = 缺省客户名"。

    可见性 "-"表示它是私有数据成员,其属性名为"客户名",类型为"字符串"类型,缺省值为"缺省客 户名",此处没有约束特性。

    不同属性具有不同可见性。常用的可见性有Public、Private和Protected三种,在U ML中分别表示为"+"、"-"和"#"。

    类型表示该属性的种类。它可以是基本数据类型,例如整数、实数、布尔型等,也可 以是用户自定义的类型。一般它由所涉及的程序设计语言确定。

    约束特性则是用户对该属性性质一个约束的说明。例如"{只读}"说明该属性是只读 属性。 类的操作(Operation) 该项可省略。操作用于修改、检索类的属性或执行某些动作 。

    操作通常也被称为功能,但是它们被约束在类的内部,只能作用到该类的对象上。操作 名、返回类型和参数表组成操作界面。

    UML规定操作的语法为: 可见性 操作名 (参数表) : 返回类型 {约束特性} 在图1中,"客户"类中有"取客户地址"操作,其中" +"表示该操作是公有操作,调用时 需要参数"客户名",参数类型为字符串,返回类型也为字符串。 类图描述了类和类之间的静态关系。定义了类之后,就可以定义类之间的各种关系了 。

    (3) 关联关系 关联(Association)表示两个类之间存在某种语义上的联系。例如,一个人为一家公 司工作,一家公司有许多办公室。我们就认为人和公司、公司和办公室之间存在某种语义 上的联系。在分析设计的类图模型中,则在对应人类和公司类、公司类和办公室类之间建 立关联关系。

    在图1中最上部存在一个"属于"/"签定"关联:每个"保险单"属于一个"客户",而"客户 "可以签定多个"保险单"。除了这个关联外,图1中还有另外两个关联,分别表示每个"保险 单"包含若干个"保险单上的项目",而每个"保险单上的项目"涉及单一的"保险类别"。 关联的方向 关联可以有方向,表示该关联单方向被使用。关联上加上箭头表示方向 ,在UML中称为导航(Navigability)。我们将只在一个方向上存在导航表示的关联,称作单 向关联 ( Uni-directional Association ),在两个方向上都有导航表示的关联,称作双 向关联 ( Bi-directional Association )。

    图1中,"保险单"到"保险单上的项目"是单向 关联。UML规定,不带箭头的关联可以意味着未知、未确定或者该关联是双向关联三种选 择,因此,在图中应明确使用其中的一种选择。 关联的命名 既然关联可以是双向的,最复杂的命名方法是每个方向上给出一个名字 ,这样的关联有两个名字,可以用小黑三角表示名字的方向(见图1中最上部的"属于"/"签 定"关联)。为关联命名有几种方法,其原则是该命名是否有助于理解该模型。 角色 关联两头的类以某种角色参与关联。

    例如图2中,"公司"以"雇主"的角色,"人 "以"雇员"的角色参与的"工作合同"关联。"雇主"和"雇员"称为角色名。如果在关联上没 有标出角色名,则隐含地用类的名称作为角色名。角色还具有多重性(Multiplicity),表 示可以有多少个对象参与该关联。在图2中,雇主(公司)可以雇佣(签工作合同)多个雇员 ,表示为"*"; 雇员只能与一家雇主签定工作合同,表示为"1"。

    多重性表示参与对象的数 目的上下界限制。"*"代表0~∞,即一个客户可以没有保险单,也可以有任意多的保险单 。

     

    "1"是1..1的简写,即任何一个保险单仅来自于一个客户,可以用一个单个数字表示,也 可以用范围或者是数字和范围不连续的组合表示。     关联类 一个关联可能要记录一些信息,可以引入一个关联类来记录。

    图3是在图2的 基础上引入了关联类。

    关联类通过一根虚线与关联连接。

    图4是实现上述目标的另外一种 方法,就是使雇用关系成为一个正式的类。                  

    聚集和组成 聚集(Aggregation)是一种特殊形式的关联。聚集表示类之间的关系是 整体与部分的关系。一辆轿车包含四个车轮、一个方向盘、一个发动机和一个底盘,这是 聚集的一个例子。在需求分析中,"包含"、"组成"、"分为……部分"等经常设计成聚集关 系。聚集可以进一步划分成共享聚集(Shared Aggregation)和组成。

    例如,课题组包含许 多成员,但是每个成员又可以是另一个课题组的成员,即部分可以参加多个整体,我们称之 为共享聚集。

    另一种情况是整体拥有各部分,部分与整体共存,如整体不存在了,部分也会 随之消失,这称为组成(Composition)。例如,我们打开一个视窗口,它就由标题、外框和 显示区所组成。一旦消亡则各部分同时消失。在UML中,聚集表示为空心菱形,组成表示为 实心菱形。

    需要注意的是,一些面向对象大师对聚集的定义并不一样。大家应注意其他面向对象 方法与UML中所定义的聚集的差别。

    (4) 继承关系 人们将具有共同特性的元素抽象成类别,并通过增加其内涵而进一步分类。

    例如,动 物可分为飞鸟和走兽,人可分为男人和女人。在面向对象方法中将前者称为一般元素、基 类元素或父元素,将后者称为特殊元素或子元素。继承(Generalization)定义了一般元素 和特殊元素之间的分类关系。在UML中,继承表示为一头为空心三角形的连线。如图1中, 将客户进一步分类成个体客户和团体客户,使用的就是继承关系。 在UML定义中对继承有三个要求:

    *特殊元素应与一般元素完全一致,一般元素所具有的关联、属性和操作,特殊元素也 都隐含性地具有; *特殊元素还应包含额外信息;

    *允许使用一般元素实例的地方,也应能使用特殊元素。

    (5) 依赖关系 有两个元素X、Y,如果修改元素X的定义可能会引起对另一个元素Y的定义的修改,则 称元素Y依赖(Dependency)于元素X。在类中,依赖由各种原因引起,如:一个类向另一个类 发消息;一个类是另一个类的数据成员;一个类是另一个类的某个操作参数。如果一个类 的界面改变,它发出的任何消息可能不再合法。

    (6) 类图的抽象层次和细化(Refinement)关系 需要注意的是,虽然在软件开发的不同阶段都使用类图,但这些类图表示了不同层次 的抽象。在需求分析阶段,类图是研究领域的概念;在设计阶段,类图描述类与类之间的接 口;而在实现阶段,类图描述软件系统中类的实现。按照Steve Cook和John Dianiels的观 点,类图分为三个层次。需要说明的是,这个观点同样也适合于其他任何模型,只是在类图 中显得更为突出。

    概念层 概念层(Conceptual)类图描述应用领域中的概念。实现它们的类可以从这 些概念中得出,但两者并没有直接的映射关系。

    事实上,一个概念模型应独立于实现它的 软件和程序设计语言。 说明层 说明层(Specification)类图描述软件的接口部分,而不是软件的实现部分 。

    面向对象开发方法非常重视区别接口与实现之间的差异,但在实际应用中却常常忽略这 一差异。这主要是因为OO语言中类的概念将接口与实现合在了一起。大多数方法由于受 到语言的影响,也仿效了这一做法。现在这种情况正在发生变化。可以用一个类型(Type )描述一个接口,这个接口可能因为实现环境、运行特性或者用户的不同而具有多种实现 。

    实现层 只有在实现层(Implementation)才真正有类的概念,并且揭示软件的实现部 分。这可能是大多数人最常用的类图,但在很多时候,说明层的类图更易于开发者之间的 相互理解和交流。 理解以上层次对于画类图和读懂类图都是至关重要的。但是由于各层次之间没有一 个清晰的界限,所以大多数建模者在画图时没能对其加以区分。画图时,要从一个清晰的 层次观念出发;而读图时,则要弄清它是根据哪种层次观念来绘制的。要正确地理解类图 ,首先应正确地理解上述三种层次。虽然将类图分成三个层次的观点并不是UML的组成部 分,但是它们对于建模或者评价模型非常有用。

    尽管迄今为止人们似乎更强调实现层类图 ,但这三个层次都可应用于UML,而且实际上另外两个层次的类图更有用。 下面介绍细化概念。细化是UML中的术语,表示对事物更详细一层的描述。

    两个元素 A、B描述同一件事物,它们的区别是抽象层次不同,若元素B是在元素A的基础上的更详细 的描述,则称元素B细化了元素A,或称元素A细化成元素B。细化的图形表示为由元素B指向 元素A的、一头为空心三角的虚线(千万不要把方向颠倒了!)。细化主要用于模型之间的 合作,表示开发各阶段不同层次抽象模型的相关性,常用于跟踪模型的演变。

    (7) 约束 在UML中,可以用约束(Constraint)表示规则。约束是放在括号"{ }"中的一个表达式 ,表示一个永真的逻辑陈述。在程序设计语言中,约束可以由断言(Assertion)来实现。

    (8) 对象图、对象和链 UML中对象图与类图具有相同的表示形式。对象图可以看作是类图的一个实例。对象 是类的实例;对象之间的链(Link)是类之间的关联的实例。对象与类的图形表示相似,均 为划分成两个格子的长方形(下面的格子可省略)。上面的格子是对象名,对象名下有下划 线;下面的格子记录属性值。链的图形表示与关联相似。对象图常用于表示复杂的类图的 一个实例。

    (9) 包 一个最古老的软件方法问题是:怎样将大系统拆分成小系统。解决这个问题的一个思 路是将许多类集合成一个更高层次的单位,形成一个高内聚、低耦合的类的集合。这个思 路被松散地应用到许多对象技术中。UML中这种分组机制叫包(Package)(见图5)。

    不仅是类,任何模型元素都运用包的机制。如果没有任何启发性原则来指导类的分组 ,分组方法就是任意的。

    在UML中,最有用的和强调最多的启发性原则就是依赖。包图主要 显示类的包以及这些包之间的依赖关系。有时还显示包和包之间的继承关系和组成关系 。

    包的内容 在图5中,"系统内部"包由"保险单"包和"客户"包组成。这里称"保险单" 包和"客户"包为"系统内部"包的内容。当不需要显示包的内容时,包的名字放入主方框内 ,否则包的名字放入左上角的小方框中,而将内容放入主方框内。包的内容可以是类的列 表,也可以是另一个包图,还可以是一个类图。

    包的依赖和继承 图5中"保险单填写界面"包依赖于"保险单"包;整个"系统内部"包 依赖于"数据库界面"包。

    可以使用继承中通用和特例的概念来说明通用包和专用包之间 的关系。例如,专用包必须符合通用包的界面,与类继承关系类似。通过"数据库界面"包 ,"系统内部"包既能够使用Oracle的界面也可使用Sybase的界面。通用包可标记为 {abs tract},表示该包只是定义了一个界面,具体实现则由专用包来完成。

    (10) 其他模型元素和表示机制 类图中用到的模型元素和表示机制较为丰富,由于篇幅的限制,这里不能一一介绍。

    主要还有以下模型符号和概念:类别模板(Stereotype)、界面(Interface)、参数化类(P arameterized Class)也称模板类(Template)、限定关联(Qualified Association)、多 维关联(N-ary Association)、多维链(N-ary Link)、派生(Derived)、类型(Type)和注 释(Note)等。

    (11) 使用类图的几个建议 类图几乎是所有OO方法的支柱。采用标准建模语言UML进行建模时,必须对UML类图引 入的各种要素有清晰的理解。以下对使用类图进行建模提出几点建议:

    *不要试图使用所有的符号。从简单的开始,例如,类、关联、属性和继承等概念。在 UML中,有些符号仅用于特殊的场合和方法中,只有当需要时才去使用。

    *根据项目开发的不同阶段,用正确的观点来画类图。如果处于分析阶段,应画概念层 类图;当开始着手软件设计时,应画说明层类图;当考察某个特定的实现技术时,则应画实 现层类图。

    *不要为每个事物都画一个模型,应该把精力放在关键的领域。最好只画几张较为关 键的图,经常使用并不断更新修改。 使用类图的最大危险是过早地陷入实现细节。为了避免这一危险,应该将重点放在概 念层和说明层。如果已经遇到了一些麻烦,可以从以下几个方面来反思你的模型。

    *模型是否真实地反映了研究领域的实际。 *模型和模型中的元素是否有清楚的目的和职责(在面向对象方法中,系统功能最终是 分配到每个类的操作上实现的,这个机制叫职责分配)。

    *模型和模型元素的大小是否适中。过于复杂的模型和模型元素是很难生存的,应将 其分解成几个相互合作的部分。

    (12) 术语比较 下表列出了最常用的四种UML术语,并与其他方法学中相对应的术语进行比较,以帮助 读者了解UML与其他建模语言的异同。

    3. 构件图和配置图 构件图(Component diagram)和配置图(Deployment diagram)显示系统实现时的一些 特性,包括源代码的静态结构和运行时刻的实现结构。构件图显示代码本身的结构,配置 图显示系统运行时刻的结构。

    (1) 构件图 构件图显示软件构件之间的依赖关系。一般来说,软件构件就是一个实 际文件,可以是源代码文件、二进制代码文件和可执行文件等。可以用来显示编译、链接 或执行时构件之间的依赖关系。

    (2) 配置图 配置图描述系统硬件的物理拓扑结构以及在此结构上执行的软件。配置 图可以显示计算结点的拓扑结构和通信路径、结点上运行的软件构件、软件构件包含的 逻辑单元(对象、类)等。配置图常常用于帮助理解分布式系统。

    (3) 结点和连接 结点(Node)代表一个物理设备以及其上运行的软件系统,如一台U nix主机、一个PC终端、一台打印机、一个传感器等。如图1所示,"客户端PC"和"保险后 台服务器"就是两个结点。结点表示为一个立方体,结点名放在左上角。 结点之间的连线表示系统之间进行交互的通信路径,在UML中被称为连接(Connectio n)。通信类型则放在连接旁边的"《》"之间,表示所用的通信协议或网络类型。

    (4) 构件和界面 在配置图中,构件代表可执行的物理代码模块,如一个可执行程序 。逻辑上它可以与类图中的包或类对应。因此,配置图中显示运行时各个包或类在结点中 的分布情况。如在图1中,"保险后台服务器" 结点中包含"保险系统"、"保险对象数据库 "和"保险系统配置"3个构件。 在面向对象方法中,类和构件等元素并不是所有的属性和操作都对外可见。

    它们对外 提供了可见操作和属性,称之为类和构件的界面。界面可以表示为一头是小园圈的直线。

    图1中,"保险系统"构件提供了一个"配置"界面。配置图中还显示了构件之间的依赖关系 ,"保险系统配置"构件依赖于这个"配置"界面。

    (5) 对象(Object) 一个面向对象软件系统中可以运行很多对象。由于构件可以看 作与包或类对应的物理代码模块,因此,构件中应包含一些运行的对象。配置图中的对象 与对象图中的对象表示法一样。

    图1中,"保险系统配置"构件包含"配置保险政策"和"配置 用户"两个对象。

    标准建模语言UML的静态建模机制是采用UML进行建模的基础。我们认为,熟练掌握基 本概念、区分不同抽象层次以及在实践中灵活运用,是三条最值得注意的基本原则。

    六、标准建模语言UML的动态建模机制

    1. 消息 在面向对象技术中,对象间的交互是通过对象间消息的传递来完成的。

    在UML的四个 动态模型中均用到消息这个概念。通常,当一个对象调用另一个对象中的操作时,即完成 了一次消息传递。

    当操作执行后,控制便返回到调用者。

    对象通过相互间的通信(消息传 递)进行合作,并在其生命周期中根据通信的结果不断改变自身的状态。 

    在UML中,消息的图形表示是用带有箭头的线段将消息的发送者和接收者联系起来,箭 头的类型表示消息的类型,如图2所示。

      

    UML定义的消息类型有三种:

    简单消息(Simple Message) 表示简单的控制流。用于描述控制如何在对象间进行传 递,而不考虑通信的细节。

    同步消息(Synchronous Message) 表示嵌套的控制流。

    操作的调用是一种典型的同 步消息。

    调用者发出消息后必须等待消息返回,只有当处理消息的操作执行完毕后,调用 者才可继续执行自己的操作。

    异步消息(Asynchronous Message) 表示异步控制流。

    当调用者发出消息后不用等待 消息的返回即可继续执行自己的操作。

    异步消息主要用于描述实时系统中的并发行为。

     

    2. 状态图 状态图(State Diagram)用来描述一个特定对象的所有可能状态及其引起状态转移的 事件。大多数面向对象技术都用状态图表示单个对象在其生命周期中的行为。一个状态 图包括一系列的状态以及状态之间的转移。

    (1) 状态 所有对象都具有状态,状态是对象执行了一系列活动的结果。当某个事件 发生后,对象的状态将发生变化。

    状态图中定义的状态有:初态、终态、中间状态、复合 状态。其中,初态是状态图的起始点,而终态则是状态图的终点。一个状态图只能有一个 初态,而终态则可以有多个。

    中间状态包括两个区域:名字域和内部转移域,如图3所示。图中内部转移域是可选的 ,其中所列的动作将在对象处于该状态时执行,且该动作的执行并不改变对象的状态。                 

    一个状态可以进一步地细化为多个子状态,我们将可以进一步细化的状态称作复合状 态。子状态之间有"或关系"和"与关系"两种关系。

    或关系(如 图4)说明在某一时刻仅可 到达一个子状态。

    例如,一个处于行驶状态的汽车,在"行驶"这个复合状态中有向前和向 后两个不同的子状态,在某一时刻汽车要么向前,要么向后。与关系( 如图5)说明复合状 态中在某一时刻可同时到达多个子状态(称为并发子状态)。具有并发子状态的状态图称 为并发状态图。

                 

    (2) 转移 状态图中状态之间带箭头的连线被称为转移。状态的变迁通常是由事件 触发的,此时应在转移上标出触发转移的事件表达式。如果转移上未标明事件,则表示在 源状态的内部活动执行完毕后自动触发转移。

    3. 顺序图 顺序图(Sequence Diagram)用来描述对象之间动态的交互关系,着重体现对象间消息 传递的时间顺序。

    顺序图存在两个轴:水平轴表示不同的对象,垂直轴表示时间。

    顺序图 中的对象用一个带有垂直虚线的矩形框表示,并标有对象名和类名。垂直虚线是对象的生 命线,用于表示在某段时间内对象是存在的。对象间的通信通过在对象的生命线间画消息 来表示。消息的箭头指明消息的类型。

    顺序图中的消息可以是信号(Signal)、操作调用或类似于C++中的RPC(RemoteProce dure Calls)和Java中的RMI(Remote Method Invocation)。当收到消息时,接收对象立即 开始执行活动,即对象被激活了。

    通过在对象生命线上显示一个细长矩形框来表示激活。 消息可以用消息名及参数来标识。

    消息也可带有顺序号,但较少使用。消息还可带有 条件表达式,表示分支或决定是否发送消息。如果用于表示分支,则每个分支是相互排斥 的,即在某一时刻仅可发送分支中的一个消息。

    在顺序图的左边可以有说明信息,用于说明消息发送的时刻、描述动作的执行情况以 及约束信息等。一个典型的例子就是用于说明一个消息是重复发送的。

    另外,可以定义两 个消息间的时间限制。

    一个对象可以通过发送消息来创建另一个对象,当一个对象被删除或自我删除时,该 对象用"X"标识。

    另外,在很多算法中,递归是一种很重要的技术。当一个操作直接或间接调用自身时 ,即发生了递归。

    产生递归的消息总是同步消息,返回消息应是一个简单消息。

    4. 合作图 合作图(Collaboration Diagram)用于描述相互合作的对象间的交互关系和链接关系 。

    虽然顺序图和合作图都用来描述对象间的交互关系,但侧重点不一样。顺序图着重体现 交互的时间顺序,合作图则着重体现交互对象间的静态链接关系。

    合作图中对象的外观与顺序图中的一样。如果一个对象在消息的交互中被创建,则可 在对象名称之后标以{new}。

    类似地,如果一个对象在交互期间被删除,则可在对象名称之 后标以{destroy}。对象间的链接关系类似于类图中的联系(但无多重性标志)。通过在对 象间的链接上标志带有消息串的消息(简单、异步或同步消息)来表达对象间的消息传递 。

    (1) 链接 链接用于表示对象间的各种关系,包括组成关系的链接(Composition Li nk)、聚集关系的链接(Aggregation Link)、限定关系的链接(Qualified Link)以及导航 链接(Navigation Link)。

    各种链接关系与类图中的定义相同,在链接的端点位置可以显 示对象的角色名和模板信息。

    (2) 消息流 在合作图的链接线上,可以用带有消息串的消息来描述对象间的交互。 消息的箭头指明消息的流动方向。

    消息串说明要发送的消息、消息的参数、消息的返回 值以及消息的序列号等信息。

  • 如何测试web网站

    2007-08-28 17:37:44

    原文

    web网站本质上带有web服务器和客户端浏览器的C/S结构的应用程序。主要考虑web页面、TCP/IP通讯、Internet链接、防火墙和运行在web页面上的一些程序(例如,applet、javascrīpt、应用程序插件),以及运行在服务器端的应用程序(例如,CGI脚本、数据库接口、日志程序、动态页面产生器,asp等)。另外,因为服务器和浏览器类型很多,不同版本差别很小,但是表现出现的结果却不同,连接速度以及日益迅速的技术和多种标准、协议。使得web测试成为一项正在不断研究的课题。其它要考虑的如下:

    1、服务器上期望的负载是多少(例如,每单位时间内的点击量),在这些负载下应该具有什么样的性能(例如,服务器反应时间,数据库查询时间)。性能测试需要什么样的测试工具呢(例如,web负载测试工具,其它已经被采用的测试工具,web 自动下载工具,等等)?

    2、系统用户是谁?他们使用什么样的浏览器?使用什么类型的连接速度?他们是在公司内部(这样可能有比较快的连接速度和相似的浏览器)或者外部(这可能有使用多种浏览器和连接速度)?

    3、在客户端希望有什么样的性能(例如,页面显示速度?动画、applets的速度等?如何引导和运行)?

    4、允许网站维护或升级吗?投入多少?

    5、需要考虑安全方面(防火墙,加密、密码等)是否需要,如何做?怎么能被测试?需要连接的Internet网站可靠性有多高?对备份系统或冗余链接请求如何处理和测试?web网站管理、升级时需要考虑哪些步骤?需求、跟踪、控制页面内容、图形、链接等有什么需求?

    6、需要考虑哪种HTML规范?多么严格?允许终端用户浏览器有哪些变化?

    7、页面显示和/或图片占据整个页面或页面一部分有标准或需求吗?

    8、内部和外部的链接能够被验证和升级吗?多久一次?

    9、产品系统上能被测试吗?或者需要一个单独的测试系统?浏览器的缓存、浏览器操作设置改变、拨号上网连接以及Internet中产生的“交通堵塞”问题在测试中是否解决,这些考虑了吗?

    10、服务器日志和报告内容能定制吗?它们是否被认为是系统测试的主要部分并需要测试吗?

    11、CGI程序、applets、javascrīpts、ActiveX 组件等能被维护、跟踪、控制和测试吗?

  • Web测试资料(转载)

    2007-08-28 17:35:44

    原文

    关于web测试
    1页面部分
    (1) 页面清单是否完整(是否已经将所需要的页面全部都列出来了)
    (2) 页面是否显示(在不同分辨率下页面是否存在,在不同浏览器版本中页面是是否显示)
    (3) 页面在窗口中的显示是否正确、美观(在调整浏览器窗口大小时,屏幕刷新是否正确)
    (4) 页面特殊效果(如特殊字体效果、动画效果)是否显示
    (5) 页面特殊效果显示是否正确

    2 页面元素部分
    (1)页面元素清单(为实现功能,是否将所需要的元素全部都列出来了,如按钮、单选框、复选框、列表框、超连接、输入框等等)
    (2)素是否显示(元素是否存在)
    (3)页面元素是否显示正确(主要针对文字、图形、签章)
    (4)页面元素的外形、摆放位置(如按钮、列表框、核选框、输入框、超连接等)
    (5) 页面元素基本功能是否实现(如文字特效、动画特效、按钮、超连接)
    (6) 页面元素的容错性列表(如输入框、时间列表或日历)
    (7) 页面元素的容错性是否存在
    (8) 页面元素的容错性是否正确

    3 功能部分
    (1) 数据初始化是否执行
    (2) 数据初始化是否正确
    (3) 数据处理功能是否执行
    (4) 数据处理功能是否正确
    (5) 数据保存是否执行
    (6) 数据保存是否正确
    (7) 是否对其他功能有影响
    (8) 如果影响其他功能,系统能否作出正确的反应
    (9) 其他错误
    (10) 对模块的具体功能进行测试时可以列出功能模块的所有功能,进行排列组合,测试所有情况
    如:某一功能模块具有最基本的增删改查功能,则需要进行以下测试
    单项功能测试(增加、修改、查询、删除)
    增加——>增加——>增加 (连续增加测试)
    增加——>删除
    增加——>删除——>增加 (新增加的内容与删除内容一致)
    增加——>修改——>删除
    修改——>修改——>修改 (连续修改测试)
    修改——>增加 (新增加的内容与修改前内容一致)
    修改——>删除
    修改——>删除——>增加 (新增加的内容与删除内容一致)
    删除——>删除——>删除 (连续删除测试)
    (11)查询功能分为两种情况,验证操作结果。
    一、打开页面时自动显示结果,则不特别强调;
    二、需要手工操作进行查询,则每次在其他功能完成后进行。
    4 提示信息
    (1) 成功、失败提示
    (2) 操作结果提示
    (3) 确认提示
    (4) 危险操作、重要操作提示
    (5) 返回页面 提示后显示的页面
    5 容错性
    注意以下几种情况
    (1) 为空、非空
    (2) 唯一性
    (3 )字长、格式
    (4) 数字、邮政编码、金额、电话、电子邮件、ID号、密码
    (5) 日期、时间
    (6) 特殊字符 (对数据库)英文单、双引号,&符号
    6 权限部分
    功能权限: 指定用户可以使用那些功能,不能使用那些功能
    数据权限: 指定用户可以处理那些数据,不可以处理那些数据。可
    以合并到功能测试
    操作权限: 在逻辑关系上,操作前后顺序、数据处理情况。可以合
    并到功能测试
    权限变化: 可以合并到功能测试

    (1) 功能权限是否存在
    (2 )功能权限是否正确
    (3) 数据权限是否存在
    (4) 数据权限是否正确
    (5)操作权限是否存在
    (6) 操作权限是否正确
    (7) 引起权限变化的功能列表
    (8) 功能权限变化还是数据权限变化,或两者兼有
    (9) 权限变化是否正确

    7 键盘操作
    (1) Tab键的使用
    (2) 上下方向键的使用
    (3) Enter键的使用
    (4) 系统设定快捷键的使用(如果设置有快捷键)

    8 测试中还应注意的其他事项
    (6) 完整性:是否是一个整体,没有功能缺损
    (7) 易用性:使用是否方便
    (8) 一致性:类似的问题用类似的方法处理
    (9) 提示信息:提示信息是否完整、正确、详细
    (10) 帮助信息:是否提供帮助信息,帮助信息的表现形式(页面文字、提示信息、帮助文件),帮助信息是否正确、详细
    (11) 兼容性:包括操作系统兼容和应用软件兼容,可能还包括硬件兼容
    (12) 可扩展性:是否由升级的余地,是否保留了接口
    (13) 稳定性:运行所需的软硬件配置,占用资源情况,出现问题时的容错性,对数据的保护
    (14) 运行速度:运行的快慢,带宽占用情况

    有几点:
    1.功能点测试:是否满足需求所要求的功能
    2.字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度,会不会出错.
    3.字符类型检查: 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型,会否报错.
    4.标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键.看系统处理是否正确.
    5.中文字符处理: 在可以输入中文的系统输入中文,看会否出现乱码或出错.
    6.信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理.
    7.界面测试:界面的正确性、一致性、友好性、易用性。

    用户界面测试是从最终的使用者用户的角度来看软件,软件难以理解,不易使用就是软件缺陷。可以从以下几个方面重点来检查用户界面:
    1.易用性检查:确保软件易于理解,方便使用。
    2.一致性检查:
    a.注意系统页面的风格是否一致,如字的大小、颜色、字体要相同。
    b.提示信息的表达方式是否一致。
    c.按钮排列顺序是否一致。
    d.back, cancel等按钮跳转页面处理是否一致。
    e.各字段的名称,位置、长度、类型是否和设计文档要求一致,如Employee No和LoginName不一致。
    3.正确性检查:检查页面上的form, button, table, header, footer,提示信息,还有其他文字拼写,句子的语法等是否正确。
    4.友好性检查:
    a.提示信息是否友好.
    b.系统应该在用户执行错误的操作之前提出警告,提示信息.
    c.页面分辨率检查,在各种分辨率浏览系统检查系统界面友好性。
    5.合理性检查:做delete, update, add, cancel, back等操作后,查看信息回到的页面是否合理。
    6.检查本地化是否通过:英文版不应该有中文信息,英文翻译准确,专业。
    7.页面最大化检查:测试最大化/最小化/还原时页面是否做了对应的处理。

  • 功能测试(转载)

    2007-08-28 17:30:45

    作者:qiubole

    此文旨在以检查单的形式,对于一些没有设计测试用例,而进行快速功能测试提供指导。

    一、刚进窗口时的测试
    1、  每次打开窗体,都要先关闭,再打开一次。对一个窗体测试完了之后,也要关闭后再进入一次。

    2、  进入窗体后,要先检查一下窗体的各种情况,很多程序员,喜欢在创建或显示的时候写代码。

    3、  先检查一下界面上的布局是否合理。一般公司都有检查单,就按检查单的内容来进行检查一次。如果是界面布局不合好的,在提交问题的时候请尽量客气点,程序员就那点怪脾气,整个一审美盲,做得不好,还不太愿意别人提。

    4、  进入之后,先别急着按照说明书去操作,先把能点的,能录的,能拖的都试试,如果涉及到一些可以双击操作的,也没事多双击试试。一般建议,将窗体上所有的按钮都点点,多点几次,花不了多少时间。

    二、针对各种控件的测试。
           在程序中,有各种各样的控件,特别是在我们的CS程序中,用到很多系统标准的控件,对于标准控件的测试,在此列出,如果自定义的控件,后面再详细列一份,比如我们自己的录入控件。

    1、  按钮:一般使用按钮,主要是为了执行一系列的事件,在按钮上,大部分只用到了它的单击(CLICK)方法,我们要注意到这么几点。

    a)         如果按钮用来管理状态的,比如,点击按钮,打开,再点击,则关闭这类的,请多点击几次。

    b)        如果按钮是用来执行一系列的较长的事件的,则请连续点击,很多程序员不会注意到这一点,快速点击几次,可能就会出问题。

    c)        删除按钮,如果按钮是用来删除数据的,请确认点击时,是否有提示,而且提示是否明确,很多时候,程序员为了懒一下,提示往往不明确,比如‘您确认要删除它吗?’之类的,其实是不标准的,标准的应该是‘你确认要删除[0001]号单据吗?’这样一类的。其它的提示请参考检查单。

    d)        保存按钮,一般保存按钮,建议是用普通的按钮或可以获得焦点的按钮,如果你发现用的是不能获得焦点的按钮,比如平滑按钮,这就要注意了,很多时候,刚录入一条数据,如果焦点未离开输入框,点击保存时,该录入框的内容是不会被存上的。

    e)         退出按钮,通常退出按钮是要用求无焦点的按钮,否则,你录入一条不合法的数据,想退出时,很有可能会被拒绝,要求你输入正确的数据,这就很郁闷了。

    f)         其它,正常情况下,每点一个按钮,界面上都需要进行响应,如果你点击一个按钮,界面没有任何反应,这就要提醒开发者了。当然,有些公司规定默认是不响应的,其实这是不太合理的。

    2、  单选框:一般情况下,在一组相关的单选框中,一定要有一个默认值,很多程序员会在这里面加上一系列的状态,比如选择第一个单选框,则改变状态,普通情况下出错的可能性不大。

    3、  复选框:复选框的作用是可以重复选择,如果复选框选择之后,将其它的复选框清除了,这时候就要注意向开发人员确认了,因为正常情况下,复选框是不允许这样操作,要这样操作,需要用到单选和复选的结合。

    4、  标签:对于标签的测试,是比较简单的,主要把握这两个方面。

    a)         一是标签的位置,是否与之相关的项目对齐。在一个页面上,如果标签和输入框比较多的情况下,经常会出现位置相差1个象素的情况。

    b)        二是标签的焦点,有些标签上,会有加速键列表,比如(员工(A)),你要确认一下,按了Alt+A之后,它对应的焦点是否落在它之后的可获得焦点的控件上。

    5、  日期和时间控件:日期选择控件本身是不会出什么问题,但是,与之作用相关的地方,比如根据日期条件进行查询,默认日期时间等会出问题,从以下几个方面考虑。

    a)         短日期格式,有一些人在写程序的时候,经常会将日期转换为字符串进行比较,如果经验少的人,会把1990-1-1日变成‘1990-1-1’,这在进行比较的时候可能会出问题,尽量要求开发人员在系统启动的时候,改变系统的短日期格式,使之在日期选择的时候,为‘1990-01-01’这种。

    b)        很多语言,用的日期控件,和时间控件是同一个控件,比如(DELPHI),如果开发人员没留意,在进行日期比较的时候,可能就存上了时间了。这样就会导致数据出问题,测试的时候,要把握边界值的方式,比如查询2号到10号的数据,你要想办法,试一下1,2,3,9,10,11这几个值了。

    c)        如果日期控件显示的是1899-1-1号,这就要注意了,这表明这个日期没有赋初始值,如果这是一个数据敏感控件,则很可能没有给相应的数据集赋上值。

    d)        当然,我们可以强烈建议,程序员给日期控件赋上默认值,当前日期,当前月份的第一天之类的。

    e)         成组的日期,比如开始日期和结束日期,这里我们要注意,开发人员是否控制了结束日期必须大于开始日期。

    6、  编辑框:很多时间,这是出问题的主要来源,对于编辑框,我们可以从以下方面考虑,其中一些可以对开发人员进行建议。

    a)         录入的类型:根据录入的类型不同,测试方法也有所不同,这里给出常见的几种。

                             i.              纯字符录入

    1.         长度,比如名称,要注意,该名称的长度,如果是敏感控件,这一点可以不用考虑,因为控件本身就管理了,如果是非敏感控件,则要注意这一点,否则很有可能就会出现字符被截断的问题。

    2.         非法字符,这主要是指一些特定语言的一些转义符,比如\001,之类的,在delphi中,要注意’号,在VB中,要注意”号。同时,如果系统有特殊要求的话,则有时,空格也是不允许的。

                           ii.              整型的录入,有一些要求必须输入整型的地方,要注意以下几个方面。

    1.         非数据和-号,是否能录入字母,其它符号之类的。

    2.         最大值和最小值的控制

    3.         0和非0值,在很多业务逻辑中,必须要输入大于0的数,看是否控制到位了。

    4.         是否能用Ctrl+V键进行粘贴,很多人写代码的时候,会根据敲的键来将非法字符过滤(这可以不用管,很多时候,可以不考虑这点)。

    5.         退格键,方向键,删除键是否能用。

    6.         是否能输入小数。

                          iii.              浮点型,和整型前面五点相似,另要补充几点。

    1.         是否能输入多个小数。

    2.         小数的位数

                         iv.              日期和时间:看是否能录入正确的日期和时间,离开后应该要判断,其它同上面的日期和时间控件。

    b)        取值范围:这就是我们运用黑盒测试中,等价类划分和边界值的最好时机了。详细的就不在这里列了。

    c)        系统判断的时机:一般一讲,我们会要求开发人员,在该控件离开时,判断输入的值是否合法。但有很多程序员,只是在按回车键的时候提示,这样就有问题了。

    d)        与回车键的关系问题:这也是经常出问题的地方,很多程序员要求在输入值后,按回车,然后会取出另一些相关的值,如果我们敲回车之后,系统取出值,我们再回过头来改这个输入框的值,最后保存时,就会有逻辑问题了。

    7、  下拉框。下拉框作为一种录入或选择手段,在很多情况下,它的取值范围,判断时机和回车键的关系与上面的编辑框类似,在此不复述。另要注意几点。

    a)         是否允许手工录入的问题,很多下拉框是不允许手工录入的。如果允许手工录入了,看系统是否控制了该录入值的取值范围。

    b)        如果之前你测试的时候,是允许手工录入的,程序员改了一次之后,它是不允许手工录入的,你就要注意了,特别是面对DELPHI程序,要特别注意,赋值和取值是否正确。

    8、  列表框。要注意以下几方面。

    a)         是否允许编辑,大部分列表框应该是禁止编辑数据的。对一个节点,点一次鼠标,稍停一会,再点一次鼠标,就会能看到是否可以编辑。

    b)        是否可以复选。

    c)        拖动,很多列表框有拖动方面的功能,这时要注意,它拖动的目标,有时候把它拖动到本身,就会出错。

    9、  树。在有层次结构的情况下,经常会用到树,我们要注意以下几个方面。

    a)         是否允许编辑,大部分树应该是禁止编辑数据的。对一个节点,点一次鼠标,稍停一会,再点一次鼠标,就会能看到是否可以编辑。

    b)        拖动,很多列表框有拖动方面的功能,这时要注意,它拖动的目标,有时候把它拖动到本身,就会出错。同时,将上一个节点拖放到它的子节点应该也是不允许的。

    c)        不选择树的节点:如果程序中用到了树的节点,这时候你不选择节点,有时候也会是报错的来源。

    d)        选择非子节点,如果程序中要求你选择子节点,而你未选择。

    e)         树的刷新,有时候,一个树是与当前录入的数据有关的,这时候要查看一下,新增了数据,树是否正常刷新了,删除了数据,更新了数据也同理。

    10、              多行文本框,注意以下情况。

    a)         回车是否被转移焦点了

    b)        如果这是一个SQL语句查询录入框,还要注意,是否能录入DELETE, UPDATE, DROP之类的DCL语句。也就是安全问题。

    c)        最大字符数问题。

    11、              数据表格,很多程序中,用到了大量的表格,在表格中我们要注意这么几点。

    a)         如果只是显示查询结果的表格,要注意,该表格是否是只读,是否可以用Ctrl+delete之类的删除数据。

    b)        如果是可编辑的,那么请查看,如果能够点击表头排序,还是否能正常录入数据。

    c)        是否能录入重复的数据。

    12、              打开和保存对话框:主要是查看是否有扩展名过滤,默认路径。

    13、              图表:无限放大和无限缩小。

221/212>
Open Toolbar