心有多大,舞台就有多大,希望结识做网站测试的朋友们; 测试需要横向扩展也需要纵向延伸 我相信自己会在测试的道路上走的很远..............................

发布新日志

  • QTP学习网址

    2008-12-24 17:29:36

  • 花生壳介绍

    2008-10-24 16:50:07

      花生壳是完全免费的桌面式域名管理和动态域名解析(DDNS)等功能为一体的客户端软件,花生壳客户端向用户提供全方位的桌面式域名管理以及动态域名解析服务。
  • 初识PHP

    2008-10-17 15:35:29

       PHP 是一种嵌入在 HTML 并由服务器解释的脚本语言。它可以用于管理动态内容、支持数据库、处理会话跟踪,甚至构建整个电子商务站点。它支持许多流行的数据库,包括 MySQL、PostgreSQL、Oracle、Sybase、Informix 和 Microsoft SQL Server。

       PHP应用程序服务器是紧密集成到Apache Web服务器中的,可以在一个程序内同时调用它们两个。当Web浏览器请求PHP Web页面的时候,Web服务器的PHP部分将被调用进行解释。Web服务器在请求的Web页中寻找<?PHP . . . ?>标记,并按要求执行这些PHP代码。

  • 初步认识LINUX

    2008-10-15 17:17:03

    一、文件目录对应windows中的硬盘分区
    二、swap交换分区相当于windows下的虚拟内存。它的容量一般分配为256M或者512M。
    三、分区格式:ext3
    四、Linux的目录结构
        /bin:存放LINUX的常用命令
        /boot:该目录下存放的都是系统启动时要用到的程序
        /dev:包含了该系统中使用的所用外部设备,它是访问这些外部设备的端口。
        /etc:该目录存放了系统管理时要用到的各种配置文件和子目录,例如:网络配置文件、文件系统、系统配置文件、设备配置信息、设置用户信息等
        /sbin:该目录用来存放系统管理员的系统管理程序
        /home:用来存储用户信息的主目录
        /lib:该目录用来存放系统动态连接共享库,几乎所有的应用程序都会用到该目录下的共享库
        /lost+found:该目录在大多数情况下是空的,但当突然停电、或者非正常关机后,有些文件就临时存放在这里
       
    五、usr->user
        LS->list
        rm->remove
        src->source
        mv->move
        cp->copy
        LS:列出文件和目录的命令  LS-help
       

     

  • 初步认识tomcat

    2008-10-13 15:49:43

       概括的说:tomcat是为.jsp页面和servlet服务的,它是Apche服务的扩展,Apche服务的对象是.html页面。

       jsp是在普通HTML中嵌入了JAVA代码的一个脚本,这点它与其他脚本语言不同的是:其他脚本语言直接解释这个脚本,而JSP则由jsp容器(如tomcat)首先将其转化为servlet,然后再调用javac将servlet编译为class文件,最终,服务器解释的是CLASS文件。

       servlet是一个特殊的JAVA类,servlet类一般从HttpServlet类继承而来,在这个类中至少要实现doGet或者doPost函数,在这个函数中处理来自客户的请求,然后将结果返回。

  • 用MySQL创建数据库和数据库表

    2008-09-29 11:40:54

    作者: 阿呆 出处:赛迪网
    1、使用SHOW语句找出在服务器上当前存在什么数据库:
    mysql> SHOW DATABASES;
                +----------+
                | Database |
                +----------+
                | mysql |
                | test |
                +----------+
                3 rows in set (0.00 sec)

    2、创建一个数据库abccs
    mysql> CREATE DATABASE abccs;
    注意不同操作系统对大小写的敏感。 
    3、选择你所创建的数据库
    mysql> USE abccs
    Database changed
    此时你已经进入你刚才所建立的数据库abccs.
    4、 创建一个数据库表
    首先看现在你的数据库中存在什么表:
    mysql> SHOW TABLES;
    Empty set (0.00 sec)
    说明刚才建立的数据库中还没有数据库表。下面来创建一个数据库表mytable:   我们要建立一个你公司员工的生日表,表的内容包含员工姓名、性别、出生日期、出生城市。
    mysql> CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1),
                -> birth DATE, birthaddr VARCHAR(20));
                Query OK, 0 rows affected (0.00 sec)

    由于name、birthadd的列值是变化的,因此选择VARCHAR,其长度不一定是20。可以选择从1到255的任何长度,如果以后需要改变它的字长,可以使用ALTER TABLE语句。);性别只需一个字符就可以表示:"m"或"f",因此选用CHAR(1);birth列则使用DATE数据类型。
    创建了一个表后,我们可以看看刚才做的结果,用SHOW TABLES显示数据库中有哪些表:
    mysql> SHOW TABLES;
                +---------------------+
                | Tables in menagerie |
                +---------------------+
                | mytables |
                +---------------------+

    5、显示表的结构:
    mysql> DESCRIBE mytable;
                +-------------+-------------+------+-----+---------+-------+
                | Field | Type | Null | Key | Default | Extra |
                +-------------+-------------+------+-----+---------+-------+
                | name | varchar(20) | YES | | NULL | |
                | sex | char(1) | YES | | NULL | |
                | birth | date | YES | | NULL | |
                | deathaddr | varchar(20) | YES | | NULL | |
                +-------------+-------------+------+-----+---------+-------+
                4 rows in set (0.00 sec)

    6、 往表中加入记录
    我们先用SELECT命令来查看表中的数据:
    mysql> select * from mytable;
    Empty set (0.00 sec)
    这说明刚才创建的表还没有记录。 加入一条新记录:
    mysql> insert into mytable
                -> values (′abccs′,′f′,′1977-07-07′,′china′);
                Query OK, 1 row affected (0.05 sec)

    再用上面的SELECT命令看看发生了什么变化。我们可以按此方法一条一条地将所有员工的记录加入到表中。
    7、用文本方式将数据装入一个数据库表 
    如果一条一条地输入,很麻烦。我们可以用文本文件的方式将所有记录加入你的数据库表中。创建一个文本文件“mysql.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以在CREATE TABLE语句中列出的列次序给出,例如:
    abccs f 1977-07-07 china  
                mary f 1978-12-12 usa
                tom m 1970-09-02 usa

    使用下面命令将文本文件“mytable.txt”装载到mytable表中:mysql> LOAD DATA LOCAL INFILE "mytable.txt" INTO TABLE pet;
    再使用如下命令看看是否已将数据输入到数据库表中:mysql> select * from mytable;
  • WEB测试

    2008-09-11 11:49:06

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

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

  • 性能测试类型分析(转)

    2008-09-08 16:53:08

    感觉看后豁然开朗,所以就转过来了,以便以后的学习。

    性能测试(Performance Testing)
    原文摘要:性能测试方法是通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生成性能要求。即在特定的运行条件下验证系统的能力状况。
    个人理解:主要强调在固定的软硬件环境、确定的测试业务场景下,其主要意义是获得系统的性能指标。

    负载测试(Load Testing)
    原文摘要:在给定的测试环境下,通过在被测系统上不断增加压力,直到性能指标超过预定指标或某种资源使用已经达到饱和状态,目的是了解系统性能容量和处理能力极限。负载测试的主要用途是发现系统性能的拐点,寻找系统能够支持的最大用户、业务等处理能力的约束。
    个人理解:也可以理解为扩展性测试(Scalability Testing),即在固定测试环境,在其它测试角度(负载方面)不变的情况下,变化一个测试角度并持续增加压力,查看系统的性能曲线和处理极限,以及是否有性能瓶颈存在(拐点)。主要意义是从多个不同的测试角度去探测分析系统的性能变化情况,配合性能调优。测试角度可以是并发用户数、业务量、数据量等不同方面的负载。

    压力测试(Stress Testing)
    原文摘要:测试系统在一定饱和状态下系统能够处理的会话能力,以及是否出现错误,一般用于稳定性测试。
    个人理解:可以理解为资源的极限测试。测试关注在资源处于饱和或超负荷的情况下,系统能否正常运行,是一种在极端压力下的稳定性测试。其主要意义是通过测试调优保证系统即使在极端的压力情况下也不会出错甚至系统崩溃。
    网友补充:压力测试的目的是调查系统在其资源超负荷的情况下的表现,尤其是对系统的处理时间有什么影响。这类测试在一种需要反常数量、频率或资源的方式下执行系统。目标是通过极限测试方法,发现系统在极限或恶劣环境中自我保护能力。主要验证系统的可靠性。

    配置测试(Configuration Testing)
    原文摘要:通过对被测系统的软硬件环境的调整,了解各种不同环境对性能影响的程度,从而找到系统各项资源的最有分配原则。
    个人理解:主要用于性能调优,在经过测试获得了基准测试数据后,进行环境调整(包括硬件配置、网络、操作系统、应用服务器、
    数据库等),再将测试结果与基准数据进行对比,判断调整是否达到最佳状态。

    并发测试(Concurrency Testing)
    原文摘要:模拟并发访问,测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题,如内存泄漏、线程锁、资源争用问题。
    个人理解:测试目的并非为了获得性能指标,而是为了发现并发引起的问题。

    可靠性测试(Reliability Testing)
    原文摘要:通过给系统加载一定的业务压力的情况下,让应用持续运行一段时间,测试系统在这种条件下是否能够稳定运行。
    个人理解:需要和压力测试区分开,两者的测试环境和测试目的不一样。压力测试强调在资源极限情况下系统是否出错,可靠性测试强调在 一定的业务压力下长时间(如24×7)运行系统,关注系统的运行情况(如资源使用率是否逐渐增加、响应是否是否越来越慢),是否有不稳定征兆。

  • (转贴)应届毕业生我对你“非常不满”

    2008-09-08 09:50:32

     

      最近毕业生招聘的专场,开始在全国“铺开”。

      我很少直接去毕业生专场招人。今天广东的一个综合场,是我第一次参加的毕业生现场招聘会。

      今天我是以多重身份,参与这个招聘会的:作为公司的人力资源总监,我希望为公司招到一批合适的储备人才;作为一个职业规划研究者,我要深入一线接触准备投身社会就业大军——应届生的特点;作为广东省劳动学会、人力资源管理协会的理事,我想藉此了解毕业生的就业状态、以及他们的所想所思。

      到了招聘场,我感到的不是一种兴奋,而是一种压抑。这是我任职人力资源总监以来的第5年,而5年来,中国的毕业生整整翻了5倍,06年将超过360万。进场的时间还没到,售票点外已经排起了多条百米“人带”。这时,我的心中不禁掠过一丝淡淡的伤感。很多年以前,我也曾经这样在茫茫人龙中,带着满怀的期待排队,每天只能排到3、5个队伍中,去投3、5份简历,而后开始了更加漫长的心里等待……而现在,人龙的规模远远超越我作为毕业生的那个时候。现在是更多的人可以读大学了,但我无法分清,眼前的这种景象,该是用壮观来形容,还是用悲壮来形容,无法说清,这究竟是好事还是坏事。

      我做了一些统计,也思考了一些细节。

      大学生自提的薪酬水平大致如下:

      研究生:全部都是说“4000元以上”。

      本科生:2000-3500元。

      大专生:基本都是提2000以下。

      其中,技术类的(如WEB开发),相对偏高,在3000-3500之间。

      这些数据,除了研究生略有下降,其它比去年偏高(去年我是在5月份以后,才陆续通知一些人到公司面试)。一方面也许现在是刚刚开始,大家把握不到竞争线的准绳,另一方面,我希望是因为就业市场在转暖(但是看不到这种迹象)。

      而其中,有不少细节值得一提。

      一般情况下,我接过简历的时候,不会问也不会看应聘者是来自那个学校(我从不以学校论学生)。但是当他们回答薪酬要求的时候,却的确体现了一种差别。今天主要都是来自广东学校的学生,本科线上,暨南大学、华师大、华工、华农提的要求都比较高,要求在2500元以上;而普通一点的院校,则提2500元以下;专科线上,则有一个特殊的群体,就是所谓“非正规院校”,比如什么技工类学校、民办学校。他们提的要求,全部都是在1200元以下——问了一轮之后,我就开始对号入座的猜他们是来自那个学校,然后对照简历,我发现几乎达到“问价格则知学校”的地步。敢情是学校给了他们一个“宏观指导”?有几个技工类的大专生,都是说800元,我问他们是不是都是同学,他们说“是”。“为什么你提这个数字呢?”,他们说:“因为我们老师说,我们现在的竞争力大概就是800元”。这种对学生“批量生产,统一价格”的指导方针,令我为他们感到悲哀。老师的这一句“指导”,足以给全面摧残他们3年来的系统教育和信心,也足以毁灭这个学校——不可否认,他们中的不少人,的确市场上是按照这个价格去招聘的(特别是销售)。但是,学生不是纯粹的产品,每个人都是独一无二的,怎么可以做这种统一的指导呢?为什么不会有个别人更加有自信的提出1000、1500?我今天感受到的“好学校”和“差学校”的差别,最大和最根本的差别在于学生自信心的差别。我偶尔被邀去学校做讲座的时候,我经常会对学生说一句话:“你优秀,是因为你认为自己优秀。”学生的自我意想,自我心理定位,会永远的影响他一生。如果我是校长,我会发给这个认为自己的学生值800块的老师400块的工资,但是我不是给他4张纸币,我会换成400个1分的硬币,然后一个个往他脑袋上砸,直到他清醒过来,或者被硬币埋葬。因为他摧残了一批学生。

      今天的面试,我给每个人的时间,不会超过5分钟。

      有一个人我只和他谈了3分钟,留下他的简历,他后面的同学用一种没有希望的眼神看着他,说:“这么快?”

      我说:“你会更快。如果你不假思索的用两句话描述你的优点,我就招你,1分钟”。可惜他断断续续,说了一大堆——显然他心理的“谱”,是他彩排好的自我介绍,我“打乱”了他的部署。

      有一个学生,本来我觉得不错,她只用一页的简历,就表达了她的优势和特点,当我决定招她的时候,习惯的问下学期还有没课并看简历,却看不到她的学校名字,“为什么没写学校名?”,“因为……我的学校不怎么样……”。我还是问了她的学校,然后拿起笔,在她的简历中帮她写下她的母校,然后在她眼前竖起简历:“有没写错?”

      “没有。”

      我今天对所有留下的简历,只是做一个动作(在认为特别适合的,打钩)。这是我唯一写字的简历,我不知道她明不明白,我是在告诉她什么。她的做法让我大打折扣。

      如果我是负责教育的,我有一把足够大的铁锤,我会抡起来把所有的中国学校都砸掉,因为现在不会有一个学校敢站出来说:我们学校是“教做人的”——全部都是“教书”的。

      当然,也有些学生非常善于销售自我,比如,有个应聘网页设计的学生,因为他做的东西都是在学校的内部网,没法把作品展现给我看,他和我说:“我把作品放到一个叫职友集上,你可以看。”还有一个应聘文案助理的,也是将她的文章传到自己的BLOG上。晚上我回去打开他们的主页,觉得他们放在网上的内容很充实,比如应聘文案助理的学生,上面有很多她的随笔作品,我看到她不错的写作思路和思维水平,我决定明天通知这两个人上班。他们都是来自那些被人看成“差学校”的学生,但是,他们善于利用多种途径,来表达他们的优势。比如善于利用“职友集”、BLOG这种新的免费工具,的确成为他们赢得我的信任的关键。

      总结今天的感受,我认为:

      未毕业,先失业,不是因为没有工作机会提供,而是就业能力结构失衡;就业难的关键,也不是因为毕业生多,教育水平下降,而是自我认知的能力模糊,就业信心和自我价值期望的下降。天之骄子的高傲姿态消失,是好事,但取而代之的不是平衡心、平常心,而是一种自卑、浮躁和茫然。

      你可以认为我摆谱、摆资格,但是,作为毕业生,我相信你还是愿意听听一个5年人力资源总监、有过1万人次面试经历的人力资源工作者,对你的如下“不满”:

      不要递给我花里胡俏的简历,给我一点简洁(不是简单)而能突出你自己的表达——面对成千上万的求职者,你真的以为HR会去看你那封100个人有99个差不多的求职信、和装订得像书本一样的简历模板内容吗?

      不要对我说太多的自我介绍,我不敢说3、5分钟我就准确判断了你,但是30秒之内我就定格了你的第一印象;我之所以很快结束你的面试,是因为你的后面排队的人真是太多,我也曾经作为毕业生这样苦苦的等待,我只是为了给更多的人一个和你一样平等的机会,而后我会挑选请你到我办公室复试;你认为我给你的时间太少,而流露出失望(自己是不是没被看中了?)眼神的那一刹那,你就丢失了再次获得复试的机会。我永远坚持:你的信心就是我的希望。你的岗位机会不是我给你的,而是你自己争取的。

      不要一副“只要你招我我什么都肯做”的姿态,这样给我一种“卖身”的感觉,我请你是因为你会为公司创造价值,所以不是你“求”职,而是我“请”你。这不是叫你抬到姿态,而只是希望你抬起胸膛。

      不要对我拒绝收你的简历,报以晦气的脸色或失望的情绪。我不接收你的简历,不是你不行,而是不适合我的公司;我不接收你的简历,不是不给你机会;而是不想给你根本不存在的期待(如果我收了,你会等待着我通知你);不是我不给你面子,而是我不想浪费你和你父母的血汗钱——尽管每一份简历只有1、2元,但是我没有任何理由,去浪费属于你的1分1厘,何况你还是一个纯消费者;我是在帮你节约,让你能够将它投给属于你的机会。我从不想当我拿不了那么多简历回公司的时候,把你的希望孤伶伶的留在招聘场地里;我更不希望,当招聘会结束以后,你的简历会在冷清的场地,像其它被丢下的简历一样,雪花般漫天飞舞,任人践踏——我决不加入这样的行列,而宁可以拒收给你打击(你也必须开始懂得直面这样的打击),因为你熬了多少个夜晚做出来的那个简历,代表的就是你,上面写着你的价值,和你的尊严。我始终认为,任何人都可以狠狠的批判教育制度,但是绝对不可以否定你的价值,更不可以践踏你的尊严!

      不要不敢说出和写下你毕业的学校,无论她是如何的差,你是从那里走出来的,因为我绝对不会要这样的人:看到他父母的时候,因为他们的背景不好而不敢认他们;或者有一天离开我的公司,去到一个更大的公司面试的时候,不好意思说我是来自一个不是500强的公司。对公司来说,你的价值和价值观,决定了一切。英雄莫问出处,如果你是一个狗熊,哪怕你从天堂走出来,也还是狗熊。

      不要给我罗列一大堆你的学习成绩和从事的所谓实习(因为很多毕业生也曾经到我这里来兜一圈,参观一下,盖个章名曰“实习”),你只需要挑选一件特别的事情,要点式地说明过程和结果,让我知道你是怎样做事的。

      不要不敢用眼睛看着我,你不敢瞧我的时候我也瞧不起你。

      不要在回答“你的薪酬要求”的时候,多了那么多废话。我不想听每个人都重复着“因为我是毕业生,没有社会经验,所以如果公司觉得这个要求太……我也可以……”,我的钱也许也是刚刚从人民银行印出来的,但是它们不会因为还没有被流通转手,而减损它的价值。其实我不在乎你说的是5000,还是1500,我在乎的是你说出一个数字的那种语气、眼神。我尊重每个人都有自估劳动力价值的权利(但公司自有它的薪酬制度,不会特殊对待你),但我喜欢干脆利落的同事,干脆利落是一种自信,是一种做事风格,也是一种做人态度。我会固执的认为:你说出这个数字前后带了多少个字符,就表示你做事有多拖泥带水;或者你的自我认识和自信是多么摇摆不定。

      人生简短,价值无限,告诉人家你是独一无二的,你就是你,你成就你。
  • cookies和session(转总)

    2008-09-03 14:33:57

       cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。
       cookie 和session的区别是:cookie数据保存在客户端,session数据保存在服务器端。
     
       简单的说,当你登录一个网站的时候,

        如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话的sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登录或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造,但是如果你能够获取某个登录用户的 sessionid,用特殊的浏览器伪造该用户的请求也是能够成功的。sessionid是服务器和客户端链接时候随机分配的,一般来说是不会有重复,但如果有大量的并发请求,也不是没有重复的可能性.

        如果浏览器使用的是cookie,那么所有的数据都保存在浏览器端,比如你登录以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。如果你能够截获某个用户的 cookie变量,然后伪造一个数据包发送过去,那么服务器还是认为你是合法的。所以,使用 cookie被攻击的可能性比较大。如果设置了的有效时间,那么它会将 cookie保存在客户端的硬盘上,下次再访问该网站的时候,浏览器先检查有没有 cookie,如果有的话,就读取该 cookie,然后发送给服务器。如果你在机器上面保存了某个论坛 cookie,有效期是一年,如果有人入侵你的机器,将你的   cookie拷走,然后放在他的浏览器的目录下面,那么他登录该网站的时候就是用你的的身份登录的。所以 cookie是可以伪造的。当然,伪造的时候需要主意,直接copy    cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器。

        两个都可以用来存私密的东西,同样也都有有效期的说法,区别在于session是放在服务器上的,过期与否取决于服务期的设定,cookie是存在客户端的,过去与否可以在cookie生成的时候设置进去。

         总之,两者的区别可以总结为:

        (1)cookie数据存放在客户的浏览器上,session数据放在服务器上
        (2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session,所以课可以把一些重要的信息存放到session中。
        (3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
        (4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能大于3K。

  • 进程和线程

    2008-09-03 09:55:22

       进程(process)常常被定义为程序的执行。可以把一个进程看成是一个独立的程序,在内存中有其完备的数据空间和代码空间。一个进程所拥有的数据和变量只属于它自己。

      线程(tread)则是某一进程中一路单独运行的程序。也就是说,线程存在于进程之中。一个进程由一个或多个线程构成,各线程共享相同的代码和全局数据,但各有其自己的堆栈。由于堆栈是每个线程一个,所以局部变量对每一线程来说是私有的。由于所有线程共享同样的代码和全局数据,它们比进程更紧密,比单独的进程间更趋向于相互作用,线程间的相互作用更容易些,因为它们本身就有某些供通信用的共享内存:进程的全局数据。

      一个进程和一个线程最显著的区别是:线程有自己的全局数据。线程存在于进程中,因此一个进程的全局变量由所有的线程共享。由于线程共享同样的系统区域,操作系统分配给一个进程的资源对该进程的所有线程都是可用的,正如全局数据可供所有线程使用一样。

       或许可以浅浮的理解为:进程就是一个能够实现某一功能的大程序,而线程则是这个大程序中的某个小程序或者说是函数。

  • web测试技术经典案例

    2008-08-04 11:39:59

    http://www.51testing.com/html/57/1681.html

     
    web测试技术经典案例
    文章出处:网络 作者: 发布时间:2006-09-04

    1. 概述

    随着web应用的增多,新的模式解决方案中以web为核心的应用也越来越多,很多公司各种应用的架构都以B/S及web应用为主,但是有关WEB测试方面的内容并没有相应的总结,所以我在这里对web的测试方法和采用的测试技术进行总结,便于内部交流。

    测试方法尽量涵盖web程序的各个方面,测试技术方面在继承传统测试技术的技术上结合web应用的特点。

    相关的测试和实现技术也有着很大的关系,由于本公司使用J2EE体系,也许例子中只有JAVA平台可以使用,.NET平台测试技术暂时不涉及,如果你有请与我联系。

     2. 测试方法

    说明:测试方法的选择取决你的测试策略。

    一般的web测试和以往的应用程序的测试的侧重点不完全相同,基本包括以下几个方面。
    当然圆满的完成测试还要有好的团体和流程等的方方面面的支持,你同样应该对这些方面进行注意。
    有些测试方法设计到了流程,哪些应该在你的测试团队建设中建立。

     2.1 界面测试

    现在一般人都有使用浏览器浏览网页的经历,用户虽然不是专业人员但是对界面效果的印象是很重要的。如果你注重这方面的测试,那么验证应用程序是否易于使用就非常重要了。很多人认为这是测试中最不重要的部分,但是恰恰相反界面对不懂技术的客户来说那相当关键,慢慢体会你会明白的。

    方法上可以根据设计文档,如果够专业的话可以专业美工人员,来确定整体风格页面风格,然后根据这个可以页面人员可以生成静态的HTML,CSS等甚至生成几套不用的方案来讨论,或者交给客户评审,最后形成统一的风格的页面/框架。注意不要靠程序员的美术素养形成你的web风格,那样可能会很糟糕。

    主要包括以下几个方面的内容:

    站点地图和导航条位置、是否合理、是否可以导航等内容布局布局是否合理,滚动条等简介说明说明文字是否合理,位置,是否正确
    背景/色调是否正确、美观,是否符合用户需求;
    页面在窗口中的显示是否正确、美观(在调整浏览器窗口大小时,屏幕刷新是否正确)表单样式大小,格式,是否对提交数据进行验证(如果在页面部分进行验证的话)等
    连接连接的形式,位置,是否易于理解等

    web测试的主要页面元素

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

    测试技术

    通过页面走查,浏览确定使用的页面是否符合需求。可以结合兼容性测试对不用分辨率下页面显示效果,如果有影响应该交给设计人员提出解决方案。
    可以结合数据定义文档查看表单项的内容,长度等信息。
    对于动态生成的页面最好也能进行浏览查看。如Servelet部分可以结合编码规范,进行代码走查。是否支持中文,如果数据用XML封装要做的工作会多一点等等。

    界面测试要素:
    符合标准和规范,灵活性,正确性,直观性,舒适性,实用性,一致性

    1.直观性:

    用户界面是否洁净,不唐突,不拥挤.界面不应该为用户制造障碍.所需功能或者期待的响应应该明显,并在预期出现的地方.

    界面组织和布局合理吗?是否允许用户轻松地从一个功能转到另一个功能?下一步做什么明显吗?任何时刻都可以决定放弃或者退回,退出吗?输入得到承认了吗?菜单或者窗口是否深藏不露?
    有多余功能吗?软件整体抑或局部是否做得太多?是否有太多特性把工作复杂化了?是否感到信息太庞杂?
    如果其他所有努力失败,帮助系统真能帮忙吗?

    2.一致性

    快速键和菜单选项.在Windows 中按F1键总是得到帮助信息
    术语和命令.整个软件使用同样的术语吗?特性命名一致吗?例如,Find是否一直叫Find,而不是有时叫Search?
    软件是否一直面向同一级别用户?带有花哨用户界面的趣味贺卡程序不应该显示泄露技术机密的错误提示信息.
    按钮位置和等价的按键.大家是否注意到对话框有OK按钮和Cancle按钮时,OK按钮总是在上方或者左方,而Cancle按钮总是在下方或右方?同样原因,Cancle按钮的等价按键通常是Esc,而选中按钮的等价按钮通常是Enter.保持一致.

    3.灵活性

    状态跳转.灵活的软件实现同一任务有多种选择方式.
    状态终止和跳过,具有容错处理能力.
    数据输入和输出.用户希望有多种方法输入数据和查看结果.例如,在写字板插入文字可用键盘输入,粘贴,从6种文件格式读入,作为对象插入,或者用鼠标从其他程序拖动.

    4.舒适性
    恰当.软件外观和感觉应该与所做的工作和使用者相符.
    错误处理.程序应该在用户执行严重错误的操作之前提出警告,并允许用户恢复由于错误操作导致丢失的数据.如大家认为undo /redo是当然的.
    性能.快不见得是好事.要让用户看得清程序在做什么,它是有反应的.

    2.2 功能测试
    对功能测试是测试中的重点
    主要包括一下几个方面的内容
    连接这个连接和界面测试中的连接不同那里注重的是连接方式和位置,如是图像还是文字放置的位置等,还是其他的方式。这里的连接注重功能。如是否有连接,连接的是否是说明的位置等。

    表单提交应当模拟用户提交,验证是否完成功能,如注册信息,要测试这些程序,需要验证服务器能正确保存这些数据,而且后台运行的程序能正确解释和使用这些信息。还有数据正确性验证,异常处理等,最好结合易用性要求等。B/S结构实现的功能可能主要的就在这里,提交数据,处理数据等如果有固定的操作流程可以考虑自动化测试工具的录制功能,编写可重复使用的脚本代码,可以在测试、回归测试时运行以便减轻测试人员工作量。

    Cookies 验证如果系统使用了cookie,测试人员需要对它们进行检测。如果在 cookies 中保存了注册信息,请确认该 cookie能够正常工作而且已对这些信息已经加密。如果使用 cookie 来统计次数,需要验证次数累计正确。关于cookie的使用可以参考浏览器的帮助信息。如果使用B/S结构cookies中存放的信息更多。功能易用性测试完成了功能测试可以对应用性进行了解,最好听听客户的反映,在可以的情况下对程序进行改进是很有必要的,和客户保持互动对系统满意度也是很有帮助的。

    测试技术功能测试的测试技术可是很多的,我们可以结合实际环境选择使用

    白盒测试技术(White Box Testing) 深入到代码一级的测试,使用这种技术发现问题最早,效果也是最好的。该技术主要的特征是测试对象进入了代码内部,根据开发人员对代码和对程序的熟悉程度,对有需要的部分进行在软件编码阶段,开发人员根据自己对代码的理解和接触所进行的软件测试叫做白盒测试。这一阶段测试以软件开发人员为主,在JAVA平台使用Xunit系列工具进行测试,Xunit测试工具是类一级的测试工具对每一个类和该类的方法进行测试。

    黑盒测试技术(Black Box Testing)黑盒测试的内容主要有以下几个方面,但是主要还是功能部分。主要是覆盖全部的功能,可以结合兼容,性能测试等方面进行,根据软件需求,设计文档,模拟客户场景随系统进行实际的测试,这种测试技术是使用最多的测试技术涵盖了测试的方方面面,可以考虑以下方面

    正确性 (Correctness):计算结果,命名等方面?

    可用性 (Usability):是否可以满足软件的需求说明。

    边界条件 (Boundary Condition)输入部分的边界值,就是使用一般书中说的等价类划分,试试最大最小和非法数据等等.

    性能 (Performance) 正常使用的时间内系统完成一个任务需要的时间,多人同时使用的时候响应时间,在可以接受范围内.J2EE技术实现的系统在性能方面更是需要照顾的,一般原则是3秒以下接受,3-5秒可以接受,5秒以上就影响易用性了. 如果在测试过程中发现性能问题,修复起来是非常艰难的,因为这常常意味着程序的算法不好,结构不好,或者设计有问题。因此在产品开发的开始阶段,就要考虑到软件的性能问题。

    压力测试 (Stress) 多用户情况可以考虑使用压力测试工具,建议将压力和性能测试结合起来进行.如果有负载平衡的话还要在服务器端打开监测工具,查看服务器CPU使用率,内存占用情况,如果有必要可以模拟大量数据输入,对硬盘的影响等等信息.如果有必要的话必须进行性能优化(软硬件都可以).这里的压力测试针对的是某几项功能.

    错误恢复 (Error Recovery) 错误处理,页面数据验证,包括突然间断电,输入脏数据等.
    安全性测试(Security)这个领域正在研究中,不过防火墙,补丁包.杀毒软件等的就不必说了,不过可以考虑破坏性测试时任意.看了一些资料后得知,这里面设计到的知识\内容可以写本书了,不是一两句可以说清的,特别是一些商务网站,或者跟钱有关,或者和公司秘密有关的web更是,需要这方面的测试,在外国有一种专门干这一行的人叫安全顾问,可以审核代码,提出安全建议,出现紧急事件是的处理办法等,在国内没有听说哪里有专门搞安全技术测试的内容.

    兼容性 (Compatibility) 不同浏览器,不同应用程序版本在实现功能时的表现,不同的上网方式,如果你测试的是一个公共网站的话.

    兼容性测试内容详述
    硬件平台
    浏览器软件和版本:浏览器插件,浏览器选项,视频分辨率和色深.文字大小,调制解调器速率.
    软件配置 (Configuration) 如IE浏览器的不用选项-安全设定最高,禁用脚本程序,等等,你们的程序在各种不用的设置下表现如何.

    单元测试技术(Unit Test):
    2.2.1 下面是对白盒测试和单元测试的区别的论述:

    单元测试和白盒测试是不同的,虽然单元测试和白盒测试都是关注功能虽然他们都需要代码支持,但是级别不同,白盒测试关注的是类中一个方法的功能是更小的单位,但是完成一个单元测试可能需要N多类,所以说作单元测试需要什么写驱动和稳定桩,比如查询单元是一个查询包包N多的测试类,测试数据,运行他需要提供数据的部分,输入参数和发出命令的驱动等等.是比类大的一个整体进行的.

    另一个明显的区别是白盒测试不会关注类接口,但是单元测试主要的内容就是类接口测试.

    不过很多时候是很少区分的,因为这两种技术实现起来有很多相互关联的部分.不过要看你对质量的关注程度来决定.

    2.2.2 功能测试边界测试\越界测试技术详述
    边界条件
    边界条件是指软件计划的操作界限所在的边缘条件.
    如果软件测试问题包含确定的边界,那么数据类型可能是:
    数值速度字符地址位置尺寸数量
    同时,考虑这些类型的下述特征:
    第一个/最后一个最小值/最大值
    开始/完成超过/在内
    空/满最短/最长
    最慢/最快最早/最迟
    最大/最小最高/最低
    相邻/最远
    越界测试
    通常是简单加1或者很小的数(对于最大值)和减少1或者很小的数(对于最小值),例如:
    第一个减1/最后一个加1
    开始减1/完成加1
    空了再减/满了再加
    慢上加慢/快上加快
    最大数加1/最小数减1
    最小值减1/最大值加1
    刚好超过/刚好在内
    短了再短/长了再长
    早了更早/晚了更晚
    最高加1/最低减1

    另一些该注意的输入:默认,空白,空值,零值和无;非法,错误,不正确和垃圾数据.

    2.2.3 状态测试技术

    软件可能进入的每一种独立状态;
    从一种状态转入另一种状态所需的输入和条件;
    进入或退出某种状态时的设置条件及输入结果.

    具体测试方法可以参考如下:
    每种状态至少访问一次;
    测试看起来最常见最普遍的状态转换;
    测试状态之间最不常用的分支
    测试所有错误状态及其返回值
    测试随机状态转换

    2.2.4 竞争条件测试技术

    竞争条件典型情形参考如下:
    两个不同的程序同时保存或打开同一个文档
    共享同一台打印机,通信端口或者其他外围设备
    当软件处于读取或者修改状态时按键或者单击鼠标
    同时关闭或者启动软件的多个实例
    同时使用不同的程序访问一个共同数据库

    2.3 负载\压力测试(StressTest)

    在这里的负载\压力和功能测试中的不同,他是系统测试的内容,是基本功能已经通过后进行的.可以在集成测试阶段,亦可以在系统测试阶段进行.

    使用负载测试工具进行,虚拟一定数量的用户看一看系统的表现,是否满足定义中的指标.

    负载测试一般使用工具完成,loadrunner,webload,was,ewl,e-test等,主要的内容都是编写出测试脚本,脚本中一般包括用户一般常用的功能,然后运行,得出报告。所以负载测试包括的主要内容就不介绍了。

    负载测试技术在各种极限情况下对产品进行测试 (如很多人同时使用该软件,或者反复运行该软件),以检查产品的长期稳定性。例如,使用压力测试工具对web服务器进行压力测试. 本项测试可以帮助找到一些大型的问题,如死机、崩损、内存泄漏等,因为有些存在内存泄漏问题的程序,在运行一两次时可能不会出现问题,但是如果运行了成千上万次,内存泄漏得越来越多,就会导致系统崩滑。用J2EE实现的系统很少但是并不是没有内存问题.

    无论什么工具基本的技术都是利用线程技术模仿和虚拟用户,在这里主要的难点在与测试脚本的编写,每种工具使用的脚本都不一样,但是大多数工具都提供录制功能就算是不会编码的测试人员同样可以测试。

    对负载工具的延伸使用可以进行系统稳定性测试,系统极限测试,如使用100的Load Size连续使用24小时,微软定义的通过准则是通过72小时测试的程序一般不会出现稳定性的问题。

    2.4 回归测试 (Regression Test)

    过一段时间以后,再回过头来对以前修复过的Bug重新进行测试,看该Bug 是否会重新出现。

    回归测试技术可以在测试的各个阶段出现,无论是单元测试还是集成测试还是系统测试。是对以前问题进行验证的过程。

    回归测试的目的就是保证以前已经修复的Bug不会再出现。实际上,许多Bug都是在回归测试时发现的,在此阶段,我们首先要检查以前找到的Bug 是否已经更正了。值得注意的是,已经更正的Bug 也可能又回来了,有的Bug 经过修改之后可能又产生了新的Bug。所以,回归测试可保证已更正的Bug不再重现,不产生新的Bug。

    2.5 Alpha 和Beta 测试 (Alpha and Beta Test):

    在正式发布产品之前往往要先发布一些测试版,让用户能够反馈出相关信息,或者找到存在的Bug,以便在正式版中得到解决。

    特别是在有客户参加的情况下,对系统进行测试可能会出现一些我们没有考虑的情况,还可以解决一些客户实际关心的问题

     3 不同的测试技术区分

    3.1 覆盖测试技术

    说明:测试覆盖率可以看出测试的完成度,在测试分析报告中可以作为量化指标的依据,测试覆盖率越高效果越好。

    覆盖测试可以是程序代码的执行路径覆盖,亦可以是功能实现的步骤覆盖(可以理解成流程图的路径覆盖)。

    该技术可以用在任何测试阶段,包括单元测坏死、集成测试、系统测试。

    使用该技术时可以使用以上的任何测试方法和测试技术。

    3.2 白盒测试和黑盒测试技术

    白盒测试技术 (White Box Testing)该技术主要的特征是测试对象进入了代码内部,根据开发人员对代码和对程序的熟悉程度,对有需要的部分进行在软件编码阶段,开发人员根据自己对代码的理解和接触所进行的软件测试叫做白盒测试。这一阶段测试以软件开发人员为主,使用Xunit系列工具进行测试,可以包括很多方面如功能性能等。

    黑盒测试 (Black Box Testing)测试的主体部分黑盒测试的内容主要有以下几个方面,但是主要还是功能部分。主要是覆盖全部的功能,可以结合兼容,性能测试等方面进行,包括的不同测试类型请参考以上内容。

    3.3 手工测试和自动化测试

    手工测试(Manual Testing):即依靠人力来查找Bug。方法可以参考上边的测试,也可以根据对实现技术及经验等进行不同的测试。

    自动测试(Automation Testing)使用有针对工具实行。可以作出自动化测试的计划,对可以进行自动化测试的部分编写或者录制相应的脚本,可以加入功能,容错,表单提交等,可以参考MI,Rational或者其他类测试工具说明.

    根据权威的软件测试经验,手工测试还是主要的测试方法,自动测试不够灵活,在这里不再详述。微软的测试过程80%还是手工完成。

    自动测试永远也代替不了手工测试,但是手工测试的工作量很大是不争的事实。

    3.4 根据RUP标准按阶段区分测试

    单元测试在上边有详细的叙述,还有针对单元测试和集成测试的论述,请参考。

    集成测试分为功能集成测试和系统集成测试,相互有调用的功能集成,在系统环境下功能相互调用的影响等,使用方法可以任意选用上面的内容。注重功能方面。

    系统测试在功能实现的基础上,可以加入兼容性,易用性,性能等等

    验收测试可以包括Alpha和Beta测试,在这里就不再详述。

     4. 存在风险及解决方法

    说明:测试不能找出所有的问题,只是尽量将问题在开发阶段解决大多数的问题而已。
    测试风险如下:

    软硬件的测试环境提供上也对测试结果有很大的影响。
    测试团队的水平,经验,合作效果等
    整个开发流程对测试的重视程度,测试的进入时间等
    由于测试环境操作系统,网络环境,带宽等情况可能产生的测试结果可能不同这是就需要经验以及对测试环境的保护等方面下一些功夫。

     5. 软件缺陷的原则

    软件缺陷区别于软件bug,它是在测试过程中出现的对系统有影响的,但是在设计中没有的或者对修改后的bug测试和开发人员有不同意见等
    软件未达到产品说明书标明的功能。
    软件出现了产品说明书指明不会出现的错误。
    软件功能超出产品说明书指明范围。
    软件未达到产品说明书虽未指出但应达到的目标。
    软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。

     6. 文档测试

    产品说明书属性检查清单
    完整.是否有遗漏和丢失?完全吗?单独使用是否包含全部内容?
    准确.既定解决方案正确吗?目标明确吗?有没有错误?
    精确,不含糊,清晰.描述是否一清二楚?还是自说自话?容易看懂和理解吗?
    一致.产品功能能描述是否自相矛盾,与其他功能有没有冲突?
    贴切.描述功能的陈述是否必要?有没有多余信息?功能是否原来的客户要求?
    合理.在特定的预算和进度下,以现有人力,物力和资源能否实现?
    代码无关.是否坚持定义产品,而不是定义其所信赖的软件设计,架构和代码?
    可测试性.特性能否测试?测试员建立验证操作的测试程序是否提供足够的信息?

    产品说明书用语检查清单

    说明对问题的描述通常表现为粉饰没有仔细考虑的功能----可归结于前文所述的属性.从产品说明书上找出这样的用语,仔细审视它们在文中是怎样使用的.产品说明书可能会为其掩饰和开脱,也可能含糊其词----无论是哪一种情况都可视为软件缺陷.

    总是,每一种,所有,没有,从不.如果看到此类绝对或肯定的,切实认定的叙述,软件测试员就可以着手设计针锋相对的案例.

    当然,因此,明显,显然,必然.这些话意图诱使接受假定情况.不要中了圈套.

    某些,有时,常常,通常,惯常,经常,大多,几乎.这些话太过模糊."有时"发生作用的功能无法测试.

    等等,诸如此类,依此类推.以这样的词结束的功能清单无法测试.功能清单要绝对或者解释明确,以免让人迷惑,不知如何推论.

    良好,迅速,廉价,高效,小,稳定.这些是不确定的说法,不可测试.如果在产品说明书中出现,就必须进一步指明含义.

    已处理,已拒绝,已忽略,已消除.这些廉洁可能会隐藏大量需要说明的功能.

  • 请教有关IE缓存和cookies测试的问题

    2008-07-23 13:32:56

    IE缓存
       它是保存浏览页面的地方,利用它可以提高访问页面的速度,每次访问网站时,IE会首先搜索这个目录,如果其中已经有访问过的内容,那IE就不必从网上下载,而直接从缓存中调出来,从而提高了访问网站的速度。
    设置:在IE的“工具”菜单下选择“Internet选项”,然后在“常规”选项卡中你会看到有“Internet临时文件”这一项,单击“设置”按钮,然后在弹出的“设置”对话框中将缓存大小设置为一个合适的值。你也可以直接将IE缓存移动到其它位置上去。

    cookies:
    什么是cookies?
      Cookies就是服务器暂存放在你的电脑里的资料(.txt格式的文本文件),好让服务器用来辨认你的计算机。当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,Cookies 会帮你在网站上所打的文字或是一些选择都记录下来。当下次你再访问同一个网站,Web服务器会先看看有没有它上次留下的Cookies资料,有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你。
    价值:利用这些信息,一方面是可以为用户提供个性化的服务,另一方面,也可以作为了解所有用户行为的工具,对于网站经营策略的改进有一定参考价值。

      如果要使开发的网站具有cookies功能,是不是在开发程序时必须要写入一段代码来进行编写呢?

      那又如何来进行cookies的测试呢?

      高手帮帮忙,解释一下,谢谢

     怎么进行cookies的测试呢?大家知道的说一下,谢谢了!!

     

     

  • SQL注入的详细原理

    2008-07-18 17:33:53

    1、什么是SQL注入

        随着B/S模式应用开发的发展,使得使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。攻击者可以通过互联网的输入区域,利用某些特殊构造的SQL语句插入SQL的特殊字符和指令,提交一段数据库查询代码(一般是在浏览器地址栏进行,通过正常的www端口访问),操纵执行后端的DBMS查询并获得本不为用户所知数据的技术,也就是SQL Injection(SQL注入)。

        SQL注入是从正常的WWW端口通过对页面请求访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙很少会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。

        SQL注入的手法相当灵活,可以根据具体情况进行分析,构造巧妙的SQL语句,从而获取想要的数据。

        程序存在SQL注入,追其原因,是因为代码或者编码的不完善。但说到底,是程序员的惰性。代码的不完善,往往是因为在程序编写的过程中,没有考虑到代码的健壮性及安全性的结果,就国内现状来看,大多数网站使用的脚本语言,用ASP+Access或SQLServer的占70%以上,PHP+MySQL占20%,其他的不足10%,并且因为开发者水平的参差不齐,代码编写的过程考虑不够周全,程序代码的安全性值得怀疑,而程序脚本被注入也成为必然。

        当然,程序运行环境的先天缺陷也是人为的,这种现象无法完全杜绝避免。从攻击者的角度来看,使用SQL注入能够避免绝大多数防火墙的防御,不留攻击痕迹,攻击手法多种多样,因此才会导致SQL注入攻击手段的兴起。

    2、SQL注入的原理及分类

        SQL-Injection的原理

        SQL是一种用于关系数据库的结构化查询语言。它分为许多种,但大多数都松散地基于美国国家标准化组织最新的标准SQL-92。SQL语言可以修改数据库结构和操作数据库内容。当一个攻击者能够通过往查询中插入一系列的SQL操作数据写入到应用程序中去,并对数据库实施了查询,这时就已经构成了SQL-Injection。

        SQL-Injection的分类

        由于SQL-injection攻击出要发生在B/S结构的应用程序上,而这些程序大部分都属于互联网的web站点,在这种情况下SQL-Injection同样需要遵循HTTP协议,形成了两种分类: POST方式注入和GET方式注入

    3、SQL-Injection的攻击方法

        常规注入方法 SQL注入攻击本身就是一个常规性的攻击,它可以允许一些不法用户检索你的数据,改变服务器的设置,或者在你不小心的时候黑掉你的服务器。

        旁注 顾名思义就是从旁注入,也就是利用主机上面的一个虚拟站点进行渗透 ,此类手法多出现与虚拟主机站点。

        盲注 通过构造特殊的SQL语句,在没有返回错误信息的情况下进行注入。

        跨站注入 攻击者利用程序对用户输入过滤及判断的不足,写入或插入可以显示在页面上对其他用户造成影响的代码。跨站注入的高级攻击就属于这种攻击。

    4、SQL注入的危害

        SQL注入通过网页对网站数据库进行修改。它能够直接在数据库中添加具有管理员权限的用户,从而最终获得系统管理员权限。黑客可以利用获得的管理员权限任意获得网站上的文件或者在网页上加挂木马和各种恶意程序,对网站的正常运营和访问该网站的网友都带来巨大危害。

    5、SQL注入漏洞的风险

        由于SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。它能够直接在数据库中添加具有管理员权限的用户,从而最终获得系统管理员权限。黑客可以利用获得的管理员权限任意获得网站上的文件或者在网页上加挂木马和各种恶意程序,对网站和访问该网站的网友都带来巨大危害。

        无论你有多强壮的防火墙规则设置或者非常勤于补漏的修补机制,如果你的网络应用程序开发者没有遵循安全代码进行开发,攻击者将通过80端口进入你的系统。

        例如,如果一个网站的数据库系统为SQL Server 2000数据库,同时没有在数据库的权限设置上做好安全限制,将导致严重的后果。SQL注入意味着数据库也会被攻破,入侵者得到当前数据库权限的同时,也获得了整个数据库服务器的管理权限,入侵者可通过数据库管理权限得到系统权限,并为所欲为。

        再者,很多网站的管理后台都可经由公网直接访问到后台管理登录页面,并且可通过暴力猜解等方式对后台管理账户进行猜解。对于任何一个网站的后台管理登录页,安全的做法应该是限制访问。尤其是对于政府及银行网络来说,更不应该将后台管理页面放置到公网上任由访问,这样的话安全系数会大大减少,遭受攻击的机会却大大增加了。

    6、SQL注入之asp注入常用语句

    是否支持多句查询
    http://www.520hack.com @a int--

    是否支持子查询
    http://www.520hack.com and (Select count(1) from [sysobjects])>=0

    返回用户名
    http://www.520hack.com And user%2Bchar(124)=0

    当前用户是否为 sysadmin 固定服务器角色的成员。
    http://www.520hack.com And Cast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) as varchar(1))%2Bchar(124)=1

    PS:0x730079007300610064006D0069006E00 = sysadmin

    当前用户是否为 db_owner 固定数据库角色的成员
    http://www.520hack.com And Cast(IS_MEMBER(0x640062005F006F0077006E0065007200) as varchar(1))%2Bchar(124)=1

    0x640062005F006F0077006E0065007200 = db_owner

    返回数据库名
    http://www.520hack.com And db_name()%2Bchar(124)=0

    操作系统和SQLserver版本
    http://www.520hack.com And @@version = 1

    本地服务器名称
    http://www.520hack.com And @@SERVERNAME = 1

    http://www.520hack.com  And (Select Top 1 cast(name as varchar(8000)) from(Select Top 1 id,name from sysobjects Where xtype=char(85) order by id) T order by id desc)>0 --第一个表名

    本篇文章来源于 新世纪网安基地 (www.520hack.com) 原文出处:http://www.520hack.com/Article/Text5/200706/5705.html

  • 内存泄漏

    2008-07-18 10:37:03

      内存泄漏的定义
      一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。以下这段小程序演示了堆内存发生泄漏的情形:

    void MyFunction(int nSize)

    {

    char* p= new char[nSize];

    if( !GetStringFrom( p, nSize ) ){

    MessageBox(“Error”);

    return;

    }

    …//using the string pointed by p;

    delete p;

    }
    例一

    当函数GetStringFrom()返回零的时候,指针p指向的内存就不会被释放。这是一种常见的发生内存泄漏的情形。程序在入口处分配内存,在出口处释放内存,但是c函数可以在任何地方退出,所以一旦有某个出口处没有释放应该释放的内存,就会发生内存泄漏。

    广义的说,内存泄漏不仅仅包含堆内存的泄漏,还包含系统资源的泄漏(resource leak),比如核心态HANDLE,GDI Object,SOCKET, Interface等,从根本上说这些由操作系统分配的对象也消耗内存,如果这些对象发生泄漏最终也会导致内存的泄漏。而且,某些对象消耗的是核心态内存,这些对象严重泄漏时会导致整个操作系统不稳定。所以相比之下,系统资源的泄漏比堆内存的泄漏更为严重。

    GDI Object的泄漏是一种常见的资源泄漏:

    void CMyView::OnPaint( CDC* pDC )

    {

    CBitmap bmp;

    CBitmap* pOldBmp;

    bmp.LoadBitmap(IDB_MYBMP);

    pOldBmp = pDC->SelectObject( &bmp );



    if( Something() ){

    return;

    }

    pDC->SelectObject( pOldBmp );

    return;

    }
    例二

    当函数Something()返回非零的时候,程序在退出前没有把pOldBmp选回pDC中,这会导致pOldBmp指向的HBITMAP对象发生泄漏。这个程序如果长时间的运行,可能会导致整个系统花屏。这种问题在Win9x下比较容易暴露出来,因为Win9x的GDI堆比Win2k或NT的要小很多。

    内存泄漏的发生方式:

    以发生的方式来分类,内存泄漏可以分为4类:

    1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。比如例二,如果Something()函数一直返回True,那么pOldBmp指向的HBITMAP对象总是发生泄漏。

    2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。比如例二,如果Something()函数只有在特定环境下才返回True,那么pOldBmp指向的HBITMAP对象并不总是发生泄漏。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。

    3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,但是因为这个类是一个Singleton,所以内存泄漏只会发生一次。另一个例子:

    char* g_lpszFileName = NULL;

    void SetFileName( const char* lpcszFileName )

    {

    if( g_lpszFileName ){

    free( g_lpszFileName );

    }

    g_lpszFileName = strdup( lpcszFileName );

    }例三

    如果程序在结束的时候没有释放g_lpszFileName指向的字符串,那么,即使多次调用SetFileName(),总会有一块内存,而且仅有一块内存发生泄漏。

    4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。举一个例子:

    class Connection

    {

    public:

    Connection( SOCKET s);

    ~Connection();



    private:

    SOCKET _socket;



    };

    class ConnectionManager

    {

    public:

    ConnectionManager(){

    }

    ~ConnectionManager(){

    list::iterator it;

    for( it = _connlist.begin(); it != _connlist.end(); ++it ){

    delete (*it);
    }

    _connlist.clear();

    }

    void OnClientConnected( SOCKET s ){

    Connection* p = new Connection(s);

    _connlist.push_back(p);

    }

    void OnClientDisconnected( Connection* pconn ){

    _connlist.remove( pconn );

    delete pconn;

    }

    private:

    list _connlist;

    };

    例四

    假设在Client从Server端断开后,Server并没有呼叫OnClientDisconnected()函数,那么代表那次连接的Connection对象就不会被及时的删除(在Server程序退出的时候,所有Connection对象会在ConnectionManager的析构函数里被删除)。当不断的有连接建立、断开时隐式内存泄漏就发生了。

    从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较之于常发性和偶发性内存泄漏它更难被检测到。 eeeee


  • WEB测试高手帮帮忙

    2008-04-27 13:27:03

       公司让我考虑一下如何制定网站测试规范,测试用例以及一个网站的测试流程又是怎样的,这对于即将毕业的我来说,即是机遇又是挑战,因为我对软件测试很感兴趣,也大概了解一些这方面的知识,可是真正要实践,我感觉对现在的自己来说还是具有一定的挑战性的,所以现在我很想看看有关门户网站测试方面的书,希望有这方面经验的朋友指点一下,本人将很是感激。
1166/6<123456
Open Toolbar