发布新日志

  • TD的备份与还原(转载)

    2008-10-26 20:18:15

    TD的备份与还原 (2007-06-27 10:20:24)
     

    【摘要】TestDirector, (以下简称TD)它是Mercury Interactive 公司推出的基于WEB浏览器环境下的测试管理工具。通过TD的流程控制可以规范软件企业的测试流程、改善测试质量、减轻测试人员的负担、提高工作效率。在接触TD过程中仍然存在着很多未知领域等待着我们这些从事软件测试工作的同行去研究去拓展,如何更有效的使用TD提高我们的测试管理,将是我们继续研究关注的方向。本文总结了我们在移植TD项目方面的一些经验和技巧,希望对大家有所帮助。

    【关键词】项目移植集成工作环境分布式工作环境

    这里我们先将以上的几个名词解释一下:

    项目移植:这里说的项目移植是指将已经建立的TD项目整体文件在保证数据安全和完整的前提下移植到其他服务器的过程,这个过程包括以下几个方面(1)数据库的移植(2)项目文件的移植(3)项目配置文件的移植。经过移植后的TD项目可以实现双机备份的功能。

    集成工作环境:我们把TD服务程序和TD 使用的数据库存放在同一台计算机上的这种工作环境称为集成工作环境。这种工作环境节省成本,维护较复杂,不利于数据的安全性。

    分布式工作环境:我们把TD服务器程序和TD后台使用的数据库存放在不同机器上,也就是使用单独的一台计算机作为TD项目的数据库服务器,TD服务程序通过网络访问数据库服务器,这种工作环境称为分步式工作环境。这种环境的成本较高,但是利用维护,数据的安全性较高。对一些专业性的企业尤其是需要将TD开放到Internet上,我们建议使用这种工作环境。

    移植说明

    基于IIS WEB服务下的TD服务程序支持的数据库有ACCESS,SQL SERVER、SYBASE、ORACLE。由于ACCESS数据库的迁移比较容易本文就不介绍,本文主要讨论SQL SERVER数据库的移植。掌握SQL SERVER数据库类型的TD项目移植,对ORACLE、SYBASE类型数据库的项目移植工作也能做到触类旁通。下面大家就跟我们一切进入TD项目移植的具体工作吧!

    下面的移植工作,我们选用了一个名为:E-CIS的项目进行实例移植,同时我们将其他计算机上的TD项目(SAAA、SIMS、E-ICID)与E-CIS进行了合并。

    。集成工作环境的数据迁移

    1、拟分析产生的原因和解决方法

    产生的原因:

    由于我们配置的TD服务器与数据库服务器是同一台计算机,一旦计算机发生故障,TD项目中的数据既便是备份出来也很难恢复,其主要原因是:

    • 使用TD建立项目时,TD会在数据库中自动建立一个名为TD的用户,我们运行的E-CIS项目中所有的表都是由TD这个用户建立的,无法删除和添加这个用户。
    • 在SQL查询分析器中可以看到所有相关的表都是td.*的格式,这样会造成如果SQL查询分析器是以其他用户登入,执行select * from all list出现错误。出现一定要加前缀后才能查询出来数据问题,这个就是造成恢复数据库后即使其他项目都配置正确,但TD依然不能正常使用的一个重要原因。
    • 在安装TD后会在安装盘符:\Program Files\Common Files\Mercury Interactive\Domsinfo目录下,有一个用来存放系统信息的ACCESS数据库Doms.mdb,这个数据库由TD创建,并且是经过加密的,它存放着TD所有的配置信息。这个数据库是是否能够成功恢复TD项目的一个重要因素。

    2、移植前的备份工作

    在正式移植之前,我们首先要做好数据的备份工作,这也是我们移植工作的一部分,虽然我们现在的移植技术已经相对较成熟,但是我们还是要建议大家移植之前的备份是很有必要的。备份主要备份以下的数据:

    .备份DomsInfo目录;

    默认在C:\Program Files\Common Files\Mercury Interactive下。这个目录包含了Doms.mdb文件(用户信息和工程列表)、connection strings(连接字符串)、parameters(参数)、global style sheets(全局风格表)、the database template(Empty_DB.mdb)(一些临时数据)

    .备份TD项目安装文件;

    TD_Dir包含每个工程的自动测试、附件、设置、风格列表。默认在C:\TD_Dir\Default目录下,打开这个目录可以看到TD的工程文件,我们需要将这些工程文件备份下来。

    .备份项目数据库;

    备份项目用的数据库文件。

    3、移植工作

    移植工作分为四个部分:

    ――数据库的迁移;

    ――建立访问数据表文件的TD用户;

    ――修改TD的项目配置数据库(Access);

    ――修改Project中的INI文件。

    1)数据库的迁移:

    数据库的移植目的是:将项目数据库从原来的计算机移植到新的计算机。

    具体思路:通过SQL Server 集成的导入和导出数据功能将原数据库文件导入新的SQL Server服务器中。在这个过程,原表中由TD用户创建的表也会更改为DBO用户创建。例如:数据库中的表ALL_LISTS原来由td用户创建,移植后ALL_LISTS表的用户更改为dbo这样问题也就解决了。

    我们现在开始图解数据库的操作:

              从开始菜单中打开“导入和导出数据”如图:
       

             单击 “Next”

       

             选择要恢复的数据源后单击“Next”

       

       设置数据库恢复到的位置,注意:需要在数据库 这里设定数据库被恢复的名称,点击    

       

              建立数据库名称后,单击确定后,再“Next”按钮:

       

             再“Next”(这个选项选择第三项更具有完整性)

       

             选择需要恢复的数据表后(在这里选择全部表),再”Next”:

       

             准备开始恢复,单击“Next”:

       

             单击”Finish”按钮,开始恢复:

       

              恢复成功后出现提示:

       

    数据库恢复完成。

    2)建立访问数据表文件的TD用户:

    建立td用户的目的是:使td用户具有访问新恢复项目数据库的权限。

    具体思路:建立一个名为td的用户,使这个用户具有访问TD项目数据库的控制权限,TD通过这个用户对项目数据库进行增、删、改的操作。

    打开企业管理器,在目标数据库计算机中建立TD用户,并且设定TD用户访问的数据库。

       

            在登录项中新建用户,在弹出的对话框中设定td用户相关的属性,如:

       

    设定的密码可以根据用户确定,这里设定为:tdtdtd;在“服务器角色”中设定td用户的权限,我们给出建议设定为“System Administrators”:

       

                  完成“服务器角色”的设定,为td用户设定数据库访问的权限:

       

    设定td用户能够访问TD项目的数据库和Master数据库。设定完成后,确认td用户默认数据库是否为Default_e-cis_db

    设定完成。

    3):修改TD的配置项目文件(Access):

    修改配置文件目的是:将项目文件(TDDIR目录下存在的项目文件)和项目数据库进行关联。

    具体思路:修改ACCESS数据库中每一个配置参数,使TD项目文件和项目数据库关联,通过这个操作我们还可以实现多个TD项目合并删除的功能。(在这里我们就不详细介绍,有兴趣的朋友可以研究一下)

    在TD安装的计算机中的C:\Program Files\Common Files\Mercury Interactive\DomsInfo目录下打开doms.mdb文件,此文件是经过加密处理的,其密码为:tdtdtd

    打开后可以看到相应的表:

       

    这些表,存放着TD所有的配置信息,是很重要的,我们根据自己的工作环境实际配置这个表,其中需要修改的表是:DBSERVER、DOMAINS、PARAMS、PROJECT和TDSERVERS这五个表。

    a.DBSERVER表中主要修改DBSERVER_NAME(目标数据库服务器的IP如本例为10.168.188.151)、DB_USER_PASS(用户密码如tdtdtd)、DB_ADMIN_USER(管理用户名如td)和DB_ADMIN_PASSWORD(管理用户密码如tdtdtd)字段的值,如下图:
       

          b.DOMAINS表中主要修改PHYSICAL_DIRECTORY字段的值。(基本上不要修改)

       

         c.PARAMS表中主要修改PARAM_VALUE字段的值。(基本上不要修改)

       

    d.PROJECT表中主要增加或修改一个记录就行了,其关键字段表示的意思是PROJECT_ID(项目ID号不能重复),PROJECT_NAME(项目名称),DB_NAME(项目对应的数据库名称如本例的default_e_cis_db),DB_TYPE(数据库类型1为ACCESS,2为SQL SERVER),PHYSICAL_DIRECTORY(TD服务器中的共享目录如本例为\\10.168.188.152\td_dir\default\e_cis、DB_USER_PASS(TD用户密码如本例为tdtdtd)、DBSERVER_NAME(数据库的IP地址)。

       

         e.TDSERVERS中主要修改DBSERVER_NAME、TD_IP_ADDRESS

       

    说明:以上修改是针对移植工作修改的表,如果我们需要将分布在多台计算机上的TD项目合并移植到一台服务器上,还需要修改ACCESS数据库中的SEQUENCES表中的USER_SEQ字段的数值,这个字段是用来控制用户数量,如果数值太小TD部分用户就出现无法登录的现象。

       

    总结:修改的内容还需要根据自己的实际情况进行修改,我这里只列出常修改的一些字段。

    4):修改Project中的INI文件:

    修改INI文件目的是:ini文件保存数据库信息,TD程序信息,项目名称以及相关的内容。

    具体思路:修改ini文件配置参数,使TD项目文件和项目数据库关联。

    将C:\TD_Dir\Default目录下面的E-CIS项目文件,拷贝到备份的计算机中,然后修改E-CIS文件夹内的Dbid.ini文件:

    Dbid.ini 内容:

    [General]

    Database_Type=MSSQL

    Created_Date=08/11/04 15:44:39

    Created_By=td

    AliasName=E-CIS

    Database Name=default_e_cis_db

    Database Server=10.168.188.229

    Domain Name=DEFAULT

    SendAllQualified=Y

    Has_VCS_DB=Y

    主要修改的内容是:

    Database Name=default_e_cis_db

    Database Server=10.168.188.229

    按照实际情况填写这些信息,就ok了。

    总结:通过以上的介绍,我们集成工作环境的移植工作就已经完成了。经过这样的移植,我们可以实现TD项目的双机备份,双机备份可以让我们的数据更安全、更有保障。

    .分布式工作环境的备份和恢复方法

    分布式工作环境的项目移植相对集成工作环境移植更简单,在这里我们不详细介绍,相信大家看过集成工作环境的移植对分布式移植不在话下了。

    我们对分布式工作环境移植的思路:

    • 强调首先备份项目的数据。
    • 移植TDDir目录下的项目文件到新的服务器上。
    • 复制DomsInfo目录到新服务器C:\Program Files\Common Files\Mercury Interactive下。
    • 修改这个目录下Doms.mdb文件的参数。(修改的详细方法见集成工作环境的移植)

    总结:相对集成工作环境移植来说,分布式结构移植少了数据库的移植,可以继续使用原有的数据库,在移植过程中数据库的移植是移植成功与否的关键因素之一,少了这个过程相信大家移植更为方便。

    【小结】以上我们介绍了两种结构的移植工作,经过上述修改项后,迁移数据的工作就已经成功,td服务器可以访问迁移后的数据库。通过移植工作,同时可以解决TD项目的双机相互备份的问题,保障数据的安全性。

    再次备份TD项目,只需要将原来TD后台数据库表中的数据导入另一台计算机中的数据库中,就可以实现。

    (转自秋叶子的BLOG)

  • SQL Server 2005:你应知道的13件事

    2008-10-26 20:08:50

      SQL Server 2005新增的功能:

      1. 新的产品版本

      除SQL Server 2005标准版和企业版之外,产品线中还加入了SQL Server 2005简化版(SQL Server 2005 Exdivss)和工作组版(SQL Server 2005 Workgroup)两个新版本。

      SQL Server 2005 Exdivss——其作用是代替微软SQL Server桌面引擎(Microsoft SQL Server Desktop Engine,MSDE)。SQL Server 2005 Exdivss可以用于自由发布,并与SQL Server使用同样的关系数据库核心引擎。不同的是它并不像MSDE一样使用查询管理器。仅有的限制是一个CPU,1G的内存和每个数据库4G的存储空间。

      SQL Server 2005——工作组版不是自由发布的。它的设计着眼点在于服务器消息块协议(SMB)和分部门解决方案。在量化性能上,它更优于SQL Server 2005 Exdivss,并能提供关系数据库的支持,只是缺少分析服务。工作组版限用于两个CPU,3G内存,数据库大小不限。

      2. 新的子系统

      在一些新的子系统的推动下,SQL Server 2005中的应用程序支持非常强大,其中包括整合服务、提醒服务、服务代理和报告服务。

      整合服务——与之前负责此功能的DTS相比,速度快600%。SQL Server整合服务是拥有强大的工作流控制能力的企业级ETL平台。

      提醒服务——可以提供搭建自定义提醒程序的应用框架。

      服务代理——为建立高度量化程序提供异步进程处理功能。

      报告服务——这是最值得升级的一项功能。报告服务是企业级的报告生成平台,可以对设计、布署、销售进行详细的报告。强大的ReportBuilder组件可以让最终用户也享受到报告服务。

      3.整合全新的.NET Framework

      对SQL Server 2005进行的最大的强化就是整合了.NET Framework。启用新的.NET整合功能后,你可以轻松地创建存储过程、函数、触发器、自定义类型、自定义数据集。你可以在任何.NET语言下使用exec sp_configure ‘clr enabled’ , ‘1’命令启用CLR支持。如果你还在使用过去的未管理的扩展存储过程,应该立即用SQLCLR存储过程代替。

      4. 新的数据类型

      SQL Server 2005中添加了两种新的数据类型:xml和varbinary(max)。

      Xml数据类型——可以用于在SQL Server数据库中存储类型化或非类型化的XML数据,并通过Xquery进行查询。

      Varbinary(max)数据类型——可以像访问普通数据一样对图像等二进制数据进行存储和读取。

      5. 新的点对点事务型映射

      通过SQL Server 2005中的新功能,我们可以轻松掌握微软对映射作出的这一最大改动。点对点事务型映射是针对双向映射设计的,可以使两个或多个数据库之间在任意一个确认产生改动时保持同步。

      SQL Server 2005缺少的功能:

      6.数据镜像

      毫无疑问,数据镜像是自从SQL Server于2005年11月发布的RTM版本以来一直被人想念的功能,因为它是使企业下定决心升级至SQL Server 2005的主要原因之一。预计这一功能会在2006年下半年重新加入。

      7.SQL快速管理器

      快速管理器试图为SQL Server 2005 Exdivss提供图形化的管理界面。然而它的功能有限,运行缓慢,微软不得不在SQL Server Management Studio中放弃了它,并重新命名为Exdivss。

      如何找到SQL Server 2005的这些功能?

      如果你是第一次使用SQL Server 2005,或许会被大量的新功能和界面改动弄得眼花缭乱。与任何一个版本相比,SQL Server 2005所做出的改动都是最大的。你会发现在SQL Server 2000或SQL Server 7中习惯使用的工具都被修改或去除了。

      8.SQL Server服务管理器

      在你升级到SQL Server 2005之后,你或许会有疑问:升级真的完成了吗?因为你会发现系统图标中的服务管理器不见了。SQL Server服务管理器已经被替换成了SQL Server配置管理器,可以通过“开始->程序->SQL Server 2005->管理工具->SQL Server配置管理器”,或者右键点击“我的电脑->管理”,然后打开服务与配置选项卡运行。

      9.企业管理器

      要找到新的管理器有一点麻烦,但你很快会发现在SQL Server 2005中,SQL Server企业管理器(SEM)已经被SQL Server管理中心 (SSMS)代替了。在对大量对象和服务器的管理中,SSMS的运行速度更快。

      一切操作都可以用脚本实现。而且多数对话框不是传统的对话框模式,你可以更好地同时应付多个任务。

      10.查询分析器

      对开发人员和数据库管理员来说最重要的查询分析器已经换成了查询编辑器。你可以在管理中心中选择新建查询来调用它。查询编辑器提供了编写和运行T-SQL查询语句的分析器基本功能,并可以与SourceSafe整合进行版本控制。然而,查询编辑器缺少调试T-SQL语句的功能。你需要使用Visual Studio 2005的数据库项目来进行调试。

      11.分析服务管理器

      在SQL Server 2005中,微软彻底改变了分析服务的管理和开发配置。以往的分析服务管理器被SSMS和商业智能开发中心(BIDS)所代替。分析服务的管理由SSMS处理,创建和部署立方体结构等开发任务由BIDS处理。

      12.DTS设计器

      在SQL Server 2005中,DTS被SQL Server整合服务(SSIS)所代替。在处理过程中,以往的DTS设计器被新的SSIS设计器所代替。SQL Server 2000中,DTS设计器是在企业管理器中启动。而SSIS设计器是在BIDS中启动。打开BIDS,选择“文件->新建->项目->商业智能项目->整合服务项目”以启动SSIS设计器。

      13.导入/导出向导

      菜单里没有了这个选项,但它并没有被删除,你可以在命令行模式下运行dtswizard.exe找到它(别被字面蒙骗,这个程序是使用SSIS的,不是DTS)。你也可以打开一个SSIS项目,右键点击SSIS包来启动导入/导出。

    来源:ddvip    
  • 用TD对迭代开发模型的流程管理

    2008-10-20 18:21:30

    用TD对迭代开发模型的流程管理
      从开发模型可以看出在软件项目实施过程中非常重要并且占项目实施时间最长的过程是迭代过程中的特性开发过程,而特性开发过程中的主线是需求,在特性开发过程中的设计、评审、编码、版本集成、测试等活动都是围绕着需求开展的。QA人员对迭代过程中特性开发过程的检查也是以需求为主线进行的,QA人员通过检查迭代过程中的需求点是否进行了需求分析、是否进行需求评审、是否进行了设计、是否进行设计评审、是否进行了编码、是否进行了测试等来判断项目组过程的实施是否满足软件项目实现的要求,是否有过程缺失,或过程实施流于形式。迭代过程中需求与需求的活动覆盖关系可以通过以下这个矩阵体现:

      矩阵中的A、B、C、D、L、M表示相关的技术文档或质量记录。
      通过上面的矩阵关系我们可以明白只要了解了需求与需求相关活动的覆盖情况就可以掌握迭代过程的实施情况,并且对项目的进度控制也会起到一定的作用。而TD的最大优势就是需求的覆盖功能,即通过测试用例对需求的覆盖以及bug与测试用例的关联关系从而了解和控制需求实现情况。因此我们可以利用TD的这一优势实现我们需要了解迭代过程中需求与需求相关活动覆盖情况的要求,在一定程度上TD可以起到软件项目实现过程控制的作用。
      一、使用TD对软件中心的过程进行管理
      使用TD可以代替一些质量记录和技术文档如评审记录、测试大纲等,而且TD有添加附件的功能,可以将相关文档作为某个任务的附件进行评审和管理。
      requirement页面中二、三级节点主要体现项目计划中的里程碑事件。
      1.1.2 TestDirector的requirement页面所需的字段:
    编号 字段名 字段说明 一般使用的节点 备注
    1 计划开始时间 手工填写 二、三级节点    
    2 计划完成时间    二、三级节点  
    3 创建人 自动生成(TD的录入人)   是否需要
    4 责任人  手工填写 二、三、四级节点    
    5 计划类型 计划内计划外 二、三、四级节点 主要用于需求点
    6 计划版本号  手工填写 四级节点  
    7 集成版本号  手工填写  四级节点  第一次版本集成的版本号
    8 集成版本时间  根据“集成版本号”填写自动生成  四级节点 日志
    9 测试通过版本号  手工填写  四级节点  
    10 测试版本时间  根据“测试通过版本号”填写自动生成 四级节点 日志
    11 变更版本号  手工填写  四级节点  计划变更
    12 变更版本时间  根据“变更版本号”填写自动生成  四级节点 日志
    13 交付版本号  手工填写  四级节点  
    14 交付版本时间  根据“交付版本时间”填写自动生成  四级节点 日志


      注:QA是requirement analyse的缩写,D是design的缩写,C是code的缩写,   EI是edition integration的缩写,T是test的缩写,TR是test review的缩写
      SI是software issuance 的缩写,PD是product delivery的缩写
      每一个过程中的任务前面加一个英文缩写前缀,是方便检查需求与需求相关活动覆盖情况用的。
      1.2.2 TestDirector的testplan页面所需的字段:
    编号 字段名 字段说明 一般使用的节点 备注
      计划开始时间  手工填写 二、三、四级节点  
      计划完成时间
    二、三、四级节点  
      任务下达者 自动生成(任务的创建者)
    三、四级节点  
      任务接受者 手工填写
    三、四级节点 发邮件给任务接受者。
      预计工作量 手工填写 三、四级节点  
      实际工作量 手工填写 三、四级节点  
      实际完成时间 手工填写 二、三、四级节点 二节点的实际完成时间应该是版本上线时间
      任务接受 否是 三、四级节点  
      任务接受时间 根据“任务接受”填写“是” 三、四级节点  
      评审类型 评审复审代码审核 三、四级节点  
      评审组长 手工填写 三、四级节点  
      评审方式
    会议传递个人 三、四级节点  
      提交评审 未提交提交 三、四级节点 发邮件给项目经理 (或评审组长)
      提交评审时间 根据“提交评审”变成“提交”自动生成 三、四级节点  
      Descrīption  手工填写  三、四级节点  
      Expected Result 手工填写 三、四级节点  

      1.2.3 Test plan与Requirement的覆盖关系:
      1、 requirement中项目计划过程、软件发布、产品交付,这些过程或活动是与test plan中项目计划、软件发布、产品交付是一对一的覆盖。
      2、 requirement中迭代开发过程中的需求点至少被每一个以QR_、D_、C_、EI_、T_前缀的任务覆盖,即多对一的覆盖。如下图:
      3、 Test plan中的需求分析、设计过程、软件实现过程、版本集成、测试过程(前缀为TR_)、软件发布、产品交付中的任务与requirement中迭代开发过程中的需求点的覆盖关系也可以是一对多的关系。如图
      通过以上的覆盖关系可以很快地查找到项目过程中有哪些过程缺失,有哪些技术文档和质量记录缺失,并且可以比较快的统计出过程的缺失率和技术文档和质量记录缺失率,还可以方便项目负责人对项目过程和进度的控制。
      1.3 TestDirector中test lab的设计
      1.3.1 test lab的命名规则分以下两种:
      1、 项目代码 + _ + requirement页面中第二级节点名称(项目计划过程、软件发布过程、产品交付过程)
      2、 项目代码 + _ + 迭代版本号 + _ + TestDirector的testplan页面中第三级节点名称(需求分析、设计过程、程序实现过程、版本集成过程、测试过程)
    将test plan中的任务加入到对应的test lab中进行运行。
      1.3.2 在test lab中运行任务所表示的意义如下:
      1、 项目计划过程、需求分析、设计过程在test lab中任务的运行表示对这些过程中的相关技术文档进行评审,一般是由评审组长和评审记录员执行。与这些test lab含义相同的还有程序实现过程中的代码复审和测试过程中的测试用例等文档的评审(有TR_前缀的任务)。
      2、 版本集成、软件发布过程、产品交付过程在test lab中任务的运行表示这些过程的完成情况。一般由项目经理和集成人员执行。
      3、 程序实现过程(不包含代码复审)在test lab中任务的运行结果表示开发人员对所编写的代码进行调试和单元测试的情况,集成人员可以通过运行结果决定是否集成。一般由软件开发人员执行。
      4、 测试过程在test lab中测试用例的运行结果表示对产品测试的结果,一般由测试人员执行。
      1.3.3 TestDirector的test lab页面所需的字段:
    编号 字段名 字段说明 备注
      执行人
    自动生成
      
      执行时间 自动生成  
      任务状态(status) 手工填写(pass、failde、no run等)  
      结果(Actual) 手工填写 记录过程实际操作的情况和相关信息。

      1.4 TestDirector中defects的操作情况
      Defects中存在的问题一般都是评审和测试产生的问题,这些问题可以按产品bug管理流程的要求进行管理和操作。
      二、使用TestDirector7.6的好处
      1、 TestDirector7.6的使用在一定程度上可以方便QA人员和相关负责人对项目过程和进度的了解和控制,可以较快的发现过程和相关文档的缺失情况,并且帮助可以QA人员和相关负责人了解某一需求点在某一时间处于什么过程中。
      2、 TestDirector7.6中有些字段的数据可以根据需要自动生成,这样可以保证数据的真实性。如通过一些自动产生的时间字段可以知道哪些过程是按流程进行的,哪些过程是后来补做的。
      3、 TestDirector7.6的使用有利于度量工作的开展。TestDirector7.6中可以根据需要增加字段,这样有利于数据的采集和统计分析,并且该工具本身也有统计功能。如使用TestDirector7.6可以较快的统计出过程的缺失率和技术文档和质量记录缺失率、以及各种评审方式所占的比例等。
      4、 TestDirector7.6的使用可以减少QA人员的过程检查时间,这样即使QA人员和测试人员是同一个人,工作量也不会很大,开发组提交测试进行软件测试,没有软件测试时可以做过程检查,这样既对产品质量进行了检查,也对过程质量进行了检查。
  • TD出现数据库连接错误时,处理方法

    2008-10-20 18:12:32

    no dbhandle could be created.ADO connecteion problem

    TD 8.0运行不到一个月突然断掉了,出现以上错误,百思不得其解.

    最终重新通过移植数据来解决.有时一个很棘手的问题,在找不到原因的情况下还不如重新做呢.

    这也是总结的经验.

     

  • TestDirector8.0数据库备份与还原 (亲身体验版)

    2008-10-20 18:05:27

    备份文件

        后台数据库使用SQLServer2000

    一、数据库备份:从原服务器上备份出所有您要还原的TD系统数据库(在SQLServer2000中操作);

    二、文件备份:

        1TD_Dir整个文件夹;

        2、备份C:\Program Files\Common Files\Mercury Interactive\DomsInfo 文件夹中的所有文件;

    还原数据库

    一、将备份出来的DomsInfo文件夹的内容覆盖到C:\Program Files\Common Files\Mercury Interactive\DomsInfo 文件夹中, 这里进行项目配置的还原。

        1、用Access打开DomInfo文件夹下的doms.mdb数据库文件,默认口令为tdtdtd,进行以下修改:

         a)修改Admin数据表,打开该表并修改Admin_pswd 的密码,如果你不想修改以前的Admin用户的密码也可以不进行该步操作。

         b)修改DBServers数据表,打开该表并修改DBServer_Name字段的第二行值为新TD服务器名称。

         c)修改Params数据表,打开该表并修改ACIServerSiteScopeurl行对应的Param_Value字段值用新TD服务器名称替换旧TD服务器的名称。

         d)修改Projects数据表,打开并修改每个项目的Physical_Directory路径修改为:C:\TD_Dir\Default\项目名称;

         e)修改TDServers数据表,打开并修改TDServer_NameTD_IP_Address列的值为新TD服务器的服务器名称。

     2、修改old_DomSetup.ini文件中的:

          TDSQLSERVER=TD服务器名称//比如我本机为TDSQLSERVER,是安装时默认的名称

          Value_1=TD服务器名称:9999//本地安装TD的机器名称,9999是默认的不要修改.

          Value_3=http://TD服务器称称/TDBIN/Redist/SiteScope/SiteScope4TD.htm

          说明:TD服务器名称替换为新的服务器名称或IP

    二、还原系统文件

     

    三、项目名称的创建及数据库的还原

    1、在TDSite Administrator页面中重新建立所要还原项目的域名和工程名;

    2、创建成功以后在SQLServer2000中会创建 数据库,

    还原备份的数据库

    1)、在TDSite Administrator页面中重新创建已存在的项目名称,要一模一样的,如cost-killer,创建成功后,在C\TD_Dir目录下会生成该文件夹.

    2)将备份出来的TD_Dir文件夹中的内容cost-killer(文件夹)  覆盖到C:\TD_Dir文件夹下相同目录下--(说明cost-killer”这个文件夹)就是要还原的项目系统文件

    还原后必须在查询分析器中执行以下2条语句:

        exec sp_change_users_login 'Report'

        exec sp_change_users_login 'Update_One','td','td'

        说明:这个脚本必须要执行,要不还原过来的项目不能激活,TDSQLServer不能建立链接。

    也可以在数据库中用户角色中新增一个td用户,设置为系统管理员权限

    、在右下角的任务栏中停掉TD服务,在启动TD服务;

    、打开TDSite Administrator页面中的进行数据库连接测试,及对每个项目进行连接测试。

  • 怎样解决TD与IE7.0不兼容的问题

    2008-10-20 17:53:15

    怎样解决TD与IE7.0不兼容的问题

     

    安装TD后,并不能顺利支持IE7.0的客户端浏览器,当然卸载IE7.0,重新安装IE其它版本可以解决这个问题,但是太麻烦了。有没有一种办法能让TD在IE7.0上运行?

     

    我们可以用记事本等打开服务器TDBIN/目录下start_a.htm源文件,然后进行编辑。

    查找到 var fMSIE3456”,然后在该行的末尾处分号前添加一段语句|| (ua.lastIndexOf('MSIE 7.0') != -1)”,保存即可。

     

    只是在start_a.htm源文件的“ var fMSIE3456末尾处分号前添加一段语句|| (ua.lastIndexOf('MSIE 7.0') != -1)”你会发现功能板块“TestDirector”确实能运行了,但是在管理员设置“Site Administrator”那个地方仍然不能运行,同样会报与IE7.0不兼容的错误,这里同样需要设置。

     

    设置方法相同,用记事本等打开服务器TDBIN/目录下的SiteAdmin.htm源文件,然后进行编辑。查找到 var fMSIE3456”,然后在该行的末尾处分号前添加一段语句|| (ua.lastIndexOf('MSIE 7.0') != -1)”,保存即可。

  • 创建MS-SQL类型的TD工程:实验及结论

    2008-09-13 17:20:53

    创建MS-SQL类型的TD工程:实验及结论
    2008年04月26日 下午 10:55

    【摘要】TestDirector是美国MI公司推出的一款功能强大的测试管理工具,在软件测试行业得到了广泛的使用。不少朋友在使用TestDirector的过程中,也遇到了一些问题。除了广遭诟病的RPC错误外,另外一个问的比较多的问题就是“为什么不能成功创建MS-SQL类型的工程?”。

    关于第二个问题,在两个比较热门的测试交流网站,“测试时代(www.testage.net)”和“51Testing软件测试网(www.51testing.com)”的测试论坛上讨论了不少的解决思路。在这里,我将以实验的方式给出一个经得起实践检验的简易的操作方法。限于篇幅关系,实验的过程已经经过技术上的简化处理。

    【关键词】TestDirector 数据库 MS-SQL

    • 前言

    在开始本实验之前,必须明确一个基本要求,即:欲创建MS-SQL类型的工程,必先创建有效的MS SQL Server数据库服务(DB Server)。因此讨论的焦点将转到如何创建有效的DB Server上。作者假设您已经对在TestDirector后台创建DB Server和Project基本操作很熟悉。

    本次实验将解答三个方面的疑问:

    • 创建DB Server必须要在TestDirector服务器上安装配置SQL Server客户端吗?
    • DB Server必须与TestDirector部署在同一台服务器上吗?
    • 如何配置SQL Server客户端参数?配置SQL Server客户端有什么用处?
    • 实验环境

    本次实验使用了局域网内三台台式机,机器配置属性如下表:

    机器名

    IP地址

    硬件信息

    软件信息

    备注

    TDServer

    192.168.0.1

    PIV2.4G/512M/60G

    Win2KSer

    TestDirector7.6EN

    TD服务器

    TestServer

    192.168.0.2

    PIV2.4G/256M/60G

    Win2KPro

    SQL Server2K开发版,实例名默认

    数据库服务器1

    DevServer

    192.168.0.3

    PIV2.4G/256M/60G

    WinXP

    SQL Server2K开发版,实例名Dev

    数据库服务器2

    表1 实验环境信息

    说明:上述环境中所提到的SQL Server2K,是以默认方式安装了客户端和服务器端,身份验证方式为“混合方式”,sa的口令均为sa。关于TestDirector7.6企业版和SQL Server2000开发版的安装过程,此处略去。

    疑问1:创建DB Server必须要在TestDirector服务器上安装和配置SQL Server客户端吗?

    为了解答心中的疑问,我在安装TestDirector了的机器上未安装SQL Server2000开发版。

    这次我们选择TestServer作为DB Server。

    打开浏览器,输入http://tdserver/tdbin/SiteAdmin.htm,回车,输入口令后进入到TestDirector的后台。选择DB Server页。点击New 按钮,添加一个新的DB Server。如图1:

    图1

    Ping一下,OK,通了!将上面的Server Alias 改为192.168.0.2,效果一样。

    一般来说,只要这里所建的DB Server可以ping通的话,那么创建MS-SQL类型的Project是没问题的。真的是这样吗?让我们来试一下。

    选择Projects页,点击Creat按钮,打开“Creat Project”对话框,输入如下信息:

    图2

    点击Next按钮,服务名字选择TestServer:

    图3

    点击Next按钮,按照提示操作,成功创建了MS-SQL类型的TD工程FromTestServer。

    结论1只要网内其他机器上安装了SQL Server2000服务程序,就能成功创建MS-SQL类型的DB Server,进而可成功创建MS-SQL类型的Project。也就是说,TestDirector服务器上不需要安装配置SQL Server客户端。

    结论2TestDirector服务不必与DB Server部署到同一台机器上(回答了前面所提到的第二个疑问)。

    实验进行到此,有人可能会问,同样的,可以用DevServer创建有效的MS-SQL类型的DB Server吗?

    让我们来试一下,看是不是如我们所想。

    如前所述,添加一个新的DB Server,如图4:

    图4

    Ping一下——咦,奇怪哎,怎么ping不通了?!

    让我们来看一看这个SQL Server与上一个SQL Server有什么不一样(参见“表1 实验环境信息”)。噢,这个SQL Server的实例名不是默认的,而是安装时指定的!那么在创建DB Server的时候,服务别名(Server Alias)应该输入什么呢?

    经过多次实验,这里的服务别名应该为“DevServer\Dev”,即:服务器名\实例名。

    服务别名输入“DevServer\Dev”,可以ping通。至此,使用带实例名的SQL Server成功创建DB Server。

    我们还有最后一个疑问:如何配置SQL Server客户端参数?配置SQL Server客户端有什么用处呢?

    对于这个问题,也是大家争论最多的地方。有的人按照TestDirector的安装手册中的说明,成功创建了MS-SQL类型的Project;有的人使用同样的配置参数,却失败了。为什么呢?

    我们先来看一看TestDirector的安装手册中是如何说明的:

    首先要在TestDierctor服务器上安装SQL Server客户端程序(废话#%£);

    其次,配置客户端参数:

    To configure the Microsoft SQL Server 2000 client:

    • Choose Start > Programs > Microsoft SQL Server > Client Network Utility. The Server Client Network Utility dialog box opens.
    • Click the Alias tab.
    • Click Add. The Add Network Library Configuration dialog box opens.
    • In the Server alias box, type TDSQLSERVER.
    • In the File Name box, type the protocol name, as configured in the Microsoft SQL Server. For example: Named Pipes.
    • In the Parameters box, type the Microsoft SQL Server name.
    • Click OK to close the Add Network Library Configuration dialog box.
    • Click OK.

    按照上面的提示,我在TD服务器上安装了SQL Server客户端,但并没有成功创建DB Server。经过多次分析和实验,我仍没有找到问题的答案(怀疑有人成功只是碰巧满足了某些条件——有运气的成分,嘻嘻),但找到了有效的解决方案。

    主要过程如下:

    第一步、在TDServer上安装SQL Server客户端程序;

    第二步、打开客户端工具,点击Alias页,如图5:

    图5

    第三步、点击Add按钮,并选择“TCP/IP”;

    这里又要分两种情况:

    • 对于未指定SQL Server实例名的机器TestServer,配置参数如下:

    图6

    • 对于指定了SQL Server实例名的机器DevServer,配置参数如下:

    图7

    第四步、进入TestDirector的后台管理,新建2个DB Server,服务别名分别为上面的“Test”和“Development”,成功创建DB Server。继而使用相应的DB Server成功创建了MS-SQL类型的Project。

    呵呵,结论出来了(好像仓促了点):

    结论3对于未指定实例名的SQL Server服务器,在配置TD服务器上的SQL客户端参数时,“Server name”输入SQL Server服务器的机器名或IP即可。

    结论4对于指定了实例名的SQL Server服务器,在配置TD服务器上的SQL客户端参数时,“Server name”输入SQL Server服务器的“机器名(或IP)\实例名”。

    结论5在TestDirector服务器上配置不同的SQL客户端参数,可以帮助TD管理员区分不同的DB Server,例如测试部门可能会有专用的数据服务器,开发部门也希望用自己专用的数据服务器,那么在SQL客户端指定容易识别的服务别名就显示出其好处了:TD管理员在创建MS-SQL类型工程的时候,就可以在根据需要选择使用测试部门的数据服务器或者开发部门的数据服务器。

    • 操作建议

    本文不准备就“如何创建MS-SQL类型的TD工程”给出什么所谓的“最佳实践”,作者只想给那些急于解决类似问题的TD使用者提供一个思路。作者给出如下一些操作建议:

    • 尽量将TestDirector服务和SQL Server数据库服务部署在同一台机器上;
  • 整合测试与质量的关系,建设高效测试团队

    2008-09-10 16:24:20

     

    整合测试与质量的关系,建设高效测试团队

    (沈雪芳、谢敏、戴金龙)

    本文版权归计算机世界,著作权归作者所有。任何转载和大幅引用,请务必征得作者同意。

    1 整合测试与质量的关系

    在目前的软件行业氛围下,一提到软件质量,肯定有不少业内人士的第一反应是ISO、CMM、6σ之类的标准,进而反应出的词汇就是SQA [Software Quality Assurance(软件质量保证)]。在这样的氛围下,不少软件企业和机构都纷纷组建了自己SQA部门,并把提高质量的希望全部都寄托在SQA身上。这当然是好事,至少说明了质量意识的普遍觉醒;但要高层管理者清醒认识到“质量工作是由多个部门各司其职共同完成的”这似乎就很困难了。

    这样的大环境造成不少企业和机构的软件质量保证部门与软件测试部门关系尴尬:究竟是让测试部门下属于质量保证部门,还是应该单列测试部门使其以独立、中立的姿态出现?另外,测试部门与质量保证部门的权力和职责分配如何把握,谁更有权在必要的时候对某个开发项目、某个开发人员出示“红牌”、“黄牌”,谁更应该对用户投诉的产品技术问题负更多不可推卸的责任?这表面看来是个权力之争,实质上反映出的是人们对于质量的认识存在着误区。为此,笔者打算从源头上来理顺这些关系。

    质量,产品的内在品质;对于软件产品而言,质量还应包括软件过程的品质。那么,如何判断某软件产品是否是高质量的?目前广泛认可的标准是“软件产品能否较好地满足用户相关的各类需求”。然而,用户对软件的需求的往往包罗万象:如功能需求、性能需求、约束性需求、潜在需求、甚至包括相互冲突的需求以及技术上不可实现的需求等等,这就导致等软件产品生产出来再验证“产品是否满足用户需求” 容易成为一件引发供需双方争执的麻烦事,而且对于软件企业而言这种质量工作未免代价过高、风险太大,一旦查出严重问题,毫无补救措施。鉴于此,有必要进一步细化、具体化这项工作,并尽可能早地把这项工作融入到具体工程实践中来。目前业内解决这个问题的核心策略是控制软件工程的品质以及软件产品(包括中间产品)本身的品质。前者主要涉及企业在工程过程中选用什么样的质量体系以及如何监督标准的执行,后者主要涉及验证产品在各个阶段具体品质如何、有无偏离用户需求等等。或者更专业一些,前者称为SQA,后者称为SQC。(关于SQA以及SQC更清晰、规范的定义可以参考相应的标准化文件。本文考虑到通俗性暂略。)由此,我们可以看出,SQA、SQC这二者都是质量工作的范畴,甚至在某种意义上后者更贴近于质量工作本来的要义。那么,软件测试在软件质量工作中处应于一个什么样的位置呢?笔者认为软件测试应是SQC的核心内容和重要组成部分。缺少了软件测试,SQC余下的工作就成为无魂之躯,所谓“皮之不存,毛将焉附”。由此看来,目前沸沸扬扬、闪亮登场的CMM、6σ等等标准和体系,虽然被部分管理者顶礼膜拜,但充其量也只是SQA的一个组成部分,它们不能囊括质量工作的全部。相反,软件测试是SQC的核心,它更贴近质量工作本来的要义,理应受到更多的关注。

    如果把软件质量工作范畴的全部外延定义为软件质量管理(SQM),那么,它天然具有两个基本要义,即软件质量保证(SQA)和软件质量控制(SQC)。SQA和SQC各司其职,相辅相成,统一于软件质量管理(SQM)。拿一部汽车来做比喻吧,质量控制(QC)就是所有那些告诉你汽车当前运动状态的仪器仪表;质量保证(QA),包括各类标准,是告诉你所有部件工作原理的用户手册;而质量管理(QM)则是你要追求的目标,比如你希望能平安、高速地驾驶汽车。可以看出,为了实现质量管理(QM)的目标,质量保证(QA)和质量控制(QC)都是不可或缺的部分。

    2 建设高效测试团队

    既然测试工作是这么的重要,那么我们怎么来做好这件事情呢?俗话说“工欲善其事,必先利其器”。我们在具体深入实施测试技术之前,首先需要建立并维护一个高效的测试团队。在一个企业或机构内部,如果没有一个稳定的测试团队,要想测试活动不流于形式也难。然而即使是这么一个浅显的道理也并不是广为管理层所接受的。为数不少小型软件企业将测试作为产品面临发布时的一个小“插曲”,往往临时抽调几名程序员对产品的功能粗略测试一下即交付客户(甚至在进度和成本不足时首先砍掉这一块)。这种仓促完成的产品通常质量问题很多,企业的信誉度自然也很难上得去。他们进行着这样的“怪圈”循环:年复一年做着小项目,周而复始地做着这类有名无实的“软件测试”。企业效益却不见稳步增长,甚至在严峻的市场竞争中一蹶不振。为了规避这种情况的发生,我们首先应抛弃小企业惯常的思维模式,不计较一时一地之利益,立足长远,着手组建高效测试团队。

    2.1招募测试人员

    人是测试工作中最有价值也是最重要的资源,没有一个合格的、积极的测试小组,测试就不可能实现。然而,在软件开发产业中有一种非常普遍习惯,那就是让那些经验最少的新手、没有效率的开发者或不适合干其他工作的人去做测试工作。这绝对是一种目光短浅的行为,对一个系统进行有效的测试所需要的技能绝对不比进行软件开发需要的少,事实上,测试者将从职业生涯中获得极其广泛的经验,他们将遇到许多开发者不可能遇到的问题。特别地,测试团队负责人应该尽量谨慎地把其他团队淘汰的人吸收到测试团队中。一般,这类成员给整个团队带来负反馈。当然,有些没有在其他团队中做出成绩的人在测试团队中做出很大成绩,但是这样的人总是个别,并不多见。

    那么,测试团队需要招募什么样的成员呢?这里,笔者总结了以下几点:

    首先,测试人员最好能具有如下部分品质:沟通能力、移情能力、自信心、外交能力、迁移能力以及怀疑精神。

    沟通能力:一名理想的测试者必须能够同测试涉及到的所有人进行沟通,具有与技术(开发者)和非技术人员(客户,管理人员)的进行交流的能力。

    移情能力:和系统开发有关的所有人员都处在一种既关心又担心的状态之中。用户担心将来使用一个不符合自己要求的系统,开发者则担心由于系统要求不正确而使他不得不重新开发整个系统,管理部门则担心这个系统突然崩溃而使它的声誉受损。测试者必须和每一类人打交道,因此需要测试小组的成员对他们每个人都具有足够的理解和同情,将测试人员与相关人员之间的冲突和对抗减少到最低程度。

    自信心:  开发者指责测试者测试结果有误甚至反唇相讥是常有的事,测试者必须对自己的劳动成果有足够的自信心。如果对开发者的言语太过刻意的话,就不能完成什么更多的事情了。

    外交能力:机智老练的外交手法有助于维护企业内部人与人之间的关系,测试者在告诉开发者他的软件有错误时,也同样需要一定的外交手腕。如果采取的方法过于强硬或过于软弱,都会让测试工作的意义受损。

    迁移能力:一个理想的测试者应该有能力将以前曾经遇到过的类似的错误从记忆深处挖掘出来,并迁移到当前测试活动中。这一能力在测试过程中的价值是无法衡量的。因为许多新出现的问题和我们已经发现的问题相差无几。

    怀疑精神:对任何可能出错的地方都亲自测试一番。不听信开发人员毫无意义的保证。坚持以事实说法的工作作风。

    需要说明的是并不是测试人员需要具备以上列出的全部品质。笔者认为,能具备两到三项就很不错了。人无完人,关键是用其所长,避其所短。测试团队应该造就这样的氛围,测试组成员应自发地相互学习,相互交流,日积月累达到相互提高的境界。

    其次,测试组成员应具备良好的技术能力或技术学习能力。由于测试组各个岗位需要的技能各有差异,所要掌握的测试技术也就千差万别。比如测试管理人员需要对测试管理工作的内容及相关辅助工具的使用胸有成竹;自动化测试人员需要对相关自动化测试工具炉火纯青;测试脚本撰写人员需要对脚本语言的领悟了然于胸;手工测试人员应对相关测试中最易发现问题的地方如数家珍;而测试团队负责人则必须既熟悉被测软件系统的概念模型、设计模型又要掌握开发过程中涉及到的相关开发工具,除此之外,测试经理还必须深度掌握测试流程的裁剪、测试计划的撰写、测试活动的组织与开展以及测试效果的评价等等必备的技能。

    当然,新招募的测试人员不可能像上面说的那么理想。关键是他们是否热爱测试这项工作,对相关的工作内容是否感兴趣以及他们的学习能力如何。俗话说:“天才的第一声啼哭和白痴没有两样。”怎么做一个好的伯乐,发现卧槽的千里马,是一门很深的学问和艺术。

    2.2 测试团队制度建设

    创建测试团队的第二步,就是搭建测试团队的制度。一个运作良好的部门,需要有完备的制度支撑。俗话说“没有规矩,不成方圆。”制度的建设可以规范测试团队的工作开展,以形成一个共同的工作目标。一颗好的树苗,如果没有外界的干涉、约束、引导,任其发展,可能长到后面树干都歪了。一个测试团队如果没有良好的制度约束,很有可能导致人心涣散,滋长负面的风气,团队成员情绪消极。测试团队制度的制定,需要团队成员的共同讨论,而不是测试团队负责人自己决定。测试团队的制度,可以考虑以下几个方面:

    n         汇报制度  团队成员汇报本周工作情况及下周工作计划、遇到的问题以及需要提供的帮助,培养团队成员的汇报及计划习惯。

    n         工作总结制度  成员每个阶段汇报上阶段工作经验和教训,并在部门例会上交流、分享经验及教训,避免同样的问题重复出现。

    n         奖惩制度  对于贡献突出的成员予以奖励,对于业绩差的提出批评,有效的保持测试团队的工作热情。

    n         测试件审核制度  对测试件进行审核,去粗存精,鼓励使用和提出改进,保证提交客户及公司领导的测试件质量。

    n         会议制度  定期召开部门例会,讨论、解决工作中的问题,并提供部门内的学习平台。

    制度的制定要体现公正客观的精神,同时要尽量做到人性化,务求实效,以正面鼓励为主,并且制度应该是可执行的。在制度执行过程中出现问题时,团队负责人要主动检讨,分析问题,主动承担责任。这样方能凝聚人心,使测试团队负责人具有领导魅力、感召力及威信。

    关于成员业绩的考评,目前,已有不少软件企业推行给测试人员定级别的制度。对优秀的成员给予提升加薪的机会,对无所作为的成员不予以提升,对长期以来能力上不能胜任的或习惯性无视团队制度的予以降级或淘汰。这无疑是一个好的做法,但成员业绩的具体考评办法,建议尽量做到公正客观。切忌主观好恶导致的毫无理由的级别升迁。

    2.3 测试团队的分工

    创建测试团队的第三步,就是进行测试团队的分工,明确工作职责。优秀的员工就像大雁,高效的测试团队好比雁群。

    雁群是由多支有共同目标的大雁组成,在队伍中它们有明确的分工当队伍停下休息时它们中有负责觅食﹑照顾年幼或老龄的大雁﹑有负责雁群安全警戒的大雁﹑有的大雁则安静休息﹑调整体力。在飞行过程中它们大声嘶叫以相互鼓励从而通过共同扇动翅膀来形成气流,使队伍快速前飞。在雁群中有任何一只大雁受伤或生病而不能继续前飞,雁群中自动有两只大雁留下来守护照看受伤或生病的大雁直至它恢复或死亡然后它们再加入到新的队伍继续南飞直至目的地,这就是我们所说的真正团队精神。

    因此,职责要按照便于执行和操作的原则来设计,分工要根据岗位和人员的特点来安排,对不同能力的成员进行分工,以求最大程度的发挥成员的特长。否则,团队合作的基本前提就会变得十分薄弱,必将耗费过多的沟通和协调的精力,事倍功半。

    另外,对职责的明确,可以避免其他团队成员滥用测试团队成员。有时别人不能善待测试员,或者让测试员做其他严重超出职责的事情。如果测试团队负责人发现测试员遇到这样的困难或受到这样的对待时,应该为员工提供精神支持,告诉员工如何应对这类问题,并解决各种不公正待遇。

    n         测试团队的职责描述的例子如下:

    u       系统测试组织  包括,项目测试组的组建、测试任务分配等。

    u       进行测试计划/设计/开发/执行工作

    u       建立测试体系,完善测试方法论  包括,测试体系的搭建,研究测试方法、测试理论,并对研究成果进行沉淀、推广。

    u       研究和实施测试工具  包括,研究测试工具的使用,跟踪业界流行的测试工具,并尝试使用测试工具来提高测试效率。

    u       项目组测试工作指导,记录改进意见

    u       软件开发质量抽检与评定  包括,通过各种手段对各个里程碑的产品质量进行抽检,并对抽检结果进行分析、评价。

    n         测试团队的分工及对应的职责例子如下:

    角色

    职责

    测试管理员

    n       负责测试项目的管理;

    n       测试过程问题的处理与反馈;

    n       测试组织/计划;(含性能测试)

    n       测试过程状态报告。

    测试设计员

    n       描述测试需求,设计测试用例;

    n       性能测试方案的设计;

    n       测试环境搭建情况的检查;

    n       测试脚本的审核。

    测试执行员

    n       根据需要开发测试脚本;

    n       按照测试用例、测试脚本执行测试;

    n       创建并维护测试工具环境;

    n       项目测试工作指导。

    测试监督与测量员

    n       测试测量;

    n       测试过程问题的汇总与反馈;

    n       开发产品的质量抽检与评定。

    2.4 测试工作的流程建设

    创建测试团队的第四步,就是进行测试团队工作流程的建设。测试团队工作流程,包括:测试过程、日常工作流程、团队内培训流程、突发任务处理流程等。部门职责的明确,团队成员的分工,它们着眼于局部,而测试团队工作流程,则着眼于团队全局。团队的工作流程的每个环节之间既要紧密,又要能够便于执行。因为日常工作流程、团队内培训流程、突发任务处理流程相对测试过程来说较简单,故不赘述。

    通常来说,测试过程可以包括以下几方面:

    计划测试-〉设计测试-〉执行测试-〉分析测试

    注:“计划测试”环节中,包含对测试需求的描述。

     计划测试

     设计测试

     执行测试

     分析测试

    注:在“计划测试”环节中,包含对测试需求的描述。

    我们可以通过以下步骤来建立测试过程。

    1. 根据对公司现有测试状况的了解,及个人的测试经验,起草测试流程及相关的模板;

    2. 通过一到二个项目的实践,记录测试流程草稿中的问题及不足之处;

    3. 根据实施经验,完善测试测试流程,得到测试流程初稿,并起草相关的实施指南;

    4. 根据一个项目的实践,记录此次实践过程中的问题;

    5. 根据第二次实践记录,完善测试流程及相关的模板、指南、表格等

    6. 发布测试过程(含测试流程、模板、表格、指南)第一个版本。

    通过上述方式,可以在公司内初步建立测试过程,并在实践中不断改进、完善。对于测试工作比较完善的公司,可以引进测试外包的机制。该测试外包,指测试团队独立于项目组运作,项目组将测试任务外包给测试团队进行。这样做的目的,可以充分发挥测试成员的技能、业务优势,并可对测试成员进行复用。因为在一般公司中,测试团队成员的工作任务很多,工作压力很大,如果每个项目都投入2个测试成员,一个6人的测试团队,最多就只能同时进行3个测试项目。而如果进行测试外包,那么可以根据项目测试工作量、进度要求、测试内容要求,对人员进行合理分配,可最大限度的对测试人员进行复用。

    2.5 团队成员的能力提升

    创建测试团队的第五步,就是提高员工的能力。有了明确、合理的分工后,需要针对这些分工对团队成员进行有意识的指引,提升团队成员的技能。测试团队负责人需要负起提高员工能力的责任。只有一个懂得不断充实自我、提高自我能力的学习型团队,才能在发展的社会创造出更多的“奇迹”。因此,高效的测试团队,要不断学习,提高团队成员自身的能力,从而提高测试团队整体的能力。

    测试团队成员能力的提高,包括三方面:

    1   积累测试人员的专业领域知识,提高业务能力

    随着测试人员对制约产品设计的外部因素、用户如何使用(或将使用)类似产品、什么样的问题对他们很重要、竞争对手如何解决这些问题、这个行业的背景、这个行业的业务包括什么等了解的更多,他们工作的有效性会显著提高。

    可以通过以下方式来积累测试人员真正的专业领域知识,提高他们的业务能力:

    u       阅读该行业的杂志和书籍

    u       与公司该行业的业务分析员都交流,尝试从业务的角度去看待系统

    u       在客户现场工作。比如,可以参加客户的验收测试、参与对客户进行的培训等。

    u       每周利用几小时的时间,解答公司客户提出的问题。通过这种办法,测试人员最终能够熟练解答问题,并且获得很多的信息,如客户的使用习惯等。

    2   积累测试人员相关技术方面的专业知识,提高专业能力

    由于技术不断变化,各种不同系统框架的流行,各平台间的交互越来越多。测试牵涉到的方方面面技术越来越多。系统软件与产品变得越来越复杂,为了能够适应这种变化,测试人员需要提高自身的技术技能,以便能够跟上技术更新的步伐。

    3   综合能力提高

    测试人员不仅仅需要提高自身的测试技能,掌握测试工具、开发工具、测试方法等,测试人员还需要提高自身各个方面的能力。例如对个人的管理能力、自我控制能力、沟通能力、协调能力、演讲能力、口头表达和文字表达能力。在这些能力中,写作能力尤为重要。测试人员的工作在很大程度上要撰写报告等以劝说他们做事情。报告写的越好,报告产生的作用越大。测试产生的效用就越大。

    2.6 测试团队的文化建设

    创建测试团队的第六步,就是建设测试团队的文化。俗话说:态度决定人生的成功高度,而团队文化就像是个人的“态度”,它决定了团队效力是否1+1>2。如果测试团队没有一个很好的团队文化,测试团队内部必然会产生内耗,团队整体上成为一盘散沙。

    世界上最伟大的橄榄球教练文斯·隆巴迪在谈起成功球队的特征时说:从基础教起,每个队员职责明确、球艺高超;懂得与别人配合,从整体出发打球,决不能出个人风头,违反纪律;全队拧成一股绳,相互关心,相互热爱,恪尽职守。这就是成功的团队文化。它具备了以下特征:目标明确、职责清晰、团结协作、密切配合、相互关心、有共同的价值观。

    测试团队文化建设可以借鉴隆巴迪的经验,首先明确共同的目标。例如,在两年内,测试团队能够对外输出测试服务,成为公司的一个业务部门;或者保证本单位的产品质量能将客户满意度提升到一个档次;或者更具体些,将产品的错误、缺陷控制在某个水平上。其次,团队内部还要建立一个良好的沟通渠道与反馈机制。事实证明,顺畅、平等的沟通能及时规避团队内部的摩擦,收集到更好的测试建议和方案。再次,团队内不应有官僚作风存在,不搞小圈子。内部批评时尽量做到对事不对人;团队发生重大失误或错误时,团队负责人应主动承担责任,做自我检讨,不推脱责任。最后,测试团队内部应培养一定程度的友谊关系。适当开展一些集体活动:可以是每天一次短暂的下午茶(如Coffee Break),也可以是测试团队的一次户外远足或文娱活动等等。

    以上我们讨论了测试团队的文化建设。文化是一种长期习惯的积淀。测试团队负责人需要首先清醒认识到测试团队需要哪些好的习惯,并且身体力行,持之以恒、潜移默化地将测试团队文化的精神传承给每位测试团队的成员,使得团队逐渐凝成一股强大的精神力量。

    3 结论与总结

    以上我们对如何理顺测试与质量的关系、如何建设高效的测试团队这两个问题做了一些初步的探讨,澄清了业内对软件测试的一些模糊认识。然而,创建并维护一个高效的测试团队是一项长期的、艰苦的工作。这项工作对企业机构而言,虽然短期效益并不明显,但它对提高产品质量、提升单位信誉、促进企业长足发展而言,绝对是很有意义的事情,它也是目前软件企业走向规模化经营的必经途径。在众多的中长期投资中,建设和培养一支高效的团队将成为企业最佳的投资之一。


  • BugFree学习笔记

    2008-09-10 16:06:45

    Bug 生命周期

    新建的Bug处于Active状态,可以通过编辑指派给合适的解决者。解决Bug之后,Bug状态变为Resolved,并自动指派给创建者。创建者验证Bug。如果未修复,再重新激活,Bug状态重新变为Active;如果已经修复则可以关闭,Bug状态变为ClosedBug生命周期结束。已经ClosedBug如果重新复现,也可以直接激活。具体流程如下图所示。

    buglifecycle.PNG

    Bug7种解决方案

     

    3种无效的Bug

    By Design

    设计需求就是这么设计的

    Duplicate

    这个问题别人已经发现

    Not Repro

    无法复现的问题

     

    4中有效的Bug

    Fixed

    问题被修复

    External

    外部原因(比如浏览器、操作系统、其他第三方软件)造成的问题

    Postponed

    发现的太晚了,下一个版本讨论是否解决

    Won’t Fix

    是个问题,但是不值得修复

     

    Bug 字段说明

    Bug 标题:为包含关键词的简单问题摘要,要有利于其他人员进行搜索或通过标题快速了解问题
    项目名/模块路径:指定问题出现在哪个项目的哪个模块。Bug处理过程中,需要随时根据需要修改项目或模块,方便跟踪。如果后台管理指定了模块负责人,选择模块时,会自动指派给负责人
    指派给Bug的当前处理人。如果不知道Bug的处理人,可以指派给Active,项目或模块负责人再重新分发、指派给具体人员。如果设定了邮件通知,被指派者会收到邮件通知。此外,状态为ClosedBug,默认会指派给Closed,表示Bug生命周期的结束
    抄送给:需要通知相关人员时填写,例如测试主管或者开发主管等。可以同时指派多个,人员之间用逗号分隔。如果设定了邮件通知,当Bug有任何更新时,被指派者会收到邮件通知
    严重程度Bug的严重程度。由Bug的创建者视情况来指定,其中1为最严重的问题,4为最小的问题。一般来讲,1级为系统崩溃或者数据丢失的问题;2级为主要功能的问题;3级为次要功能的问题;4级为细微的问题。
    优先级Bug处理的优先级。由Bug的处理人员按照当前业务需求、开发计划和资源状态指定,其中1的优先级最高,4的优先级最低。一般来讲,1级为需要立即解决的问题;2级为需要在指定时间内解决的问题;3级为项目开发计划内解决的问题;4级为资源充沛时解决的问题。
    其余选项字段(Bug类型如何发现操作系统浏览器):可以通过编辑Lang/ZH_CN_UTF-8/_COMMON.php来自定义

    创建BuildBug是在哪个版本(Build或者Tag)被发现的
    解决BuildBug是在哪个版本(Build或者Tag)被解决的
    解决方案:参考Bug7中解决方案。如果解决方案为Duplicated,需要指定重复BugBug编号。

    机器配置:测试运行的硬件环境,例如Dell G280 2G/200G
    关键词:主要用于自定义标记,方便查询。关键词之间用逗号或者空格分隔。例如,对本地解决的Bug可以首先标记localfix,等真正提交新版本时,查询所有关键词包含localfixbug,统一进行解决
    相关 Bug:与当前Bug相关的Bug。例如,相同代码产生的不同问题,可以在相关Bug注明
    上传附件:上传Bug的屏幕截图,Log日志或者Call Stack等,方便处理人员

    复现步骤[步骤]要描述清晰,简明扼要,步骤数尽可能少;[结果]说明Bug产生的错误结果;[期望]说明正确的结果。可以在[备注]提供一些辅助性的信息,例如,这个bug在上个版本是否也能复现,方便处理人员

    http://www.bugfree.org.cn/help/#_Toc201666191   使用帮助

    http://www.51testing.com/batch.viewlink.php?itemid=3562  图解BugFree简单应用

    做为开源软件,需要设置特定权限可以自己开发

  • 8月末工作总结(阿里软件平台接入测试)

    2008-08-28 12:19:17

    本月重点测试SAAS在阿里软件平台的业务。比较麻烦,有很多接口程序需要测试。

    (1)接口环境配置。

    需入软件的接口地址,在阿里平台测试:测试无法显示此页。

    查原因1:发现域名没有解析

    域名成功解析后,还是无法显示页面。

    在程序www/下加入php.php 输出phpinfo();无法输出PHP解析后信息。

    查原因2:PHP程序无法解析的原因,服务器上设置问题

    解决这二个问题后,可以成功跳转到阿里互联平台了,但是页面无法显示。

    原因3:发现程序中缺少接口文件,除了login.php,pre.php这二个接口外,还有include/wsclient/aliWsClient.class.php这个也是接口文件。www/demo/demo/目录;

    pre.php中设置的程序目录名出不对应。改正这些,终于解决了PHP程序生效的问题。

    (2)接口调试准备:测试4个功能,分别为免登录测试、定价页面测试、通知URL测试和综合测试。

        1、免登录测试,即在开发者社区中模拟架上应用点“使用”过程,就是测试从平台登录到ISV应用系统,ISV应用调用平台免登录接口验证用户。

        2、定价页面测试,如果ISV应用有做特殊的自定义定价页面,比如除时间相关,具体应用价格还跟空间、人数相关,或提供特殊的套餐机制。在该类应用申请上架时,需要填写订购URL,测试定价页面。如果是简单的模型定价,比如:一个月月租多少元,不需要做这块测试。

        3、通知URL测试,平台在订购应用成功、付款成功或退订成功,都会通知ISV。如果ISV应用想获得平台的通知信息,需要在申请上架时,填写具体通知URL。

        4、综合测试,模拟集市购买,走的是真的软件购买,注意:做为ISV用户,在注册软件时,平台自动给予了使用自己应用100年的有效期,所以用ISV用户去综合测试购买软件会续订不成功,请新注册终端用户,再进行测试。终端用户注册后,因软件没上架,没有入口购买,请在浏览器里输入购买应用URL就可以购买了

    (3)接口调试过程 :详细介绍一个免登陆测试的过程:这个颇为复杂,也花了不少时间才解决。

    免登录,也就是阿里系统已经默认为管理员订购了该软件,填写好免登录测试的URL地址就可进行免登录测试。

    接口开发与测试”页面,点击“免登录测试”按钮,如果能以ISV的身份免登陆到您的软件的测试环境,那么免登录测试就成功了。

    要参考的文件:免登陆接口调用手册

    免登接口validateUser是个非常重要的接口,在调用任何其它接口前,必须要调用此接口.下面我就简单介绍下validateUser接口的使用场景,使用流程及具体的调用方法.

    使用场景:
    验证用户身份,确保用户已经登录软件互联平台,并且是该应用的有效使用用户,一般从阿里软件互联平台跳转到ISV应用的身份验证过程中需要使用到。如用户订购了一个软件,在用户的“我的软件”中会出现如下页面:

    在用户点击了“点击使用后”,ISV应用应该要调用validateUser接口来验证用户的身份。

    免登流程:

    从上图我们可以看到,用户免登录时主要是调用validateUser接口。
    接口参数介绍:
    在这里我要介绍的主要是sip_sign参数和token参数,因为ISV在调用接口过程中,容易在这两个参数上出问题。接口的其它参数在接口列表中已经有详细说明,在这就不说了。
    1、token
    token是身份验证令牌,可以在软件互联平台中跳转到ISV App时的URL参数中取得。token请求超时限定为10秒钟。所以如果ISV在token生成超过10秒以后才使用它,那么在调用接口时,会提示签名无效。
    2、sip_sign
    平台通过签名参数来防止传输过程中包被篡改,所以这个参数是很重要的。然后这个参数的生成也是比较繁琐的,很容易出错。如果ISV生成的签名参数与平台生成的签名参数不同,那么调用时同样会提示签名无效。在生成签名参数时,有几点是要非常注意的,即参与签名的参数的个数、参数值的格式及参数的排序。有关sip_sign的生成,我们在论坛中已经有好几个帖子了,有原理介绍的,也有具体生成代码的。帖子如下:
    1)参数生成攻略:http://forum.alisoft.com/viewthread.php?tid=715&extra=page%3D1
    2)参数生成代码:http://forum.alisoft.com/viewthread.php?tid=659&extra=page%3D1(PHP版)

    以下是PHP版接口调用的范例:阿里写的不全,也是程序员自己摸索出来的

    validateUser接口调用生成签名完整DEMO
    注意$signStr变量的参数是升序排列,然后连接字符串形成: $sip_sign=md5(sip_appsecret+[param1+value1…paramn+valuen])
    复制内容到剪贴板代码:
    /**
             * 阿里软件平台的REST方式认证
             * [url]http://sipdev.alisoft.com/sip/rest[/url]
             * ?sip_timestamp=2008-05-02+18%3A48%3A12
             * &sip_appkey=10184
             * &appId=10184&userId=2175944
             * &sip_sign=713A26A75979CB2FCF915EE2DE41F2C7
             * &appInstanceId=f2bf7b29-abee-4a3e-8678-949cf8bad9c7
             * &token=0C1BC761C916D2A203D188993F29621D2D739299195A75B07CDC9A4E534C28F1FCF006F0FB8DE9E24E731D93275AFC56
             * &sip_apiname=alisoft.validateUser
             * &sip_sessionid=b4927f1fef8b4155b2c9b5e2dfe5ae0e
             *
             * sip_sign=md5(sip_appsecret+[param1+value1…paramn+valuen])
             */
            
            private $APP_ID = 10184;
            private $CERT_CODE = "注册软件时生成的CODE";
            private $SIP_URL_PRE = "http://sipdev.alisoft.com/sip/rest";
           
            public function validateUserByREST($userId, $appId, $appInstanceId, $token){
                    $proxy = new Snoopy();
                    //准备本次请求参数
                    echo $timestamp = date("Y-m-d H:i:s");//'2008-05-02 21:18:58';
                    echo $sip_sessionid = '7d052759158b46e6b920397ab47441d5';
                    echo $token = $token;
                    //生成签名
                    $signStr = $this->CERT_CODE.'appId'.$this->APP_ID.'appInstanceId'.$appInstanceId.
                            'sip_apinamealisoft.validateUser'.'sip_appkey'.$this->APP_ID.'sip_sessionid'.$sip_sessionid
                            .'sip_timestamp'.$timestamp.'token'.$token
                            .'userId'.$userId;
                    echo $sip_sign = strtoupper(md5($signStr));
    /*
                    $url = $this->SIP_URL_PRE."?sip_timestamp=".date("Y-m-d H:i:s")
                            .'&sip_appkey='.$this->APP_ID.'&appId='.$this->APP_ID.'&sip_sign='.$sip_sign.'&token='.$token.'&appInstanceId='.$appInstanceId
                            .'&userId='.$userId.'&sip_apiname=alisoft.validateUser'.'&sip_sessionid='.$sip_sessionid;
    */
                    $formVars['sip_timestamp'] = $timestamp;
                    $formVars['sip_appkey'] = $this->APP_ID;
                    $formVars['appId'] = $this->APP_ID;
                    $formVars['token'] = $token;
                    $formVars['appInstanceId'] = $appInstanceId;
                    $formVars['userId'] = $userId;
                    $formVars['sip_apiname'] = 'alisoft.validateUser';
                    $formVars['sip_sessionid'] = $sip_sessionid;
                    $formVars['sip_sign'] = $sip_sign;
                    //向AEP发出服务端请求
                    $proxy->submit($this->SIP_URL_PRE,$formVars);
                    echo '<pre>';
                    print_r($proxy);               
                    die();
            }

    }

    1、特别是向阿里服务器发送身份验证请求时调用到一个类,这个类没有提供给我们,之后在网上找到了

    2、数据签名的一个加密和解密过程

    3、webserver接口调用方式改成rest调用方式,返回XML格式。

    4、tokenISV在token生成超过10秒以后才使用它,那么在调用接口时,会提示签名无效。这个问题花了大约一天时间,数据签名正确了,但是调用时总是超过10秒,造成token失效。最后检查发现是调用服务器路由慢的问题,找到服务器管理员,疏通网络问题后,完成这个接口的测试。

    目前可以在平台检测到用户合法身份,还有几个接口需要继续测试。

    其中找到不下十人问问题的解决方法,查找相关资料文档,感觉很头痛,今天早上来听说问题已解决,心里的石头终于放下一块了。

    哎呀,虽然艰难,感觉过程中也学到了不少东西,问题就是这样一环扣一环,总能找到解决的方法的。哈哈

    另一个收获就是,这种白盒测试,真的要看得懂代码,知道程序员写的东西是什么技术,是什么意思,然后清楚数据的流向,一步步来跟踪,还要了解后台的数据结构,表与表是用到存放什么数据的,各有什么作用。。。。


  • 七月工作总结

    2008-08-14 14:46:21

    一晃回来一个多月了,觉得像过了好几个月一样长,倒不是别的,工作太投入了,工作量和花费的精力是较之以前更多的,一直还晃不过神来,不知怎么回事,想放松一下就竞学不来,是我太认真了吧

    工作从制定测试标准,帮助程序员进行白盒测试,了解数据结构和算法,进行数据库管理,测试平台环境搭建,做的东西更深入一些了。

    那些简单的界面功能测试涉及都比较少了,交由手下人来做。

    工作并不轻松,但是想更深入的话就不能只停留在表面上。

    关键还是要掌握白盒测试的方式和管理。

    大家来的来走的走都习以为常了,但是没有想到的是老大竟然要离开,很差诧,当初是他非要留我回来,认准这个方向,现在又不认同了?还是别的什么原因?

    不想想那些问题了,自己也很累了,我告诉我自己什么时候都不要放松,要让自己进步,这样不管在哪里都有自己的发展空间,别人的事自己也无法改变。

    有时候说的悲观一点,是为了生活而打工,但是每个人都不是这样,天天说要创业,几个人真正能成功?即使当个打工皇帝,也只是个高级打工仔而已,在出卖自己的价值,只要有价就有市,所以不但提高自己的价值才是道理。

     

  • 用xampp设置php运行环境经验总结

    2008-08-14 14:28:26

    什么是xampp?
    XAMPP 是一个易于安装且包含 MySQL、PHP 和 Perl 的 Apache 发行版。XAMPP 的确非常容易安装和使用:只需下载,解压缩,启动即可。它

    的更新非常迅速,支持mysql、php5和php4、perl、apache包含了最新的版本。你还可以方便的在php4和php5之间切换
    它的中文官方网址是:

    http://www.xampp.cc

    xampp安装和使用
    一 下载软件包,下载地址:
    http://prdownloads.sourceforge.net/xampp/xampp-win32-perl-addon-5.8.8-2.2.3.exe
    您也可以在下边的这个地址中寻找最新的下载包:
    /xampp
    注意:xampp-win32-perl-addon名字中perl-addon指的是这个软件包集成了perl

    二 如果机器上边已经安装了APACHE,mysql,应该先卸载掉

    三 解压软件包到F:\xampp\,您也可以自己指定解压到什么目录,但是以后的路径您都需要对应进行修改
       注意:如果解压到F:\xampp\那么所有的文件都将放在F:\xampp\xampp\这个目录下,是两个xampp
    四 安装,你只需要运行,注意这一步需要一定的时间才能完成,您需要耐心等待:
    F:\xampp\xampp\setup_xampp.bat

    五 修改主配置文件
    用编辑器打开:F:\xampp\xampp\apache\conf\httpd.conf
    查找<Directory />
    将下边的代码块
    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
    </Directory>
    修改为:
    <Directory />
        Options MultiViews -Indexes Includes FollowSymLinks
        AllowOverride None
        Order deny,allow
        #Deny from all
    </Directory>

    注意,应该注释掉Deny from all 
     
    六 运行xampp
    F:\xampp\xampp\xampp-control.exe
    点击apache 和 mysql 后边的start
    注意:启动apache和mysql需要一定的时间,因此不要多次点击
    如果一切正常,那么apache和mysql后边都应该显示 ”running“,如果不正常请看第八步”故障分析“
    注意:mysql默认的用户名是root 密码为空
    您现在就用IE访问目前的网站了:
    http://localhost/


    七 文件路径说明:
    您需要将您写好的程序放在这个目录下
    f:\xampp\xampp\htdocs\
    注:程序并不一定要放在指定的这个目录,可自由放置,在E:\xampp\apache\conf\httpd.conf
    中指定路径,重启apache即可。
    增加端口
    Listen 80
    listen 3000
    listen 4000
    DocumentRoot "E:/xampp/htdocs/www" #默认网站的路径

    #配置其它端口访问路径
    NameVirtualHost localhost:3000
    <VirtualHost localhost:3000>
       ## ServerAdmin webmaster@dummy-host.example.com
         DocumentRoot "D:/wamp/ehr_utf8/www"
         ServerName localhost:3000
         ## ErrorLog logs/dummy-host.example.com-error_log
         ## CustomLog logs/dummy-host.example.com-access_log common
    </VirtualHost>

    最容易犯的错就是这里的路径没加WWW,程序中路径不用加WWW
    =============================下边是补充内容可以不看=============================
    八 错误诊断:
    如果您的机器上边apache不能正常启动,请运行
    f:\xampp\xampp\apache_start.bat
    来查看详细的错误信息
    如果您的机器上边mysql不能正常启动,请运行
    f:\xampp\xampp\mysql_start.bat
    来查看详细的错误信息

    如果您的机器已经安装了IIS,那么apache会报错,443 ssl端口会IIS占用,请修改F:\xampp\xampp\apache\conf\extra\httpd-ssl.conf 端口

    号解决
    例如:将所有的 443 都修改为 533 ,这种错误对于80端口也一样可能存在,如果是80端口,请修改
    f:\xampp\xampp\apache\conf\httpd.conf
    将所有的80修改为8081
    九 路径补充说明(可以不看):
    mysql的数据库文件应该放在下边这个目录:
    f:\xampp\xampp\mysql\data
    mysql的配置文件是:
    f:\xampp\xampp\mysql\bin\my.cnf

  • 最近的工作感悟

    2008-07-04 12:00:51

         最近工作一直是在折腾,很坚决的换工作,结果发现选择的行业跟自己是不相适应的,终究应了一句隔行如隔山这句话!
         抛开工作环境不说,这种测试方式天天与机器打交道的日子我一点也不喜欢.可能不是通讯专业的吧,格外排斥这些,新的环境里,我手无足措,不知做些什么好了. 
         有些事情你不去经历过就永远无法了解,不管别人怎么去说.
         工资倒不是问题了,主要是工作得开不开心很重要
         这家在外颇有名声的集团公司,也有它不为人知的一面,不了解不知道,公司管理混乱,人员流动量大,办事效率低,感觉没有自己的企业文化.这些都是一个企业发展的弊病.造成员工怨气唉天,越来越觉得没有什么可呆的,不知道是不是因为以前自由惯了,进了大点的企业反而不习惯的原因.
         虽然是这样,但是总算是让我了解这一个行业的发展模式,了解了一些自己从来没有接触过的东西,也很高兴在这短短的几天时间,认识了几个很好的同事.从与他们的交流中也学到了不少专业方面的知识.
         活泼的熊丹,工作认真负责的小蔡,学识渊博的二宝,乐于助人的侯慧.很高兴能认识他们.
         还有一些规范化工作流程方面的知识,我也间接的学到一些,这几天整理下,想形成自己的东西,应用到自己的工作中.
         是该定下心来,安心的做好自己的事了,我的发展方向还是要向管理层方面发展,同时学好技术方面的知识,其实现在想来,跳来跳去不是什么好事,不同的行业有不同的知识沉淀,成功需要靠点点滴滴积累,在一个行业做精做细,在一条直线上发展,到达目的地时间会短很多.
         当前我的工作的突破口在这几个方面:
         1)制定测试的标准化的流程,包括一些方案文档,并具体实施规范化.如测试方案、测试计划、测试用例、测试报告。测试评审等等。
         2)性能测试、压力测试。这些问题是系统的瓶颈,用户数增加使用系统变慢,如何优化。系统数据量大时,运行速度的问题如何解决。如果用一些工具能解决这些问题呢。
         3)代码的静态测试,帮助开发制定编码规范。如规范代码标准,检查基本的逻辑关系,如何用工具来测试,生成测试报告呢?
        这个是在现在的单位遇到的问题,他们要测试C++代码,而我们也有相关的测试工具来静态测试的吧。这些都是白盒测试的范畴。我觉得我应该从这方面的着手。
         4)在数据结构和编程能力方面也要加强,上次在论坛看到一篇文章说的很好。一个做测试一二年的,连代码都不懂的,确实有些说不过去,况且我也是有基础的。要想让自己提高一个层次,代码方面的能力要加强,千万不要以为自己是做测试的,这方面的就可以忽略了,这对自己像深层发展是不利的。
  • 面试流水帐

    2008-06-04 19:00:45

    上周连续面试了二三家,都是不错的企业,有一家是做外包软件测试的,要求挺高的,要懂JAVA语言和英语水平良好。给我的考题有三道编程,大概要考到循环语句和字符串的一些知识,感觉很有难度,网上查了些资料,勉强答了二题。其它是英文答一些测试理论知识,这个都没有问题。个人感觉这家要求太高了,几乎是一个程序员的标准,我不想在编程方面钻太深,我以前用的是PHP,现在要重新去学另一种语言太痛苦了,即使薪资很高我也不去。

    另一家是一家很知名的专业做金关工程的,在物流监控、电子通关、B2B电子商务都有涉及,对业务方面我是挺感兴趣的,以前我也做过关于海关政务系统的开发和维护,也都是B/S架构的,应该来说测试的规模都不错,可以学到一些测试方面的系统知识。面了二关,感觉到面试官非常严肃,老是在挑我的毛病似的,因为根据他们面试的问题,好像对于测试工具的运用要求很高,特别几次强调性能测试工具方面,还有就是测试的方法论,具体就工作中的例子来说明一个完整的测试用例是如何设计出来的, 一张试卷上所有的题都是口头答。可能没有多大希望,自己的能力可能并不能满足这家,可能每个公司都有自己的测重点吧。

    第三家,是搞通讯设备研发的机构,感觉比较正规,但是测试也是刚成立的,刚被重视起来。二百多个人的企业,才不到五个测试,给我的考题呢,大多感觉是硬件测试的一些方法,考的也是C语言。像alpha 和 beta测试的区别,白盒测试分几种,集成测试分多少种,压力测试和负载测试的区别,测试的流程啦,系统测试计划需参考的文档,理论的知识非常多,而且要精C,C++。与我想象的差别有些大吧,因为企业的性质有很大的不同,一个是硬件方向,做移动通讯系统的,一个是纯软件企业,不知能不能适应呢,而且这个行业测试的发展前景如何,都不了解。和完全的B/S模式有很大的差异,另一个就是业务方面,所涉及的知识面很大的不同。

    本周已接到相关的通知,第三家要我去上班,但是现在很犹豫,不知该不该去呢,薪资方面是有提升,但是,更重要的是发展,这条路上会有大的发展吗?与我想要走的路差别有多大?我也不清楚。其实不想再跳来跳去了,想找个地方稳定下来,稳中求升,但目前这家企业确实让我很失望,对我来说也没有了什么挑战,感觉再做下去也没有什么意思了。

    我到底要不要去?还是再等好的机会呢?

  • 六月份工作记录

    2008-06-04 18:28:20

    一、关于技术方面

    用到数据库的查询比较多,用到子查询。

    select floor((1000000-0+1)*rand()+0)
    update employee  set employee_pw=
    (SELECT FLOOR(100000 + (RAND() * 899999))) where status='A';
    select employee_pw from employee ;//这里一定要加(),否则有错,在数据库中生成六位随机数存入数据库中。此操作在MYSQL平台。

    关于存诸过程,这个不是很了解,但用了这个例子来记录一下,备以后参考吧。

    默认员工自助授权处理说明

    1、关联到四个表
    self_module(module_id)
    self_role(role_id,role_name)
    self_module_per4role(role_id,module_id,per)
    employee_role(user_id,user_role)

    主要处理二个表,要将employee表的employee_id(所有在职员—)插入五条相同的记录到
    self_permission (employee_id,department_id,module_id,perm)表中,并保持self_permission表中的module_id,perm相同.
    即内容为
    employee_id,4,(1,2,3,4),
    employee_id,5,(1,2,3,4)
    employee_id,6,(1,2,3,4)
    employee_id,7,(1,2,3,4)
    employee_id,12,(1,2,3,4)

    1)用存储过程来处理。此存储过程必须在mysql5以上的版本才可运行。所以将HASE数据库中employee和self_module_per4role二个表
    copy出来放在新建的MYSQL5数据库中,运行存诸过程,重新生成self_module_per4role表.再将self_module_per4role表导出脚本再
    存入HASE数据库中。

    2)将权限关联到员工.
    insert into employee_role(user_id) select employee_id from employee where employee_pw!=''and status='A';
    //employee表的employee_id(所有在职员工)插入到employee_role(user_id)

    update employee_role set role_id='23';

    -- Procedures
    --
    -- DELIMITER $$
    --
    CREATE DEFINER=`root`@`%` PROCEDURE `selfPerm`()
    BEGIN
      DECLARE emp_id INT;
      DECLARE done INT DEFAULT 0;
      DECLARE EmpCur CURSOR FOR SELECT employee_id FROM employee WHERE (employee_pw!='' OR employee_pw IS NULL) AND status='A';
      DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
      OPEN EmpCur;
      REPEAT
        FETCH EmpCur INTO emp_id;
        IF NOT done THEN
          INSERT INTO self_permission (employee_id,department_id,module_id,perm) VALUES (emp_id,'1','4','1,2,3,4');
          INSERT INTO self_permission (employee_id,department_id,module_id,perm) VALUES (emp_id,'1','5','1,2,3,4');
          INSERT INTO self_permission (employee_id,department_id,module_id,perm) VALUES (emp_id,'1','6','1,2,3,4');
          INSERT INTO self_permission (employee_id,department_id,module_id,perm) VALUES (emp_id,'1','7','1,2,3,4');
          INSERT INTO self_permission (employee_id,department_id,module_id,perm) VALUES (emp_id,'1','12','1,2,3,4');
        END IF;
      UNTIL done END REPEAT;
      CLOSE EmpCur;
    END$$

    --
    -- DELIMITER ;
    --

     

     

  • sql语句处理(复杂删除问题)

    2008-05-22 15:29:31

    在mysql中处理:

    create temporary table _tmp(id int);
    insert into _tmp(id)
    select a.manual_record_id from attendance_manual_record as a ,employee as b, position as c,department as d
    where a.type='O1'
    and a.date_happen like '2007-08-02%'
    and a.employee_id=b.employee_id
    and b.position_id=c.position_id
    and c.department_id=d.department_id
    and d.department_id='8';
    select * from _tmp;
    delete from attendance_manual_record where manual_record_id in (select id from _tmp)
    drop table _tmp;

    在mssql处理

    delete  from attendance_manual_record where manual_record_id in (select a.manual_record_id from attendance_manual_record as a ,employee as b, position as c,department as d
    where a.type='O1' and a.date_happen like '2008-05-15%' and a.employee_id=b.employee_id and
    b.position_id=c.position_id and c.department_id=d.department_id and d.department_id='27')

  • 08.4.7-4.11(面试体会)

    2008-04-16 09:39:20

    面了三四家了,普遍的感觉是测试还是没有得到重视.

    其中一家有四五百号的人大企业,一个项目组的负责人告诉我,开发组一百多人,而测试只有七八个;另一个做电子商务软件的,三四十个人只有四个测试;相对来说就我了解的这几家都是还不错的公司,为什么测试的队伍这么弱,是因为不重视的原因,还是因为产品已很成熟了不需要那么多人呢?

    大部分都是要求笔试和面试的,做题中测试理论\测试方法\自动化测试工具的使用流程\测试用例设计\沟通方式\SQL语句的写法等都会考到.

    因为自动化测试工具我用的少,这些题我都不会答,还有一个灰盒测试的概念问题,复杂用例的设计等等.

    我觉得自己目前应该从测试管理\功能测试着手可能会好找一些,最好找个比较成熟的团队,能够边做边学习自动化测试方法.

     

  • 软件测试工程师薪资调查 (转)

    2008-04-07 16:47:19

    因修正错误而存在——软件测试工程师
        所属门派:IT业
        “假如存在没有任何错误的程序,那么世界也会不复存在。”
        因错误而存在,因修正错误而存在,这就是软件测试工程师的存在之道。虽然测试不是解决错误的根本举措,但却是必须的手段。
        软件测试工程师(Software Testing Engineer)的主要工作职责是,理解产品的功能要求,并对其进行测试,检查软件有没有错误(Bug),决定软件是否具有稳定性(Robustness),写出相应的测试规范和测试案例。
        简而言之,软件测试工程师在一家软件企业中担当的是“质量管理”角色,及时纠错及时更正,确保产品的正常运作。据有关调查数据表明,目前国内许多软件企业内部的测试人员和开发人员之比在1:5,与国外软件业1:1的比例还相去甚远。
        门派技能:
        软件测试工程师主要职责为:1、负责项目/产品的测试工作,分析产品需求,建立测试环境和计划,保证产品质量以及测试工作的顺利进行;2、按照软件工程规范和项目管理流程,实施、管理和知道软件开发不同阶段的各种测试,并提交测试报告。测试的计划安排包括人员安排、进度、使用的软硬件环境、测试的流程等;3、提交测试报告,并撰写用户说明书;4、参与软件测试技术和规范的改进和制定。
        入门资质:
        一般需要至少专科学历,一到两年测试工作经验。要熟悉软件的测试技术、方法、流程、测试文档,若想进一步提升,还要熟悉自动化测试的流程、管理及深层开发(包括测试框架等);了解若干主流测试工具,如功能测试工具winrunner、quicktestpro,性能测试工具LoadRunner,配置管理工具TestDirecter, Visiual Source Safe等;熟悉一些主流的软件工程方法论和思想,如RUP、CMM、CMMI、XP、PSP、TSP;了解软件工程,软件生命周期模型基础,了解软件配置管理;能够根据不同企业的产品特点,要求了解相应的开发测试方法。对于资深的软件测试人员,有些企业还要求其本身有自主开发测试工具的能力。
        由于需要与开发人员及时沟通,因此作为一个出色的软件测试工程师,还需要有良好的沟通技巧以及优秀的言语表达能力,具备良好的团队合作精神。
        入门经:
        缜密的逻辑思维能力为了应对软件使用者千差万别的使用习惯和软件在使用过程中出现的各种现象,软件测试工程师应该具有逆向思维能力,能够以用户的角度出发,捕获一切可能性,对细节有不同寻常的关注能力。此外,软件测试工程师还要有穷追到底的精神,并且要善于沟通和撰写各类专业报告。
        出色的沟通能力要成为优秀的软件测试工程师,要具备出色的沟通能力和表达能力,既能够和技术开发人员沟通无碍,又能用简洁明了的话语向客户、管理者等这些非技术人员阐述系统在哪些方面还有缺失有待改进。在同开发人员的沟通过程中,要注意沟通技巧,提高沟通效率,和开发人员保持良好的人际关系。当测试人员发现软件有问题时,不仅需要跟开发人员沟通,找到问题出在哪儿,阐述自己挑错的理由,有时候甚至要提出解决方案,直接参与前期需求和代码的修改。一个优秀的软件测试工程师能够适时地站在各自的立场上考虑、解释并解决问题,从而尽量避免冲突和对抗。
        全面的技术能力作为软件测试工程师,虽然无须精通各种语言各类技术,但必须全面理解被测软件系统,明白该使用何种工具进行测试。要做到这一点一般需要有一定的编程经验,这些经验可以加深对软件开发过程的理解。
        耐得住性子 软件测试工作是枯燥的,甚至重复性的,有时需要花费惊人的时间去分离、识别和分派一个错误,因此需要测试人员能静得下心耐得住性子。这个工作不容许有丝毫的心浮气躁。同时,逻辑严密但不乏重复成分的测试工作也容易使人倦怠,因此需要一定的自我督促能力。
        规范测试流程公司不正规的测试流程,不标准的测试方法,将使软件测试人员终日陷入碌碌无为的点击按钮的不良状态中。
        晋阶易筋经:
        初级测试工程师
        入门级,具有一些手工测试经验,开发测试脚本并开始熟悉测试生存周期和测试技术;
        测试工程师
        能够独立编写自动测试脚本程序并担任测试编程初期的领导工作,进一步拓展编程语言、操作系统、网络与数据库方面的技能;
        高级测试工程师
        帮助开发或维护测试或编程标准与过程,负责同级的评审,并能够指导初级的测试工程师;
        Team Leader
        一般具有5年左右工作经验,负责管理一个小团队。负责进度安排、工作规模/成本估算、按进度表和预算目标交付产品,负责开发项目的技术方法,能够为用户提供支持与演示;
        测试经理
        能够担当测试领域内的整个开发生存周期业务,能够为用户提供交互和大量演示,负责项目成本、进度安排、计划和人员分工;
        计划经理
        具有多年纯熟的开发与支持(测试/质量保证)活动方面的经验,管理从事若干项目的人员以及整个开发生存周期,负责把握项目方向与盈亏责任。
    秘传“薪”经:
        薪资黄金点
        软件测试工程师在IT行业中越来越受到重视,其薪资也节节高升。
        测试工程师的起薪从2000~5000元/月不等,若有四年工作经验的话,薪资在8000元/月左右,具体视不同地域、不同性质企业、测试工程师的不同能力而定。一般工作5~8年的软件测试工程师的薪资是刚出道时的新手的一倍,而10年以上工作经验的软件测试工程师薪资却走了下坡路,和5~8年的从业者持平甚至有些企业开出了略低的薪资,看来这行的折旧率较高。
        软件测试行业的从业者7成左右都拥有本科学历,本科学历的从业者的薪资约为大专学历从业者的1.33倍左右,而硕士学历的从业者薪资起点明显高于本科学历从业者,约为后者的1.49倍。一般外语能力精通者的薪资为平均薪资的1.29倍左右,熟练者为平均薪资的1.09倍,值得注意的是,深圳、杭州和大连的外语能力精通者的薪资均超出平均薪资不少,其中杭州的外语能力精通者的薪资是平均薪资的1.79倍。
        以3.5年左右从业工作经验的软件测试工程师的各地薪资情况来看:深圳地区的平均年薪是全国各城市最高的,超出7万元,其中外商独资欧美企业的年薪为7.8万元,国营企业的年薪紧随其后,超过了7.3万元,合资/合作非欧美企业的年薪较低,约为6万。
        北京地区该职位的平均年薪逾5.8万元;其中外商独资企业的年薪为全国之最,将近8.5万元,而其余各类型企业的年薪都在5~6万元左右。
        广州地区该职位的平均年薪约为4.5万元;其中外商独资欧美企业的年薪最高,达到了7万元;合资/合作欧美企业也能拿到6.2万元的平均年薪,合资/合作非欧美企业就较逊色,年薪不到4万元。
        上海地区软件测试工程师的平均年薪为6.3万元,欧美独资和欧美合资的薪资不相上下,分别为7.9万和7.7万元。国营企业略高于平均线,达到6.5万元,其余各类企业则都表现平平。
        杭州地区该职位的平均年薪达到了5.5万元;其中外商独资欧美企业和合资/合资欧美企业的年薪相当,均为6.9万元,国营企业的薪资也颇吸引人,超过了5.9万元,民营/私企和合资/合作非欧美企业的年薪均不到5万元。
        大连地区该职位的平均年薪为3.8万元;其中外商独资企业和合资/合作欧美企业的年薪均超过了4.7万元;国营企业的软件测试工程师的年薪也近4万元左右,而民营/私企和合资/合作非欧美企业的年薪则相对较低。
        福利
        上海地区的软件测试工程师享有的带薪年假是全国各地最多的,一年中平均有10天,北京、广州、大连均为8天,杭州和深圳相对较少,为6天。
        以上这些地区在软件测试的培训方面都做得不错,基本上均有6成以上的从业者可享受到公司提供的培训计划,但上海的软件工程师的培训比例不到5成。杭州和深圳两地的培训是全国各地区最出色的,逼近8成。
        深圳、上海均有2成的从业者可享受房贴或者补充住房公积金,大连和北京则有3成以上的从业者可享受公司的房贴或者补充住房公积金,广州更是达到了4成以上,而杭州此项福利的比例较低,仅为1成
  • 2008.3.30-4.4

    2008-04-07 10:25:07

    最近有些困倦了,好像没有什么激情的样子,公司内部的人事变动太大了,频繁的人员流动,搞得人心都不稳定。

    没有了团队的凝聚力,大家都有些失望,对于未来。。。

    来这边快一年了,虽然是我一个人的战斗,但是总是充满激情和阳光,积极上进去完善自己,为人做事,专业水准,感觉进步也是蛮大的。职场中的历练和成熟,让我有一种淡淡的从容和自信。

    我是喜欢做这一行的,让一个不完善的东西趋向完美,每一次成功的沟通都能让人体会到一种成就感,喜欢这种感觉。

    但是归属感又在哪里, 我希望有更大的舞台去发挥自己,体会、学习更多新的东西去成长,去进步,而不是原地踏步,我想是我开始做准备的时候了,况且我是一直时刻在做着这种准备。

     

  • 世界上最漫长与最短暂的30分钟(转)

    2008-04-02 12:58:44

       为什么你想要这份工作

      先来做一个成语填空。我发现,这个四字成语可以用来形容许多人在找工作时的心态:东——西—— .东邪西毒?东成西就?东南西北?东方不亮西方亮?

      拜托,有点专业精神好不好。想不出来吧?我来揭晓答案,这个成语是:东食西宿。

      这是一个生僻的成语,生僻到几乎所有的汉字输入法软件的词库中都没有这个成语。

      而且这个成语因为意思刻薄,也很少在生活中为人们使用。

      它究竟是什么意思呢?这个成语背后的故事是:古时候有一户人家的女儿到了出嫁的年龄,东边邻居的儿子和西边邻居的儿子都来提亲。 东边的邻居家境殷实,但是儿子非常难看并且不解风情;西边的邻居家境清贫,但是儿子一表人才并且知书达理。父母做不了决定,就去问女儿的意见。女儿考虑了半天,终于羞答答地表态:我能不能在东家吃饭,然后晚上住在西家?

      本来,追求两全其美的心态也无可厚非。我相信在这个世界上也的确有收入又高又不辛苦的工作,然而,对于刚刚从大学里走出来的学生或者是其他资历尚浅的年轻人来说,讨价还价的能力几乎为零。文凭的意义仅仅在于可能给了你一块敲门砖,但是,如果你以为你的十年寒窗苦读能够给公司带来的价值,可以等于甚至大于一个在实践中已经摸爬滚打了10年的老手,那么你已经在心态上犯了第一个不实用主义的错误。

      从另外一个角度来说,没有东食西宿的好事,也说明了每一份工作总是会有它的不尽如人意之处。我的许多朋友,都是工作在投资银行和咨询公司的年轻精英们,他们衣着光鲜,坐飞机出差几乎如同我们普通人打车;平时出入各大写字楼、五星级宾馆,偶尔神秘地提到自己正在做的项目,满嘴的专业术语让人立刻觉得高深莫测,更不要提他们的五位数的月薪,轻松入读名牌MBA的可能,以及未来看似无限的“钱途”。这一切难道不让人羡慕不已吗?

      然而,在我没有开始找工作之前,我参加了几次他们的聚会,惊奇地发现,每次的聚会都会有一个环节叫做“抱怨比赛”。来自不同公司的精英们,开始争先恐后地抱怨自己的工作时间太长、没有个人生活的乐趣、熬夜导致健康下降、项目中自己的任务太过于无聊,等等。

      这听上去是不是颇有些令人惊奇呢?其实,著名的“二八原则”在任何一项工作中同样都是适用的——一份工作,其中令旁观者羡慕、在闪光灯下或者是给工作者带来真正的成就感的部分,大部分只占工作内容的20%而已。而另外的80%的工作内容,则可能充斥着艰苦的劳动、枯燥的重复、巨大的身心压力等等可能不为外人所知的辛苦的一面。

      我最欣赏的日本的行为心理学家、效率大师多湖辉就曾经说过,幸福的人生不过就是能够以自己喜欢做的事情为工作,并且还能够从工作中获取到合理的报酬而已。不过,这个看似简单的要求,多湖辉接着补充说,也仅有非常小的一部分人能够真正实现这种幸福。

      为什么一本讲面试的书要从讨论对工作的态度开始呢?难道高明的面试者不是可以通过面试获得这个世界上所有想要的工作吗?或者说,不论是什么工作,神奇的面试者都可以进入面试室,把自己推销出去,就好像传说中最伟大的推销员能够把梳子卖给僧侣、把冰箱卖给爱斯基摩人、把二胡卖给西洋管弦乐团一样?

      并不是这样的。假如你真的把面试看成一场推销,伟大的推销员,也是依靠自己对顾客需要的了解来赢得订单。更何况,一场好的面试,在我看来,远远不是一场推销,而更是一个坐在面试桌前的双方,互相发现对方对于自己的意义和价值的过程。你对一份工作的态度是冷淡、热情、充满兴趣、无所谓还是势在必得……会直接影响着你在面试中表现出来的态度。它们通过你的眼神、声调、动作、微笑弥散开来,透过空气,慢慢地感染到你的面试官。

      于是,你的面试官接收到了这种“感染因子”,他突然抛出一个问题:告诉我,你为什么想做这一行/进这个公司?

      你一定会在面试中遇到这个问题。而这个问题的潜台词丰富得令人难以置信。结合你们对话的上下文和面试的气氛,这个问题可能包含着面试官各种各样的微妙的态度:热身的问题:“让我再看看他的简历,我完全忘了他的背景了。让他先随便说说废话,我好趁这个时间想想该问他些什么。”这种情况大多发生在面试刚一开始的时候。

      积极的信号:“这个小伙子不错。让我来看看他对我们这行究竟有什么了解,顺便再给他一些积极的鼓励。”

      消极的信号:“你说你讨厌加班、不喜欢数学,平时的爱好就是睡觉。你为什么跑来申请一所会计师事务所?!你是不是真的走错门了?如果是这样,这就是我最后一个问题了。”

      不安全感:“这家伙看上去实力很不错,为什么跑来申请我们这种工资低又辛苦的活儿?没准就是来拿我们练练手的。”或者,“GRE、TOFEL这孩子都考了这么高的分,看上去他只差一张美国签证了。是不是明年他就准备拍拍屁股出国了?我得不动声色地问个究竟。”

      ……

      不同的情况还可能有很多种。如果你能判断出面试官的情绪和意图,你也许可以更好地调整自己的情绪和回答的内容。然而,万变不离其宗,你的回答也许永远都逃不过这个最基本的问题:你真的想做这份工作吗?为什么?而且,如同我后面还会强调的那样,按照你的真实想法回答问题,往往是回答面试问题的最正确的态度。

      更多的情况是,你往往并不知道自己是不是真的喜欢你所申请的工作,也许你申请它,不过是因为听别人说这是一份好的工作,而且人人都在申请。或者你对这个工作所知甚少,仅仅知道它的工资不错。可是,你难道真的可以说,你想做这一行是因为它的****水吗?

      是的,你可以这样说,如果这一点真的对你很重要。高报酬的薪水同样也意味着更高的责任和对职业奉献精神更高的要求,指出这一点来,说明你对这份工作的期待和认识没有什

      么不妥。如果你家境贫寒,你需要尽快****帮助你的弟弟妹妹继续完成教育,向你未来的老板指出这一点只会展现你的责任感并且赢得他们的尊重。事实上,喜欢一份报酬优厚的工作本身并没有任何的错误,特别是考虑到你的面试官同样也在享受着这份工作的这个优点。

      当然,如同那句成为越来越多的人的口头禅的话所说:钱不是问题,或者,钱不是最重要的。可是你会发现,还是有很多人在去面试之前根本就没有好好想过对这个问题的答案;或者,他们想了,但没有答案。

      我听说过的一个北邮的朋友,走进中国电信的面试室,面对“你为什么想来电信行业发展”的问题,想了半天,终于憋出来一句话:“我的手机是全球通,是中国电信的,所以我想来中国电信工作。”相信我,他不是故意想幽默。

      其实对这个“你为什么要选择这份工作”的回答,也许我们需要有一个系统的分析和观点。

      《宪法》中规定了我们都有劳动的权力,然而在现实中,我们每个人都得自己负责去寻找到一个劳动的机会。因此,对于几乎所有的毕业生而言,“就业”,是迈向职业生涯的第一个门槛。跨过去,才能够真正的开始从学校向职场的转变。就业之后,如果你幸运,或者你精心地挑选对了你的第一份工作,你发现你很喜欢也很适合,你愿意稳定地在你现有的位置上发展自我、展现你的才华、实现自己的价值,那么,应该说,你开始有了“职业”的认同,从人人都会有的对第一份工作不确定心态中稳定了下来。

      比起那些发现自己的第一份工作并不令自己满意的人来说,你可以有更长期的计划去建设你的职业,而不需要迅速地考虑跳槽甚至更改自己的行业。

      “事业”是比“职业”更高的一层状态。也许一个人对一份职业产生了强烈的热爱和认同,使得这份职业变成了自己的事业;也许一个人开始了创业,从此成为了自己的老板。“职业”更多的是一个阶段性的概念,而“事业”已经开始带有人生追求的色彩。

      如果你觉得这种“就业——职业——事业”的三分法似乎还有些道理的话,那么什么是我们就业应该考虑的方向就变得很清楚了。

      假设同时毕业的三个好朋友,A选择了去一家广告公司,一年后跳槽到一家房地产公司,一年后又跳槽到一家网络公司;B选择去了一家大型外企的人力资源部门,工作两年后被提升为经理,同时在职继续攻读人力资源方向的MBA;C进入了政府部门,在基层锻炼了两年后回到部委工作。

      这三个年轻人当然都还很年轻,他们未来的发展充满了不可预期的变化。但是让我们仅仅从“就业——职业——事业”的三分法的角度来看,A一直在就业的状态中,而B正在建设自己的职业,C开始经营的是自己的事业。

      《基业长青》中对世界上最成功的公司的战略进行了分析后,得出一个结论,那些成功的公司,最相同的地方是:长期地专注做一件有长远意义的事情,最后获得了成功。公司的发展如此,人的发展是不是也可以从中借鉴到一些道理?

      因此,如果说单纯的就业仅仅解决了你依靠劳动自食其力的问题,一个更好的就业,应该是能够使你获得一份你可以持续建设的职业,甚至是一份你可以终身经营的事业(当然,不参加就业而直接创业的,也应该归到追求事业的一类中去)。以就业为目标,也许你看重的仅仅是一份经历、工资或者就是工作本身;而以寻找到一份职业为目标,你要考虑的就应该包括这份职业会如何给你带来成就感、如何帮助你继续学习、成长,它的中远期发展前景如何;如果你是在寻找一份事业,那么,你更加需要好好地和你内心深处的渴望对话:你是一个怎样的人?你希望向什么方向前进?

      好了,经过了一番深思熟虑,现在是自信而沉稳地回答你的面试官关于“你为什么要选择这份工作”的问题的时候了。答案就是告诉他你在寻找的是什么,而为什么这个行业/公司能够提供给你所寻找的东西。

      通常,一个热情、有事业心的年轻人会希望在工作中寻找到:明确的学习内容和目标不断学习和锻炼的机会挑战感和成就感对某一个行业的特定知识和特殊技能潜在的作为终身事业追求的可能工作带来的自我实现感:报酬、社会认同、价值观有意义的工作内容、工作伙伴和工作环境……

      你可以继续在这个单子上面加上你真想要的东西。每个人都是特殊的,每个人都会有不同的内容补充进来。告诉你的面试官你真正想要的东西,这种诚实能够使你们双方产生一种开诚布公的交流氛围。更加重要的是,想清楚你真正想要什么,能够避免你自己为了得到工作本身而迷失了自己的追求,因为,当你一不小心实实在在地获得了一个工作机会时,它看上去总会变得更加顺眼一些。而如果它其实真的不是你想要的,这种额外的获得只会成为你继续寻找的阻力。但是你也必须脚踏实地地总结出你对于工作的理想和期望,不要太理想主义,走向了唱高调般的反面。一个对于咨询行业的合理的理想表述可以是:“我喜欢发现和解决困难的问题,通过努力找出答案。特别是当这个答案可以帮助到其他人更好的工作和生活时,我会更加觉得愉快与有成就感。”然而我在麦肯锡的面试现场却听说过这样的回答:“我希望我的工作能够增加中国宏观经济和微观经济运行的效率,同时积累经验,将来使自己开办的公司进入世界500强。”

      还有另一个有些异曲同工的例子,说明任何远大的理想都应该和脚踏实地的工作联系起来。我的一位好朋友告诉我,他在面试一家投资银行时,解释他为什么被投资银行业所吸引时说:“我觉得做这一行可以直接和很多企业的高层直接会面,通过我们的工作影响他们的决策,从而影响到整个经济和市场。”——他突然发现面试官的嘴角开始慢慢地往下撇,于是他紧接着说,“当然,这是在我能够成为像您这个级别的资深银行家之后。我非常清楚作为一个初级的分析员每天所面对的都是大量的基本案头工作。”

      谢天谢地,他看到面试官嘴角的曲线终于又向上弯了回去。

      第二章:世界上最漫长与最短暂的30分钟咬文嚼字有时往往能够给人带来许多有趣的启发,比方说让我们来琢磨琢磨“面试”

      这个词。从科举应试,到金銮殿试,尽管我们伟大的中华考试文化源远流长,“面试”这个词看上去却像是个舶来品——面试,顾名思义,当面的考试。似乎在引进这个词的语言学家那里,面试就已经被定性为了一种测试,因此不是面聊、面看、面笑。而测试,我们知道,它好像总是会让人紧张、手心出汗、心跳加速的……

      世界上最漫长与最短暂的30分钟

      咬文嚼字有时往往能够给人带来许多有趣的启发,比方说让我们来琢磨琢磨“面试”

      这个词。从科举应试,到金銮殿试,尽管我们伟大的中华考试文化源远流长,“面试”这个词看上去却像是个舶来品——面试,顾名思义,当面的考试。似乎在引进这个词的语言学家那里,面试就已经被定性为了一种测试,因此不是面聊、面看、面笑。而测试,我们知道,它好像总是会让人紧张、手心出汗、心跳加速的……

      反过头来看英语中的“面试”——interview,却似乎没有沾上任何和“考试”相关联的味道。除了面试之外,interview包括的意思还有:会见、采访。其令人紧张的程度怎么看也比不上考试。如果我们把interview这个词拆开,也不过是inter和 view,直接翻译成中文最多是“大家互相瞅瞅”的意思。

      也许词语的意思会随着人们生活的发展而变化,就好像今天有人说请你“吃饭”,但通常你可能根本不会吃到一粒米饭,但是还是没人肯说是去请你“吃菜”。那么,“面试”发展到了今天,除了“考试”的意思,还可以被理解成什么呢?

      有人说面试就是一场推销:你向面试官花言巧语地推销自己,试图从他那儿拿到作为订单的工作合同。

      有人说面试就是一场谈判:大家坐在桌子两端,唇枪舌剑,你来我往。谈判的目的就是要说服面试官,不雇佣你,将会是他们最大的损失。

      也有人说面试更像是一场戏:平时只穿牛仔裤的你必须换上西服,西装革履风度翩翩外交辞令地扮演一个你根本不熟悉的角色。演得好你就有资格继续演下去,演得不好你就别想有人捧你让你红。

      还有人说面试就是一场审判:面试官就是审判官,他的决定掌握着你命运的转折。你只能为自己作出无力的辩护,其他的都只能交给你上辈子积的德和你上星期在卧佛寺捐的香火(卧佛寺,因为“卧佛”谐音offer,据说求offer必应,于是成为北京地区香火最盛的寺庙之一)。

      还有人说……

      众说纷纭,不由让我想起了一桩著名的禅门公案。两僧打坐,甲僧对乙僧说,我看你像狗粪。乙僧对甲僧说,我看你像尊佛。禅师说,乙僧心中是佛,看别人也是佛;甲僧心中是狗粪,看别人也是狗粪。

      在我看来,你怎么看面试,恐怕也决定了你在面试中的感受如何。如果你进入面试屋的时候,心里想着的是进入考场、谈判场、戏场或者审判室,你的心情想必也难以愉快而轻松,你脸上的微笑也不免会生硬与干涩。

      所以,为什么不把面试看成是一场难得的对话?试着更多地把自己定位为一个前来学习人生和工作经验的学生,而面试官作为一个愿意与你分享关于工作、职业发展和人生经验的前辈。你会发现,抱着这种心态,面试压抑的气氛在不知不觉中从一问一答,而慢慢地变成了一个双向的交流。事实上,甚至应该这么说,能够和杰出的职场人士如此平等、轻易地交流(特别是想到这些人将来可能会是你好几个级别以上的老板时),面试真是再理想不过的一个机会了。

      反过来,对于那些平日忙于在商业世界里打拼的面试官们来说,回到有些陌生又有些熟悉的菁菁校园面试,见到一张张写满渴望、勇气和单纯的年轻的脸庞,为什么不和眼前的这个看上去聪明、可爱和善解人意的孩子聊聊自己的过去,指点一下他未来的发展,多获得一些崇敬的目光呢?他们当然会这样做,只要你给他们机会。

      对于任何一个富有远见的组织来说,招揽到出色的人才,无论对于公司还是其他机构,都是成功地完成自己的使命的基础。面试对于公司的意义在于,提供一个认识候选人的机会,从而在此基础上判断,谁是更加适合公司需要的人才。尽管,每家公司的面试组织程序会有所不同,但是它们还是有基本相同的先后顺序。了解这些基本的程序,能够帮助面试者减少对面试的神秘感,增加信心,更好地设计自己的面试策略。

      通常面试程序可以被分成以下几个部分:

      (1)确定所需要招聘的职位的工作描述、薪酬范围和应聘者所需要的资格。

      (2)通过招聘会、海报、广告等形式,把招聘信息传达给潜在的应聘者。

      (3)收集应聘者的简历,筛选简历得到可以进一步面试的合适数量的应聘者。

      (4)电话面试。一般由人力资源部门或者投资银行与咨询公司中资历比较浅的分析员或者咨询员打来,在面试中进一步确认应聘者的背景、语言表达能力等。通过筛选得到可以进一步面试的合适数量的应聘者。

      (5)第一轮面试。

      (6)第二轮面试。

      (7)确定入选的候选人,人力资源部门和他们保持联系,推销公司,确保他们接受合同。同时,公司也可能继续和几个作为万一“正选”拒绝接受要约后的“后备”候选人保持“暧昧”的关系。

      (8)人力资源部最后检查应聘者的背景、提供的材料无误。

      你在申请公司的时候不一定会经历所有的程序。比方说,电话面试往往只是那些非常强调英语口语能力的外企才有的步骤,他们希望借此道程序排除一部分口语能力不强的应聘者,国企、私营企业或者政府机关,基本上不会有这道门槛。

      对于外企而言,面试程序也各不相同,投资银行一般在电话面试后只会安排一轮面试,但这轮面试中会有4到6个级别不同的银行家在一个集中的时间内展开“车轮大战”式的面试。这一方面是因为银行家时间紧张,整天在天上飞来飞去,如果不固定一个时间集中面试,整个面试可能会因为每个人的时间安排不同而拖得很长;另外,这种车轮大战式的面试在另一个方面也能够很好地测试出应聘者是否能在这种长时间压力的工作环境下有良好的表现和发挥。说实话,一个人30分钟,连续3个小时的面试下来,真是有筋疲力尽、大脑缺氧的感觉。

      咨询公司的风格又不一样,他们往往在电话面试后安排两轮面试,并且面试的内容与大部分投资银行的传统面试也不相同。咨询行业的面试几乎都是案例面试,应聘者遇到最大的挑战来自解决现实中的咨询员遇到的真实问题。面试官往往仅仅告诉应聘者一些最基本的事实,应聘者必须通过与面试官的讨论,发掘、掌握更多的有用信息,决定采取某一种方法,有逻辑地找出这个问题的答案。案例面试的最终的答案有可能是一个估计出来的数字,也有可能是一套商业战略,还有可能是发现一个重要的原因。比方说,我自己曾经碰到的最让我

      摸不着头脑的一个估计数字的题目是:北京市大概有多少下水道的井盖?

      如果说投资银行的面试方式是把应聘者放在压力之下,看他的举止反应;咨询公司是把应聘者放在问题之中,看他的分析能力和聪明程度,那么,对于一般的工业性的跨国公司(P&G、Unilever、GE等等)来说,他们会更小心地详细考察应聘者过去的背景,会愿意和应聘者在一起花更多的时间,来观察和判断应聘者是否具有他们公司文化所欣赏的品质和特点,是否能够和这个庞大的公司机器上的所有人相处和谐。其中最典型的也最有名的面试风格应该是宝洁公司严格的“笔试——职业英语能力测试——性格特征测试——HR面试——广州总部部门面试”

      爱因斯坦曾经这样对年轻学生解释过相对论:当你和一个美丽的姑娘坐上两个小时,你会感到好像坐了1分钟;但要是在炽热的火炉边,哪怕只坐上1分钟,你却感到好像是坐了两小时。

      同样,面试可能是世界上最漫长的30分钟,也可能是世界上最短暂的30分钟。当你和你的面试官都有一种频频想看表的冲动时,抱歉,你的这场面试看起来是失败了。而当你走出面试间,一低头看表,发现不知不觉地已经超出了30分钟时,这往往是证明你刚才的面试进行得很顺利。

      一个面试官就曾经告诉我,当他在面试开始5分钟后,就决定不可能给这个应聘者任何机会的时候,他恨不得立刻就结束这场面试。但是,他不能,因此,他只好盯着手表,等到刚过25分钟的时候,立刻开始问应聘者:你还有什么问题吗?

      30分钟的面试时间里可以发生很多的事情,但是也可能没有发生太多的事情。毕竟,即便是中央电视台的播音员,按照1分钟300个字的速度说话,30分钟滔滔不绝地一直在说,也说不到1万个字。通过不到1万个字的信息量,你是否能够获得这个可能是命运转折的机会就这样被决定了。所以你要明白,可能真的需要字字珠玑,字字千金,你才能打动命运女神的垂青。

      一个常规面试的30分钟里可能出现的事件和顺序大致上是这样的——但是,同样,法无定法,任何变数都会发生,掌握常规和随机应变并不矛盾——敲门,你满面笑容地进去,握手,请坐。然后面试官会给你一个很短的自我介绍,时间已经过去了3分钟,面试算是正式开始了。最理想的状态,你的面试官的第一个问题是:简单地介绍一下你自己吧。正中下怀,于是你开始背你写好的稿子,啪啦啪啦啪啦,你最好最多别超过5分钟,否则面试官十有八九会打断你,他觉得你背得太熟了。于是,面试开始10分钟后,真正的较量开始了。在接下来的15分钟之内,才是你真正抓住面试官,给他留下决定性印象的时候。15分钟之内,一问一答,能够有几个回合呢?完全取决于你回答问题的长度。你可以一个问题用10分钟来回答,另一个问题用5分钟,这样你就让刁钻的面试官没有机会问你别的问题了;你也可以每个问题都用一句话来回答,这样你很快就可以让面试官弹尽粮绝,没有那么多准备好的问题来问你了——我希望你能看出来我是在开玩笑。

      对你而言,控制时间和节奏成为了和给出好的答案同样重要的任务,如果前者不是更重要的话。有几个重要的原则你必须记住:

      (1)你必须努力掌握对节奏的控制权,而不要把它交给你的面试官。

      如果你回答问题总是拖沓冗长、毫无逻辑也看不出什么时候能结束,面试官会不得不总是打断你的回答:“我明白你的意思了,那么,下一个问题是……”这种被打断回答的情况往往会带来紧张,出现几次,你就会发现清晰的思维和顺畅的表达就这样被打断了。

      所以,千万不要给面试官这种机会。通常情况下,只要你把握得当,他们也并不会主动地抢。

      然而也有这样的面试,面试官无意或者故意地不断打断你的回答,试图获得面试节奏的控制权。那么,在这种情况下,你必须保持冷静,努力地把节奏感再抢回来。你可以在面试官突然打断你的回答,插入一个问题时,有意识地保持10秒钟的沉默,装作在思索这个问题,实际上是在冷静,找回自信和节奏,然后用一种和刚才回答问题不同的语速重新开始。还有的时候,当你觉得你是在回答到关键时刻被打断的话,不要就此罢休,你应该在回答被打断之后的新问题前,有礼貌地说:“在我回答这个问题之前,我觉得我应该对刚才那个问题的回答补充一点……”然后尽快完成你刚才没有机会完成的观点。

      (2)永远不要在一个问题上纠缠太久。

      这15分钟,或者说整个面试,就是一张你无法先看到整张试卷的试题,有点像GRE的机考,更糟糕的是,你实际上连每道题的分值都不知道。在面试的时候,你不知道你在努力地向面试官说清楚的那个复杂的问题究竟能给你增加多少分,而你花了七八分钟在这个问题上,也可能下一个问题对你来说既简单、分数又多。所以,当一个问题开始出现你很难说清的情况时,不要纠缠太久,简单地说:“关于这个问题,我想我现在只能说出这么多了。”让面试向你的下个机会走去。

      (3)在15分钟内取得尽量多的共识。

      在一般情况下,面试官不是来寻找一个永远的“持异议者”的。当你在回答一些关于观点、价值、方法方面的问题时,你会发现,也许经常会出现面试官频频点头,或者他面无表情,甚至摇头的情况。点头很大程度上说明你们的共识,而通常,共识比异议更容易给你的表现加分。

      熬过了这15分钟后,接下来是你最后的机会了。面试官通常会问你有没有任何问题问他。永远别说没有,除非他之前告诉你他已经决定录用你了。最后的问题可能毁了你之前的所有的努力,也可能把你从一场失败的面试中挽救回来。

      然而想出一个好的、最后的问题往往比准备一个好的自我介绍还要难。有的时候,你希望通过一个好的问题,让人对你刮目相看。但是通常你会发现,更容易的是问一个面试官有话可回答的问题,然后你加上几句评价,把这个面试画上句号。

      如果你之前的面试进行得都很顺利的话,在最后一个问题上应该保守一些,只要不犯错误就行。所以你可以问问面试官怎么走进这一行的,怎么看待这一行等等。如果你之前的面试感觉不佳,你希望通过最后一个问题来绝地反击的话,你不妨问面试官一个让他给你出主意的问题,顺带着你可以说出一个你没有来得及在面试中提起的卖点,加深面试官对你正面的评价。

      比方说,我知道的一个聪明的问题,我的一个好朋友明白自己在面试中的英语口语能力令面试官一直表现得对她缺乏兴趣,于是她最后问道:“您知道,我在高中的时候一直是学俄语的,进入大学后我才从ABC开始学英语,现在刚刚学了3年。虽然我已经可以在托福考试中取得630分的成绩,但我知道我的英语口语还需要很大的提高,您能在这方面给我一些好的指点吗?”

      那位香港长大、哈佛毕业的面试官立刻有些羞涩地说:“不、不,你的英语已经很让人满意了。我是中国人,我的中文说得还没有你的英文好。你只学了3年就已经这么好了,应该是你给我一些指点。”

      结果,这个只学了3年英语的女孩子击败了其他学了十几年英文、口语比她好得多的竞争者——我觉得她就只用了这最后一个问题即确定胜势。
673/4<1234>
Open Toolbar