技术论坛

  • 【一】数据分析

  • 数据分析概念
      数据分析是指用适当的统计方法对收集来的大量第一手资料和第二手资料进行分析,以求最大化地开发数据资料的功能,发挥数据的作用。是为了提取有用信息和形  成结论而对数据加以详细研究和概括总结的过程。
    点击阅读详细内容...
      数据也称观测值,是实验、测量、观察、调查等的结果,常以数量的形式给出。
      数据分析与数据挖掘密切相关,但数据挖掘往往倾向于关注较大型的数据集,较少侧重于推理,且常常采用的是最初为另外一种不同目的而采集的数据。
    数据分析的目的与意义
      数据分析的目的是把隐没在一大批看来杂乱无章的数据中的信息集中、萃取和提炼出来,以找出所研究对象的内在规律。
      在实用中,数据分析可帮助人们作出判断,以便采取适当行动。数据分析是组织有目的地收集数据、分析数据,使之成为信息的过程。这一过程是质量管理体系的支持过程。在产品的整个寿命周期,包括从市场调研到售后服务和最终处置的各个过程都需要适当运用数据分析过程,以提升有效性。例如J.开普勒通过分析行星角位置的观测数据,找出了行星运动规律。又如,一个企业的领导人要通过市场调查,分析所得数据以判定市场动向,从而制定合适的生产及销售计划。因此数据分析有极广泛的应用范围。
    数据分析的功能
    数据分析主要包含下面几个功能:
      1. 简单数学运算(Simple Math)
      2. 统计(Statistics)
      3. 快速傅里叶变换(FFT)
      4. 平滑和滤波(Smoothing and Filtering)
      5. 基线和峰值分析(Baseline and Peak Analysis)
    数据分析的类型
      在统计学领域,有些人将数据分析划分为描述性统计分析、探索性数据分析以及验证性数据分析;其中,探索性数据分析侧重于在数据之中发现新的特征,而验证性数据分析则侧重于已有假设的证实或证伪。
    探索性数据分析:是指为了形成值得假设的检验而对数据进行分析的一种方法,是对传统统计学假设检验手段的补充。该方法由美国著名统计学家约翰·图基(John Tukey)命名。
    定性数据分析:又称为“定性资料分析”、“定性研究”或者“质性研究资料分析”,是指对诸如词语、照片、观察结果之类的非数值型数据(或者说资料)的分析。
    数据分析步骤
    数据分析有极广泛的应用范围。典型的数据分析可能包含以下三个步:
    1、探索性数据分析,当数据刚取得时,可能杂乱无章,看不出规律,通过作图、造表、用各种形式的方程拟合,计算某些特征量等手段探索规律性的可能形式,即往什么方向和用何种方式去寻找和揭示隐含在数据中的规律性。
    2、模型选定分析,在探索性分析的基础上提出一类或几类可能的模型,然后通过进一步的分析从中挑选一定的模型。
    3、推断分析,通常使用数理统计方法对所定模型或估计的可靠程度和精确程度作出推断。
    数据分析过程实施
      数据分析过程的主要活动由识别信息需求、收集数据、分析数据、评价并改进数据分析的有效性组成。
      一、识别信息需求
      识别信息需求是确保数据分析过程有效性的首要条件,可以为收集数据、分析数据提供清晰的目标。识别信息需求是管理者的职责管理者应根据决策和过程控制的需求,提出对信息的需求。就过程控制而言,管理者应识别需求要利用那些信息支持评审过程输入、过程输出、资源配置的合理性、过程活动的优化方案和过程异常变异的发现。
      二、收集数据
      有目的的收集数据,是确保数据分析过程有效的基础。组织需要对收集数据的内容、渠道、方法进行策划。策划时应考虑:
    ①将识别的需求转化为具体的要求,如评价供方时,需要收集的数据可能包括其过程能力、测量系统不确定度等相关数据;
    ②明确由谁在何时何处,通过何种渠道和方法收集数据;
    ③记录表应便于使用;
    ④采取有效措施,防止数据丢失和虚假数据对系统的干扰。
      三、分析数据
      分析数据是将收集的数据通过加工、整理和分析、使其转化为信息,通常用方法有:
    老七种工具,即排列图、因果图、分层法、调查表、散步图、直方图、控制图;
    新七种工具,即关联图、系统图、矩阵图、KJ法、计划评审技术、PDPC法、矩阵数据图;
      四、数据分析过程的改进
      数据分析是质量管理体系的基础。组织的管理者应在适当时,通过对以下问题的分析,评估其有效性:
    ①提供决策的信息是否充分、可信,是否存在因信息不足、失准、滞后而导致决策失误的问题;
    ②信息对持续改进质量管理体系、过程、产品所发挥的作用是否与期望值一致,是否在产品实现过程中有效运用数据分析;
    ③收集数据的目的是否明确,收集的数据是否真实和充分,信息渠道是否畅通;
    ④数据分析方法是否合理,是否将风险控制在可接受的范围;
    ⑤数据分析所需资源是否得到保障。

  • 【二】测试自动化

  •   自动化测试就是希望能够通过自动化测试工具或其他手段,按照测试工程师的预定计划进行自动的测试,目的是减轻手工测试的劳动量,从而达到提高软件质量的目的。自动化测试的目的在于发现老缺陷。而手工测试的目的在于发现新缺陷。
    点击阅读详细内容...
      测试自动化涉及到测试流程、测试体系、自动化编译、持续集成、自动发布测试系统以及自动化测试等方面整合。也就是说要让测试能够自动化,不仅是技术、工具的问题,更是一个公司和组织的文化问题。首先公司从资金、管理上支持您,其次要有专门的测试团队去建立适合自动化测试的测试流程、测试体系;其次就是把原代码从受控库中取出、编译、集成、发布可运行系统、进行自动化的单元测试和自动化的功能测试的过程。
    (一)、自动化测试的好处
    1、 对新版本执行回归测试--测试每个特征
    对于产品型的软件,每发布一个新的版本,其中大部分功能和界面都和上一个版本相似或完全相同,这部分功能特别适合于自动化测试, 从而可以让测试达到测试每个特征的目的。
    2、 更多更频繁的测试--沉闷、耗时
    我们的产品向市场的发布周期是3个月,也就是我们的开发周期只有短短的3个月,而在测试期间是每天/每2天都要发布一个版本供测试人员测试,一个系统的功能点有几千个上万个,人工测试是非常的耗时和繁琐,这样必然会使测试效率低下。
    3、替代手工测试的困难--300个用户有些非功能性方面的测试:压力测试、并发测试、大数据量测试、崩溃性测试,用人来测试是不可能达到的。 在没有引入自动化测试工具之前,为了测试并发,研发中心的一、两百号人在研发经理的口令:1-、2-、3!,大家同时按下同一个按钮。回想起这中情景也蛮有意思的。
    4、具有一致性和可重复性
    由于每次自动化测试运行的脚本是相同的, 所以每次执行的测试具有一致性, 人是很难做到的. 由于自动化测试的一致性,很容易发现被测软件的任何改变。
    5、更好的利用资源--周未/晚上
    理想的自动化测试能够按计划完全自动的运行, 在开发人员和测试人员不可能实行三班倒的情况下, 自动化测试可以胜任这个任务, 完全可以在周末和晚上执行测试. 这样充分的利用了公司的资源,也避免了开发和测试之间的等待.
    6、解决测试与开发之间的矛盾
    通常在开发的末期,进入集成测试阶段, 由于每发布一个版本的初期,测试系统的错误比较少,这时开发人员有等待测试人员测试出错误的时间. 事实上在叠代周期很短的开发模式中,存在更多的矛盾,但自动化测试可以解决其中的主要矛盾。
    7、增加软件信任度
    总之,自动化测试的好处和收益是很明显的,但也只有顺利事实了自动化测试才能从中获得它的益处。
    (二)自动化测试-- 误区、限制
    自动化化测试好处很多,但也有很多的局限,也正因为很多老板对自动化测试的期望太高,所以有很多执行自动化测试失败的例子。
    1、 期望自动化测试能取代手工测试
    不能期望自动化测试来取代手工测试, 测试主要还是要靠人工的。
    2、期望自动测试发现大量新缺陷
    同样不能期望自动化测试去发现更多新的缺陷, 事实证明新缺陷越多,自动化测试失败的几率就越大。发现更多的新缺陷应该是手工测试的主要目的。测试专家James Bach总结得 85%的缺陷靠手工发现,而自动化测试只能发现15%的缺陷。
    其实我认为自动化测试能够很好的发现老缺陷。
    3、工具本身不具有想象力
    工具毕竟是工具,出现一些需要思考、体验、界面美观方面的测试,自动化测试工具无能为力。
    4、技术问题、组织问题、脚本维护
    自动化测试的推行,有很多阻力,比如组织是否重视, 是否成立这样的测试团队,是否有这样的技术水平,对于测试脚本的维护工作量也挺大的,是否值得维护等等问题都必须考虑。
    (三)不适合自动化测试情况
    自动化测试不是适合所有的公司、所有的项目。
    1、定制型项目(一次性的)
    为客户定制的项目,维护期由客户方承担的,甚至采用的开发语言、运行环境也是客户特别要求的,即公司在这方面的测试积累就少,这样的项目不适合作自动化化测试。
    2、项目周期很短的项目
    项目周期很短,测试周期很短,就不值得花精力去投资自动化测试,好不容易建立起的测试脚本,不能得到重复的利用是不现实的。
    3、业务规则复杂的对象
    业务规则复杂的对象,有很多的逻辑关系、运算关系,工具就很难测试。
    4、美观、声音、易用性测试
    人的感观方面的:界面的美观、声音的体验、易用性的测试,也只有人来测试
    5、测试很少运行:一个月只运行一次
    测试很少运行,对自动化测试就是一种浪费。自动化测试就是让它不厌其烦的、反反复复的运行才有效率。
    6、软件不稳定
    软件不稳定,则会由于这些不稳定因素导致自动化测试失败。只有当软件达到相对的稳定,没有界面性严重错误和中断错误才能开始自动化测试。
    7、涉及物理交互
    工具很难完成与物理设备的交互,比如刷卡的测试等。
    四、什么样的情况适合自动化测试自动化测试之所以能在很多大公司实施起来,就是有它适合自动化测试的特点和高的投资回报率。
    1、产品型项目
    产品型的项目,每个项目只改进少量的功能,但每个项目必须反反复复的测试那些没有改动过的功能。这部分测试完全可以让自动化测试来承担, 同时可以把新加入的功能的测试也慢慢地加入到自动化测试当中。
    2、增量式开发、持续集成项目
    由于这种开发模式是频繁的发布新版本进行测试,也就需要自动化测试来频繁的测试,以便把人从中解脱出来测试新的功能。
    3、能够自动编译、自动发布的系统
    要能够完全实现自动化测试,必须能够具有自动化编译,自动化发布系统进行测试的功能。 当然,不能达到这个要求也可以在手工干预下进行自动化测试。
    4、回归测试
    回归测试试自动化测试的强项,它能够很好的确保你是否引入了新的缺陷,老的缺陷是否修改过来了。在某种程度上可以把自动化测试工具叫做回归测试工具。
    5、多次重复、机械性动作
    自动化测试最喜欢测试:多次重复、机械性动作,这样的测试对它来说从不会失败。比如要向系统输入大量的相似数据来测试压力和报表。
    6、需要频繁运行测试
    在一个项目中需要频繁的运行测试,测试周期按天算,就能最大限度的利用测试脚本,提高工作效率。
    7、将烦琐的任务转化为自动化测试
    五、自动化编译
    1、实现自动化日构建需要做以下几部分的工作:
    2、将所有的源代码保存在单一的开发服务器,让所有人都能从这里获取最新的源代码(需要用配置管理工具存放源代码: 如VSS/CVS/ClearCase)。
    3、使创建过程完全自动化,让任何人都可以只输入一条命令就完成系统的创建。
    4、使测试完全自动化,让任何人都可以只输入一条命令就运行一套完整的系统测试。
    5、确保所有人都可以得到最新、最好的可执行文件。
    6、自动化编译: 为了能够提供自动化测试,所以所有的代码必须能够实现自动化编译。其实很多在做持续集成的公司都实现了改功能:如java程序可以采用在Ant + Junit 的基础之上添加自己的功能既可以实现持续集成―――我们把这个工具叫:日构建
    但很多公司并没有实现对JSP的自动编译,对于采用jsp编写的web页面,它是编译执行语言,由于第一次执行要先编译,即第一次的速度稍慢,如果要采用自动化测试工具winrunner进行功能测试时,则会失败。因为自动化测试工具最基本的要求是:进入条件和出口条件必须在录制与回放时完全相同。
    (一)、为什么需要一个流程?很多公司投入了大量的测试经费,然而还是没有收到预期的收益。这可能是因为:缺乏足够的测试计划、缺乏测试的优先次序、工作的重复、没有利用工具来配合人工测试、没有利用测试自动化工具、测试自动化运用不够或者运用的不恰当等等。所以需要有测试套件的实施流程。
    (二)、 为什么需要工具?
    工具能够加快测试的进度,可以把控制和管理引入整个测试过程,比如MI公司的TestDirector就是一个很好使用的测试管理系统,而且是web版的。测试管理系统有很多的作用:
    测试管理和报告:测试管理系统能够保证系统开发和测试流程你不的问题尽快得到解决。审核跟踪的凭据:TestDirector存贮了所有的测试结果,全部修改被写进一个审核跟踪器里,如:时间、日期、修改人、错误授权,能够很清晰的看到把错误当皮球踢不负责人的整个过程。
    提高测试覆盖率:通过自动化测试工具的数据驱动来测试功能,可以提高测试覆盖率。
    (三)、测试套件--测试体系的主要目标(5W3H)
    测试体系的建立是为了确保软件测试的全部活动按计划、按标准的进行,是测试人员的行动纲领和职责指导。也就是有这样的一个体系、流程来指导他们的工作,培养了他们的主人翁责任感。让测试工作开展得有条不紊。
    主要的内容有:测试流程,测试方针、测试规程、文档模版、质量标准、测试工具、测试技术和方法等内容。
    测试体系的主要目标(5W3H):目的是告诉与测试活动相关的人员在什么样的时间,什么样的地点,由谁来做,做什么样的事情,为什么做,如何做,怎么样才算完成,缺陷任何分析和预防等。可以简称:5W3H.
    1、为什么要测试系统(Why) ?
    测试新功能:每发布一个新的版本,首先要去测试它的新功能。创建回归测试的测试套件验证缺陷修改:在这个测试周期中要验证上个测试周期的缺陷修改情况。验证系统性能检测新硬件
    2、如何测试系统(How)? 系统测试:检查系统总体功能
    压力测试:在反复相同的操作下、或其他压力条件下,比如:低内存空间/低磁盘空间等,检测软件的反应。
    安装测试:检验系统安装得是否正确,而且与已安装的软件不发生冲突。
    安全测试:测试系统存取权限和授权的级别
    边界测试:利用数据边界和系统边界检验程序
    3、什么时候进行测试(When)? 在开发流程的哪个阶段开始测试?
    在需求规格说明书一出来,或项目管理计划一出来,测试人员就开始有事做:写测试计划、编写测试用例、执行测试、测试报告和缺陷分析。很多老板以为要编码结束后才开始测试工作,所以不肯有专职的测试人员,怕他们在项目前期没有事做。
    前提条件和附属条件是什么?
    多长时间需要进行一次测试?
    交货的时间表是什么?
    什么时候停止测试? 什么时候停止测试是很有学问的,很多公司多半是在没有时间、没有资金是,老板或项目经理说了停止就停止。事实上根据bug预测、bug发现率与错误修正率的时间曲线来决定的。只有当这个曲线达到水平线后方才可以停止。4、谁来实施测试(Who) ?硬件:具备什么样的服务器、客户端及其网络环境。
    软件:安装什么样的软件环境最适合作这些测试。
    体系架构:测试的类别有很多,不同的人进行不同的测试,比如开发人员做单元测试,测试人员作功能测试、集成测试、非功能性测试,而让市场、需求人员、客户去做验收测试数据:需要什么样的测试数据来实施这一次的测试,这些测试数据的设计。
    人力资源:按测试计划的要求安排相关的人力资源。5、在哪里进行测试(Where) ?在开发服务器上测试?
    开发人员可能会叫你在测试服务器上测试,事实上这样对测试效率和测试人员的情绪影响是很大的,因为开发服务器是一个极不稳定的环境。而且也没明显的测试阶段。
    建立一个测试实验室 ?
    对于有很多项目的公司,建立一个测试实验室是很必要的,主要用来做环境的兼容性测试,压力、性能测试,验收测试等等。
    为了减轻测试者本地机器的负荷,使之在进行测试的同时可以做其他测试,
    远程定时执行测试的机制。6、测试什么(What) ?自动测试中应用程序的主要特点是什么?
    按重要性将这些特点排序?
    自动测试各部分的相对重要性?
    总体质量目标是什么(可用性,功能,可靠性,性能等等)?
    7、怎么样才算完成(How)?
    要定义测试的完成条件和完成标准, 以便达到这些条件和标准后应该立即停止测试,否则在经济和时间上是不允许的,因为测试可以永远下去.
    8、缺陷如何分析和预防(How)?
    测试过后应该对测试出的错误类别,错误特点作分析和提出预防措施,以便在将来的项目中有意识的去避免,这就是CMM5中说的缺陷预防.
    六、自动化测试工具(WinRunner)
    另外在此简单的介绍一下自动化测试工具的原理。
    1、 Winrunner基本原理--录制/回放功能
    ――录制
    录制前的Add-in选择:它对不同的语言开发了不同的Add-in
    录制前的参数设置
    录制方式选择:
    Context Sensitive
    Analog
    录制技巧
    保存录制脚本和GUI
    ――调试
    修改录制好的脚本。
    添加同步点和等待时间。
    添加检查点checkpiont。
    修改GUI-MAP,提高可读性、可维护性 。
    回放的前提条件。
    执行测试方式:
    验证方式:核对应用程序是否正确。
    调试方式:增加新特征和功能
    更新方式:用新版本应用程序中得到的运行结果更新期望结果。
    分析结果。
    2、 参数化数据驱动测试
    特点:用相同测试脚本执行不同测试优点:提高测试覆盖率
    步骤:
    1).转换你的测试为数据驱动测试:datadriver
    2).在数据表中增加数据
    3).校正脚本使用正确的表达式
    4).自定义结果信息 (tl_step)
    3、 运用WinRunner的风险
    产品性的软件,会有很多自己开发的组件、控件或引入新的技术如xml,htc等,这有可能使得自动化测试工具不认识,导致整个自动化测试失败,已往积累的测试脚本将全部废弃。
    总之,由于商业社会对软件的质量要求越来越高,软件开发过程的持续改进,软件项目的持续集成与测试自动化的发展是必然的,其作用也将越来越明显。不同的技术和开发环境对测试如何自动化有不同的要求,还有很多值得研究的地方。
二四天天正版免费资枓大