将测试进行到底

发布新日志

  • 软件测试面试题

    2008-08-22 14:13:36

    1。软通动力面试笔答
     

    1.白箱测试和黑箱测试是什么?什么是回归测试?

    2.
    单元测试、集成测试、系统测试的侧重点是什么?

    3.
    设计用例的方法、依据有那些?

    4.
    一个测试工程师应具备那些素质和技能?

    5.
    集成测试通常都有那些策略?

    6.
    你用过的测试工具的主要功能、性能及其他

    7.
    一个缺陷测试报告的组成

    8.
    基于WEB信息管理系统测试时应考虑的因素有哪些?

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

    10.
    软件测试项目从什么时候开始,?为什么?

    11.
    需求测试注意事项有哪些?

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

    13.
    测试分析测试用例注意(事项)?




    二。瑞星笔试题(15道)
     

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


    三。中软的面试题

     

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

    三。奇虎面试题

     

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

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

    笔试题

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

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

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

  • 软件测试面试题目

    2008-08-22 14:11:31

    1.阶段评审与同行评审的区别?
    参考答案:
        同行评审目的:发现小规模工作产品的错误,只要是找错误;
        阶段评审目的:评审模块 阶段作品的正确性 可行性 及完整性

        同行评审人数:3-7人 人员必须经过同行评审会议的培训,由SQA指导
        阶段评审人数:5人左右 评审人必须是专家 具有系统评审资格

        同行评审内容:内容小 一般文档 <  40页, 代码 < 500行
        阶段评审内容: 内容多,主要看重点

        同行评审时间:一小部分工作产品完成
        阶段评审时间: 通常是设置在关键路径的时间点上

    2.什么是软件测试及其目的?
    参考答案:
       软件测试是使用人工或自动化手段来运行或测定某个系统的过程.其目的是:在于检验它是否能满足规定的需求或是弄清楚预期结果与实际结果之间的差别.
    3.简述集成测试的过程?
    参考答案:
        集成测试流程:
         在完成软件的概要设计后,即开始制定集成测试计划-》设计集成测试用例和测试过程-》实施集成测试,设计所需驱动和桩-》执行集成测试,记录测试结果-》评估集成测试,根据测试结果评估此次测试,生成评估报告文档。(驱动或桩函数是做单元测试时要用到的.驱动函数是所测4函数的主程序,它接收测试数据,并把数据传送给所测试单元,最后再输出实测结果.当被测单元能完成相关功能时,也可以不要驱动单元.
    桩,是用来代替所测试单元调用的子单元
    .)
    4.白盒测试有那几种方法:代码审查,语句覆盖,判定覆盖,条件覆盖,组合覆盖,基本路径,形式化方法,符号执行
    5.简述测试目标有哪些类型?
    参考答案:
        功能测试,负载测试,性能测试,安全性测试,恢复测试,安装测试,兼容性测试,可用性测试,可靠性测试,国际化测试,本地化测试.
    6.怎么样做好文档测试?
    参考答案:
        文档的测试主要采用静态测试即走查的方法,可以依据的是同行评审,列出一个检查表,然后大家一起坐下来对着被测试的文档进行阅读排错。通常文档都很长,而一般的建议是一次同行评审步的时间不能超过两个小时,因此可以对被测试文档执行测试时,列个计划,将总的文档分解,按照计划多次对被测试的文档进行走查。
    7.测试结束的标准是什么?
    参考答案:
    从项目周期看:
    1、超出了所分配的测试时间;
    2、用尽了分配的测试资源;
    3、到达了某一个固定的里程碑(如合同规定的交付日期)。

    从测试角度看:
    1、测试需求覆盖率;
    2、测试代码覆盖率;
    3、测试用例度量;
    4、缺陷检查度量
    8.Alpha 测试与Beta测试的区别?
    参考答案:
        Alpha测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试Alpha测试不能由程序员或测试员完成。Alpha测试发现的错误,可以在测试现场立刻反馈给开发人员,由开发人员及时分析和处理。目的是评价软件产品的功能、可使用性、可靠性、性能和支持。尤其注重产品的界面和特色。Alpha测试可以从软件产品编码结束之后开始,或在模块(子系统)测试完成后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。有关的手册(草稿)等应该在Alpha测试前准备好。

    Beta测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。因而,Beta测试是在开发者无法控制的环境下进行的软件现场应用。在Beta测试中,由用户记下遇到的所有问题,包括真实的以及主管认定的,定期向开发者报告,开发者在综合用户的报告后,做出修改,最后将软件产品交付给全体用户使用。Beta测试着重于产品的支持性,包括文档、客户培训和支持产品的生产能力。只有当Alpha测试达到一定的可靠程度后,才能开始Beta测试。由于Beta测试的主要目标是测试可支持性,所以Beta测试应该尽可能由主持产品发行的人员来管理。

    9.系统测试计划是否需要同行审批,为什么
    参考答案:
    需要,系统测试计划属于项目阶段性关键文档,因此需要评审。

    10.比较负载测试,容量测试和强度测试的区别?
    参考答案:
    负载测试:在一定的工作负荷下,系统的负荷及响应时间。
    强度测试:在一定的负荷条件下,在较长时间跨度内的系统连续运行给系统性能所造成的影响。
    容量测试:容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。容量测试的目的是使系统承受超额的数据容量来发现它是否能够正确处理。容量测试是面向数据的,并且它的目的是显示系统可以处理目标内确定的数据容量。

  • 测试工程师笔试集粹

    2008-08-22 14:03:29

    测试工程师笔试集粹

    这里主要是一些测试概念方面的知识,至于活学活用的问题,就必须依靠长期的学习和实际工作中遇到的不同情况来作答,答案如有不当请指出。

    答案需要根据自身经验来回答的题目没有写出明确答案,有兴趣的朋友可以写在留言中。

    1、软件测试

    使用人工或自动的方法来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果的区别

    2、集成测试的过程

    计划阶段、设计阶段、实现阶段、实施阶段

    3、白盒测试方法

    桌前走查、单元测试、代码评审、同行评审、代码走查、静态分析

    4、alpha和beta测试的区别

    都属于系统测试

    A是在实验室在专业测试人员的指导下,由非专业人士参加,测试问题可以马上得到反馈,代价较大

    B是开放型测试,内部测试稳定后,发布Beta版本让公共用户测试,缺陷不能有效地反馈,需要将收集的信息整理为有用的缺陷报告,成本较低

    5、测试结束的标准

    严重程度在某一可接受范围内的缺陷都已经关闭

    是否达到原先的覆盖定义标准

    团队集体同意

    6、软件测试活动的输出文档

    测试计划、测试用例、缺陷报告、测试总结

    7、测试活动中集成员的工作是

    开发桩模块和驱动模块

    8、软件缺陷等级

    严重程度

    致命性错误,严重性错误,一般性错误,告警错误,建议

    9、驱动模块、桩模块

    驱动模块:

    桩模块:集成测试前,要为被测模块编制一些模拟其下调用模块的程序

    10、白盒测试

    分为静态测试与动态测试2类测试方法

    静态分析是一种不通过运行来测试的技术,是检验软件的表示和描述是否一致,没有歧义没有冲突

    动态分析是软件在模拟的或真实的环境中运行之前、之中、之后,对软件系统行为的分析。

    动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。在动态分析技术中,最重要的技术是路径和分支测试。分为:语句覆盖、路径覆盖、条件覆盖、分支覆盖、条件/判定覆盖、组合覆盖。

    11、项目测试的全过程(软件生命周期)

    测试流程:制定测试计划、测试设计与开发、实施软件测试、评审、版本发布

    12.缺陷报告的处理流程

    提交缺陷报告-》分配缺陷报告-》处理缺陷报告-》返测报告-》关闭缺陷报告

    13、软件生命周期(瀑布)

    计划-》需求分析-》设计-》编码-》测试 -》运行、维护

    14、V模型

    用户需求                          验收测试

      需求分析与系统           系统测试

          概要设计                集成测试

             详细设计           单元测试

                           编码

    15、常用的测试方法(测试策略)

    数据库测试、功能确认测试、界面测试、值域测试、版本验证测试、可用性测试、强度测试。安全性测试、裸机测试、安装测试、加密测试。

    功能测试、性能测试、压力测试、负载测试、易用性测试、安装测试、界面测试、配置测试、文档测试、兼容性测试、安全性测试、恢复测试

    16、常用的设计用例方法

    等价类划分、边界值分析、因果图、通过测试和失败测试、错误猜测、随机测试

    17、测试工作的认识过程及以后工作的建议

    18、缺陷报告、测试计划、用例、总结的组成

    19、基于WEB信息管理系统测试时应考虑的因素有哪些?

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

    21、测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?

  • 程序员面试之葵花宝典(下)

    2008-08-22 14:02:13

    程序员面试之葵花宝典(下)

    81、如何设定的weblogic的热启动模式(开发模式)与产品发布模式?

    可以在管理控制台中修改对应服务器的启动模式为开发或产品模式之一。或者修改服务的启动文件或者commenv文件,增加set PRODUCTION_MODE=true。

    82、如何启动时不需输入用户名与密码?

    修改服务启动文件,增加 WLS_USER和WLS_PW项。也可以在boot.properties文件中增加加密过的用户名和密码.

    83、在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中?

    保存在此Domain的config.xml文件中,它是服务器的核心配置文件。

    84、说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入http://主机:端口号//helloword.jsp就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean该如何办?

    Domain目录\服务器目录\applications,将应用目录放在此目录下将可以作为应用访问,如果是Web应用,应用目录需要满足Web应用目录要求,jsp文件可以直接放在应用目录中,Javabean需要放在应用目录的WEB-INF目录的classes目录中,设置服务器的缺省应用将可以实现在浏览器上无需输入应用名。
    ygahgjxx (2006-7-01 09:18:54)
    85、在weblogic中发布ejb需涉及到哪些配置文件

    不同类型的EJB涉及的配置文件不同,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP实体Bean一般还需要weblogic-cmp-rdbms-jar.xml

    86、如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置

    缺省安装中使用DemoIdentity.jks和DemoTrust.jks KeyStore实现SSL,需要配置服务器使用Enable SSL,配置其端口,在产品模式下需要从CA获取私有密钥和数字证书,创建identity和trust keystore,装载获得的密钥和数字证书。可以配置此SSL连接是单向还是双向的。

    87、如何查看在weblogic中已经发布的EJB?

    可以使用管理控制台,在它的Deployment中可以查看所有已发布的EJB

    88、CORBA是什么?用途是什么?

    CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture),由对象管理组织 (Object Management Group,缩写为 OMG)标准化。它的组成是接口定义语言(IDL), 语言绑定(binding:也译为联编)和允许应用程序间互操作的协议。其目的为:用不同的程序设计语言书写在不同的进程中运行,为不同的操作系统开发。

    89、说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法

    Session Facade Pattern:使用SessionBean访问EntityBean;Message Facade Pattern:实现异步调用;EJB Command Pattern:使用Command JavaBeans取代SessionBean,实现轻量级访问;Data Transfer Object Factory:通过DTO Factory简化EntityBean数据提供特性;Generic Attribute Access:通过AttibuteAccess接口简化EntityBean数据提供特性;Business Interface:通过远程(本地)接口和Bean类实现相同接口规范业务逻辑一致性;EJB架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及开发效率。项目越复杂,项目队伍越庞大则越能体现良好设计的重要性。

    90、说说在weblogic中开发消息Bean时的persistent与non-persisten的差别

    persistent方式的MDB可以保证消息传递的可靠性,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来,而non-persistent方式的消息将被丢弃。

    91、Servlet执行时一般实现哪几个方法?

    public void init(ServletConfig config);public ServletConfig getServletConfig();public String getServletInfo();public void service(ServletRequest request,ServletResponse response);public void destroy()

    92、常用的设计模式?说明工厂模式。

    Java中的23种设计模式:Factory(工厂模式),Builder(建造模式), Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式),Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),Observer(观察者模式),State(状态模式),Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)。工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

  • 程序员面试之葵花宝典(中)

    2008-08-22 14:01:15

    程序员面试之葵花宝典(中)

    41、是否可以继承String类?

    String类是final类故不可以继承。

    42、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

    switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich

    43、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

    会执行,在return前执行。

    44、编程题: 用最有效率的方法算出2乘以8等於几?

    2 << 3
    在VC++中运行这个就可得到16,最好的方法
    #include<stdio.h>
    void main(){
    printf("%d",2<<3);
    }
    2<<3移位,也可在JAVA足正确的运行

    45、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

    不对,有相同的hash code。
    如果两个值相等,那么equals()方法相等,表示两个方法的对像相等,这表示,引用的对像的地址相等,这样就有相同的hashcode

    46、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

    是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

    47、当一个线程进入一个对象的一个synchronized()方法后,其它线程是否可进入此对象的其它方法?

    不能,一个对象的一个synchronized方法只能由一个线程访问。

    48、编程题: 写一个Singleton出来。

    Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。一般Singleton模式通常有几种种形式:
    第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,
    在类初始化时实例话 通过一个public的getInstance方法获取对它的引用 ,继而调用其中的方法
    public class Singleton
    {
    private Singleton(){}
    private static Singleton instance = new Singleton();
    public static Singleton getInstance()
    {
    return instance;   }
    }

    第二种形式:
    public class Singleton {
    private static Singleton instance = null;
    public static synchronized Singleton getInstance() { 
    if (instance==null) 
    instance=new Singleton();
    return instance;   
    }
    }
    其他形式: 定义一个类,它的构造函数为private的,所有方法为static的。一般认为第一种形式要更加安全些

    49、Java的接口和C++的虚类的相同和不同处。

    C++的纯虚类
    由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。

    C++的虚类,纯虚类
    纯虚类就像是接口,可以多重继承
    虚类只是声明

    #include
    //father class
    class Virtualbase
    {
    public:
    virtual void Demon()= 0;
    virtual void Base() {cout<<"this is farther class"<};
    }

    //sub class
    class SubVirtual : public Virtualbase
    {
    public:
    void Demon() { cout<<" this is SubVirtual!"< }
    void Base() {
    cout<<"this is subclass Base"<};

    void main()
    {
    Virtualbase* inst = new SubVirtual(); //multstate pointer
    inst->Demon();
    inst->Base();
    // inst = new Virtualbase();
    // inst->Base()
    return ;
    }

    51、垃圾回收的优点和原理。并考虑2种回收机制

    Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收

    52、请说出你所知道的线程同步的方法。

    wait():使一个线程处于等待状态,并且释放所持有的对象的lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

    53、你所知道的集合类都有哪些?主要方法?

    最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。 Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。

    54、描述一下JVM加载class文件的原理机制?

    JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类.

    55、char型变量中能不能存贮一个中文汉字?为什么?

    能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
    可能的解释为一个中文占16位,两个字节

    56、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

    多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 ,同步的实现方面有两种,分别是synchronized,wait与notify

    57、JSP的内置对象及方法

    applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
    pageContext 表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取髦址段У拿?挚占洹?ervlet相关的对象的API,并且包装了通用的servlet相关功能的方法
    page表示从该页面产生的一个servlet实例
    config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数

    request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法response
    response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)
    out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果
    session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息

    58、线程的基本概念、线程的基本状态以及状态之间的关系

    线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。Java中的线程有四种状态分别是:就绪,运行、、挂起、结束。

    59、JSP的常用指令

    <%@page language=”java” contenType=”text/html;charset=gb2312” session=”true” buffer=”64kb” autoFlush=”true” isThreadSafe=”true” info=”text” errorPage=”error.jsp” isErrorPage=”true” isELIgnored=”true” pageEncoding=”gb2312” import=”java.sql.*”%>isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式) <%@include file=”filename”%><%@taglib prefix=”c”uri=”http://……”%>

    60、什么情况下调用doGet()和doPost()?

    Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。

    61、servlet的生命周期

    web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。

    62、如何现实servlet的单线程模式

    <%@ page isThreadSafe=”false”%>

    63、页面间对象传递的方法

    request,session,application,cookie等

    64、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

    JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

    65、四种会话跟踪技术

    cookie,url重写,session,隐藏域

    65,jsp的四种范围

    page代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面
    request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)
    session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求
    application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域

    66、Request对象的主要方法:

    setAttribute(String name,Object):设置名字为name的request的参数值
    getAttribute(String name):返回由name指定的属性值
    getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
    getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
    getCharacterEncoding():返回请求中的字符编码方式
    getContentLength():返回请求的Body的长度
    getHeader(String name):获得HTTP协议定义的文件头信息
    getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
    getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例
    getInputStream():返回请求的输入流,用于获得请求中的数据
    getMethod():获得客户端向服务器端传送数据的方法
    getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
    getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
    getParameterValues(String name):获得有name指定的参数的所有值
    getProtocol():获取客户端向服务器端传送数据所依据的协议名称
    getQueryString():获得查询字符串
    getRequestURI():获取发出请求字符串的客户端地址
    getRemoteAddr():获取客户端的IP地址
    getRemoteHost():获取客户端的名字
    getSession([Boolean create]):返回和请求相关Session
    getServerName():获取服务器的名字
    getServletPath():获取客户端所请求的脚本文件的路径
    getServerPort():获取服务器的端口号
    removeAttribute(String name):删除请求中的一个属性
    ygahgjxx (2006-7-01 09:18:33)
    67、J2EE是技术还是平台还是框架?

    J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。
    J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。

    68、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?

    Public String translate (String str) { String tempStr = ""; try { tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); tempStr = tempStr.trim(); } catch (Exception e) { System.err.println(e.getMessage()); } return tempStr; }

    69、简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。

    区别主要答两点:a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型b.逻辑操作不会产生短路

    70、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?

    a: 两种形式 dtd schema,
    b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的)
    c:有DOM,SAX,STAX等 DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,
    这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问
    SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。
    当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件.
    用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问 STAX:Streaming API for XML (StAX)

    71、简述synchronized和java.util.concurrent.locks.Lock的异同?

    主要相同点:Lock能完成synchronized所实现的所有功能主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。

    72、EJB的角色和三个对象

    一个完整的基于EJB的分布式计算结构由六个角色组成,这六个角色可以由不同的开发商提供,每个角色所作的工作必须遵循Sun公司提供的EJB规范,以保证彼此之间的兼容性。这六个角色分别是EJB组件开发者(Enterprise Bean Provider) 、应用组合者(Application Assembler)、部署者(Deployer)、EJB 服务器提供者(EJB Server Provider)、EJB 容器提供者(EJB Container Provider)、系统管理员(System Administrator)三个对象是Remote(Local)接口、Home(LocalHome)接口,Bean类

    73、EJB容器提供的服务

    主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。

    74、EJB规范规定EJB中禁止的操作有哪些?

    1.不能操作线程和线程API(线程API指非线程对象的方法如notify,wait等),2.不能操作awt,3.不能实现服务器功能,4.不能对静态属生存取,5.不能使用IO操作直接存取文件系统,6.不能加载本地库.,7.不能将this作为变量和返回,8.不能循环调用。
    ygahgjxx (2006-7-01 09:18:43)
    75、remote接口和home接口主要作用

    remote接口定义了业务方法,用于EJB客户端调用业务方法。home接口是EJB工厂用于创建和移除查找EJB实例

    76、bean 实例的生命周期

    对于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在缓冲池管理,而对于Entity Bean和Statefull Session Bean存在Cache管理,通常包含创建实例,设置上下文、创建EJB Object(create)、业务方法调用、remove等过程
    对于存在缓冲池管理的Bean,在create之后实例并不从内存清除,而是采用缓冲池调度机制不断重用实例,而对于存在Cache管理的Bean则通过激活和去激活机制保持Bean的状态并限制内存中实例数量。


    77、EJB的激活机制

    以Stateful Session Bean 为例:其Cache大小决定了内存中可以同时存在的Bean实例的数量,根据MRU或NRU算法,实例在激活和去激活状态之间迁移,激活机制是当客户端调用某个EJB实例业务方法时,如果对应EJB Object发现自己没有绑定对应的Bean实例则从其去激活Bean存储中(通过序列化机制存储实例)回复(激活)此实例。状态变迁前会调用对应的ejbActive和ejbPassivate方法。

    78、EJB的几种类型

    会话(Session)Bean ,实体(Entity)Bean 消息驱动的(Message Driven)Bean ;会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种;实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种

    79、客服端调用EJB对象的几个基本步骤

    设置JNDI服务工厂以及JNDI服务地址系统属性,查找Home接口,从Home接口调用Create方法创建Remote接口,通过Remote接口调用其业务方法。

    80、如何给weblogic指定大小的内存?

    在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以调整最小内存为32M,最大200M

  • 程序员面试之葵花宝典(上)

    2008-08-22 14:00:06

    程序员面试之葵花宝典(上)

    1、面向对象的特征有哪些方面?

    1. 抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

    2. 继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

    3. 封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

    4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

    2、String是最基本的数据类型吗?

    基本数据类型包括byte、int、char、long、float、double、boolean和short。
    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类。

    3、int 和 Integer 有什么区别。

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
    原始类型封装类booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble
    引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。

    4、String 和StringBuffer的区别。

    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

    5、运行时异常与一般异常有何异同?

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

    6、说出Servlet的生命周期,并说出Servlet和CGI的区别。

    Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

    7、说出ArrayList,Vector, LinkedList的存储性能和特性。

    ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

    8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和Stateles我白痴ean的区别。

    EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。
    SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。
    对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。
    对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。
    Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体。Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method。换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行。从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。

    9、Collection 和 Collections的区别。 Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

    10、&和&&的区别。

    &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

    11、HashMap和Hashtable的区别。

    HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
    HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
    HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
    最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
    Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

    12、final, finally, finalize的区别。

    final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

    13、sleep() 和 wait() 有什么区别?

    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

    14、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

    方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

    15、error和exception有什么区别?

    error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
    exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

    16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。

    如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

    17、abstract class和interface有什么区别?

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。
    在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

    18、heap和stack有什么区别。

    栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素。

    19、forward 和redirect的区别。

    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

    20、EJB与JAVA BEAN的区别?

    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。

    21、Static Nested Class 和 Inner Class的不同。

    Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

    22、JSP中动态INCLUDE与静态INCLUDE的区别?

    动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>
    23、什么时候用assert。

    assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。

    24、GC是什么? 为什么要有GC?

    GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

    25、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

    short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型,这样子才可以正确的编译) short s1 = 1; s1 += 1;(可以正确编译)

    26、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

    Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回与参数最接近的长整数,参数加1/2后求其floor.

    27、String s = new String("xyz");创建了几个String Object?

    两个
    一个是”xyz”,一个是s对”xyz”的引用

    28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

    以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。
    public class ThreadTest1 {
    private int j;
    public static void main(String args[])
    {
    ThreadTest1 tt=new ThreadTest1();
    Inc inc=tt.new Inc();
    Dec dec=tt.new Dec();

    for(int i=0;i<2;i++){
    Thread t=new Thread(inc);
    t.start();
    t=new Thread(dec);
    t.start(); } }

    private synchronized void inc(){ j++; System.out.println(Thread.currentThread().getName()+"-inc:"+j); }
    private synchronized void dec(){ j--; System.out.println(Thread.currentThread().getName()+"-dec:"+j); }

    class Inc implements Runnable{
    public void run(){
    for(int i=0;i<100;i++){
    inc(); }
    }
    }
    class Dec implements Runnable{public void run(){ for(int i=0;i<100;i++){ dec(); }
    }
    }
    }

    29、Java有没有goto?

    java中的保留字,现在没有在java中使用。

    30、启动一个线程是用run()还是start()?

    启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
    ygahgjxx (2006-7-01 09:17:23)
    31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?

    SessionBean:Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例
    EntityBean:Entity Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理。EJB通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API(JTA),开发组(X/Open)的XA接口。
    32、应用服务器有那些?

    BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat
    ygahgjxx (2006-7-01 09:17:44)
    34、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

    接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

    35、List, Set, Map是否继承自Collection接口?

    List,Set是,Map不是

    36、说出数据连接池的工作机制是什么?

    J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时
    池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。
    当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

    37、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

    都不能
    native:这个修饰符修饰的类或者方法,表示里边的代码不是用纯JAVA编写,有可能用C或者C++,这些方法及类可以调用,但JAVA中看不到代码.

    38.数组有没有length()这个方法? String有没有length()这个方法?

    数组没有length()这个方法,有length的属性。String有length()这个方法

    39、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

    Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

    40、构造器Constructor是否可被override?

    构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

  • 应聘时向主考官提出的10个漂亮问题

    2008-08-22 13:57:30

    面试结束前,大多数的主考官都会丢问题给求职者,最常见的就是:你有没有什么问题或疑问,想要提出来的?无论求职者是否有提出问题,其实,这个问题背后的真正含意,通常是主考官用来测试你对这份工作有多大的企图心、决心和热情。

          因此,如果你害怕发问不妥当,或是不知道该从何问起,甚至回答没有问题时,都很可能会让主考官认为,你想要这份工作的企图心、决心还不够强。

           相反的,求职者应该更积极、主动的利用面试最后一关的机会,适时的提出问题,这不但有助于主考官对你的印象能够加深,而且你也能趁此机会进一步了解这家公司的背景、企业文化是否适合你。

           最重要的是,如果能够在面试时,提出漂亮的问题,录取的机率将会大大提高。所以,无论如何,前往面试前,先谨记10个可以反问主考官的问题,以便到时候可以提出。

      1.贵公司对这项职务的工作内容和期望目标为和?有没有什么部分是我可以努力的地方?

      2.贵公司是否有正式或非正式教育训练?

      3.贵公司的升迁管道如何?

      4.贵公司的多角化经营,而且在海内外都设有分公司,将来是否有外派、轮调的机会?

      5.贵公司能超越同业的最大利基点为何?

      6.在项目的执行分工上,是否有资深的人员能够带领新进者,并让新进者有发挥的机会?

      7.贵公司强调的团队合作中,其它的成员素质和特性如何?

      8.贵公司是否鼓励在职进修?对于在职进修的补助办法如何?

      9.贵公司在人事上的规定和作法如何?

      10.能否为我介绍一下工作环境,或者是否有机会能参观一下贵公司?

         至于薪水待遇、年假天数、年终奖金、福利措施等问题,有些公司的主考官在面试时,会直接向求职者提出。如果对方没有提及,对社会新鲜人来说,在找第一份工作时,比较不适合提出,除非你有对方不得不录取你的条件。

          另外,也有人在结束前,谦虚的请教主考官:您认为我今天的表现如何?录取的机率有多大?通常,这个问题也会让对方认为,你对这份工作抱有很大的决心和企图心,而你也可以试着从对方的回答中,约略猜测出自己成功的机率有多大,并且作为下一次面试时表现的参考!

  • 软件测试面试题整理

    2008-08-22 13:56:25

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

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

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

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

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

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

  • 如何做好测试工作

    2008-08-22 13:54:40

     让我们看看如何利用 RUP(Rational Unified Process) 的往复式 (Iterations) 流程法让软件产品合乎「质量」要求。

            「质量」这个名词在许多领域都会被提到,也没有完全相等与严谨的定义。不过在 RUP 所规范的软件开发领域里,我们认为「质量」应该满足以下条件:一、产品应该按预定计划流程完成生产;二、产品应该满足或超越预定需求;三、前述需求应该可以被预定的方法予以衡量。

            「测试」在整个开发流程里所扮演的角色与介入方式。这篇文章要介绍该用什么方法或衡量工具,才能让产品满足或超越预定需求。

    测试的五个面向

            「测试在大多数人的认知中,大概就是测试「软件产品的功能」罢了,而且由于时间有限,约莫只要把「功能测试」确实做完也就很不错了。不过,在 RUP 准则里,我们认为合乎「质量」的测试应该做到下述五个面向的工作:分别是功能测试、可靠度测试、效能测试三个基本测试工作,及使用性测试与支持性测试两个延伸性的测试工作。


      
            · 功能测试 ( Functional testing ):这是最基本的测试。主要目的在于精确检测系统在各种使用环境( usage scenarios )中的运作与反应行为,验证产品是否确实符合预定需求。此外,它也包括对系统特性( features )及安全性( security )的测试。

            · 可靠度测试 ( Reliability testing ):这是第二个测试面向,目的在检测系统在预设环境下的运作是否正常与稳定。例如,有些系统会随着运作时间拉长而产生渐次延迟等各种不正常的现象,测试人员必须找出导致异常的原因,确保系统运作是「完全可靠,不会倾向失误 ( 包括系统崩溃、响应停摆、占用内存等 ) 情形」。以下是建议进行的检测工作项目,包括系统结构测试 ( 测试程序代码的语法及处理程序是否正常、简洁,而且不会造成延迟或瓶颈 ) 、压力测试 ( 以严酷环境来检测出系统的运作上限 ) 、竞争测试 ( 同时有两个以上要求被提出时,系统面对这种竞争要求的真实反应情形 ) 、容量测试 ( 系统处理大量数据的反应行为 ) 等。

            · 效能测试 ( Performance testing ):目的在于检测当系统运作于上述两个条件 ( 功能与可靠度 ) 的环境下,其面对平均负载与尖峰负载时的真实反应能力。简言之,就是测试系统的真正效能表现。效能测试包括标竿测试 (benchmark tests) 、负载测试 (load tests) 与效能表现测试 (performance profile tests) 。

            上述三种测试面向,是我们认为要完成一项「质量产品」最基本的测试工作。此外,也建议再进行以下两种测试。

            · 使用性测试 ( Usability testing ):目的是检测系统是否可以让最终使用者觉得方便好用。因此这项测试会从使用者角度出发,评估系统在人类行为、美观、操作接口、文字说明、辅助与导览工具、训练教材等涉及使用者操作行为方面的表现。

            · 支持性测试 ( Supportability testing ):为检测系统是否可以部署在预设的环境,并评估其在被使用时的维护与后续支持能力。此外,这个测试也包括安装测试 (installation tests) 与环境调校测试 (configuration tests) ,可以检测系统在什么样的硬件环境下会运作得更好。

            从上述五个面向的测试可以清楚看出, RUP 准则几乎把所有「设想之内」与「意料之外」的情形与环境都纳入测试工作范围。目的就是要透过一套严谨的程序质量 (Process Quality) 规范,确保产品质量 (Product Quality) 。

            测试工作相当多样且复杂,要完全做好并不简单;诀窍就在于善用工具。

    善用工具

            大家都清楚善用工具的好处。例如,使用电表而不是自己的手去测量电压或电流,或是当朋友之间争论到底谁比较胖,除了找第三者提供「目测答案」,还会利用「体重计」或「脂肪仪」来做精准的量测,如此才能取得有公信力的答案。

            上述都是使用工具的范例。同样的,软件测试工作也必须运用合适的工具。测试是相当繁琐复杂、且不容出错的工作,测试人员需要模拟、检测、追踪、报告的各种环境与控制变因之庞杂,其实已经超出人类大脑的想象与运算能力,而且任何一项测试行为都可能因为缺少严谨控制的环境或变因而被扭曲,甚至导致完全相反的结果。此时唯有具备精准控制与监视能力,而且不会疲劳、偷懒、发脾气、生病的科学性与专门工具,才能完全胜任这些工作。

    测试的真谛

            「合格的测试」才能确保合格的产品,而且也唯有合格的产品才是开发团队与客户所冀求的,这就是测试工作的真谛。所以,当你花了一千亿美元经费建造一艘航天飞机之后,请不要以一千美元的草率测试方法毁了它。

  • 软件测试的基础知识

    2008-08-22 13:53:34

    一、概述
    信息技术的飞速发展,使软件产品应用到社会的各个领域,软件产品的质量自然成为人们共同关注的焦点。不论软件的生产者还是软件的使用者,均生存在竞争的环境中,软件开发商为了占有市场,必须把产品质量作为企业的重要目标之一,以免在激烈的竞争中被淘汰出局。用户为了保证自己业务的顺利完成,当然希望选用优质的软件。质量不佳的软件产品不仅会使开发商的维护费用和用户的使用成本大幅增加,还可能产生其他的责任风险,造成公司信誉下降,继而冲击股票市场。在一些关键应用 (如民航订票系统、银行结算系统、证券交易系统、自动飞行控制软件、军事防御和核电站安全控制系统等) 中使用质量有问题的软件,还可能造成灾难性的后果。
    软件危机曾经是软件界甚至整个计算机界最热门的话题。为了解决这场危机,软件从业人员、专家和学者做出了大量的努力。现在人们已经逐步认识到所谓的软件危机实际上仅是一种状况,那就是软件中有错误,正是这些错误导致了软件开发在成本、进度和质量上的失控。有错是软件的属性,而且是无法改变的,因为软件是由人来完成的,所有由人做的工作都不会是完美无缺的。问题在于我们如何去避免错误的产生和消除已经产生的错误,使程序中的错误密度达到尽可能低的程度。
    给软件带来错误的原因很多,具体地说,主要有如下几点:
    、交流不够、交流上有误解或者根本不进行交流
    在应用应该做什么或不应该做什么的细节(应用的需求)不清晰的情况下进行开发。
    、软件复杂性
    图形用户界面(gui),客户/服务器结构,分布式应用,数据通信,超大型关系型数据库以及庞大的系统规模,使得软件及系统的复杂性呈指数增长,没有现代软件开发经验的人很难理解它。
    、程序设计错误
    向所有的人一样,程序员也会出错。
    、需求变化
    需求变化的影响是多方面的,客户可能不了解需求变化带来的影响,也可能知道但又不得不那么做。需求变化的后果可能是造成系统的重新设计,设计人员的日程的重新安排,已经完成的工作可能要重做或者完全抛弃,对其他项目产生影响,硬件需求可能要因此改变,等等。如果有许多小的改变或者一次大的变化,项目各部分之间已知或未知的依赖性可能会相互影响而导致更多问题的出现,需求改变带来的复杂性可能导致错误,还可能影响工程参与者的积极性。
    、时间压力
    软件项目的日程表很难做到准确,很多时候需要预计和猜测。当最终期限迫近和关键时刻到来之际,错误也就跟着来了。
    、自负人更喜欢说:'没问题','这事情很容易','几个小时我就能拿出来'
    太多不切实际的没问题,结果只能是引入错误。
    、代码文档贫乏
    贫乏或者差劲的文档使得代码维护和修改变的异常艰辛,其结果是带来许多错误。事实上,在许多机构并不鼓励其程序员为代码编写文档,也不鼓励程序员将代码写得清晰和容易理解,相反他们认为少写文档可以更快的进行编码,无法理解的代码更易于工作的保密(“写得艰难必定读的痛苦”)
    、软件开发工具
    可视化工具,类库,编译器,脚本工具,等等,它们常常会将自身的错误带到应用软件中。就象我们所知道的,没有良好的工程化作为基础,使用面向对象的技术只会使项目变得更复杂。
    为了更好地解决这些问题,软件界做出了各种各样的努力。
    人们曾经认为更好的程序语言可以使我们摆脱这些困扰,这推动了程序设计语言的发展,更多的语言开始流行,为了使程序更易于理解开发了结构化程序设计语言,如pl/1,pascal等;为了解决实时多任务需求开发了结构化多任务程序设计语言,如modulaada等;为了提高重用性开发了面向对象的程序设计语言,如simlasa等;为了避免产生不正确的需求理解,开发形式化描述语言,如hal/s等,这使得建立基于自然语言的描述成为可能,人们以形式化语言来描述需求;为了支持大型数据库应用,开发了可视化工具,如visual studiopower builder等。程序语言对提高软件生产效率起到了一定的积极作用,但它对整个软件质量尤其是可靠性的影响,与其他因素相比作用较小。
    可能是因为程序语言基于严格的语法和语义规则,人们企图用形式化证明方法来证明程序的正确性。将程序当作数学对象来看待,从数学意义上证明程序是正确的是可能的。数学家对形式化证明方法最有兴趣,在论文上谈起来非常吸引人,但实际价值却非常有限,因为形式化证明方法只有在代码写出来之后才能使用,这显然太迟了,而且对于大的程序证明起来非常困难。
    受到其他行业项目工程化的启发,软件工程学出现了,软件开发被视为一项工程,以工程化的方法来进行规划和管理软件的开发。
    针对需求不确定的应用,可以使用渐进和迭代类的开发模型。还可以采用快速应用程序开发(rad)和协同应用程序开发(jad)技术,由软件开发者和用户代表共同参与开发软件规范。radjad的基本思路是开发者和用户共同设计系统中的屏幕,开发者迅速地把实现这些屏幕的最基本功能编写好,然后把它们交给用户看,然后用户和开发者回顾这些屏幕以确认它们达到了用户的要求,这个周期一直持续到系统的基本部分定义完毕。一旦设计被用户接受,开发者将完成完全实现屏幕需要的代码。rad和传统软件开发项目之间的一个基本区别是:应用程序rad系统是按阶段发布的。传统项目一般一次发布,也叫“big bang”rad方法使用高效开发工具,开发者能够非常迅速地设计出系统的基本屏幕,允许用户在开发周期中很早就能见识到系统将来看起来怎么样,避免了在传统开发项目中长篇大论并且枯燥难懂的说明。
    ibm
    dr.harlan mills提出了净室过程。净室过程组合了形式化程序验证和统计过程控制(spc)。在这种方法中,首先用正确性数学证明预防缺陷发生,然后用mtbf度量软件质量。净室过程是一种相当新的软件开发方法,它要求软件开发在管理方式和技术方法上作重大改变,特别是要求spc应用到软件的知识,这影响了其被广泛的接受。
    硬件成本持续降低,可支持case工具运行的新的强大的工作站和网络已经成为软件工程使用的工作平台,case工具可完成一些特定的软件开发过程。这些工具提供给软件设计者以图形方式描述软件设计的能力,这样就易于维护、易于交叉检查、易于理解。许多人(尤其是case工具供货商)相信case工具扮演了解决软件危机和拯救软件工业的角色,但事实上我们看到的情形却是许多公司花了大量的金钱买回的case工具但很少使用,原因在于这些工具执行的过程与机构的软件设计过程不相适用。
    在可以借助许多新的技术和工具进行软件开发的今天,软件开发过程的成熟性问题开始引起人们的重视。这种产品一致性问题的主要症结在于管理,因此人们将目标转向了管理的改善,一些以改进软件开发过程为目标的活动已经展示出积极的结果。
    以下是一些比较典型的文本。
    sei sw-cmm
    iso spice(software process improvement and capability determination)
    bootstrap
    iso-9000-3
    tickit
    trillium
    事实上,对于软件来讲,还没有象银弹那样的东西。不论采用什么技术和什么方法,软件中仍然会有错。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要测试来找出,软件中的错误密度也需要测试来进行估计。
    测试是所有工程学科的基本组成单元,是软件开发的重要部分。自有程序设计的那天起测试就一直伴随着。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中,用在测试上的开销要占30%到50%。如果把维护阶段也考虑在内,讨论整个软件生存期时,测试的成本比例也许会有所降低,但实际上维护工作相当于二次开发,乃至多次开发,其中必定还包含有许多测试工作。因此,测试对于软件生产来说是必需的,问题是我们应该思考采用什么方法、如何安排测试?”
    二、软件测试的目的
    软件测试
    的目的决定了如何去组织测试。如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。如果测试目的是为了给最终用户提供具有一定可信度的质量评价,那么测试就应该直接针对在实际应用中会经常用到的商业假设。
    不同的机构会有不同的测试目的;相同的机构也可能有不同测试目的,可能是测试不同区域或是对同一区域的不同层次的测试。
    在谈到软件测试时,许多人都引用grenford j. myers在《the art of software testing》一书中的观点:
    软件测试是为了发现错误而执行程序的过程;
    、测试是为了证明程序有错,而不是证明程序无错误。
    、一个好的测试用例是在于它能发现至今未发现的错误;
    、一个成功的测试是发现了至今未发现的错误的测试。
    这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目,查找不出错误的测试就是没有价值的,事实并非如此。
    首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。
    其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。详细而严谨的可靠性增长模型可以证明这一点。例如 bev littlewood发现一个经过测试而正常运行了n小时的系统有继续正常运行n小时的概率。

    三、软件测试的基本方法
    软件测试
    的方法和技术是多种多样的。
    对于软件测试技术,可以从不同的角度加以分类:
    从是否需要执行被测软件的角度,可分为静态测试和动态测试。
    从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为白盒测试和黑盒测试;
    1
    、黑盒测试
    黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。黑盒测试方法主要有等价类划分、边值分析、因果图、错误推测等,主要用于软件确认测试。
    黑盒法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。黑盒法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
    2
    、白盒测试
    白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。
    白盒法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。白盒法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。
    3
    alac(act-like-a-customer)测试
    alac
    测试是一种基于客户使用产品的知识开发出来的测试方法。alac测试是基于复杂的软件产品有许多错误的原则。最大的受益者是用户,缺陷查找和改正将针对哪些客户最容易遇到的错误。
    四、软件测试的复杂性与经济性
    人们常常以为,开发一个程序是困难的,测试一个程序则比较容易。这其实是误解。设计测试用例是一项细致并需要高度技巧的工作,稍有不慎就会顾此失彼,发生不应有的疏漏。
    不论是黑盒测试方法还是白盒测试方法,由于测试情况数量巨大,都不可能进行彻底的测试。所谓彻底测试,就是让被测程序在一切可能的输入情况下全部执行一遍。通常也称这种测试为穷举测试黑盒法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。白盒法是穷举路径测试,贯穿程序的独立路径数是天文数字,但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。ewdijkstra的一句名言对测试的不彻底性作了很好的注解:程序测试只能证明错误的存在,但不能证明错误不存在 查看(563) 评论(0) 收藏 分享 管理

  • 软件测试的常识

    2008-08-22 13:51:26

    软件开发和使用的历史已经留给了我们很多由于软件缺陷而导致的巨大财力、物力损失的经验教训。这些经验教训迫使我们这些测试工程师们必须采取强有力的检测措施来检测未发现的隐藏的软件缺陷。

      生产软件的最终目的是为了满足客户需求,我们以客户需求作为评判软件质量的标准,认为软件缺陷( Software Bug )的具体含义包括下面几个因素:

      • 软件未达到客户需求的功能和性能;

      • 软件超出客户需求的范围;

      • 软件出现客户需求不能容忍的错误;

      • 软件的使用未能符合客户的习惯和工作环境。

      考虑到设计等方面的因素,我们还可以认为软件缺陷还可以包括软件设计不符合规范,未能在特定的条件(资金、范围等)达到最佳等。可惜的是,我们中的很多人更倾向于把软件缺陷看成运行时出现问题上来,认为软件测试仅限于程序提交之后。

      在目前的国内环境下,我们几乎看不到完整准确的客户需求说明书,加以客户的需求时时在变,追求完美的测试变得不太可能。因此作为一个优异的测试人员,追求软件质量的完美固然是我们的宗旨,但是明确软件测试现实与理想的差距,在软件测试中学会取舍和让步,对软件测试是有百益而无一弊的。

      下面是一些软件测试的常识,对这些常识的理解和运用将有助于我们在进行软件测试时能够更好的把握软件测试的尺度。

      • 测试是不完全的(测试不完全)

      很显然,由于软件需求的不完整性、软件逻辑路径的组合性、输入数据的大量性及结果多样性等因素,哪怕是一个极其简单的程序,要想穷尽所有逻辑路径,所有输入数据和验证所有结果是非常困难的一件事情。我们举一个简单的例子,比如说求两个整数的最大公约数。其输入信息为两个正整数。但是如果我们将整个正整数域的数字进行一番测试的话,从其数目的无限性我们便可证明是这样的测试在实际生活中是行不通的,即便某一天我们能够穷尽该程序,只怕我们乃至我们的子孙都早已作古了。为此作为软件测试,我们一般采用等价类和边界值分析等措施来进行实际的软件测试,寻找最小用例集合成为我们精简测试复杂性的一条必经之道。

      • 测试具有免疫性(软件缺陷免疫性)

      软件缺陷与病毒一样具有可怕的 “ 免疫性 ” ,测试人员对其采用的测试越多,其免疫能力就越强,寻找更多软件缺陷就更加困难。由数学上的概率论我们可以推出这一结论。假设一个 50000 行的程序中有 500 个软件缺陷并且这些软件错误分布是均匀的,则每 100 行可以找到一个软件缺陷。我们假设测试人员用某种方法花在查找软件缺陷的精力为 X 小时 /100 行。照此推算,软件存在 500 个缺陷时,我们查找一个软件缺陷需要 X 小时,当软件只存在 5 个错误时,我们每查找一个软件缺陷需要 100X 小时。实践证明,实际的测试过程比上面的假设更为苛刻,为此我们必须更换不同的测试方式和测试数据。该例子还说明了在软件测试中采用单一的方法不能高效和完全的针对所有软件缺陷,因此软件测试应该尽可能的多采用多种途径进行测试。

      • 测试是 “ 泛型概念 ” (全程测试)

      我一直反对软件测试仅存在于程序完成之后。如果单纯的只将程序设计阶段后的阶段称之为软件测试的话,需求阶段和设计阶段的缺陷产生的放大效应会加大。这非常不利于保证软件质量。需求缺陷、设计缺陷也是软件缺陷,记住 “ 软件缺陷具有生育能力 ” 。软件测试应该跨越整个软件开发流程。需求验证(自检)和设计验证(自检)也可以算作软件测试(建议称为:需求测试和设计测试)的一种。软件测试应该是一个泛型概念,涵盖整个软件生命周期,这样才能确保周期的每个阶段禁得起考验。同时测试本身也需要有第三者进行评估(信息系统审计和软件工程监理),即测试本身也应当被测试,从而确保测试自身的可靠性和高效性。否则自身不正,难以服人。

      另外还需指出的是软件测试是提高软件产品质量的必要条件而非充分条件,软件测试是提高产品质量最直接、最快捷的手段,但决不是一个根本手段。

      • 80-20 原则

      80% 的软件缺陷常常生存在软件 20% 的空间里。这个原则告诉我们,如果你想使软件测试有效地话,记住常常光临其高危多发 “ 地段 ” 。在那里发现软件缺陷的可能性会大的多。这一原则对于软件测试人员提高测试效率及缺陷发现率有着重大的意义。聪明的测试人员会根据这个原则很快找出较多的缺陷而愚蠢的测试人员却仍在漫无目的地到处搜寻。

      80-20 原则的另外一种情况是,我们在系统分析、系统设计、系统实现阶段的复审,测试工作中能够发现和避免 80% 的软件缺陷,此后的系统测试能够帮助我们找出剩余缺陷中的 80% ,最后的 5% 的软件缺陷可能只有在系统交付使用后用户经过大范围、长时间使用后才会曝露出来。因为软件测试只能够保证尽可能多地发现软件缺陷,却无法保证能够发现所有的软件缺陷。

      80-20 原则还能反映到软件测试的自动化方面上来,实践证明 80% 的软件缺陷可以借助人工测试而发现, 20% 的软件缺陷可以借助自动化测试能够得以发现。由于这二者间具有交叉的部分,因此尚有 5% 左右的软件缺陷需要通过其他方式进行发现和修正。

      • 为效益而测试

      为什么我们要实施软件测试,是为了提高项目的质量效益最终以提高项目的总体效益。为此我们不难得出我们在实施软件测试应该掌握的度。软件测试应该在软件测试成本和软件质量效益两者间找到一个平衡点。这个平衡点就是我们在实施软件测试时应该遵守的度。单方面的追求都必然损害软件测试存在的价值和意义。一般说来,在软件测试中我们应该尽量地保持软件测试简单性,切勿将软件测试过度复杂化,拿物理学家爱因斯坦的话说就是: Keep it simple but not too simple 。

      • 缺陷的必然性

      软件测试中,由于错误的关联性,并不是所有的软件缺陷都能够得以修复。某些软件缺陷虽然能够得以修复但在修复的过程中我们会难免引入新的软件缺陷。很多软件缺陷之间是相互矛盾的,一个矛盾的消失必然会引发另外一个矛盾的产生。比如我们在解决通用性的缺陷后往往会带来执行效率上的缺陷。更何况在缺陷的修复过程中,我们常常还会受时间、成本等方面的限制因此无法有效、完整地修复所有的软件缺陷。因此评估软件缺陷的重要度、影响范围,选择一个折中的方案或是从非软件的因素(比如提升硬件性能)考虑软件缺陷成为我们在面对软件缺陷时一个必须直面的事实。

      • 软件测试必须有预期结果

      没有预期结果的测试是不可理喻的。软件缺陷是经过对比而得出来的。这正如没有标准无法进行度量一样。如果我们事先不知道或是无法肯定预期的结果,我们必然无法了解测试正确性。这很容易然人感觉如盲人摸象一般,不少测试人员常常凭借自身的感觉去评判软件缺陷的发生,其结果往往是把似是而非的东西作为正确的结果来判断,因此常常出现误测的现象。

      • 软件测试的意义 - 事后分析

      的目的单单是发现缺陷这么简单吗?如果是 “ 是 ” 的话,我敢保证,类似的软件缺陷在下一次新项目的软件测试中还会发生。古语说得好, “ 不知道历史的人必然会重蹈覆辙 ” 。没有对软件测试结果进行认真的分析,我们就无法了解缺陷发生的原因和应对措施,结果是我们不得不耗费的大量的人力和物力来再次查找软件缺陷。很可惜,目前大多测试团队都没有意识到这一点,测试报告中缺乏测试结果分析这一环节。

      结论:

      软件测试是一个需要 “ 自觉 ” 的过程,作为一个测试人员,遇事沉着,把持尺度,从根本上应对软件测试有着正确的认识,希望本文对读者对的认识有所帮助。

  • 功能测试常用方法

    2008-08-22 13:46:51

    测试工作进行了一年有余了,主要进行的是功能测试,每天敲敲点点,运行系统,查看其功能是否正常实现,是否满足需求。对于需求没有涵盖,但功能实现上不合理的地方(从用户角度考虑)与项目经理沟通,进行系统完善。下面是归纳的主要常用测试方法和测试中遇到的一些问题:

    1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。 (相同功能在两个模块存在,目录链接)


    2. 相关性检查:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确。 (被引用的数据,不能删除,删除要有确认提示。增加数据在引用的页面出现)


    3. 检查按钮的功能是否正确:如update, cancel, delete, save等功能是否正确。


    4. 字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度,会不会出错.


    5. 字符类型检查: 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型,会否报错. (小数的输入)


    6. 标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键.看系统处理是否正确.


    7. 中文字符处理: 在可以输入中文的系统输入中文,看会否出现乱码或出错. (输入中文变成????)


    8. 检查带出信息的完整性: 在查看信息和update信息时,查看所填写的信息是不是全部带出.,带出信息和添加的是否一致


    9. 信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理.


    10. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按”delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理.


    11. 检查添加和修改是否一致: 检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型.


    12. 检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错.


    13. 重复提交表单:一条已经成功提交的纪录,back后再提交,看看系统是否做了处理。


    14. 检查多次使用back键的情况: 在有back的地方,back,回到原来页面,再back,重复多次,看会否出错.


    15. search检查: 在有search功能的地方输入系统存在和不存在的内容,看search结果是否正确.如果可以输入多个search条件,可以同时添加合理和不合理的条件,看系统处理是否正确.


    16. 输入信息位置: 注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方.


    17. 上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。


    18. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加*


    19. 快捷键检查:是否支持常用快捷键,如Ctrl+C Ctrl+V Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。


    20. 回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错.

  • 执行测试时应注意的问题

    2008-08-22 13:44:59

        测试环境搭建之后,根据定义的测试用例执行顺序,逐个执行测试用例。在测试执行中需要注意以下几个问题:

       全方位的观察测试用例执行结果: 测试执行过程中,当测试的实际输出结果与测试用例中的预期输出结果一致的时候,是否可以认为测试用例执行成功了?答案是否定的,即便实际测试结果与测试的预期结果一致,也要查看软件产品的操作日志、系统运行日志和系统资源使用情况,来判断测试用例是否执行成功了。全方位观察软件产品的输出可以发现很多隐蔽的问题。以前,我在测试嵌入式系统软件的时候,执行某测试用例后,测试用例的实际输出与预期输出完全一致,不过在查询 CPU 占用率地时候,发现 CPU 占用率高达 90 %,后来经过分析,软件运行的时候启动了若干个 1ms 的定时器,大量的消耗的 CPU 资源,后来通过把定时器调整到 10ms , CPU 的占用率降为 7 %。如果观察点单一,这个严重消耗资源的问题就无从发现了。

       加强测试过程记录: 测试执行过程中,一定要加强测试过程记录。如果测试执行步骤与测试用例中描述的有差异,一定要记录下来,作为日后更新测试用例的依据;如果软件产品提供了日志功能,比如有软件运行日志、用户操作日志,一定在每个测试用例执行后记录相关的日志文件,作为测试过程记录,一旦日后发现问题,开发人员可以通过这些测试记录方便的定位问题。而不用测试人员重新搭建测试环境,为开发人员重现问题。

       及时确认发现的问题: 测试执行过程中,如果确认发现了软件的缺陷,那么可以毫不犹豫的提交问题报告单。如果发现了可疑问题,又无法定位是否为软件缺陷,那么一定要保留现场,然后知会相关开发人员到现场定位问题。如果开发人员在短时间内可以确认是否为软件缺陷,测试人员给予配合;如果开发人员定位问题需要花费很长的时间,测试人员千万不要因此耽误自己宝贵的测试执行时间,可以让开发人员记录重新问题的测试环境配置,然后,回到自己的开发环境上重现问题,继续定位问题。

       与开发人员良好的沟通: 测试执行过程中,当你提交了问题报告单,可能被开发人员无情驳回,拒绝修改。这时候,只能对开发人员晓之以理,做到有理、有据,有说服力。首先,要定义软件缺陷的标准原则,这个原则应该是开发人员和测试人员都认可的,如果没有共同认可的原则,那么开发人员与测试人员对问题的争执就不可避免了。此外,测试人员打算说服开发人员之前,考虑是否能够先说服自己,在保证可以说服自己的前提下,再开始与开发人员交流。

       及时更新测试用例

       测试执行过程中,应该注意及时更新测试用例。往往在测试执行过程中,才发现遗漏了一些测试用例,这时候应该及时的补充;往往也会发现有些测试用例在具体的执行过程中根本无法操作,这时候应该删除这部分用例;也会发现若干个冗余的测试用例完全可以由某一个测试用例替代,那么删除冗余的测试用例。

       总之,测试执行的过程中及时地更新测试用例是很好的习惯。不要打算在测试执行结束后,统一更新测试用例,如果这样,往往会遗漏很多本应该更新的测试用例。

       提交一份优秀的问题报告单

       软件测试提交的问题报告单和测试日报一样,都是软件测试人员的工作输出,是测试人员绩效的集中体现。因此,提交一份优秀的问题报告单是很重要的。软件测试报告单最关键的域就是 “ 问题描述 ” ,这是开发人员重现问题,定位问题的依据。问题描述应该包括以下几部分内容:软件配置、硬件配置、测试用例输入、操作步骤、输出、当时输出设备的相关输出信息和相关的日志等。

       软件配置: 包括操作系统类型版本和补丁版本、当前被测试软件的版本和补丁版本、相关支撑软件,比如数据库软件的版本和补丁版本等。

       硬件配置: 计算机的配置情况,主要包括 CPU 、内存和硬盘的相关参数,其它硬件参数根据测试用例的实际情况添加。如果测试中使用网络,那么网络的组网情况,网络的容量、流量等情况。硬件配置情况与被测试产品类型密切相关,需要根据当时的情况,准确翔实的记录硬件配置情况。

       测试用例输入 \ 操作步骤 \ 输出: 这部分内容可以根据测试用例的描述和测试用例的实际执行情况如实填写。

       输出设备的相关输出信息: 输出设备包括计算机显示器、打印机、磁带等等输出设备,如果是显示器可以采用抓屏的方式获取当时的截图,其他的输出设备可以采用其它方法获取相关的输出,在问题报告单中提供描述。

       日志信息: 规范的软件产品都会提供软件的运行日志和用户、管理员的操作日志,测试人员应该把测试用例执行后的软件产品运行日志和操作日志作为附件,提交到问题报告单中。

       根据被测试软件产品的不同,需要在 “ 问题描述 ” 中增加相应的描述内容,这需要具体问题具体分析。

       测试结果分析

       软件测试执行结束后,测试活动还没有结束。测试结果分析是必不可少的重要环节, “ 编筐编篓,全在收口 ” ,测试结果的分析对下一轮测试工作的开展有很大的借鉴意义。前面的 “ 测试准备工作 ” 中,建议测试人员走读缺陷跟踪库,查阅其他测试人员发现的软件缺陷。测试结束后,也应该分析自己发现的软件缺陷,对发现的缺陷分类,你会发现自己提交的问题只有固定的几个类别;然后,再把一起完成测试执行工作的其他测试人员发现的问题也汇总起来,你会发现,你所提交问题的类别与他们有差异。这很正常,人的思维是有局限性,在测试的过程中,每个测试人员都有自己思考问题的盲区和测试执行的盲区,有效的自我分析和分析其他测试人员,你会发现自己的盲区,有针对性的分析盲区,必定会在下一轮测试用避免盲区。
  • 国内很好的IT学习网站

    2008-08-22 13:43:36

    1.http://www.boobooke.com/bbs/index.php 播布客,免费的视频网站,很不错!

    2.http://www.51testing.com/html/index.html  51ting很不错!

    3.http://www.uml.org.cn/index.asp    UML软件工程组织

    4.http://www.testage.net/html/index.html   测试时代,强烈推荐,很厉害哦

    5.http://www.csdn.net/    很好 

    6.http://www.3atesting.com/   不错不错

    还有很多很好的网站,我会继续搜集给大家!

  • 如何成为最有价值的“测试精英”!

    2008-08-22 13:41:27

    看到许多媒体都在争相炒作测试工程师—这一“黄金”职业,我有些不同的看法。以下的内容是从网站上摘录的一段信息:

    随着国内IT企业对软件测试的重要性的日益了解,软件测试人才岗位的薪资待遇也稳步提升。据了解,刚入门的软件测试工程师薪水一般在3000-5000元左右,工作2-3年年薪普遍在10-15万之间。即便如此,很多企业仍然难以招到适合的人才。“我现在要是公布招聘10个软件开发人员,会来几百人投简历;如果我说招聘一名软件测试工程师,应聘者就会少很多。” 北京红旗中文贰仟软件技术有限公司总经理胡才勇不由感慨。智联招聘等招聘网站甚至撰文称“从入门级的初级测试工程师到高级测试工程师及项目负责人全线短缺。” 套用狄更斯那句话说:对于急需软测人员的企业来说,这是一个最坏的时代,但对软件测试人才来说,这是一个最好的时代。

    之所以摘录以上信息,不是针对这段信息本身有什么不同的观点,而是想要说明一位想从事软件测试行业的人或正在从事初级测试岗位的人员如何月薪可以拿到年薪10-20万。

    无论是你想升职还是想要加薪,首先必须要分析一下公司给员工升职和加薪的原因。我想这方面大家都是清楚的,但是好像操作起来又非常的模糊。谁都知道要升职或加薪就是要干的比别人好,要为公司创造比别人更多的价值,节约更多的资金和成本......但是如何做到这些呢,恐怕就没有什么特别行之有效的方法了。其实这个问题以前也困扰了我许久。

    记得当时最开始从事开发工作时,薪水才1.2k,现在虽然听起来少的可怜,但是十几年前自己还是挺满足的。所以工作的时候也就特别卖力,总是老板或主管要求的事情,一定要尽全力做好,老板和主管没有要求的,如果觉得对公司有帮助,也会主动去做。所以很快我就被提为小组长,当然薪水也涨到了2K。当时其实我的技术并不是我们组里最好的,所以有好多人都不服气,我也知道自己的不足,所以就二话不说,赶紧补呗,没过两个月就奠定了巩固的地位。 由此我获得了升职和加薪的第一个方法:那就是不仅要做好你该做的事情,还要尽量去做对公司有益的事情!这样在公司做了快两年的时间,后来因为老板要移民所以只能关掉公司,不过老板对我们还是不错的,都提前和我们员工打好了招呼,让我们先去找工作,然后等我们都安顿好了,他才把公司关掉的。

    后来就去了一家美国公司,这是加薪的第二种方法—“成功”跳槽!请注意不是每一次普通的跳槽都可以使你的工资翻倍的,只有你在前一家企业确实为公司做出过真正的贡献,那么以后的跳槽才会被新的东家所欣赏。所以我强烈建议目前在公司工作的兄弟姐妹们一定要随时留心,随时积累工作心得,最好有一些真实客观的数据(比如目前您所测试的项目中,您个人所发现的缺陷占到整个团队发现缺陷的比率是多少?您个人发现的对公司最有价值的缺陷是什么?.......)说明您为上家公司所作的贡献是什么,无论是技术上的,还是管理上的,都最好有一些客观的数据证明。所以工作过程中处处积累,处处留心才能为您以后的成功跳槽打好基础,而不是等到新东家面试您的时候,您才拼命的“回忆”自己的光辉业绩,那不容易让人家信服的!

    在这家美国公司里,技术的长进不是特别大,但是毕竟是外企,所以对自己“英语”能力的锻炼可就提供了非常好的机会。虽说是六级,但是没进这家公司之前,根本就没说过外语。所以刚进去的时候,我和老外主管沟通真是挺费劲的,不过没关系,还是老办法—补呗!二话不说,没过一个月,我的经理就夸我有很大的进步。过了英语关,我的工作也更如鱼得水了,而且公司让我负责与美国那边的客户沟通,尤其是针对客户提出的问题进行一些软件功能检查。由于客户评价很好,所以我又一次得到了升职和加薪的机会,这使我又获得了一个新的方法—想尽一切办法为公司的“客户”提供最好的服务!

    就这样一路走来,从开发转到测试再到负责公司的过程改进,做了不少的角色,但是等到薪资想要超越更多一些的时候,发现没有什么好的方法可以让我迈过这个坎,因为在公司工作的过程中,总是自己在指导别人如何做事,但其实自己做事的过程中,尤其是技术方面,也有许多不到位的地方,但是总也是找不到特别有效的解决方案。总是一个项目接一个项目的忙碌,有一次同时负责4个项目,真觉得分身乏力!郁闷了好久,不知道下一步该怎么走,一个项目一个项目的做,同样的问题反复出现,丝毫没有好的解决方案.....当时我曾经有想法改行,不做技术了,想去做销售!因为无法突破自己的瓶颈。

    直到“撞”到了51tesing,(之所以说是撞到了51tesing,是因为当时其实只是打算做一名兼职老师,挣点外快就行了,并没有打算留下来。)。遇到了我测试生涯中的三个贵人,也是我现在的老板和上司—周峰老师、王威老师和朴老师,但是我们都尊敬的称他们为老师(这也是我们51testing的一种文化吧,无论是领导还是同事之间,大家都以老师相称)。他们给了我许多指导,让我看到了自己在技术上的不足,也通过教学的环节,让我把自己的所得与大家共同分享,使我终于明确了自己的发展方向,突破自己的瓶颈的同时又获得最重要的一个法宝—适时地停下来,总结自己,与更多的人分享,才能更快的提高自己!

    就像我们说宝马车和普通车的区别,其实不在于宝马车比普通车跑得更快,最大的区别是当时速过百时,宝马车可以随时稳定的“叫停”,但是其他的车就完全不听指挥了。

    所以如果大家想要获得更好的加薪和升职的机会,首先要脚踏实地的认真高效做事,无论老板有没有盯着你,记着这是为“自己工作!”,绝不是为老板工作,只有自己的能力提高了,为公司创造了真正的价值,才会有更多更好的机会迎接你!同时别忘记在工作过程中一定要不断地充电学习找一个优秀、无私的“教练”是成功的关键,否则自己很难突破的,起码短时间内是绝对不可能的!最后就是要适时地停一停,对以前的自己好好总结一下,才能为第二次腾飞作好充分的准备!

  • SQL SERVER 2000的安全性测试

    2008-08-22 13:37:49

     一、SQL SERVER 2000的安全性

      数据库的安全性主要是指数据库的用户认证方式及其角色权限管理,保证合法用户访问数据库,合法用户只能存取被授权访问的资源。

      SQL Server 2000的用户认证方式有两种:

      1)  Windows身份验证:是和Window操作系统集成的,SQL SERVER的登录用户必须是WINDOWS用户和组,适用于windows的客户端。

      2)  SQL SERVER验证:登录用户是SQL SERVER自己建立的,可以不是WINDOWS用户,适用于非WINDOWS的客户端,例如unix、linux。

      具体采用哪种认证方式由SQL Server服务器的安全身份认证模式决定,如果身份认证模式是设定仅Windows身份验证模式则只能采用Windows身份验证;如果设定为混合模式,则Windows身份验证和SQL SERVER验证都可以。

      SQL Server安全性有3个层次:服务器安全、数据库安全、对象权限。

      服务器级别安全性包括登录帐户和服务器角色,在服务器级别的操作权限由登录帐户的固定服务器角色决定。

      登录帐户包括:

      1)  Windows登录帐户(域名\用户名)

      2)  标准SQL登录帐户(用户名)

      3)  内置的登录帐户(sa、本地或域的Administrator、内置的组Administrators)这三类帐户有最高的权限,是sysadmin服务器角色的成员。

      数据库级别安全性包括数据库用户和数据库角色,在数据库级别的操作权限由数据库用户的角色决定。默认数据库用户为dbo、guest,dbo映射登录帐户为sa(sysadmin服务器角色的成员), guest用户映射所有的登录帐户。登录帐户想访问某个数据库,则需为其建立该数据库访问帐户或者该数据库存在guest用户。

      数据库角色包括:

      1)  固定的标准数据库角色:是定义对所有表可以进行的操作。其中有一个特殊的角色:public,任何用户都具有public角色,角色名不能更改,权限可以进行更改,是定义所有用户可以对某一个或几个表可以进行的操作。

      2)  用户自定义的标准数据库角色:是定义对某一个或几个表可以进行的操作。

      3)  用户自定义的应用程序角色:是定义对某一个或几个表可以进行的操作。与用户无关,需要密码,在应用程序中激活生效。

      对象权限包括:

      1)  为表和视图授予的权限类别有SELECT、INSERT、UPDATE和DELETE语句权限以及DRI(REFERENCE)

      2)  为列授予权限(SELECT、UPDATE)

      3)  为存储过程和函数授予权限 ,只有EXEC一种

      4)  为数据库授予权限(语句权限:创建和备份等)

      5)  默认的权限或称暗示性权限:sysadmin, db_owner角色可以具有所有权限

      对象权限的操作有授予、回收、拒绝三种。

      综上所述,如果一个用户登录到SQL SERVER 2000后其具有哪些权限有如下规则:

      1)  权限累加原则,综合考虑登录用户的服务器角色、登录用户对应的数据库角色,角色的权限,单独赋予的对象权限,默认的角色权限等。

      2)  拒绝优先,不能拒绝的是默认的权限: sysadmin db_owner角色,sa、本地或域的Administrator、内置的组Administrators三类登录用户不能拒绝。

      3)  Public,应用程序角色优先,应用程序角色被激活后该用户只具有应用程序角色和public角色的权限,其所具有的其他角色失效。

      二、SQL SERVER 2000的安全性测试

      1、测试内容

      针对以上叙述的数据库安全性功能要求,对其进行分析,对其进行功能相关分类,将容易一起进行测试的内容放到一起,保证功能的覆盖同时保证测试用例的高效。具体确定如下测试内容:

      登录用户管理:登录用户的建立、修改、删除,验证服务器角色的作用

      数据库用户管理:数据库用户的建立、修改、删除,和登录用户的映射关系,验证固定数据库角色的作用

      角色管理:数据库自定义标准和应用程序角色的建立、删除、修改

      权限管理:分别给角色授权,给用户赋予角色,根据权限适用原则验证用户具有的权限是否正确,验证权限适用原则

      2、测试方法

      该测试为系统功能性测试,所以采用黑盒测试方法,以人工测试为主。

      3、测试用例设计

      针对每一个测试点,设计完整的测试用例,先考虑通过测试,验证功能的实现;再考虑失败测试。运用等价类、边界值、因果图、正交法等测试用例设计技术

      测试用例格式包括:用例编号、相关用例编号、输入及操作说明、预期结果以及功能是否正确的判断标志(评价标准)等。采用EXCEL格式模版,便于管理和扩充。

      几个典型的测试用例见测试用例设计.xls文档. 该文档有四个表单组成,分别表示上述四个测试内容列出的模块:登录用户管理、数据库用户管理、角色管理、权限管理。

      三、总结

      通过对SQL SERVER2000安全性测试的研究与实践,体会到测试需求的重要,一定对所测对象功能了解全面,通过相关资料、微软帮助等来帮助确定需求,综合考虑各种情况尤其默认情况,总结出了权限适用的原则。再根据需求确定测试计划,进行测试用例的设计。这次测试还是以验证功能为主,所以测试用例设计主要考虑功能的完全覆盖,对失败测试在时间允许条件下尽力去做,例如在登录用户建立时进行输入非法字符和超长字符,发现了其输入的边界值,并发现当用户名称输入大于128的字符时不给提示,自动截取128个字符,不给出任何提示,这很不友好,并且需要自己判断边界值。

  • 查询经典语句

    2008-08-22 13:36:40

    SQL分类:
    DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
    DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
    DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

    首先,简要介绍基础语句:

    1、说明:创建数据库
    CREATE DATABASE database-name

    2、说明:删除数据库
    drop database dbname

    3、说明:备份sql server
    --- 创建 备份数据的 device
    USE master
    EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'

    --- 开始 备份
    BACKUP DATABASE pubs TO testBack

    4、说明:创建新表
    create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

    根据已有的表创建新表:
    A:create table tab_new like tab_old (使用旧表创建新表)
    B:create table tab_new as select col1,col2… from tab_old definition only

    5、说明:删除新表drop table tabname

    6、说明:增加一个列
    Alter table tabname add column col type
    注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

    7、说明:添加主键: Alter table tabname add primary key(col)
    说明:删除主键: Alter table tabname drop primary key(col)

    8、说明:创建索引:create [unique] index idxname on tabname(col….)
    删除索引:drop index idxname
    注:索引是不可更改的,想更改必须删除重新建。

    9、说明:创建视图:create view viewname as select statement

       删除视图:drop view viewname

    10、说明:几个简单的基本的sql语句

    选择:select * from table1 where 范围
    插入:insert into table1(field1,field2) values(value1,value2)
    删除:delete from table1 where 范围
    更新:update table1 set field1=value1 where 范围
    查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
    排序:select * from table1 order by field1,field2 [desc]
    总数:select count * as totalcount from table1
    求和:select sum(field1) as sumvalue from table1
    平均:select avg(field1) as avgvalue from table1
    最大:select max(field1) as maxvalue from table1
    最小:select min(field1) as minvalue from table1

    11、说明:几个高级查询运算词

    A: UNION 运算符

    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

    B: EXCEPT 运算符

    EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

    C: INTERSECT 运算符

    INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
    注:使用运算词的几个查询结果行必须是一致的。

    12、说明:使用外连接
    A、left outer join:

    左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
    SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

    B:right outer join:
    右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

    C:full outer join:
    全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

    其次,大家来看一些不错的sql语句

    1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
    法一:select * into b from a where 1<>1
    法二:select top 0 * into b from a

    2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
    insert into b(a, b, c) select d,e,f from b;

    3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
    insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
    例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

    4、说明:子查询(表名1:a 表名2:b)
    select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

    5、说明:显示文章、提交人和最后回复时间
    select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

    6、说明:外连接查询(表名1:a 表名2:b)
    select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

    7、说明:在线视图查询(表名1:a )
    select * from (SELECT a,b,c FROM a) T where t.a > 1;

    8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
    select * from table1 where time between time1 and time2
    select a,b,c, from table1 where a not between 数值1 and 数值2

    9、说明:in 的使用方法
    select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

    10、说明:两张关联表,删除主表中已经在副表中没有的信息
    delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

    11、说明:四表联查问题:
    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

    12、说明:日程安排提前五分钟提醒
    SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

    13、说明:一条sql 语句搞定数据库分页
    select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

    14、说明:前10条记录
    select top 10 * form table1 where 范围

    15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
    select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

    16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
    (select a from tableA ) except (select a from tableB) except (select a from tableC)

    17、说明:随机取出10条数据
    select top 10 * from tablename order by newid()

    18、说明:随机选择记录
    select newid()

    19、说明:删除重复记录
    Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

    20、说明:列出数据库里所有的表名
    select name from sysobjects where type='U'

    21、说明:列出表里的所有的
    select name from syscolumns where id=object_id('TableName')

    22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
    select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
    显示结果:
    type vender pcs
    电脑 A 1
    电脑 A 1
    光盘 B 2
    光盘 A 2
    手机 B 3
    手机 C 3

    23、说明:初始化表table1
    TRUNCATE TABLE table1

    24、说明:选择从10到15的记录
    select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
      
    随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
      对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:
    Randomize
    RNumber = Int(Rnd*499) +1
     
    While Not objRec.EOF
    If objRec("ID") = RNumber THEN
    ... 这里是执行脚本 ...
    end if
    objRec.MoveNext
    Wend
     
       这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一 个数据库内就包含了成千上万条记录。这时候不就死定了?
      采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:
    Randomize
    RNumber = Int(Rnd*499) + 1
     
    SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
     
    set ōbjRec = ObjConn.Execute(SQL)
    Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
     
      不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
    再谈随机数
      现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。
      为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:
    SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
     
      假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码):
    SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"

      注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。

     
    随机读取若干条记录,测试
    Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
    Sql server:select top n * from 表名 order by newid()
    mysqlelect * From 表名 Order By rand() Limit n
    Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)
    语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...
    使用SQL语句 用...代替过长的字符串显示
    语法:
    SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
    Access数据库:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
     
    Conn.Execute说明
    Execute方法
      该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:
        1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
        Set 对象变量名=连接对象.Execute("SQL 查询语言")
       Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。

        2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
        连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]
          ·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
          ·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。

    ·BeginTrans、RollbackTrans、CommitTrans方法
      这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。
      事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。
       BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过 连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一 个错误信息。

  • EPR和SAP的一些名词解释

    2008-08-22 13:35:34

    EPR和SAP的一些名词解释

    1.企业资源计划
    企业资源计划(Enterprise Resources Planning,ERP),可以从三个层次进行定义:
    管理思想:ERP是由美国著名的计算机技术咨询和评估集团Gartner Group Inc.提出了一整套企业管理系统体系标准,其实质是在MRPII(Manufacturing Resources Planning,“制造资源计划” )基础上进一步发展而成的面向供应链(Supply Chain)的管理思想;
    软件产品:是综合应用了客户机/服务器体系、关系数据库结构、面向对象技术、图形用户界面、第四代语言(4GL)、网络通讯等信息产业成果,以ERP管理思想为灵魂的软件产品;
    管理系统:是整合了企业管理理念、业务流程、基础数据、人力物力、计算机硬件和软件于一体的企业资源管理系统。
    2.物料需求计划
    物料需求计划(Material Requirement Planning,MRP) 指企业的信息管理系统对产品构成进行管理,借助计算机的运算能力及系统对客户订单,在库物料,产品构成的管理能力,实现依据客户订单,按照产品结构清单展开并计算物料需求计划。实现减少库存,优化库存的管理目标。
    3.制造资源计划II
    制造资源计划II(Manufacturing Resources Planning II,MRP II) 指在企业技术、管理和经济上有效地建立起来的一个过程,贯穿于市场经销、产品设计、制造工艺、生产计划、物资供应、生产作业与控制、仓储管理和财务成本等环节。
    4.供应链管理
    供应链管理(Supply Chain Management,SCM) 指从原材料采购直到产成品销售,供应链管理设计、计划、控制可能因素并同时协调与优化物流、资金流、信息流,着重供应商、制造商、批发零售商以及服务供应商和客户之间的协调处理。
    5.BPR业务流程重组
    业务流程重组(Business Process Reengineer,BPR) 指运用信息技术和人力资源管理手段大幅度改善业务流程绩效的革命性方法。
    6.绩效管理体系
    绩效管理体系(Key Performance Indicator,KPI) 指一个循环往复的过程,包括“目标设定”、“跟踪汇报”、“分析调整”和“考核激励”四个主要的管理环节。
    7.系统应用产品
    系统应用产品(System Applications Products ,SAP) 指德国的一家ERP软件公司开发的ERP应用软件,是英文System Applications Products in Data Processing的缩写,翻译为数据处理中的系统、应用和产品。
    8.SAP R/3
    SAP R/3 指一个基于客户/服务器结构和开放系统的、集成的企业资源计划系统;其功能覆盖企业的财务、后勤(工程设计、采购、库存、生产销售和质量等)和人力资源管理等各个方面。
    二、SAP模块名称
    1.财务会计
    财务会计(Financial Accounting,FI) 指必须能够按有关规定向股东、债权人、劳工组织以及社会公众披露并提供所需的信息,而有效的公司管理会计必须包括控制和转移的功能。财务会计模块由总分类帐、应收帐款和应付帐款、固定资产、法定合并以及特殊统计会计功能组成。
    2.管理会计
    管理会计(Controlling,CO) 指提供企业内部管理控制及内部考核评价所需要的各种信息,通过与销售模块、采购模块、财务会计的集成功能,将生产经营中的各种信息在CO中进行分析和比较,由一般费用成本核算、生产成本核算和获利能力分析等子模块组成。
    3.销售和分销
    销售和分销(Sales and Distribution,SD) 指SAP系统中一个用于解决销售过程中相关业务操作的高度集成的模块,通过与财务模块的集成,所有信息可以实时反映到帐务系统。主要由销售订单的管理、信用额度的控制、发货管理、发票管理等功能组成。
    4.物料管理
    物料管理(Material Management,MM) 指R3后勤系统的一个组成部分;此模块所提供的功能基于物料的物流管理操作:获取、采购、需求计划、库存管理、物理仓储管理以及票据管理。
    5.仓库管理
    仓库管理(Warehouse Management,WM) 指MM模块中的一个子模块,利用WM系统, 可以对公司中复杂的库存结构进行管理。这种结构可包括不同的仓库中的区域(即存储类型),如在高架位闲置的存储、可用存储、冻结存储和固定的仓位提取区域等,以及生产供应、发货和收货区域等。利用WM系统,可以同时对具有随机组织结构和具有固定仓位的仓库进行管理。
    6.生产计划
    生产计划(Production Planning,PP) 指后勤系统中负责计划、控制、管理生产的模块,提供完善的满足各种制造模式的处理,如重复生产、按订单生产、按订单装配、流程式生产、批量生产和面向库存生产。集成化供应链如MRPII、电子看板、计划估化器、车间控制器、流程控制系统、PDM等。
    7.工厂维护
    工厂维护(Plant Maintenance,PM) 指负责复杂的工厂控制系统维护;支持对工厂的图形化表达,可和地理信息系统相连,包括详细的工厂图表;对设备可进行预防性维护计划、缺损保修、检修、备品备件管理等。
    8.人力资源
    人力资源(Human Resources,HR) 指SAP系统中的人力资源模块,是管理人事档案、人员工资及培训和差旅费用的,最终产生的财务信息会集成到会计模块中。
    9.物流集成
    物流集成(Material Repair Operation,MRO) 指对备品备件、原料、产成品等物资的采购、供应、库存、销售等状态的管理。
    10.石油行业解决方案
    石油行业解决方案(Industry Solution- OIL,IS-OIL) 指一个专门针对石油和天然气开发出来的行业解决方案,SAP公司与其众多的战略合作伙伴共同建立了石油天然气行业全球理事会,目标是支持SAP石油天然气行业产品及SAP油气企业用户的互动发展。该理事会定期召开会议,工作重点主要围绕着制定石油天然气行业的管理标准及相应SAP产品的开发策略,以满足石油天然气行业不断变化的管理需求。经SAP公司及其战略合作伙伴二十余年来的潜心研究,反映当今一流石油企业生产与管理经验的“最佳业务实践”被预置在 SAP的系统中。这些最佳业务实践基本涵盖了大多数石油企业在生产与管理上的各类需求,同时也可为各石油企业进行组织机构、管理流程的改革提供有益的参考与专家式的帮助。
    11.高级计划优化器
    高级计划优化器(Advanced Planning Optimizer,APO) 指SAP供应链管理的一部分,可优化供应链管理,通过高级计划优化器可提供一套更好的采购方案给企业,通过APO与ERP集成可尽快尽好并最低成本的得到供应商原料从而使得公司的产品更快速地交付给客户。
    12.数据仓库
    数据仓库(Business Information Warehouse,BW) 指在企业管理和决策中面向主题的、集成的、与时间相关的、不可修改的数据集合。与其他数据库应用不同的是,数据仓库更像一种过程,对分布在企业内部各处的业务数据的整合、加工和分析的过程。
    13.企业战略管理
    企业战略管理(Strategic Enterprise Management,SEM) 指提供一种手段和途径(如通过与历史同期的比较或对未来某一时期的合理预期),使企业的战略决策不断地由设想转变为现实。

    14.主生产计划
    主生产计划(Master Production Schedule ,MPS) 是预先建立的一份计划,由主生产计划员负责维护。主生产计划是驱动MRP的一整套计划数据,它反映出企业打算生产什么,什么时候生产以及生产多少。主生产计划必须考虑客户订单和预测、未完成订单、可用物料的数量、现有能力、管理方针和目标等等。
    三、SAP实施
    1.SAP实施方法: 快速实施SAP
    快速实施SAP (Accelerated SAP ,ASAP) 指SAP提供的执行解决方案。Accelerated SAP集成了几个组件,这几个组件联合工作以支持R/3 系统的快速有效的执行。
    2.Change Management变革管理
    变革管理(Change Management) 指对用现行的计划和概念将企业转换成新的状况的渐进和不断变化的过程的管理。
    3.关键流程演示
    关键流程演示(Conference Room Pilot,CRP) 指SAP实施过程中,对关键业务流程在系统上进行实现演示,从而得到实施单位对实施SAP的初步认可。
    四、SAP系统设置
    1.集团
    集团(Client) 指SAP系统中最高等级的组织单位,是由一个主数据库和建立一个完全集成系统所必须的所有表格组成的。
    2.公司代码
    公司代码(Company Code) 指一个独立的会计实体,拥有完整的会计帐套。是对外报送法定资产负债表和损益表的最小单位。
    五、SAP开发工具
    1.高级业务应用程序
    高级业务应用程序(Advanced Business Application Programming,ABAP) 指SAP公司开发的用于Reports、Screens、Interfaces、Data conversions等多种应用程序设计的一种编程语言。R/3的所有应用程序甚至其BASIS系统的部分组件都是由ABAP开发的。它是图形化第四代编程语言。因此常被称为ABAP/4。
    六、系统应用
    1.关键用户
    关键用户(Key User) 指在ERP实施过程中,代表实施方提出业务需求,全程参与整个项目实施,负责对最终用户进行培训,及实施后的系统维护的人员。
    2.最终用户
    最终用户(End user) 指在ERP实施后,在ERP系统中进行凭证输入、报表查询等日常业务操作的系统使用人员。
    3.角色
    角色(Role) 指按照一定的权限执行相应的操作的个体。
    SAP APO = Advanced Plan optimization, 做资源优化的
    SCM = Supply chain management 供应链管理
    ECC = ERP Central Component
    SRM = mySAP供应商关系管理(SRM)套件
    CRM = CRM Solutions for customer relationship management 客户关系管理
    BW = Business Information Warehouse,商务信息仓库

    SAP各模块:

    FI 应收、应付、总帐、合并、投资、基金、现金等;

    CO 利润及成本中心,产品成本、项目会计、获利分析等;

    AM 固定资产、技术资产、投资控制等;

    SD 销售计划、询价报价、定单管理、运输发货、发票等;

    MM 采购、库房管理、库存管理、MRP、供应商评价等;

    PP 工厂数据、生产计划、MRP、能力计划、成本核算等;

    QM 质量计划、质量检测、质量控制、质量文档等;

    PM 维护及检测计划、单据处理、历史数据、报告分析等;

    HR 薪资、差旅、工时、招聘、发展计划、人事成本等;

    PS 项目计划、预算、能力计划、资源管理、结果分析等;

    WF 工作定义、流程管理、电子邮件、信息传送自动化等;

    IS 针对不同行业提供特殊应用。

  • SQL系统语句大全

    2008-08-22 13:34:25

    1、用户

    查看当前用户的缺省表空间
    SQL>select username,default_tablespace from user_users;

    查看当前用户的角色
    SQL>select * from user_role_privs;

    查看当前用户的系统权限和表级权限
    SQL>select * from user_sys_privs;
    SQL>select * from user_tab_privs;

    显示当前会话所具有的权限
    SQL>select * from session_privs;

    显示指定用户所具有的系统权限
    SQL>select * from dba_sys_privs where grantee='GAME';

    显示特权用户
    select * from v$pwfile_users;

    显示用户信息(所属表空间)
    select default_tablespace,temporary_tablespace
    from dba_users where username='GAME';

    显示用户的PROFILE
    select profile from dba_users where username='GAME';


    2、表

    查看用户下所有的表
    SQL>select * from user_tables;

    查看名称包含log字符的表
    SQL>select object_name,object_id from user_objects
    where instr(object_name,'LOG')>0;

    查看某表的创建时间
    SQL>select object_name,created from user_objects where object_name=upper('&table_name');

    查看某表的大小
    SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
    where segment_name=upper('&table_name');

    查看放在ORACLE的内存区里的表
    SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;

    3、索引

    查看索引个数和类别
    SQL>select index_name,index_type,table_name from user_indexes order by table_name;

    查看索引被索引的字段
    SQL>select * from user_ind_columns where index_name=upper('&index_name');

    查看索引的大小
    SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
    where segment_name=upper('&index_name');

    4、序列号

    查看序列号,last_number是当前值
    SQL>select * from user_sequences;

    5、视图

    查看视图的名称
    SQL>select view_name from user_views;

    查看创建视图的select语句
    SQL>set view_name,text_length from user_views;
    SQL>set long 2000; 说明:可以根据视图的text_length值设定set long 的大小
    SQL>select text from user_views where view_name=upper('&view_name');

    6、同义词

    查看同义词的名称
    SQL>select * from user_synonyms;

    7、约束条件

    查看某表的约束条件
    SQL>select constraint_name, constraint_type,search_condition, r_constraint_name
    from user_constraints where table_name = upper('&table_name');

    SQL>select c.constraint_name,c.constraint_type,cc.column_name
    from user_constraints c,user_cons_columns cc
    where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
    and c.owner = cc.owner and c.constraint_name = cc.constraint_name
    order by cc.position;

    8、存储函数和过程

    查看函数和过程的状态
    SQL>select object_name,status from user_objects where object_type='FUNCTION';
    SQL>select object_name,status from user_objects where object_type='PROCEDURE';

    查看函数和过程的源代码
    SQL>select text from all_source where ōwner=user and name=upper('&plsql_name');

  • 什么是软件测试

    2008-08-22 13:31:33

    软件测试定义是:使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它
    是否满足规定的需求货弄清预期结果与实际结果之间的差别.

    它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness) 、完全度(completeness)和质量(quality)的软件过程;是SQA(software quality assurance)的重要子域。

    Grenford J.Myers曾对软件测试的目的提出过以下观点:
    (1)测试是为了发现程序中的错误而执行程序的过程;
    (2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
    (3)成功的测试是发现了至今为止尚未发现的错误的测试。

    然而,这种观点指出测试是以查找错误为中心,而不是为了演示软件的正确功能.但是只从字面意思理解,可能会产生误导,认为发现错误是软件测试的唯一目的,查找不出错误的测试就是没有价值的测试,实际上并非如此!

    (1)测试并不仅仅是为了找出错误.通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者
    发现当前软件开发过程中的缺陷,以便及时改进;

    (2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性;

    (3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法

    软件测试的内容:

    软件测试主要工作内容是验证(verification)和确认(validation ),下面分别给出其概念:

    验证(verification)是保证软件正确地实现了一些特定功能的一系列活动,即保证软件做了你所期望的事情。(Do the right thing)

    1.确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程;

    2.程序正确性的形式证明,即采用形式理论证明程序符号设一计规约规定的过程;

    3.评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断和提出报告。

    确认(validation)是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。即保证软件以正确的方式来做了这个事件(Do it right)

    1.静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性;

    2.动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。

    软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期问各个阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。

    从不同的角度出发,软件测试可以划分为不同的分类:

    从是否关心软件内部结构和具体实现的角度划分

    A.白盒测试

    B.黑盒测试

    C.灰盒测试

    从是否执行程序的角度

    A.静态测试

    B.动态测试

    从软件开发的过程按阶段划分有

    A.单元测试

    B.集成测试

    C.确认测试

    D.验收测试

    E.系统测试

我的栏目

我的存档

数据统计

  • 访问量: 12154
  • 日志数: 20
  • 建立时间: 2008-08-22
  • 更新时间: 2008-08-22

RSS订阅

Open Toolbar