对软件测试的重要性的理解_谈谈对软件测试的理解?软件测试的重要性? - CSDN
  • 对于软件测试理解

    2017-06-27 09:05:08
    测试的目的:测试主要是要保证代码质量,保证发布的代码高质量的发布给客户。...常用的软件测试内容及方法: 不论是对于软件的模块还是系统而言,总有共同的内容需要测试。 1.正确测试:正确测试也称

    测试的目的:测试主要是要保证代码质量,保证发布的代码高质量的发布给客户。

    所以测试人员工作的目的是发现尽可能多的系统缺陷,可以叫bug或者是defect。测试不仅仅是需要测试技术,更需要职业道德

    测试的真理是,通过了测试,不代表代码就没有缺陷,通不过测试,缺陷肯定存在。

    常用的软件测试内容及方法:

    不论是对于软件的模块还是系统而言,总有共同的内容需要测试。

    1.正确性测试:正确性测试也称功能性测试,功能测试属于黑盒测试,在测试方法中相对简单,以完成代码最基本的功能为主,所以也最重要。

    基本的方法是构造一些合理的输入输出,检查是否得到输入输出。核心思想是寻找等价区间。

    还有一个方法是边界值测试

    2.容错性测试:检查程序在异常情况下的执行情况,来保证程序能够在不满足运行条件的情况下,正常结束。

     比如通过不合理的输入来引诱软件出错


    3.性能与效率测试:主要是验证软件的运行速度和对资源的利用率。

    4.*文档测试(看文档描述的功能是否都能实现)

    5.改错,测试发现出来的错误,需要让程序员去改错,否则测试工作没有意义


    如何做好测试,

    规范测试流程,提高测试用例质量,提供测试工具效率,提高测试人员对与测试重要性的认知及技能的提高

    展开全文
  • 对软件测试理解

    2017-03-08 17:21:33
    测试的目的:尽可能多的发现缺陷,比如功能的错误,性能低下,易用差。 测试的思路:先假设程序存在什么缺陷,然后执行程序来发现缺陷。 测试类型:白盒测试,黑盒测试。 白盒测试:看得见的程序内部结构,测试源...

    测试的目的:尽可能多的发现缺陷,比如功能的错误,性能低下,易用性差。

    测试的思路:先假设程序存在什么缺陷,然后执行程序来发现缺陷。

    测试类型:白盒测试,黑盒测试。

    白盒测试:看得见的程序内部结构,测试源程序的逻辑结构和实现细节。白盒测试必须由开发人员独立执行,因为测试人员无法理解代码内部逻辑

    黑盒测试:看不见的程序内部结构,按照规格来测试程序是否符合要求。黑盒测试必须由独立测试小组执行,因为开发人员难以做到客观公正

    主要发现以下问题:是否有不正确或遗漏了的功能;在接口上,能否正确的接收输入,能否输出正确的结果; ·是否有数据结构错误或外部信息访问错误;性能上是否能够满足要求;是否有初始化或终止性错误; 黑盒测试需要在所有可能的输入条件和输出条件中确定测试数据,以检查程序是否都能产生正确的输出;有时测试数据量太大,是不现实的。

    如:测试一个模块时,白盒测试:要对所有代码进行单步跟踪测试,关注的是程序的内部细节。黑盒测试:只需测试模块的接口是否要求,关注的是程序的外部实现。

    α测试和β测试 :在软件交付使用之后,用户将如何实际使用程序,对于开发者来说是不知道的。通常在软件发布上市之前需要进行α测试和β测试。 α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。α测试必须是开发人员和测试小组共同参与完成。

    α测试:公司内部对软件的测试。

    α测试的目的是评价软件产品的FLURPS(功能、局域化、可使用性、可靠性、性能和支持)。尤其注重产品的界面和特色。 α测试可以从软件产品编码结束之时开始,或者在模块(子系统)测试完成之后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。

     β测试:产品正式发布之前,公司外部邀请用户进行测试。

    α、β、λ常用来表示软件测试过程中的三个阶段,α是第一阶段,一般只供内部测试使用;β是第二个阶段,已经消除了软件中大部分的不完善之处,但仍有可能还存在缺陷和漏洞,一般只提供给特定的用户群来测试使用;λ是第三个阶段,此时产品已经相当成熟,只需在个别地方再做进一步的优化处理即可上市发行。

    封测的意思就是游戏制作刚刚完成,需要在技术上对游戏进行测试,这个阶段的测试是纯技术的,和游戏的故事情节、人设一点都没有关系,整个游戏基本处于雏形阶段,所以除了有关技术人员以外,别人是接触不到游戏的。
    内测在这三个阶段的测试中,是时间最长的,少则几周,多则数月,这个阶段的测试至关重要,也是对游戏最全面的测试,所有的关于游戏的技术问题,以及关于游戏的故事、人设、风格、人物、服饰、语言、动作、主支线任务的合理性等等诸多方面进行测试和评估,乃至最后的修改。即使是内测,也是很少很少一部分人可以参与,大部分是游戏制作人员,运营代理商和与制作及运营游戏的商家,及一部分普通玩家。
    到了公测阶段,就会有相当一部分玩家参与进来,这个时候游戏已经基本定型,也就是处于正式推出的最后阶段的测试。实际上就是听取玩家的意见和反馈,以便为今后纠正错误做统计和准备,纠正错误的方式一般采取出补丁的方式。

    测试内容:

    1、功能测试:检查软件的功能是否符合要求。枚举方法:构造合理的输入,看是否有期望的输出。边界值方法:采用定义域的边界值进行测试。

    2、容错性测试:检查软件在异常情况下的反应,容错性好的软件会确保系统不发生难以预料的崩溃。方法:构造一些不合理的数据看系统的反应(错误的数据类型或定义域外的值)。

    3、性能与效率测试:测试软件的速度与对资源的利用率。极限测试:持续不停地给服务器发送请求看是否会死掉,给程序输入特别大的数据看是否能吃得消。获取测试的绝对值(如数据的传输率):记录运行环境对软件的影响。获取测试的相对值(如该软件和其他软件相比快多少倍):确保被测试的几个软件具有相同的软件和硬件环境中。

    4、易用性测试:用户不用看用户手册,即具有好的易用性。

    5、文档测试:检查文档的正确性,完备性,可理解性。


    上述内容参考该篇内容





    测试手机:

    1、电话。

    是否可以正常接受电话。

    是否可以删除通话记录。

    是否可以拉黑。

    输入错误位数号码是否有提示。

    2、短信。

    是否可以正常接收短信。

    是否可以删除短信记录。

    是否可以拉黑。

    接收短信是否有提示,发送短信是否有成功提示。

    发送内容为空时是否有提示。

    输入错误位数号码是否有提示。


    3、联系人。

    是否有电话本功能。

    是否可以新建删除更新联系人信息。

    是否可以将联系人设成常用联系人或黑名单。

    联系人输入信息为空是否有提示。

    删除联系人是否有提示。

    更新时是否有提示确认更新。


    测试题:

    1、在游戏或软件开发完成的初期,由游戏公司或软件公司发送限定的激活码或账号给玩家,由玩家测试并向游戏公司反馈使用情况和存在的问题,以促进游戏的进一步完善的环节称为内侧。

    2、单元测试能发现约80%的软件缺陷。

    3、JUnit主要用来完成什么:单元测试。JUnit是一个Java语言的单元测试框架。Junit测试是程序员测试,即所谓白盒测试。

    4、测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。测试驱动开发可以和结对编程结合使用。

    测试驱动开发适合使用CMM/CMMI方法?CMM/CMMI方法这两种方法属于测试驱动开发的方式

    CMM是指“能力成熟度模型”,它是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现商业目标。

    CMMI能力成熟度模型集成将各种能力成熟度模型,整合到同一架构中去,由此建立起包括软件工程、系统工程和软件采购等在内的诸模型的集成,以解决除软件开发以外的软件系统工程和软件采购工作中的迫切需求。

    5、下图用基本路径法测试需要覆盖几条路径?



    6、桩函数,也叫stub函数,存根函数。用一个桩函数替换一些接口函数,用于测试当前函数的特性。 

    在单元测试中被其它模块调用,
    在自顶向下的集成过程中尤其有效
    譬如说,要测试一个函数 f() 
    void f() 
    { 
    var = g(...); 
    } 
    f()函数中调用了函数 g(),但是在测试f()的时候g()函数可能还没有写出来 。
    这时可以写一个g()的 存根(stub)函数,来模拟g()函数,例如让它仅仅返回一个值.这样的话就可以完成对函数f()的测试了. 

    7、软件测试计划评审会需要哪些人员参加。

    软件测试计划评审会需要有 项目经理、客户(可选)、配置管理员、测试经理、开发组长,SQA 负责人等人的参加。

    SQA-Software Quality Assurance)

    8、黑盒测试方法 、白盒测试方法:

    白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异

    具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景法等。 

    白盒测试法的覆盖标准有 逻辑覆盖 、循环覆盖和基本 路径测试 。其中逻辑覆盖包括 语句覆盖  判定覆盖  条件覆盖 、判定/条件覆盖、 条件组合覆盖  路径覆盖 边界值法既可以用于黑盒测试用例,也可以用于白盒测试用例。边界值分析的基本思想是使用在最小值、略高于最小值、正常值、略低于最大值和最大值处取输入变量值,记为:min、min+、nom、max-、max考虑到健壮性测试,还可以加一个略大于最大值max+,以及一个略小于最小值min-的值。

    用边界值分析法,假定1<X<10,那么X在测试中应该取的边界值是X=1,X=2,X=9,X=10


    白盒测试分为:
    1.语句覆盖:可执行语句至少被执行一次;
    2.判断覆盖:每个判断的取真分支和取假分支至少经历一次;
    3.条件覆盖:每个条件的取值至少满足一次;
    4.判断条件覆盖:判断和条件都满足;
    5.条件组合覆盖:每个条件的所有可能都至少出现一次,并且判定结果至少出现一次 ;
    他与条件覆盖的区别:他不是简单要求每个条件出现“真”和“假”两种结果,而是要求这些结果所有可能至少出现一次;
    6.路径测试:执行所有可能的执行路径;
    7.基本路径测试:路径测试执行了每个路径,每个判定的结果肯定经历过一次

    判定覆盖是每个判定的真假一次,就会导致所有的结果路径会实现;
    条件覆盖是每个判定里的条件各取一次,不一定会产生所有的结果;


    9、测试方法可以分成哪几种?

    软件测试可以是人工测试:如个人复查,抽查和会审等
    也可以是机器自动测试,又有不同的分类:
    按照否关软件内部结构具体实现角度划
    A.白盒测试B.黑盒测试 C.灰盒测试 
    按照软件发程按阶段划
    A.单元测试  B.集测试  C.确认测试  D.系统测试  E.验收测试 
    灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态

    10、代码评审员一般由测试员担任?错!一般都是开发人员评审
    11、测试的关键问题是:如何选择测试用例
    12、系统测试将软件,硬件,网络等其他因素结合,对整个软件进行测试.白盒测试等不是系统测试的内容。
    13、V模型大体可以划分为以下几个不同的阶段步骤:需求分析、概要设计、详细设计、软件编码、单元测试、集成测试、系统测试、验收测试。
    需求分析                            验收测试
        概要设计                    系统测试
            详细设计            集成测试
                编码            单元测试
                            V
    集成测试计划在需求分析阶段末(mo)提交
    14、负载测试是验证要检验的系统的能力最高能达到什么程度
    15、测试人员要坚持原则,缺陷未修复完坚决不予通过。请判断这句话的正确与否。错!!!!!!!!!!!!
    缺陷分两种:
    1、完全影响软件的正常运行或者影响客户的正常体验。
        这种当然不能予以通过
    2、不影响产品运行及客户正常体验且此软件急于使用。
        以公司利益为出发,应予以通过。但在时间不紧急的情况下应不予通过。

    一个好的测试人员应该有很好的情况分析能力,并且要有担当
    16、软件测试的目的是为了发现错误而执行程序的过程,并不涉及改正错误。
    程序调试的基本步骤有:错误定位、修改设计和代码,以排除错误、进行回归测试,防止引进新的错误。程序调试通常称为Debug,即排错。
    软件测试的基本准则有:所有测试都应追溯到需求、严格执行测试计划,排除测试的随意性、充分注意测试中的群集现象、程序员应避免检查
    自己的程序、穷举测试不可能、妥善保存测试计划等文件。
    17、

    条件覆盖CC(Condition Coverage),设计足够多的测试用例,运行被测程序,使得每一判定语句中每个逻辑条件的可能取值至少满足一次。

    条件覆盖率的公式:条件覆盖率=被评价到的条件取值的数量/条件取值的总数X100%[1] 

    条件覆盖的缺点:只考虑到每个判定语句中的每个表达式,没有考虑到各个条件分支(或者涉及不到全部分支),即不能够满足判定覆盖.

     

    条件组合覆盖,也称多条件覆盖MCC (Multiple Condition Coverage),设计足够多的测试用例,使得每个判定中条件的各种可能组合都

    至少出现一次(以数轴形式划分区域,提取交集,建立最少的测试用例)。这种方法包含了“分支覆盖”和“条件覆盖”的各种要求。满足条件组合

    覆盖一定满足判定覆盖、条件覆盖、判定条件覆盖。条件组合覆盖率的公式:条件组合覆盖率=被评价到的条件取值组合的数量/条件取值组合的

    总数条件组合覆盖的缺点:判定语句较多时,条件组合值比较多。

     

    语句覆盖 SC(Statement Coverage),就是设计若干个测试用例,运行被测程序,使得程序中每一可执行语句至少执行一次。这里的“若干个”

    ,意味着使用测试用例越少越好。语句覆盖在测试中主要发现缺陷或错误语句。

     

    判定条件覆盖CDC(Condition/ Decision Coverage),设计足够多的测试用例,使得判定中的每个条件的所有可能(真/假)至少出现一次,

    并且每个判定本身的判定结果也至少出现一次。[1] 判定条件覆盖率的公式:条件判定覆盖率=被评价到的条件取值和判定分支的数量/(条件取值

    总数+判定分支总数).判定条件覆盖的缺点:没有考虑单个判定对整体结果的影响,无法发现逻辑错误。

    18、

    软件验收测试分为三类:

    正式验收测试;

    非正式验收测试。其中包括α测试(由用户、测试人员、开发人员共同参与的内部测试。)

                                      和β测试(内测后的公测,即完全交给最终用户测试。)

    19、

    LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题, 
    可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。
    其测试组件有
    1.VuGen Load Generator(虚拟用户生成器)用于捕获最终用户业务流程和创建自动性能测试脚本 (也称为虚拟用户脚本)。
    2.Controller (控制器)用于组织、驱动、管理和监控负载测试。
    3.Analysis (分析器)有助于您查看、分析和比较性能结果。
    包括A脚本编辑工具 C测试执行工具 D结果分析工具
    20、系统集成测试主要包括以下过程:1. 构建的确认过程。 2. 补丁的确认过程。 3. 系统集成测试测试组提交过程。 
          4. 测试用例设计过程。 5. 测试代码编写过程。 6. Bug的报告过程。 7. 每周/每两周的构建过程。 8. 点对点的测试过程。 
          9. 组内培训过程。
    21、

    系统测试的16个测试策略:

          功能测试、性能测试、压力测试、容量测试、安全性测试、GUI测试、可用性测试、安装测试、配置测试、异常测试,备份测试、健壮性测试、
    文档测试、在线帮助测试、网络测试、稳定性测试。
    22、α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,
    α测试不能由程序员或测试员完成。α测试发现的错误,可以在测试现场立刻反馈给开发人员,由开发人员及时分析和处理。
    目的是评价软件产品的功能、可使用性、可靠性、性能和支持。
    尤其注重产品的界面和特色。Alpha测试可以从软件产品编码结束之后开始,或在模块(子系统)测试完成后开始,
    也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。
    alpha 测试需要用户参加
    alpha 测试是验收测试的一种
    23、软件测试用例包括 输入数据和预期输出结果
    24、项目立项前测试人员不需要提交任何工件。工件是加工过程中的生产对象。项目立项前,测试人员是不需要提供任何工件的。
    25、自底向上集成需要测试员编写驱动程序。自底向上测试是从“原子”模块(即软件结构最低层的模块)开始组装测试,因测试到较高层模块时,所需的下层模块功能均已具备,所以不再需要桩模块。 
    自底向上集成方法不用桩模块,测试用例的设计亦相对简单,但缺点是程序最后一个模块加入时才具有整体形象,需要开发驱动模块
    26、
    针对手机应用软件的系统测试,我们通常从如下几个角度开展:功能模块测试,交叉事件测试,压力测试,容量测试,兼容性测试,易用性/用户体验测试等.
    对手机可以施加的压力测试类型主要有:存储压力、边界压力、 响应能力压力、网络流量压力,无并发压力
    并发压力是针对服务器的,因为每次并发是一个客户端
    27、测试设计员的职责有:设计测试用例,设计测试过程、脚本。
    测试设计人员主要负责设计测试用例以及设计测试过程。 制定测试计划是测试经理来做的;评估测试活动是测试经理组织开发人员来进行的。
    
    28、LoadRunner-负载压力测试:预测系统性能。
    JMeter+Badboy:基于JAVA的压力测试工具,Badboy用来进行脚本的录制 
    功能测试:通过自动录制、检测和回放用户的应用操作。将输出记录同预先给定的记录比较。 
    Junit:白盒测试工具:针对代码测试 
    测试管理工具:对测试需求、计划、用例、实施进行管理 
    测试辅助工具:本身不执行,可以生成测试数据,为测试提供数据准备 
    负载压力测试:LoadRunner:预测系统行为和性能的工业标准级负载测试工具。模拟上千万用户同时实施并发操作,来实时监控可能发生的问题。 
    功能测试: QTP(quicktest professional):自动测试工具 
    白盒测试:C++ TEST(做C和C++的白盒测试)、JUnit(Java白盒测试) 
    缺陷管理工具:Mantis、BugFree、QC、TD 
    用例管理工具:TestLink、QC 
    测试辅助工具:SVN
    28、【软件需求】是软件开发之前做好的,软件开发是根据这个做的,那么软件测试自然也需要参考该文件 【迭代计划】是软件的某个周期的计划,自然也需要参考 【可行性】是软件开发前做好,用于证明该计划可行的,没有必要参考。可行性研究报告,在软件开发前做好了,在开发前项目经理已召开进行评估,通过后才开始开发此软件,所以在测试过程中,不再需要参考次报告





    展开全文
  • 对软件测试的认识

    2017-04-18 10:41:25
    但是,由于目前软件测试体系还不是很完善,测试的地位还远没有提升到一个很重要的地位,所以大多数人对软件测试的认识仍然存在着很多的误解。   1. 什么是软件测试  软件测试就是利用测试工具按照测试方案和...
    软件测试,它是软件工程的一部分,它随着软件开发应运而生,并随着软件开发的产业化而受到重视。但是,由于目前软件测试体系还不是很完善,测试的地位还远没有提升到一个很重要的地位,所以大多数人对软件测试的认识仍然存在着很多的误解。
    

     

    1.      什么是软件测试

     软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。

     

    测试的目的不仅仅是发现错误,可以归结为3条:

    1.证明我们所做的是客户所需的。

    2.确保编码人员理解设计的意图

    3.通过回归测试保证目前运行的程序将来仍然可以正常工作。

      避免检查自己的代码,一定要在计划中把测试过程包括在内。

      错误集中的主要原因有两个

    1.错误前置逻辑。BCD代码依赖于A代码;A代码本来是错的,但是开始并没有发现,BCD运行良好;A代码修正错误后,BCD代码全部报错。

    2.实现人员的疲劳。一周工作40小时是必要的。

      BUG是分等级的,BUG之间可能相互关联。可测试性与可靠性相关联。如果某些被测试点很难建立测试环境,那么这些点的可靠性就会降低。可测性越高,可靠性越高。有的功能可能很难建立测试环境,例如某软件有说明:“本软件会在火星撞地球后失常”,这个就很难测试。

     

      测试人员应该具有的10项职业素质

      1.沟通能力。测试人员可以说是客户和开发人员的媒介。

      2.有能力建立共同价值观。用户担心将来得到一个不符合自己要求的系统;开发者担心系统要求不正确而重新开发;公司则担心这个系统得不到用户的认可。测试人员要与各种人建立共同价值观。

      3.技术能力。要有几年的编程经验。了解测试概念,熟悉重要的工具。

      4.自信。必须对自己的观点有足够的自信。

      5.交流。要注意说话的方式。

      6.记忆。熟悉各种错误。对bug很敏感。

      7.耐心。这个工作需要耐心。

      8.怀疑。要怀疑开发人员对自己软件的吹嘘。

      9.自我激励。

      10.洞察力。

    2.      软件测试的基础

     

    自动化测试

      引入:为了确保复杂的企业级应用在不同环境下都能可靠地运行,需要一个能简单操作的测试工具来西东完成应用程序的功能性测试;在终端用户正式使用前,对应用系统各个环节的质量、可靠性和可扩展性进行测试和评价,需要适用于不同体系架构的自动负载压力测试工具,以预测系统行为并未系统优化提供依据

      定义:通过测试工具或者其他手段,按照测试工程师的预定计划对软件产品进行自动的测试。软件测试自动化设计到测试流程、测试体系、自动化编译以及自动化测试等方面的整合。也就是说,要让测试能够自动化,不仅是技术、工具的问题,更是一个公司和组织的文化问题。

      自动化测试工具分类

      自动化测试工具能够减少测试工作量,提高测试工作效率,但首先是能够选择一个合适的且满足企业信息系统工程环境的自动化测试工具,因为不同的测试工具,其面向的测试对象是不一样的。按照测试工具的主要用途和应用领域,可以将自动化测试工具氛分为以下几类:

      1、负载压力测试工具(LoadRunnerQALoadSILK Performa VE-Test Suite)

      2、功能测试工具(WinRunnerQARun)

      3、白盒测试工具(LogiscopePRQA(静态)DEvPartnerRational Purify)

      4、网络测试工具

      5、测试管理工具(Track RecordTestDirectorTestManager)

      6、测试辅助工具

      白盒测试

      白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作

      黑盒测试

      也称功能测试,黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。主要试图发现下列几类错误:

      功能不正确或遗漏;界面错误;数据库访问错误;性能错误;初始化和终止错误等

      从理论上讲,黑盒测试只有采用穷举输入测试,把所有可能的输入都作为测试情况考虑,才能查出程序中所有的错误。所以我们需要进行有针对性的测试,通过制定测试方案指导测试的实施,保证软件测试有组织、按步骤,以及有计划地进行。黑盒测试行为必须能够加以量化,才能饿真正保证软件质量,而测试用例就是将测试行为具体量化的方法之一。具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法等

    3.      软件测试的重要性

     

    在软件业较发达的国家。软件测试不仅成为软件开发的一个有机组成部分,而且在软件开发的系统工程中占据着相当大的比重。以美国的软件开发和生产的平均资金投入为例,通常是:“需求分析”和“规划确定”各占百分之三,“设计”占百分之五,设计占百分之五,编程占百分之七,测试占百分之十五,投产和维护占百分之六七十。测试在。软件开发中的地位不言而喻。

         软件测试工程师和软件卡发工程师就像两兄弟,缺一不可,国内开发工程师招聘还是比较容易的,但在做一些大型项目时需要大量软件测试人员,因为目前高校里没有专业的专业,只能招聘后在进行培训,这就大大增加了企业的成本,所以企业还是希望有一批专业培训的人员能直接上岗。

         软件测试是一个系列过程活动,贯穿于软件项目的整个生命过程,很多软件项目的开发还停留在“作坊式”阶段,项目的成功往往靠个别程序员决定。但随着市场对软件质量的的要求不断提高,软件测试将变得越来越重要,相应的软件测试工程师的地位和待遇将处于“双高”地位,而且做开发并不能做好测试,因为他们不懂得测试的理念而且不具备测试的经验。

        目前国内软件测试人才缺口高达20万,已成为我国软件产业发展的瓶颈之一。“软件测试人才需求量的加大,是由于近年来我国软件行业的产业升级所决定的。由于我国的软件行业目前突破了作坊时代,由以前软件开发的单打独斗升级为工业化、流水线式的生产模式,作为工业化的产品,软件测试也就成为软件开发企业必不可少的质量监控部门,而目前我国的软件测试人才的培养数量较产业升级相对滞后,这就形成了软测人才的供给远小于需求现状。

    4.      对软件测试认识的误区

     

      误区之一:软件开发完成后进行软件测试

          人们一般认为,软件项目要经过以下几个阶段:需求分析,概要设计,详细设计,软件编码,软件测试,软件发布。据此,认为软件测试只是软件编码后的一个过程。这是不了解软件测试周期的错误认识。

         软件测试是一个系列过程活动,包括软件测试需求分析,测试计划设计,测试用例设计,执行测试。因此,软件测试贯穿于软件项目的整个生命过程。在软件项目的每一个阶段都要进行不同目的和内容的测试活动,以保证各个阶段的正确性。软件测试的对象不仅仅是软件代码,还包括软件需求文档和设计文档。软件开发与软件测试应该是交互进行的,例如,单元编码需要单元测试,模块组合阶段需要集成测试。如果等到软件编码结束后才进行测试,那么,测试的时间将会很短,测试的覆盖面将很不全面,测试的效果也将大打折扣。更严重的是如果此时发现了软件需求阶段或概要设计阶段的错误,如果要修复该类错误,将会耗费大量的时间和人力。

     

         误区之二:软件发布后如果发现质量问题,那是软件测试人员的错

          这种认识很打击软件测试人员的积极性。软件中的错误可能来自软件项目中的各个过程,软件测试只能确认软件存在错误,不能保证软件没有错误,因为从根本上讲,软件测试不可能发现全部的错误。从软件开发的角度看,软件的高质量不是软件测试人员测出来的,是靠软件生命周期的各个过程中设计出来的。出现软件错误,不能简单地归结为某一个人的责任,有些错误的产生可能不是技术原因,可能来自于混乱的项目管理。应该分析软件项目的各个过程,从过程改进方面寻找产生错误的原因和改进的措施。

     

         误区之三:软件测试要求不高,随便找个人多都行

          很多人都认为软件测试就是安装和运行程序,点点鼠标,按按键盘的工作。这是由于不了解软件测试的具体技术和方法造成的。随之软件工程学的发展和软件项目管理经验的提高,软件测试已经形成了一个独立的技术学科,演变成一个具有巨大市场需求的行业。软件测试技术不断更新和完善,新工具,新流程,新测试设计方法都在不断更新,需要掌握和学习很多测试知识。所以,具有编程经验的程序员不一定是一名优秀的测试工程师。软件测试包括测试技术和管理两个方面,完全掌握这两个方面的内容,需要很多测试实践经验和不断学习精神。

     

         误区之四:软件测试是测试人员的事情,与程序员无关

          开发和测试是相辅相成的过程,需要软件测试人员、程序员和系统分析师等保持密切的联系,需要更多的交流和协调,以便提高测试效率。另外,对于单元测试主要应该由程序员完成,必要时测试人员可以帮助设计测试样例。对于测试中发现的软件错误,很多需要程序员通过修改编码才能修复。程序员可以通过有目的的分析软件错误的类型、数量,找出产生错误的位置和原因,以便在今后的编程中避免同样的错误,积累编程经验,提高编程能力。

     

         误区之五:项目进度吃紧时少做些测试,时间富裕时多做测试

         这是不重视软件测试的表现,也是软件项目过程管理混乱的表现,必然会降低软件测试的质量。一个软件项目的顺利实现需要有合理的项目进度计划,其中包括合理的测试计划,对项目实施过程中的任何问题,都要有风险分析和相应的对策,不要因为开发进度的延期而简单的缩短测试时间、人力和资源。因为缩短测试时间带来的测试不完整,对项目质量的下降引起的潜在风险,往往造成更大的浪费。克服这种现象的最好办法是加强软件过程的计划和控制,包括软件测试计划、测试设计、测试执行、测试度量和测试控制。

     

         误区之六:软件测试是没有前途的工作,只有程序员才是软件高手

          由于我国软件整体开发能力比较低,软件过程很不规范,很多软件项目的开发都还停留在“作坊式”和“垒鸡窝”阶段。项目的成功往往靠个别全能程序员决定,他们负责总体设计和程序详细设计,认为软件开发就是编写代码,给人的印象往往是程序员是真正的牛人,具有很高的地位和待遇。因此,在这种环境下,软件测试很不受重视,软件测试人员的地位和待遇自然就很低了,甚至软件测试变得可有可无。随着市场对软件质量的不断提高,软件测试将变得越来越重要,相应的软件测试人员的地位和待遇将会逐渐提高。在微软等软件过程比较规范的大公司,软件测试人员的数量和待遇与程序员没有多大差别,优秀测试人员的待遇甚至比程序员还要高。软件测试将会成为一个具有很大发展前景的行业,软件测试大有前途,市场需要更多具有丰富测试技术和管理经验的测试人员,他们同样是软件专家。

    展开全文
  • 从开发人员角度对软件测试的些许理解  对软件测试的认识:  软件测试要求开发人员避免测试自己开发的程序。从心理学角度讲,这是很有道理的。特别是一个相对复杂的系统,开发人员在刚刚开发完成的时候,尚沉浸...

    http://www.cnblogs.com/zhanghairong/archive/2012/07/11/2586341.html


    从开发人员角度对软件测试的些许理解

     对软件测试的认识:

        软件测试要求开发人员避免测试自己开发的程序。从心理学角度讲,这是很有道理的。特别是一个相对复杂的系统,开发人员在刚刚开发完成的时候,尚沉浸于对自己设计的回味之中。此时去测试的话往往会侧重于程序本身的功能通过性测试。很难发现错误。
        测试是为发现错误而执行程序的错误。一个人发现别人身上的不足很容易,但发现自己身上的错误便不那么容易了。所谓“吾能指人之失而不能见己之失,吾能指人之小失而不能见己之大失”者是也。一个软件开发人员需要养成一种习惯,正视自己开发的软件,特别是刚刚完成的软件。要看到它的不足,知道他能做什么,不能做什么。在不能做的时候是如何处理的。对边界条件是否做了严格的判断及约束。其实大道相通,有没有这样的意识往往跟一个人为人处世的心态,对自己的认知有密切的联系。一个追求完美,经常反思自己的人往往有一种虚怀若谷的情怀,“战战兢兢、如履薄冰、如临深渊”者是也。所谓的方法、套路仅仅是方便于那些不怎么思考,只会人云亦云、亦步亦趋的人设计的。
        说了一些心态方面的,再来从方法学上说一下软件测试的要点,对开发人员来说,白盒测试要比黑盒测试更重要,这决定着你的系统上线后你能不能安心的睡觉;测试的阶段主要在单元测试与集成测试方面。

     

    软件测试的分类:

        分类如下图所示(该图为大学 软件测试课程上面的图片)

     

       

    开发人员测试要点:

        对于开发人员来说,我只强调单元测试、集成测试两点。
        单元测试主要 测试编写的类、类中的函数等。这是测试的最小单元。常用的测试工具有java的JUnit、BoostTest等。
        集成测试侧重于 系统的整体功能性测试,这需要模拟各种可能的请求情况,特别是边界条件。在多系统中,单个系统的测试完了后还需要各个系统之间的联调。  

        测试目标方面,除了一般的功能测试之外还需要稳定性测试、性能测试、可靠性测试、适用性测试、易用性测试、安全性测试。

        下面详细介绍一下各个测试要点的测试内容。


        1.   功能性测试要点

         在软件测试领域的通用理解是:“功能测试是基于产品功能说明书,是在已知产品所应具有的功能,从用户角度来进行功能验证,以确认每个功能是否都能正常使用、是否实现了产品规格说明书的要求、是否能适当地接收输入数锯而产生正确的输出结果等。功能测试,包括用户界面测试、各种操作的测试、不同的数据输入、逻辑思路、数据输出和存储等的测试。”    对于开发人员来说,功能性测试主要是对系统所支持的功能点的测试,对数据的测试,包括数据边界的测试、数据包长度限制的测试、各个功能模块数据的正确性测试以及容错处理。该项测试要先把系统的功能点全部列出来,对异常数据的处理也算在内。


         2. 稳定性测试要点

        测试在压力情况下内存使用情况,cpu使用情况,是否有内存泄露,各个模块功能是否正常,能否正常提供服务,是否会在高压情况下卡死等。这也需要用各种可能数据进行压力测试,要测试边界条件下,收到攻击时还能否正常工作,系统有没有自清理功能等。个人的理解,该项测试类似于可靠性测试,要点在于测试系统在极端情况下是否正常。比如一个房子在高强度地震下的抗震能力。


         3.  性能测试要点

        测试程序(一般是服务器),每秒能正常处理的请求数。这项测试一般是寻找系统的性能瓶颈,看看能否满足实际的需求。当下,一个服务器每天处理5000万的请求便可以了。当然,通过优化对性能的追求是没有止境的。


         4.  安全性测试要点

        安全性测试的主要目的是 确保软件不会去完成没有预先设计的功能。这一点很重要,需要开发人员在开发时对可能出现的情况作细致的判断。常见的安全性测试内容有:畸形的文件结构、畸形的数据包、用户输入的验证、验证资源之间的依赖关系、配置文件等的格式等。因为开发人员常常假定他所获取的资源内容是符合一定标准或规则的。附录十常见的web安全性测试的内容。


         5. 适用性测试要点

         在软件测试领域的通用理解是“适用性主要是用户体验的评估活动”。个人理解,对于开发人员,这方面主要跟易用性测试联系起来,开发软件产品是为了更方便的为人服务,一个系统要尽可能的简单,尽可能减少人工的操作。比如,在配置文件方面,有配置是为了减少代码的改动性,但是配置要尽可能的简单,可以由一个配置项解决的问题不要再添加另外一项配置。
        


    附: WEB安全性测试
           一个完整的WEB安全性测试可以从部署与基础结构、输入验证、身份验证、授权、配置管理、敏感数据、会话管理、加密。参数操作、异常管理、审核和日志记录等几个方面入手。
    1.        安全体系测试

      1.1)  部署与基础结构
              网络是否提供了安全的通信
              部署拓扑结构是否包括内部的防火墙
              部署拓扑结构中是否包括远程应用程序服务器
              基础结构安全性需求的限制是什么
              目标环境支持怎样的信任级别

      1.2)  输入验证

        A.  是否清楚入口点

        B.  是否清楚信任边界
        C.  是否验证Web页输入
        D.  是否对传递到组件或Web服务的参数进行验证
        E.  是否验证从数据库中检索的数据
        F.  是否将方法集中起来
        G.  是否依赖客户端的验证
        H.  应用程序是否易受SQL注入攻击
        I.   应用程序是否易受XSS攻击


      1.3)  身份验证
        是否区分公共访问和受限访问
        是否明确服务帐户要求
        如何验证调用者身份
        如何验证数据库的身份
        是否强制试用帐户管理措施

      1.4)  授权
        如何向最终用户授权
        如何在数据库中授权应用程序
        如何将访问限定于系统级资源

      1.5)  配置管理
        是否支持远程管理
        是否保证配置存储的安全
        是否隔离管理员特权

      1.6)   敏感数据
        是否存储机密信息
        如何存储敏感数据
        是否在网络中传递敏感数据
        是否记录敏感数据

      1.7)  会话管理
        如何交换会话标识符
        是否限制会话生存期
        如何确保会话存储状态的安全

      1.8)  加密
        为何使用特定的算法
        如何确保加密密钥的安全性

      1.9)  参数操作
        是否验证所有的输入参数
        是否在参数过程中传递敏感数据
        是否为了安全问题而使用HTTP头数据

      1.10)  异常管理
        是否使用结构化的异常处理
        是否向客户端公开了太多的信息

      1.11)  审核和日志记录
        是否明确了要审核的活动
        是否考虑如何流动原始调用这身份

     

    2.        应用及传输安全
      WEB应用系统的安全性从使用角度可以分为应用级的安全与传输级的安全,安全性测试也可以从这两方面入手。
      2.1)应用级的安全测试

      主要目的是查找Web系统自身程序设计中存在的安全隐患,主要测试区域如下:

      2.1.1)注册与登陆:现在的Web应用系统基本采用先注册,后登录的方式。

          A. 必须测试有效和无效的用户名和密码
          B. 要注意是否存在大小写敏感,
          C. 可以尝试多少次的限制
          D. 是否可以不登录而直接浏览某个页面等。

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

      2.1.3)操作留痕:为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进入了日志文件,是否可追踪。

      2.1.4)备份与恢复:为了防范系统的意外崩溃造成的数据丢失,备份与恢复手段是一个Web系统的必备功能。备份与恢复根据Web系统对安全性的要求可以采用多种手段如数据库增量备份、数据库完全备份、系统完全备份等。出于更高的安全性要求,某些实时系统经常会采用双机热备或多级热备。除了对于这些备份与恢复方式进行验证测试以外,还要评估这种备份与恢复方式是否满足Web系统的安全性需求。

      2.1.5)传输级的安全测试是考虑到Web系统的传输的特殊性,重点测试数据经客户端传送到服务器端可能存在的安全漏洞,以及服务器防范非法访问的能力。一般测试项目包括以下几个方面。
        

      2.2)HTTPS和SSL测试

      默认的情况下,安全HTTP(Soure HTTP)通过安全套接字SSL(Source Socket Layer)协议在端口443上使用普通的HTTP。HTTPS使用的公共密钥的加密长度决定的HTTPS的安全级别,但从某种意义上来说,安全性的保证是以损失性能为代价的。除了还要测试加密是否正确,检查信息的完整性和确认HTTPS的安全级别外,还要注意在此安全级别下,其性能是否达到要求。

     

     

    注:该文章最初写于2011年3月8日,今天搬到博客园来。

    展开全文
  • 软件测试的一些理解

    2016-07-18 14:28:49
    现在大部分软件企业的生态链都是,软件测试属于最下游。这也决定了很多情况都必须被动接受。即使某个测试工程师理论知识丰富,辨识风险能力强,但是一个产品需求的变更就可以让他傻眼,接着很努力去适应这种节奏。...
  • 软件测试:在规定条件下程序进行操作,以发现错误,软件质量进行评估,包括软件形成过程的文档、数据以及程序进行测试 软件质量:软件特性的总和,软件满足规定或潜在用户需求的能力 2. 软件测试与质量...
  • 软件测试的必要

    2019-11-30 14:13:21
    在早期,这些应用程序只是通过开发人员、产品以及部分用户使用之后,给出相应的修改意见,感觉都OK后就进行上线,在网上或一些app下载平台上就可以直接使用,没有进行过规范的软件测试!这些软件或多或少会存在一些...
  • 软件测试是保证软件质量、提高软件可靠重要途径,软件测试的质量与测试人员的技能、经验以及被测软件的理解密切相关。 前导语2:再了解一下国外的软件测试的现状与发展。 国际上,软件测试(软件...
  • 软件测试--用例编写

    2018-08-15 18:47:30
    测试用例编写是软件测试的基本技能;也有很多人认为测试用例是软件测试的核心;软件测试中最重要的是设计和生成有效的测试用例;测试用例是测试工作的指导,是软件测试的必须遵守的准则。 在这里我们不讨论以上的...
  • 上一篇里我们讨论了测试的必需,如果大家目前还在公司里做着测试的工作,那就说明还是落在必需的范围里面,或者至少一段时间是吧。那接下来我们看下既然需要做测试,需要做哪些事情。基于我自己的一...
  • 目录 (一)软件测试的概念 (二)为什么选择软件测试 ...软件测试是一种趋势,它将在软件开发中占据越来越重要的位置; 测试和开发是两个关注点不一样的工作。开发的目标是实现功能,测试的目标...
  • 场景:学习《软件测试》第11章节 易用测试易用是交互适应、实用和有效的集中体现。构成软件缺陷的其中一条规则:软件测试员认为软件难以理解、不易使用、运行缓慢,或者最终用户认为不好。如果在测试过程...
  • 软件测试的定义

    2017-12-11 23:10:56
    关于软件测试的定义,不同学者有不同的观点,了解软件测试的定义,对于日后在工作中是很有帮助的, 首先要明确测试的定义,所谓测试,就是以检验产品是否满足需求为目标。 而软件测试,自然是为了发现软件(产品)的缺陷而...
  • 很多软件测试工程师在面试互联网企业的时候都会遇到考官给的几道面试题,这也反应了测试工程师企业的重要性,今天传智播客整理了一份2019年的互联网企业软件测试面试题,希望能帮助到大家。 2019年互联网企业软件...
  • 软件测试基础理论

    2019-06-10 18:25:30
    文章目录软件缺陷软件测试软件产品特性软件测试的原则软件测试分类 软件缺陷 软件缺陷的定义 软件产品属性的偏离现象 软件错误 功能遗漏 性能不符合要求 设计产品缺陷 软件缺陷与软件错误的区别 软件缺陷包含...
  • 软件测试:在规定条件下程序进行操作,以发现错误,软件质量进行评估,包括软件形成过程的文档、数据以及程序进行测试 软件质量:软件特性的总和,软件满足规定或潜在用户需求的能力 2. 软件测试与...
  • 问:软件测试的原则? 答:https://blog.csdn.net/weixin_30363263/article/details/102986878 问:你在测试中发现了一个 bug ,但是开发经理认为这不是一个 bug ,你应该怎样解决。 1、将问题提交到缺陷...
  • 千锋教育软件测试:论测试流程的重要性 千锋教育的王晓军老师曾经说过,测试人员作为产品质量控制的最后一环,应当是以完善作品而非完成工作为目标。因此,不论是测试时的工作态度还是百岁在测试左右的测试流程,都...
  • 软件测试方法和策略

    2018-07-23 11:26:39
    什么是软件测试软件测试的目的与原则 在规定的条件下程序进行操作,以发现程序错误,衡量软件质量,并其是否能满足设计要求进行评估的过程。 软件测试的目的: 测试是程序的执行过程,目的在于发现错误 一...
1 2 3 4 5 ... 20
收藏数 213,920
精华内容 85,568
关键字:

对软件测试的重要性的理解