海是我向往的地方,吸纳和咆哮是他的魅力!!!

发布新日志

  • loadrunner学习系列——简介

    ooclp 发布于 2007-09-04 14:51:33

       LoadRunner 对应用程序进行压力测试,以隔离并标识潜在的客户端、网络和服务器瓶颈。
       通过 LoadRunner,可以在可控制的峰值负载条件下测试系统。要生成负载,LoadRunner 需要运行分布在网络中的数千个虚拟用户 (Vuser)。通过使用最少的硬件资源,这些 Vuser 提供一致的、可重复并可度量的负载,像实际用户一样使用您的应用程序。LoadRunner 深入的报告和图可以提供评估应用程序性能所需的信息。

       LoadRunner 技术
       使用 Mercury LoadRunner,可以创建场景,并在其中定义性能测试会话期间发生的事件。在场景中, LoadRunner 会在物理计算机上用虚拟用户(即 Vuser)代替真实用户。这些 Vuser 通过以可重复、可预测的方式模拟典型用户的操作,在系统上创建负载。假设您正在测试一个基于 Web 的旅行代理应用程序(用户可以通过它在线预订航班),并要确定多个用户同时执行相同的事务时,该应用程序将如何处理。使用 LoadRunner代替旅行代理,您可以创建具有 1000 个 Vuser 的场景,并且这些 Vuser 可以同时尝试在应用程序中预订航班。

       测试过程
    LoadRunner 测试过程由以下四个基本步骤组成:
    ➤ 步骤 1 — 创建脚本:捕获在您的应用程序中执行的典型最终用户业务流程。
    ➤ 步骤 2 — 设计场景:通过定义测试会话期间发生的事件,设置负载测试环境。
    ➤ 步骤 3 — 运行场景:运行、管理并监控负载测试。
    ➤ 步骤 4 — 分析结果:分析负载测试期间 LoadRunner 生成的性能数据。

       LoadRunner 组件
    测试过程的每个步骤均由一个 Mercury LoadRunner 组件执行。这些组件如下:
    ➤ Mercury 虚拟用户生成器 (VuGen) — 创建脚本
    VuGen 通过录制应用程序中典型最终用户执行的操作来生成虚拟用户 (Vuser)。VuGen 将
    这些操作录制到自动虚拟用户脚本中,以便作为负载测试的基础。
    ➤ Mercury LoadRunner Controller — 设计和运行场景
    Controller 是用来创建、管理和监控负载测试的中央控制台。使用 Controller 可以运行用
    来模拟真实用户执行的操作的脚本,并可以通过让多个 Vuser (虚拟用户)同时执行这些
    操作来在系统中创建负载。
    ➤ Mercury Analysis — 分析场景
    Mercury Analysis 提供包含深入的性能分析信息的图和报告。使用这些图和报告,可以标
    识和确定应用程序中的瓶颈,并确定需要对系统进行哪些更改来提高系统性能。

     

  • loadrunner学习系列——Vuser脚本

    ooclp 发布于 2007-09-04 15:00:48

       LoadRunner 可模拟一个数千用户同时使用客户端/ 服务器系统的环境。为执行此操作,LoadRunner 用“虚拟用户 (Vuser)”代替实际用户。Vuser 执行的操作是用 Vuser 脚本描述的。LoadRunner 提供各种帮助您开发 Vuser 脚本的工具。

       介绍Vuser
       LoadRunner 用虚拟用户或 Vuser 代替实际用户。Vuser 通过执行典型业务流程模拟实际用户的操作。对于 Vuser 执行的每个操作, LoadRunner 向服务器或类似的企业系统提交输入信息。增加 Vuser 的数量可以增大系统上的负载。一台工作站只能容纳一个实际用户,而多个 Vuser 可以同时运行在同一台工作站上。要模拟较重用户负载的情形,请创建大量执行一系列任务的 Vuser。例如,可以观察一百个 Vuser 同时从银行的 ATM 提取现金时服务器的行为。通过使用 LoadRunner,可以将您的客户端/ 服务器性能测试需求划分为多个方案。方案定义每个测试会话中发生的事件。这样,例如,方案会定义并控制要模拟的用户的数量和他们执行的操作,以及运行模拟操作所用的计算机。LoadRunner 拥有各种 Vuser 类型,每一类型都适合于特定的负载测试环境。这样就能够使用 Vuser 精确模拟真实世界的情形。Vuser 在方案中执行的操作是用Vuser 脚本描述的。Vuser 脚本中包括在方案中度量并录制服务器性能的函数。每个 Vuser 类型都需要特定类型的 Vuser 脚本。创建方案所需的 Vuser 脚本是LoadRunner 测试过程的一部分。

       查看Vuser类型
       LoadRunner 提供了多种 Vuser 技术,通过这些技术可以在使用不同类型的客户端/ 服务器体系结构时生成服务器负载。每种 Vuser 技术都适合于特定体系结构并产生特定的 Vuser 类型。例如,可以使用 Web Vuser 模拟用户操作 Web 浏览器、使用 Tuxedo Vuser 模拟 Tuxedo 客户端与 Tuxedo 应用程序服务器之间的通信、使用 RTE Vuser 操作终端仿真器。各种 Vuser 技术既可单独使用,又可一起使用,以创建有效的负载测试方案。
       Vuser 类型分为下列几种:
    ➤ 应用程序部署解决方案:Citrix ICA
    ➤ 客户端/ 服务器: DB2 CLI、DNS、Informix、MS SQL Server、ODBC、Oracle(2 层)、Sybase Ctlib、Sybase Dblib 和 Windows Sockets 协议。
    ➤ 自定义:C 模板、Visual Basic 模板、Java 模板、Javascrīpt 和 VBscrīpt 类型的脚本。
    ➤ 分布式组件:适用于 COM/DCOM、Corba-Java 和 Rmi-Java 协议。
    ➤ 电子商务:FTP、LDAP、Palm、PeopleSoft 8 mulit-lingual、SOAP、Web(HTTP/HTML) 和双 Web/WinSocket 协议。
    ➤ Enterprise Java Bean:EJB 测试和 Rmi-Java 协议。
    ➤ ERP/CRM:Baan、Oracle NCA、Peoplesoft-Tuxedo、SAP-Web、SAPGUI、Siebel-DB2 CLI、Siebel-MSSQL、Siebel-Web 和 Siebel-Oracle 协议。
    ➤ 传统:终端仿真 (RTE)。
    ➤ 邮件服务:Internet 邮件访问协议 (IMAP)、MS Exchange (MAPI)、POP3 和SMTP。
    ➤ 中间件:Jacada 和 Tuxedo (6、7)协议。
    ➤ 流数据:Media Player (MMS) 和 Real 协议。
    ➤ 无线:i-Mode、VoiceXML 和 WAP 协议。

  • loadrunner学习系列——VuGen

    ooclp 发布于 2007-09-04 15:23:01

       Vuser 脚本生成器(也称为 VuGen)是 LoadRunner 用于开发 Vuser 脚本的主要工具。VuGen 不仅能够录制 Vuser 脚本,还可以运行这些脚本。进行调试时,从 VuGen运行脚本很有用。通过运行脚本,可以模拟 Vuser 脚本在作为负载测试方案的一部分执行时,将如何运行。

       录制 Vuser 脚本时, VuGen 会生成各种函数,来定义您在录制会话过程中执行的操作。VuGen 将这些函数插入到 VuGen 编辑器中,以创建基础 Vuser 脚本。


       使用VuGen录制Vuser脚本
       使用 VuGen,可通过录制用户在客户端应用程序中执行的典型业务流程来开发Vuser 脚本。VuGen 通过录制客户端和服务器之间的活动来创建脚本。例如,在数据库应用程序中, VuGen 会监控数据库的客户端,并跟踪发送到数据库服务器和从数据库服务器接收的所有请求。
       不需要通过编写应用程序对服务器的 API 函数调用来手动创建 Vuser 脚本,而可以使用 VuGen 完成以下任务:
    ➤ 监控应用程序和服务器之间的通信
    ➤ 生成需要的函数调用
    ➤ 将生成的函数调用插入到 Vuser 脚本中

       用 VuGen 创建的每个 Vuser 脚本都可以通过执行对服务器 API 的调用来直接与服务器通信,而不需要依赖客户端软件。这样,便可以使用 Vuser 来检查服务器性能(甚至在客户端软件的用户界面完全开发好之前)。
       此外,当 Vuser 与服务器直接通信时,不需要在用户界面中耗费系统资源。这样就可以在一个工作站中同时运行大量 Vuser,进而可以使用很少的测试计算机来模拟非常大的服务器负载。

  • LoadRunner学习系列——Q&A

    ooclp 发布于 2007-09-05 16:05:01

        今天在一本电子书里面找到了困扰我的问题的答案,非常开心,特拿出来与分享!!

        Q:安装问题:在安装LoadRunner最后快完成的时候,系统报错“应用程序正常初始化(0xc0000005)失败”。我想反正是用着玩,出错的时候再说。目前还没发现有什么问题。

        A:原来LR是个比较底层的软件,OS最好为Windows 2000,因为W2k的稳定性和兼容性都不错,需要的内存也低,有人把LR装在WinXp下面,是有问题的。在win2003,winXP下安装LR后会出现如此情况。

        Q:协议的选择或者VUSER 类型的选取:在我前面的文章中也有提到VUSER的类型,实践后才发现类型的选取并不是想象中的那么简单,看了两天的使用手册,除了会用web/html,其它的就没录出来东西,,真是郁闷啊。终于有答案了。

        A:B/S系统:选择Web(Http/Html), C/S系统:根据C/S结构所用到的后台数据库来选择不同的协议,如果后台数据库是Sybase,则采用sybaseCTlib协议,如果是Sql server,则使用MS Sql server的协议,至于oracle 数据库系统,当然就使用oracle 2-tier协议。 对于没有数据库的c/s(ftp, SMTP)这些可以选择windows sockets协议。 至于其他的ERP,EJB(需要ejbdetector.jar),选择相应的协议即可.

       Q:LR的基本原理:前段时间学习了WR,虽然也是学了个大概,但还知道WR也能录制脚本,为什么LR不用WR录制的脚本直接进行性能分析呢?MI出了WR,为啥还在LR中使用相同的功能呢?不是多此一举吗?

       A:LR启动以后,在任务栏会有一个Agent进程,通过Agent进程,监视各种协议的Client与Server端的通讯,用LR的一套C语言函数来录制脚本,所以只要LR支持的协议,就不会存在录制不到的,这是它与Load test,WR,Robot(Gui)录制脚本的很大一个区别。(WR必须识别对象,才能录制到)。然后LR调用这些脚本向服务器端发出请求,接受服务器的响应。至于服务器内部如何处理,它不关心。

       Q:LR录制脚本的原则:什么样的脚本才是优秀的脚本呢,肯定有一个原则吧!!!

       A:

    1. 脚本越小越好。就像写code一样的,不要太长,尽量做到一个功能(Transaction)一个脚本。如果那些功能是连续有序的,必须先做上一个,才能工作下一个,那就只好放在一起了。
    2. 选择使用频率最高的。有些人喜欢在LR中测试几乎所有的功能,其实这样不合适,我们把最常用的、使用频率最高的、拿出来测试。但是也要结合用户实际使用情况,一般在一个系统中是多个用户使用多个功能,某些功能使用的频率更大一些,我们在录制脚本之前就要设计好,哪个脚本会跑几个用户,一共需要多少个脚本,能满足性能测试的需求。
    3. 选择你所需要的进行录制。对于WEB的程序,对于你所关注的内容没什么影响的操作,你可以不录制,可以使用暂停,这需要试的, 对被测功能有一个清楚的认识和了解,要能把握住哪些地方是对整个过程没有影响的,比如一些查询,通常,选择条件的页面都可以不录制,但对于一些页面有可能要传递参数,就需要录制了, 如何确定哪些点可以不录制,一是可以找开发人员了解清楚程序设计的结构,再就是靠自己的经验,作的多了,就心中有数了。

         恩,今天的收获可真不小啊!!!

  • WinRunner工作流程

    ooclp 发布于 2007-09-07 14:29:47

       WinRunner的工作流程大致可以分为以下六个步骤:

      1.识别应用程序的GUI

      在WinRunner中,我们可以使用GUI Spy来识别各种GUI对象,识别后,WinRunner会将其存储到GUI Map File中。它提供两种GUI Map File模式: Global GUI Map File和GUI Map File per Test。其最大区别是后者对每个测试脚本产生一个GUI文件,它能自动建立、存储、加载,推荐初学者选用这种模式。但是,这种模式不易于描述对象的改变,其效率比较低,因此对于一个有经验的测试人员来说前者不失为一种更好的选择,它只产生一个共享的GUI文件,这使得测试脚本更容易维护,且效率更高。

      2.建立测试脚本

      在建立测试脚本时,一般先进行录制,然后在录制形成的脚本中手工加入需要的TSL(与C语言类似的测试脚本语言)。录制脚本有两种模式: Context Sensitive和Analog,选择依据主要在于是否对鼠标轨迹进行模拟,在需要回放时一般选用Analog。在录制过程中这两种模式可以通过F2键相互切换。

      只要看看现代软件的规模和功能点数就可以明白,功能测试早已跨越了单靠手工敲敲键盘、点点鼠标就可以完成的阶段。而性能测试则是控制系统性能的有效手段,在软件的能力验证、能力规划、性能调优、缺陷修复等方面都发挥着重要作用。

      3.对测试脚本除错(debug)

      在WinRunner中有专门一个Debug Toolbar用于测试脚本除错。可以使用step、pause、breakpoint等来控制和跟踪测试脚本和查看各种变量值。

      4.在新版应用程序执行测试脚本

      当应用程序有新版本发布时,我们会对应用程序的各种功能包括新增功能进行测试,这时当然不可能再来重新录制和编写所有的测试脚本。我们可以使用已有的脚本,批量运行这些测试脚本测试旧的功能点是否正常工作。可以使用一个call命令来加载各测试脚本。还可在call命令中加各种TSL脚本来增加批量能力。

      5.分析测试结果

      分析测试结果在整个测试过程中最重要,通过分析可以发现应用程序的各种功能性缺陷。当运行完某个测试脚本后,会产生一个测试报告,从这个测试报告中我们能发现应用程序的功能性缺陷,能看到实际结果和期望结果之间的差异,以及在测试过程中产生的各类对话框等。

      6.回报缺陷(defect)

      在分析完测试报告后,按照测试流程要回报应用程序的各种缺陷,然后将这些缺陷发给指定人,以便进行修改和维护。
  • TD准备——Windows xp下IIS的配置

    ooclp 发布于 2007-09-11 14:59:48

        TD的安装环境要求是有IIS (Internet信息服务)。我先在网上下了的一个安装包,5.1版本的。

        开始啦……

        一、首先您需要判断自己的操作系统是否安装IIS,方法如下图所示:

    μ??÷′ò?aD?′°?ú


    (右击“我的电脑”后单击“管理”)
    μ??÷′ò?aD?′°?ú



    (然后单击“服务和应用程序”)

    μ??÷′ò?aD?′°?ú


    (检查是否安装“Internet信息服务”)

      如果系统已安装“Internet信息服务”,则可跳过第二步的安装过程。直接参考第三步的调试过程。

    第二步:安装IIS,步骤如下:

    μ??÷′ò?aD?′°?ú


    (插入Windows xp光盘,单击“安装可选的windows组件”)

    μ??÷′ò?aD?′°?ú


    (选中“Internet信息服务(IIS)”后单击“下一步”完成安装)

    三、最后调试好IIS运行环境,步骤如下:


    首先请操作第一大点提到的相关步骤后再进行下面的操作;

    μ??÷′ò?aD?′°?ú


    (单击“浏览”,检查是否能运行asp程序)

    μ??÷′ò?aD?′°?ú


    (如果右侧窗口能正常显示网页侧表明安装成功)

    四、IIS的设置

    μ??÷′ò?aD?′°?ú


    μ??÷′ò?aD?′°?ú


    (设置主目录,即你需要调试的asp程序所在的目录)

    μ??÷′ò?aD?′°?ú

     

    呵呵,这样就算安装成功了吧,开始体验TD了……

  • 测试术语(中英文对照)

    ooclp 发布于 2007-08-24 10:02:21

    Acceptance testing                            验收测试
    Accessibility test                            软体适用性测试
    Ad hoc testing                                随机测试
    Algorithm analysis                            算法分析
    Alpha testing                                 α测试
    Anomaly                                       异常
    Artifact                                      工件
    Automated Testing                             自动化测试
    Architecture                                  构架
    Assertion checking                            断言检查
    Audit                                         审计
    Application under test (AUT)                  所测试的应用程序

    Baseline                                       基线
    Behaviour                                      行为
    Benchmark                                      基准
    Beta testing                                   β测试
    Best practise                                  最佳实践
    Black box testing                              黑盒测试
    Blocking bug                                   阻碍性错误
    Bottom-up testing                              自底向上测试
    Branch coverage                                分支覆盖
    Brute force testing                            强力测试
    Bug                                            错误
    Bug report                                     错误报告
    Bug tracking system                            错误跟踪系统
    Build                                          工作版本(内部小版本)
    Boundary values                                边界值
    Buddy test                                     合伙测试
    Buffer                                         缓冲
    Bug bash                                       错误大扫除
    Build-in                                       内置
    Build Verfication tests(BVTs)                  版本验证测试

    Cause-effect graph                             因果图 
    Capture/Replay Tool                            捕获/回放工具
    Character Set                                  字符集
    Capability Maturity Model (CMM)                能力成熟度模型
    Capability Maturity Model Integration (CMMI)   能力成熟度模型整合
    Closeout                                       收尾
    Code coverage                                  代码覆盖
    Code page                                      代码页
    Code rule                                      编码规范
    Code sytle                                     编码风格
    Common sense                                   常识
    Compatibility Testing                          兼容性测试
    Component testing                              组件测试
    Condition coverage                             条件覆盖
    Configuration testing                          配置测试
    Control flow graph                             控制流程图
    Concurrency user                               并发用户
    Configuration item                             配置项
    Core team                                      核心小组
    Customer-focused mindset                       客户为中心的理念体系
    Crash                                          崩溃
    Criticality analysis                           致命度分析
    Cyclomatic complexity                          圈复杂度

    Data Flow Analysis                             数据流分析
    Decision coverage                              判定覆盖
    Debug                                          调试
    Defect                                         缺陷
    defect density                                 缺陷密度
    Deployment                                     部署
    Desk checking                                  桌前检查
    Dynamic analysis                               动态分析

    Entry criteria                                 准入条件
    Equivalence class                              等价类
    Equivalence partition testing                  等价划分测试
    Error                                          错误
    Error guessing                                 错误猜测
    Error seeding                                  错误播种
    Exception                                      异常/例外
    Exception handlers                             异常处理器
    Exhaustive testing                             穷尽测试
    Exploratory testing                            探索性测试
    Event-driven                                   事件驱动
    Envisioning Phase                              构想阶段

    Failure                                        失效
    Fault                                          故障
    Field testing                                  现场测试
    Framework                                      框架
    Functional testing                             功能测试

    Hard-coding                                    硬编码
    Hotfix                                         热补丁

    G11N(Globalization)                            全球化
    Gap analysis                                   差距分析
    Garbage characters                             乱码字符
    Glossary                                       术语表
    Glass-box testing                              白箱测试或白盒测试
    GUI(Graphical User Interface)                  图形用户界面

    I18N(Internationalization)                     国际化
    Incremental testing                            渐增测试
    Installing testing                             安装测试
    Integration testing                            集成测试
    Interface                                      接口
    Inspection                                     审查
    Issue                                          问题
    Iteration                                      迭代
    Iterative development                          迭代开发

    Key concepts                                   关键概念
    Key Process Area                               关键过程区域
    Keyword driven testing                         关键字驱动测试
    Kick-off meeting                               启动会议

    Lag time                                       延迟时间
    Lead time                                      前置时间
    L10N(Localization)                             本地化
    Localizability testing                         本地化能力测试
    Localization testing                           本地化测试
    Load testing                                   负载测试

    Maintenance                                     维护
    Maintainability                                 可维护性
    Master project schedule                         总体项目方案
    Measurement                                     度量
    Memory leak                                     内存泄漏
    Migration testing                               迁移测试
    Milestone                                       里程碑
    Mock up                                         模型,原型
    Monkey testing                                  跳跃式测试
    Module testing                                  模块测试

    Negative Testing                                逆向测试, 反向测试, 负面测试
    N/A(Not applicable)                             不适用的

    Off-the-shelf software                          套装软件

    Pair Programming                                成对编程
    Path coverage                                   路径覆盖
    Peer review                                     同行评审
    Performance                                      性能
    Performance indicator                          性能(绩效)指标
    Performance testing                             性能测试
    Pilot                                            试验
    Pilot testing                                   引导测试
    Portability                                     可移植性
    Positive testing                                正向测试
    Postcondition                                   后置条件
    Pseudo code                                     伪代码
    Precondition                                    前提条件
    Priority                                        优先权
    Prototype                                       原型

    Quality assurance(QA)                          质量保证
    Quality Control(QC)                            质量控制

    Recovery testing                               恢复测试
    Refactoring                                      重构
    Regression testing                             回归测试
    Release                                          发布
    Release note                                   版本说明
    Reliability                                     可靠性
    Return of Investment(ROI)                    投资回报率
    Review                                          评审
    Requirements-based testing                    基于需求的测试
    Requirements management tool                  需求管理工具
    Risk assessment                               风险评估
    Root Cause Analysis(RCA)                      根本原因分析
    Robustness                                      强健性

    Sanity testing                   健全测试
    Screen shot                    抓屏、截图
    Severity                       严重性
    Security testing                 安全性测试
    Shipment                                           发布
    Smoke testing                  冒烟测试
    Software life cycle               软件生命周期
    Software development plan(SDP)      软件开发计划
    Static testing                   静态测试
    Simulation                                          模拟
    Simulator                                           模拟器
    SLA(Service level agreement)            服务级别协议
    Software development process          软件开发过程
    Source code                                      源代码
    Specification                                      规格说明书
    Spiral model                   螺旋模型
    Statement coverage              语句覆盖
    Stepwise refinement                            逐步优化
    Stress Testing                                     压力测试
    Structural coverage               结构化覆盖
    Stub                                                   桩
    Synchronization                                  同步
    Syntax testing                                     语法分析
    System analysis                                  系统分析
    System design                                    系统设计
    System integration                              系统集成
    System Testing                                   系统测试

    Test                         测试
    Testing bed                                       测试平台
    Test case                     测试用例
    Testing coverage                测试覆盖
    Test design                                        测试设计
    Test driver                                         测试驱动
    Testing environment              测试环境
    Test infrastructure                               测试基础建设
    Testing item                    测试项
    Testing plan                    测试计划
    Testing procedure               测试过程
    Test scenario                                     测试场景
    Test scrīpt                                         测试脚本
    Test strategy                                     测试策略
    Test suite                                          测试包
    Test target                                         测试目标
    Testability                                         可测试性
    Testware                                           测试工具
    Top-down testing                              自顶向下测试
    Thread testing                                   线程测试
    Traceability                                       可跟踪性
    Traceability matrix                             跟踪矩阵
    Trade-off                                          平衡

    Unit testing                    单元测试
    User interface(UI)                            用户界面
    Usability testing                                 可用性测试
    Usage scenario                                  使用场景
    User acceptance Test                        用户验收测试
    User profile                                       用户信息
    User scenario                                    用户场景

    Version                                              版本
    Virtual user                                        虚拟用户
    Volume testing                  容量测试
    V&V (Verification & Validation)        验证&确认

    Walkthrough                                     走读
    Waterfall model                瀑布模型
    White box testing               白盒测试
    Work breakdown structure (WBS)   任务分解结构
    Web testing                                       网站测试

    Zero bug bounce (ZBB)               零错误反弹

  • 基于嵌入式Linux的智能手机系统设计

    ooclp 发布于 2007-08-25 19:17:14

    随着手持通信设备市场的快速发展,手机的功能逐渐增多。现在手机已经不只是用于语音通信的手持设备,而成为集成了短信、彩信、上网以及移动办公等附加功能的嵌入式通信平台。集成了这些功能的手机被称为智能手机。近年,嵌入式处理器的运行速度和功能都有了很大的提高,使得许多以前只能在PC上实现的应用,现在都可以在手持设备上实现。目前,市面上的智能手机主要采用Microsoft公司的ocket PC、Palm OS等商用操作系统,但这些操作系统开放的程序不够高,限制了许多第三方应用软件的移植。为使智能手机能够为第三方应用软件提供一个更为开放的嵌入式平台,笔者对智能手机系统做了比较深入的研究,提出一种以Linux作为嵌入式操作系统、Motorola的MX1作为微处理器、以Wavecom的Q2403A作为射频模块的智能手机系统的设计与实现。

    1 智能手机系统的硬件设计

    智能手机系统的硬件设计如图1所示。该设计采用Motorol公司的MX1(MC9328)高性能的32位微处理器、Wavecom公司的Q2403A无线收发模块等实现智能手机的GSM通话、GPRS上网及其它PDA应用等功能。

    1.1 微处理器

    系统采用的MC9328 MX1微处理器是最新推出的Motorola DragonBall系列微处理器。它采用先进节电的ARM920T核心,速度最高可达200MHz。集成了LCD控制器、SRAM、USB接口、一个A/D转换器(支持触摸屏控制)、一个MMC/SD主机端控制器。256-pin的MPPBGA封装。

    1.2 无线收发模块

    系统采用WAVECOM公司的专用无线收发模块。它是双频GSM模块(EGSM900/1800MHz),其设计及开发符合ETSI GSM Phase 2+标准。具有话音、GSM电路数据/传真、GPRS分组数据、短消息等功能。该模块支持AT指令集,通过RS232与MX1通信。

    1.3 其它外围设备

    智能手机的其它外围设备还有LCD、Touch panel、Audio CODEC等。

    2 智能手机系统的软件设计

    系统分析和软件设计是智能手机系统实现的难点之一,设计的优劣关系到系统的稳定性、扩展性等。因为要兼顾到GSM语音控制与其它智能手机应用之间的互相切换及关联关系,智能手机软件系统的设计就变得相对复杂。系统设计将软件分为三层结构,如图2所示。最下面一层为操作系统层,主要实现对Linux操作系统的移植,其中包括Bootloader引导程序、LCD等设备的驱动程序。中间层为服务程序层,该层主要包括GUI服务器以及GSM/GPRS控制服务器。智能手机系统设计的关键在于各项功能应用的实现。对智能手机软件进行分层设计,有利于各个功能有机地协调运转,同时也便于软件的开发与调试。

    2.1 嵌入式Linux操作系统

    Linux最初是由Linux Torvalds编写及发布的源代码公开、可免费使用的操作系统。后来,又通过Internet上成百上千的程序员的加入,使Linux成为一个几乎支持所有主流32位CPU的操作系统。其特点主要有:内核高效稳定、公开源代码、可移植性、可裁减、支持多任务等。
    本设计中采用的Linux内核是ARM-Linux基础上,编写符合硬件设计的引导程序及电源管理控制程序;并针对本系统的硬件设计,编写了LCD、触摸屏等硬件设计驱动程序。

    智能手机基于Linux操作系统工作时,首先初始化CPU;然后加载各个设备驱动程序,初始化存储器及外围设备;最后启动各服务程序,进入待机状态。

  • Linux操作系统文件目录

    ooclp 发布于 2007-08-27 18:58:08

      /bin bin是Binary的缩写。这个目录存放着最经常使用的命令。
      /boot这里存放的是启动Linux时使用的一些核心文件,包括一些链接文件以及镜像文件。
      /dev dev是Device(设备)的缩写。该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
      /etc这个目录用来存放所有的系统管理所需要的配置文件和子目录。
      /home用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
      /lib这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
      /lost+found这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
      /mnt在这里面中有四个目录,系统提供这些目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/cdrom上,然后进入该目录就可以查看光驱里的内容
    了。
      /proc这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修
    改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
      echo 1 > /proc/sys/net/ipv4/icmp_echo_
      ignore_all。
      /root该目录为系统管理员,也称作超级权限者的用户主目录。
      /sbin s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
      /tmp这个目录是用来存放一些临时文件的。

      /usr/X11R6存放X-Windows的目录;
      /usr/games存放着XteamLinux自带的小游戏;
      /usr/bin存放着许多应用程序;
      /usr/sbin存放root超级用户使用的管理程序;
      /usr/doc Linux技术文档;
      /usr/include用来存放Linux下开发和编译应用程序所需要的头文件;
      /usr/lib存放一些常用的动态链接共享库和静态档案库;
      /usr/local这是提供给一般用户的/usr目录,在这里安装一般的应用软件;
      /usr/man帮助文档所在的目录;
      /usr/src Linux开放的源代码,就存在这个目录,爱好者们别放过哦;
      /var这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。如果你想做一个网站,你也会用到/var/www这个目录。

  • 关注Samba服务器——常见问题篇

    ooclp 发布于 2007-09-21 10:14:06

        我的Linux虚拟机运行老是出问题,经常要重起什么的,还得找人帮我解决,今天又遇到Samba服务器打不开的问题,看到同事三下两下的在命令行输入各种命令,一会就解决了,真是爽啊,狠下心自己也加强一下,其实早就应该了解了。

       先来认识一下Samba吧!!!

       1、mba(SMB是其缩写) 是一个网络服务器,用于Linux和Windows共享文件之用;Samba 即可以用于Windows和Linux之间的共享文件,也一样用于Linux和Linux之间的共享文件;不过对于Linux和Linux之间共享文件有更好的网络文件系统NFS,NFS也是需要架设服务器的。

       2、Samba 有两个服务器,一个是smb,另一个是nmb。smb 是Samba 的主要启动服务器,让其它机器能知道此机器共享了什么;而nmb是解析用的,解析了什么呢?就是把这台Linux机器所共享的工作组及在此工作组下的netbios name解析出来;

       3、重点当然是如果操作了哦。一般的情况下,在RPM包的系统,如果是用RPM包安装的Samba ,一般可以通过如下的方式来启动Samba服务器;

    [root@localhost ~]# /etc/init.d/smb start
    启动 SMB 服务: [ 确定 ]
    启动 NMB 服务: [ 确定 ]

    如果停止呢?就在smb后面加stop ;重启就是restart

    [root@localhost ~]# /etc/init.d/smb stop
    [root@localhost ~]# /etc/init.d/smb restart

    对于所有系统来说,通用的办法就是直接运行smb 和nmb;当然您要知道smb和nmb所在的目录才行;如果是自己编译的Samba ,您应该知道您把Samba放在哪里了;

    [root@localhost ~]# /usr/sbin/smbd
    [root@localhost ~]# /usr/sbin/nmbd

    查看服务器是否运行起来了,则用下面的命令;

    [root@localhost ~]# pgrep smbd
    [root@localhost ~]# pgrep nmbd

    关掉Samba服务器,也可以用下面的办法,大多是通用的;要root权限来执行;

    [root@localhost ~]# pkill smbd
    [root@localhost ~]# pkill nmbd

     

  • 一种实现视频捕捉的简单方法

    judejie82 发布于 2009-05-28 16:50:41

     摘 要  当前,随着视频监控、可视电话、电视会议等多媒体应用技术的迅速发展,对数字视频捕获技术的要求越来越高。实现视频捕获的方法有很多,本文主要介绍了微软公司VFW(Video for Windows)软件包中的AVICap窗口类的成员函数和一些关键宏,以及与编写视频捕捉程序紧密相关的几个结构体。最后,通过一个视频捕捉应用程序,展示了如何具体实现视频捕捉,以及要注意的相关问题。
        关键词 VFW;AVICap窗口类;视频捕捉;捕捉窗口;视频对话框
     
    0  引言
     
        随着数字视频监控、可视电话、电视会议等多媒体技术应用的迅速兴起,越来越多的场合需要对数字视频信号进行捕捉。通常来说,捕捉实时数字视频信号是一个比较复杂的过程,但是,微软公司开发的Video for Windows SDK软件包中AVICap窗口类提供了一条捷径,借助于该窗口类,能够很方便地将视频捕捉的各种功能组合到应用程序中去。

    1  AVICap窗口类简介

        ACICap支持实时的视频流捕捉和视频单帧捕捉。使用ACICap窗口类可创建具有一些基本功能的窗口,例如视频图像的预览、设置捕捉参数的对话框、音频、视频捕捉的独立控制等。ACICap中的回调函数可使应用程序向用户提供有关捕捉的状态,包括进行的过程指示,以及任何可能产生的错误。开发人员可以设置一个标志用来指示在什么时候采集到音频,什么时候采集到视频。这样,应用程序可以直接使用数据而无需写入AVI文件中。
        AVICap窗口类提供了以下功能:
        ◆  单独控制音频、视频的采集;
        ◆  采用overlay(实时叠加)或preview(预览)方式显示视频图像;
        ◆  与ICM和ACM同时工作,将音频和视频数据直接压缩到应用程序中;
        ◆  将音频、视频流直接压缩入AVI文件而不需要开发人员详细了解AVI文件格式的细节;
        ◆  动态了解视频和音频的输入设备;
        ◆  创建、保存和载入调色板;
        ◆  将图像调色板拷贝到剪切板上;
        ◆  控制MCI设备;
        ◆  捕捉单帧图像并以DIB格式保存。

    2  AVICap窗口类的主要函数、宏简介

        AVICap提供给开发人员一整套函数,用这些函数可以实现许多视频捕捉程序所需的窗口管理;同时,在整个捕捉过程中仍然保留全部的控制。这些函数形式简单,采用基于消息的接口来获取硬件里的音频和视频信号,同时控制着视频流采集到磁盘的过程。
        ACICap的函数能够使开发人员以很少的投入来创建具有基本捕捉功能的采集程序,这些函数是高级的、经过优化的、为开发人员创建具有自己特性的应用程序留有很大的灵活性。 
        下面是ACICap提供给开发人员编写捕捉程序的几个重要函数和宏。
        ◆ 创建捕捉窗口
    HWND VFWAPI capCreateCaptureWindow(
          LPCSTR lpszWindowName,// 捕捉窗口名字
          DWORD dwStyle,// 捕捉窗口的风格
          int x,// 窗口左上角x轴坐标
          int y,// 窗口左上角y轴坐标
          int nWidth,// 窗口的宽度
          int nHeight,// 窗口的高度
          HWND HWnd,// 父窗口句柄
          Int nID// 捕捉窗口的ID号
    );
        如果该函数调用成功 则函数返回窗口的句柄 否则函数返回NULL。
        ◆ 捕捉窗口与设备连接
    BOOL capDriverConnect(
        hwnd,// 捕捉窗口的句柄
        iIndex// 设备驱动号
    );
        如果连接成功,返回TRUE否则函数返回FALSE。
        ◆ 获取视频捕捉设备功能
    BOOL capDriverGetCaps(
        hwnd,// 捕捉窗口句柄
        psCaps,// 指向一个用于存储返回值CAPDRIVERCAPS结构的指针
        wSize// CAPDRIVERCAPS结构占用的字节数
    );
        如果捕获窗口与捕获驱动连接成功,则返回TURE,否则,返回FALSE。
        ◆ 设置捕捉设备的参数
    BOOL capCaptureSetSetup(
       hwnd,// 设置窗口句柄
       psCapParms,// 指向一个用于存储返回值的CAPDRIVERCAPS结构的指针
       wSize// CAPDRIVERCAPS结构占用的字节数
    );
        设置成功返回TURE,否则返回FALSE。
    ◆ 设置处理回调状态
    BOOL capSetCallbackOnStatus(
       hwnd,// 捕捉窗口句柄
       fpProc// 指向状态回调函数的指针
    );
    ◆ 设置错误处理
    BOOL capSetCallbackOnError(
       hwnd,// 捕捉窗口句柄
       fpProc// 指向错误回调函数的指针
    );
        ◆ 设置数据文件名
    BOOL capFileSetCaptureFile(
       hwnd,// 捕捉窗口句柄
       szName// 指向字符串的指针,字符串内容为捕获文件名
    );
       设置一个由szName指向的字符串作为文件名,用于存储从捕捉窗口hWnd采集的视频图像数据,成功,返回TRUE,否则返回FALSE。
        ◆ 开始捕捉视频
    BOOL capCaptureSequence(
           hwnd
    );
       触发程序开始捕捉视频图像并将其保存到数据文件。
        ◆ 视频源设置对话框
        BOOL capDlgVideoSource( hwnd ); // hwnd:捕捉窗口句柄
        视频源设置对话框对于每一个捕捉驱动程序来说,是唯一的。而且,有些驱动程序不一定支持这一功能。应用程序可以通过检测CAPDRIVERCAPS结构的成员变量fHasDlgVideoSource来判断驱动程序是否支持这一功能。
        ◆ 视频格式设置对话框
        BOOL capDlgVideoFormat( hwnd ); // hwnd:捕捉窗口句柄
    视频格式设置对话框对于每一个捕捉驱动程序来说,是唯一的。而且,有些驱动程序不一定支持这一功能。应用程序可以通过检测CAPDRIVERCAPS结构的成员变量fHasDlgVideoFormat来判断驱动程序是否支持这一功能。
         ◆ 视频显示方式设置对话框
        BOOL capDlgVideoDisplay( hwnd ); // hwnd:捕捉窗口句柄
    视频格式设置对话框对于每一个捕捉驱动程序来说,是唯一的。而且,有些驱动程序不一定支持这一功能。应用程序可以通过检测CAPDRIVERCAPS结构的成员变量fHasDlgVideoDisplay来判断驱动程序是否支持这一功能。
        ◆ 视频压缩设置对话框
        BOOL capDlgVideoDisplay( hwnd ); // hwnd:捕捉窗口句柄
        视频格式设置对话框允许用户在视频捕获期间选择不同的压缩器。

    3  几个重要结构

        编写视频捕捉程序往往要用到以下与视频捕捉相关的结构
        (1)CAPTUREPARMS:包括控制视频流捕捉过程的参数,这一结构被用来得到和设置影响捕捉速率、捕捉时的缓冲区数目、以及捕捉如何结束时的参数。
        (2)CAPSTATUS:定义了捕捉窗口的当前状态,如:以象素为单位表示图像的高、宽、 预览和重叠方式的标志量,尺寸缩放的标志量等。
    因为捕捉窗口的状态随各种各样的消息而改变,所以当应用程序需要功能菜单项,决定捕捉窗口的真实状态或者调用视频格式对话框时,都应该更新这一结构中的信息。
        (3)CAPDRIVERCAPS:定义了视频捕捉驱动程序的功能,如:驱动程序的数目索引 是否支持视频叠加功能等。当应用程序将捕捉窗口与视频捕捉驱动程序相连接时,应该发送消息WM_CAP_DREVER_GET_CAPS或者调用宏capDriverGetCaps将驱动程序的功能拷贝一份到该结构中。
        (4)VIDEOHDR:定义了视频数据块的头信息,其数据成员lpData(指向数据缓存的指针),和dwBufferLenth(数据缓存的大小)经常用到。

    4  视频捕捉举例

        这是一个视频捕捉应用程序,实现了视频捕捉的基本功能,并且可以设置视频的来源、视频的格式等。
    #include "Vfw.h"
    #include <windowsx.h>
    #pragma comment( lib, "Vfw32.lib" )   // 使用Vfw32.lib库
     
    LRESULT CALLBACK capVideoStreamCallback(HWND hWnd,LPVIDEOHDR lpVHdr);
    HWND hMyWnd;
    LPBITMAPINFO lpbi;   // 视频格式
    void CWin32VideoCaptureDlg::OnBnClickedOk()
    {
    hMyWnd=this->m_hWnd;
    // Step 1. 建立捕获窗口
    HWND hWndC=capCreateCaptureWindow(
    (LPSTR)"MyCaptureWindow",
    WS_CHILD | WS_VISIBLE,
    0,0,160,120,
    this->m_hWnd,
    0);
    // Step 2. 与驱动程序建立连接
    LRESULT fOK = ::SendMessage (hWndC, WM_CAP_ DRIVER_ CONNECT, 0, 0L);
     
    // Step 3. 列举出目前系统所拥有的捕获驱动程序
             char szDeviceName[80];
             char szDeviceVersion[80];
             CString DeviceList;
             for (int wIndex = 0; wIndex < 10; wIndex++)         {
                if (capGetDriverDescription (wIndex,szDeviceName,\
                                sizeof (szDeviceName), szDeviceVersion, \
                                sizeof (szDeviceVersion)))     {
                                // 列出系统已安装的驱动程序,让用户选择
                                DeviceList.Append(szDeviceName);
                       }
             }
             MessageBox(DeviceList,"系统中 Capture Driver 描述");
     
    // Step 4. 获得驱动程序的性能
        //我们据此判断使用者是否可以设定 Video Source 和 Video Format
        CAPDRIVERCAPS CapDriverCaps;
        ::SendMessage (hWndC, WM_CAP_DRIVER_GET _CAPS, \
                       sizeof (CAPDRIVERCAPS), (LONG) (LPVOID) &CapDriverCaps);
     
    // Step 5.选择视频源
             if (CapDriverCaps.fHasDlgVideoSource)
                       capDlgVideoSource(hWndC);  
     
    // Step 6.调整视频格式
           CAPSTATUS CapStatus;
             if (CapDriverCaps. FhasDlg VideoFormat){
                       capDlgVideoFormat(hWndC);
                       capGetStatus(hWndC, &CapStatus, sizeof (CAPSTATUS));
                       }
    // Step 7.调整视频输出特性(亮度,对比度,色深)
             if (CapDriverCaps.fHasDlgVideoDisplay)
                       capDlgVideoDisplay(hWndC);
     
    // Step 8. 获得硬件状态
             BOOL bOK=capGetStatus(hWndC, &CapStatus, sizeof (CAPSTATUS));
     
    // Step 9. 调整捕捉窗口大小
             ::SetWindowPos(hWndC, NULL, 0, 0, CapStatus. uiImage Width, \
                        CapStatus.uiImageHeight,
    SWP_NOZORDER | SWP_NOMOVE);
     
    // Step 10. 设置视频格式
             DWORD dwSize;
             dwSize = capGetVideoFormatSize(hWndC);
             lpbi = (LPBITMAPINFO) GlobalAllocPtr(GHND, dwSize);
             capGetVideoFormat(hWndC, lpbi, dwSize);
     
    // Step 11. 视频预览
             capPreviewRate(hWndC, 66);    
             capPreview(hWndC, TRUE);     
     
    // Step 12. 当填满一帧后,调用回调函数处理
    BOOL bOk= capSetCallbackOnFrame(hWndC, capVideo StreamCallback);
    }
    int gdwFrameNum=0;
    char *gachBuffer=new char[100];
    LRESULT CALLBACK capVideoStreamCallback(HWND hWnd,LPVIDEOHDR lpVHdr){
       if (!hWnd)
            return FALSE;
            wsprintf(gachBuffer, "Preview frame# %ld 一个pixel=%d bits; 宽=%d; 高=%d;
                   (RGB)=(%d,%d,%d) 使用长度=%d" ,\
                   gdwFrameNum++, lpbi->bmiHeader. biBit Count,\
    lpbi->bmiHeader.biWidth, lpbi-> bmiHeader.  biHeight,\
                                   (int)*(lpVHdr->lpData),\
                                   (int)*(lpVHdr->lpData+1),\
                                   (int)*(lpVHdr->lpData+2),\
                                   lpVHdr->dwBytesUsed  );
            SetWindowText(hMyWnd, (LPSTR)gachBuffer);
            return (LRESULT) TRUE ;
      }
        这里要指出的一点是,如果在程序Link中出现不能识别函数的错误时,可以采取两种方式:
        * 在#include<vfw.h>后加入一行预编译代码:#pragma  comment(lib,“vfw32”)
        * 或者,在Link设置中加入vfw32.lib。

    5  结束语

        微软公司开发的Video For Windows具有简单易用、开发容易的优点,可以使得不了解组件编程技术的软件编程人员快速开发出适合自己的视频捕获应用程序。但是,它也具有一些不足之处,诸如:不能处理音、视频同步问题;不支持变长帧编码技术等。针对这些不足,微软目前使用DirectShow与WDM Stream Class来解决问题,但是,这些技术比较复杂,实现起来相对困难,因此,可以预见,在今后的一段时间里,AVICap技术仍将是视频捕获实现的重要选项。

    参考文献

        1  Microsoft Inc. Video for Windows Developed Toolkit Programming Guide. 2001
        2  张基温,贾中宁,李伟. Visual C++ 程序开发基础. 北京:高等教育出版社. 2002
        3 王超龙,陈志华. Visual C++ 6.0 入门与提高. 北京:人民邮电出版社. 2002
        作者简介:沈 旭 (1979-),男,山东单县人,硕士,计算机专业教师,主要研究方向:嵌入式系统、视频水印等,sjrgl@sina.com
  • 软件测试流程

    acuyy 发布于 2009-05-26 10:24:46

    浅谈软件测试流程(上)
    2008-06-15 15:43

    2008-04-24 作者:itest 来源:cnblogs.com

    【摘要】 软件测试从哪里开始到哪里结束?中间要经过哪些环节以及各环节要注意哪些事项。本文就有关问题结合个人实际工作经验进行阐述,鉴于每个环节都可以做为一个专题来进行探讨,所以受篇幅和时间限制,本文对有关问题未做深入剖析,只做一个宏观上的介绍。

    【关键词】测试流程、需求分析、测试用例、测试计划、缺陷管理

    一、概述

    一般而言,软件测试从项目确立时就开始了,前后要经过以下一些主要环节:

    需求分析→测试计划→测试设计→测试环境搭建→测试执行→测试记录→缺陷管理→软件评估→RTM.

    在进行有关问题阐述前,我们先明确下分工,一般而言,需求分析、测试用例编写、测试环境搭建、测试执行等属于测试开发人员工作范畴,而测试执行以及缺陷提交等属于普通测试人员的工作范畴,测试负责人负责整个测试各个环节的跟踪、实施、管理等。

    说明:

    1.以上流程各环节并未包含软件测试过程的全部,如根据实际情况还可以实施一些测试计划评审、用例评审,测试培训等。在软件正式发行后,当遇到一些严重问题时,还需要进行一些后续维护测试等。

    2.以上各环节并不是独立没联系的,实际工作千变万化,各环节一些交织、重叠在所难免,比如编写测试用例的同时就可以进行测试环境的搭建工作,当然也可能由于一些需求不清楚而重新进行需求分析等。这就和我们国家提出建设有中国特色的社会主义国家一样,只所以有中国特色,那是因为国情不一样。所以在实际测试过程中也要做到具体问题具体分析,具体解决。

    二、测试流程

    需求分析

    需求分析(Requirment Analyzing)应该说是软件测试的一个重要环节,测试开发人员对这一环节的理解程度如何将直接影响到接下来有关测试工作的开展。

    可能有些人认为测试需求分析无关紧要,这种想法是很不对的。需求分析不但重要,而且至关重要!

    一般而言,需求分析包括软件功能需求分析、测试环境需求分析、测试资源需求分析等。

    其中最基本的是软件功能需求分析,测一款软件首先要知道软件能实现哪些功能以及是怎样实现的。比如一款Smartphone包括VoIP、Wi-Fi以及Bluetooth等功能。那我们就应该知道软件是怎样来实现这些功能的,为了实现这些功能需要哪些测试设备以及如何搭建相应测试环境等,否则测试就无从谈起!

    既然谈了需求分析,那么我们根据什么来分析呢?总不能凭空设想吧。

    总得说来,做测试需求分析的依据有软件需求文档、软件规格书以及开发人员的设计文档等,相信管理一些规范的公司在软件开发过程中都有这些文档。

    测试计划

    测试计划(Test Plan)一般由测试负责人来编写。

    测试计划的依据主要是项目开发计划和测试需求分析结果而制定。测试计划一般包括以下一些方面:

    1. 测试背景

    a. 软件项目介绍;
    b. 项目涉及人员(如软硬件项目负责人等)介绍以及相应联系方式等。

    2. 测试依据

    a. 软件需求文档;
    b. 软件规格书;
    c. 软件设计文档;
    d. 其他,如参考产品等。

    3. 测试资源

    a. 测试设备需求;
    b. 测试人员需求;
    c. 测试环境需求;
    d. 其他。

    4. 测试策略

    a. 采取测试方法;
    b. 搭建哪些测试环境;
    c. 采取哪些测试工具以测试管理工具;
    d. 对测试人员进行培训等。

    5. 测试日程

    a. 测试需求分析;
    b. 测试用例编写;
    c. 测试实施,根据项目计划,测试分成哪些测试阶段(如单元测试、集成测试、系统测试阶段,α、β测试阶段等),每个阶段的工作重点以及投入资源等。

    6. 其他。

    测试计划还要包括测试计划编写的日期、作者等信息,计划越详细越好了。

    计划赶不上变化,一份计划做的再好,当实际实施的时候就会发现往往很难按照原有计划开展。如在软件开发过程中资源匮乏、人员流动等都会对测试造成一定的影响。所以,这些就要求测试负责人能够从宏观上来调控了。在变化面前能够做到应对自如、处乱不惊那是最好不过了。

    浅谈软件测试流程(下)
    2008-06-15 16:34

    测试设计

    测试设计主要包括测试用例编写和测试场景设计两方面。

    一份好的测试用例对测试有很好的指导作用,能够发现很多软件问题。关于测试用例编写,请参见前面写的《也谈测试用例》一文,里面有详细阐述。

    测试场景设计主要也就是测试环境问题了。

    测试环境搭建

    不同软件产品对测试环境有着不同的要求。如C/S及B/S架构相关的软件产品,那么对不同操作系统,如Windows系列、unix、linux甚至苹果OS等,这些测试环境都是必须的。而对于一些嵌入式软件,如手机软件,如果我们想测试一下有关功能模块的耗电情况,手机待机时间等,那么我们可能就需要搭建相应的电流测试环境了。当然测试中对于如手机网络等环境都有所要求。

    测试环境很重要,符合要求的测试环境能够帮助我们准确的测出软件问题,并且做出正确的判断。

    为了测试一款软件,我们可能根据不同的需求点要使用很多不同的测试环境。有些测试环境我们是可以搭建的,有些环境我们无法搭建或者搭建成本很高。不管如何,我们的目标是测试软件问题,保证软件质量。测试环境问题,还是根据具体产品以及开发者的实际情况而采取最经济的方式吧。

    测试执行

    测试执行过程又可以分为以下阶段:

    单元测试→集成测试→系统测试→出厂测试,其中每个阶段还有回归测试等。

    从测试的角度而言,测试执行包括一个量和度的问题。也就是测试范围和测试程度的问题。 比如一个版本需要测试哪些方面?每个方面要测试到什么程度?

    从管理的角度而言,在有限的时间内,在人员有限甚至短缺的情况下,要考虑如何分工,如何合理地利用资源来开展测试。当然还要考虑以下问题:

    1. 当测试人员测试的执行不到位、敷衍了事时该如何解决?

    2. 测试效率问题,怎样提高测试效率?

    3. 根据版本的不同特点是只做验证测试还是采取冒烟测试亦或是系统全面测试?

    4. 当测试过程中遇到一些偶然性随机问题该怎样处理?

    5. 当版本中出现很多新问题时该怎样对待?测试停止标准?

    6. ……

    总之,测试执行过程中会遇到很多复杂的问题,还是那句话,具体问题具体解决!本文不做过多阐述。

    测试记录

    缺陷记录总的说来包括两方面:由谁提交和缺陷描述。

    一般而言,缺陷都是谁测试谁提交,当然有些公司可能为了保证所提交缺陷的质量,还会在提交前进行缺陷评估,以确保所提交的缺陷的准确性。

    在缺陷的描述上,至少要包括以下一些方面内容:

    序号 标题 预置条件 操作步骤 预期结果 实际结果 注释 严重程度 概率 版本 测试者 测试日期

    以上是描述一个bug时通常所要描述的内容,当然在实际提交bug时可以根据实际情况进行补充,如附上图片、log文件等。

    另外,一个版本软件测试完毕,还要根据测试情况出份测试报告,这也是所要经过的一个环节。

    缺陷管理

    缺陷管理方面,很多公司都采取缺陷管理工具来进行管理,常见缺陷管理工具有Test Director、Bugfree等。

    下图是一个bug从提出到close所经过的一些流程,其他比如keep No action\keep spec等一些状态流程都未包含在内,在此仅做示范说明。

    注:软件缺陷和bug两者在含义上有着细微差别,本文统称缺陷。

    软件评估

    这里评估指软件经过一轮又一轮测试后,确认软件无重大问题或者问题很少的情况下,对准备发给客户的软件进行评估,以确定是否能够发行给客户或投放市场。

    软件评估小组一般由项目负责人、营销人员、部门经理等组成,也可能是由客户指定的第三方人员组成。

    测试总结

    每个版本有每个版本的测试总结,每个阶段有每个阶段的测试总结,当项目完成RTM后,一般要对整个项目做个回顾总结,看有哪些做的不足的地方,有哪些经验可以对今后的测试工作做借鉴使用,等等。测试总结无严格格式、字数限制。应该说,测试总结还是很总要的。

    测试维护

    由于测试的不完全性,当软件正式release后,客户在使用过程中,难免遇到一些问题,有的甚至是严重性的问题,这就需要修改有关问题,修改后需要再次对软件进行测试、评估、发行。


  • QTP:搜索功能测试

    aslandhu 发布于 2009-05-31 23:48:52Digest 2

    以下是一个用于测试某网站铃音搜索功能的脚本。

    脚本首先使用childobjects对象把页面所有Link对象查找出来,其次使用正则表达式匹配每个子对象的运行时text属性(匹配模式为搜索框中输入的值),然后统计搜索到得结果,最后使用随即点击搜索到得下载链接。

    缺点是:如果搜索的值为“更多”(页面上有同名且非铃音下载的链接),则可能打开的不是下载链接导致脚本执行失败。

    脚本:

    Browser("***").Page("****").WebButton("搜索").Click
    Set  LinksDescription = Description.Create()
    LinksDescription("html tag").value="A"
    set  LinksChildObj=Browser("*****").Page("****").ChildObjects(LinksDescription)
     linkscount=LinksChildObj.count
    Dim i,text,sertchResult
    j=0
    For i=0 to linkscount-1
    text= LinksChildObj(i).GetRoproperty("text")
    Set myReg= New RegExp
    myReg.Pattern ="等一分钟" 
    myReg.IgnoreCase = True
    myReg.Global = True
    If myReg.test(text) Then j=j+1
    Next
    'msgbox(j)
    'msgbox(LinksChildObj(j-1).GetRoproperty("text"))
    k=randomNumber(0,j-1)
    msgbox(k)
    LinksChildObj(k).Click

  • 【转】LR压力测试结果分析探讨

    michaelpank 发布于 2009-05-31 11:20:49

    压力测试报告分析 (有兴趣的朋友一起探讨一下压力测试后的分析!图没有上传,有兴趣的朋友可以发mail给我!)

    分析原则:

    1.具体问题具体分析(这是由于不同的应用系统,不同的测试目的,不同的性能关注点)
    2.查找瓶颈时按以下顺序,由易到难。
    服务硬件瓶颈  网络瓶颈(对局域网,可以不考虑) 服务操作系统瓶颈(参数配置) 中间件瓶颈(参数配置,数据,web服务等) 应用瓶颈(SQL语句、数据设计业务逻辑、算法等)

    分析的信息来源:
    1 根据场景运行过程中的错误提示信息
    2 根据测试结果收集到的监控指标数据

    一.错误提示分析

    分析实例:
    1.Error: Failed to connect to server “172.17.7.230″: [10060] Connection
    Error: timed out Error: Server “172.17.7.230″ has shut down the connection prematurely

    分析:
    A、应用服务死掉。
    (小用户时:程序上的问题。程序上处理数据库的问题,实际测试中多半是服务器链接的配置问题)

    B、应用服务没有死()
    (应用服务参数设置问题)
    对应的Apache和tomcat的最大链接数需要修改,如果连接时收到connection refused消息,说明应提高相应的服务器最大连接的设置,增加幅度要根据实际情况和服务器硬件的情况来定,建议每次增加25%!

    C、数据库的连接
    (数据库启动的最大连接数(跟硬件的内存有关))

    D、我们的应用程序spring控制的最大链接数太低

    2 Error: Page download timeout (120 seconds) has expired

    分析:

    A、应用服务参数设置太大导致服务器的瓶颈
    B、页面中图片太多
    C、在程序处理表的时候检查字段太大多
    D、实际测试时有些资源需要请求外网,而我们的测试环境是局域网环境
    3 Error   “
    http://172.17.7.230/Home.do....

    分析:
    A、脚本设计错误,造成页面异常。服务器有响应!
    B、并发数过大,造成服务器响应延迟。

    4 Error page “text=xxxxx”

    分析:
    A、脚本设计问题,例如,前一脚本修改了某些内容,造成后面的脚本访问异常。
    B、不确定因素,有时候回放正常的脚本,一放到场景中就出现这样的错误。只能反复修改脚本!

    二.监控指标数据分析
    1.Vusers数
    Loadrunner 系统设置的虚拟用户数目。Vuser去实际调用事先制作的脚本文件中的应用。
    每个Vuser产生响应的操作,所有的操作对服务器形成并发。

    颜色 比例 度量 图最小值 图平均值 图最大值 图中间值 图SD
    1 Run 0.0 21.25 44 41 21.276

    在实际测试中,Vusers可以根据实际情况的需要,在测试过程中增加或者减少。

    2.最大并发用户数:

    颜色 比例 度量 最小值 平均值 最大值 SD
    100 Apache CPU 使用情况(Apache):172.17.7.210 0.777 0.852 0.93 0.043
    0.01 已发送 KB/秒(Apache):172.17.7.210 6 1430.371 2689.333 327.924
    0.1 点击次数/秒(Apache):172.17.7.210 0.333 114.352 533.667 40.201

    应用系统在当前环境下能承受的最大并发用户数。
    方案运行中,如果出现了大批用户的业务操作失败,或出现了服务器shutdown的情况,则说明在当前环境下,系统承受不了当前并发用户的负载压力,那么最大并发用户数就是前一个没有出现这种现象的并发用户数。
    从上图可以看出:在测试运行到4个小时左右的时候,apache的点击数/秒开始迅速增加!

    3.业务操作响应时间:

    使用“事务性能摘要”图,可以确定在方案执行期间响应时间过长的事务。

    颜色 比例 度量
    1 最小值
    1 平均值
    1 最大值
    分析事务的响应情况,要每次详细分析,目前还只能观察到响应时间过长的事务!

    4.每秒点击数
    负载测试期间每秒内 Vuser 在 Web 服务器上点击的次数。可根据点击次数来估算 Vuser 生成的负载数。


    颜色 比例 度量 图最小值 平均值 图最大值 图中间值 图SD
    1 点击次数 69.908 105.736 130.244 103.666 12.186

    从图中不难看出,在4小时的时候,点技数明显增高。和apache的每秒点击数增大的时间相吻合!

    5.吞吐量
    负载测试期间 Web 服务器上的吞吐量(字节)。吞吐量表示在任何指定秒内 Vuser 从服务器接收到的数据量。此图可估计 Vuser 生成的负载量(服务器吞吐量)。

    颜色 比例 度量 图最小值 平均值 图最大值 图中间值 图SD
    1 Throughput 1257502.795 1375591.372 1525865.047 1372743.691 49130.473

    同样,从图中可以看出,在4个小时的时候,web服务器的吞吐量开始增高。在图中还可以看到吞吐量的走势图,从开始到进行到4个小时反弹之前呈降低的趋势,这是因为系统在初期调用的资源都是直接来之服务器,运行一段时间后系统的部分资源来自缓存。

    6.下载组件大小
    每个页面的组件大小,且包括组件的标头的大小!


    页面组件大小的分析表格比较复杂,实际分析中可以通过loadrunner的报告分析工具来分析。页面组件大小分析主要是找到页面中比较庞大的组件,如果其影响到了页面的下载速度,则要想办法将其改小!

    7.Apache资源
    显示APACHE web服务器上的资源摘要。前面已经提到过以并发点击数为主。



    颜色 比例 度量 最小值 平均值 最大值 SD
    100 Apache CPU 使用情况(Apache):172.17.7.210 0.777 0.852 0.93 0.043
    0.01 已发送 KB/秒(Apache):172.17.7.210 6 1430.371 2689.333 327.924
    0.1 点击次数/秒(Apache):172.17.7.210 0.333 114.352 533.667 40.201

    三.服务器资源监控指标:
    (目前通过top监察)
    内存:
    Linux资源监控中指标内存页交换速率(Paging rate),如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。也可能是内存访问命中率低。
    实际测试中,当并发点击数出现突然剧增前后,内存的PR 值则居高25不下。说明目前测试的系统中内存存在瓶颈!

    内存资源成为系统性能的瓶颈的征兆:
    很高的换页率(high pageout rate);
    进程进入不活动状态;
    交换区所有磁盘的活动次数可高;
    可高的全局系统CPU利用率;  
    内存不够出错(out of memory errors)

    处理器:

    Linux资源监控中指标CPU占用率持续超过80%(对该值的要求,根据具体应用和机器配置而要求不同,有资料表明95%),表明瓶颈是CPU。
    实际测试中,当并发点技数出现突然增加前后,cpu的占用率持续保持在86%以上!
    说明,目前系统用应用的cpu也是测试的瓶颈!

    CPU资源成为系统性能的瓶颈的征兆:  
    很慢的响应时间(slow response time)  
    CPU空闲时间为零(zero percent idle CPU)  
    过高的用户占用CPU时间(high percent user CPU)  
    过高的系统占用CPU时间(high percent system CPU)  
    长时间的有很长的运行进程队列(large run queue size sustained over time)

    四.数据库服务器:
    数据库服务器目前测试观察,当web服务器点击率增大时,观察mysql数据库的最大连接数,仍未超过系统设置的最大连接数。所以,暂时未发现数据库的瓶颈!


    五.结论
    以上报告分析中的数据、图标均来自同一次测试。是在平时测试中挑出的一次现象比较明显,比较利于观察的作为分析案例。
    根据以上综合分析,当前测试环境下,当应用系统产生最大533.667的并发压力。平均负载压力114.352。根据分析,用户在4个小时的时候,并发数迅速增加前后的值在400左右!分析结果跟实际测试的硬件环境以及测试脚本有一定关系。同时,测试服务器的硬件配置和实际服务器的配置还有一定的差距!
  • 2008年5月软件评测师考试上下午试题分析

    瘦月清霜 发布于 2009-05-22 17:05:50

    软件评测师作为一年一度的考试,2008年上半年(5月)考试的特点是上午试题与软件设计师、数据库系统工程师试题的重复率比较高,下午考试各种题型交错,难易适中。

    1、软件工程与软件测试基础知识

    2008年5月考试软件工程与软件测试基础知识试题考查的知识点分布如表1所示。

    表1 2008年5月考试软件工程与软件测试基础知识试题知识点分布

    在本次考试中,上午试题具有以下2个突出特点:

    (1)上午试题重复率很高,这里的“重复”有两层含义,一是指本次考试的很多试题在历年考试真题的基础上,换个说法,甚至一字不改,又出现了。二是指非软件评测知识试题和软件设计师、数据库系统工程师的试题几乎是一样的。

    (2)非软件评测知识类的试题占总数的57%,与往年相比,有所降低。也就是说,本次考试突出了软件评测知识本身的考试。软件评测知识和软件工程知识的试题占了45分。如果考生在这方面不丢分的话,就正好可以及格了。

    从试题总体来看,本次考试的上午试题比较容易。需要经过仔细推敲才能得出答案的试题比较少。希赛教育软考学院的学员应该会发现,很多试题都是模拟试题的原题,或者换个说法而已。

    2、软件测试应用技术

    试题一

    试题一是一道综合题,涉及到验收测试、功能测试、缺陷管理和测试管理。试题共4个问题。

    问题1考查验收测试的依据和验收测试对测试环境的要求。验收测试是以用户为主,软件开发人员和质量保证人员也应参加的测试。根据软件需求和验收要求编制测试计划,制定需测试的测试项,制定测试策略及验收通过准则。根据《验收测试计划》和《项目验收准则》编制测试用例,并经过评审。验收测试一般在用户的实际生产环境中进行,使用生产中的实际数据进行测试。

    问题2直接考查功能测试包含哪些子特性。功能性是指与功能及其指定的性质有关的一组软件质量,包括适合性、准确性、互操作性、依从性、安全性等子特性。

    问题3又分为3个小问题,第1个问题要求考生回答除功能性错误外,还可能有哪些错误。因为试题描述中说明了本次测试的重点是功能特性等6个质量特性,除了可维护性和可移植性属于开发特性外,其他的质量特性都可能会测试出错误。第2个问题要求考生回答功能性Bug严重性级别层次。这里的答案就不一定是唯一的了,因为不同单位对缺陷可以采用不同的分级,例如,可以分为死机(系统崩溃或挂起)、致命(使系统不稳定、或破坏数据、或产生错误结果,而且是常规操作中经常发生或非常规操作中不可避免的)、严重(系统性能或响应时间变慢、产生错误的中间结果但不影响最终结果,如:显示不正确但输出正确)、一般 (界面拼写错误或用户使用不方便)。第3个问题考查Bug的状态,这在希赛教育软考学院的模拟试题中,有现成的试题和分析,在此不再重复。

    问题4涉及到测试管理和测试流程问题。显然,这里存在问题。对于发现的问题进行修改,以及修改后的回归测试,需要对所有问题进行测试。涉及到用户需求的问题,还要重新审核需求文档,看程序与需求是否是一致的。等所有问题都得到解决后,才能进入配置库。

    试题二

    试题二是一道关于负载压力测试的问题,这个问题几乎每次考试都会出现。试题共5个问题。

    问题1要求考生回答响应时间和吞吐量的概念。这在希赛教育软考学院的模拟试题中有现成的试题,在此不再重复。

    问题2要求考生回答负载均衡设备的作用。显然,负载均衡设备起到网络平衡的作用,调节各应用服务器的在线人数,以免造成单个服务器超负荷工作,合理分配工作状态的运行情况。

    问题3要求考生回答测试用机中负载压力测试工具主控台、负载压力测试工具负载生成器的作用, 并论述此项目中采用分布式部署负载生成器的原因。采用负载压力测试工具来模拟大量并发用户,主控台负责管理各个负载生成器以及收集各负载生成器的测试数据, 负载生成器负责模拟虚拟用户加压,在每次并发性能测试中,只有一台主控台,但可以有多个负载生成器。因为网上报名系统的用户本来就是分布式的,所以这个项目需要采用分布式部署负载生成器。

    问题4需要分析测试结果中的交易执行情况数据,陈述随并发用户数递增,交易执行成功率降低的可能原因。分析测试结果中的应用服务器资源利用数据,判断服务器资源利用是否有瓶颈存在。随着用户数量的增加,用户的会话信息增多,占用的内存数量也会越来越多,导致CPU忙于在内存和外存间交换数据,因此,系统性能会下降。

    问题5是关于性能调优的措施问题。对于Web应用系统而言,性能调优的措施有很多(这里只要回答出4个,就可以得满分),例如,优化服务器配置、运用缓冲机制、采取数据库连接池技术、优化数据库设计等。
    有关负载压力测试和Web应用测试,考试辅导指定教材《软件评测师考试考点分析与真题详解》(张友生主编,电子工业出版社)第19章和第20章有详细的介绍。在希赛教育软考学院的的模拟试题中,也对负载压力测试进行了多角度的测试。

    试题三

    试题三是一道关于因果图的试题,共3个问题。

    本题是希赛教育软考学院模拟试题中的原题,在此不再重复。

    试题四

    试题四是一道关于控制流图、逻辑覆盖的试题,也分3个小问题。

    有关控制流图的试题,是每次必考的知识点,在辅导答疑中,我们也强调了这类试题的重要性。在希赛教育软考学院的的模拟试题中,几乎每套试题都有这种题型。解答此类问题的关键是搞清楚程序的逻辑结构。

    本题所给出的程序中,主要是3个if语句,其中第3个if语句是嵌套在第2个if语句中的,且没有else配对,这是画控制流图时需要注意的地方(需要增补1个结点)。

    从试题上来,这道试题相比模拟试题而言,算是比较简单的了。因此,对于希赛教育的学员而言,只要做了模拟试题,解答这道题,就很轻松了。

    试题五

    试题五是一道网络安全测试试题,考查考生对考试辅导指定教材《软件评测师考试考点分析与真题详解》(张友生主编,电子工业出版社)第22章内容的掌握情况。试题一共3个问题。

    问题1要求考生画出网络拓扑结构图,这是一种新的题型,其本质是考查对DMZ防火墙的理解。DMZ是为了解决安装防火墙后外部网络不能访问内部网络服务器的问题,而设立的一个非安全系统与安全系统之间的缓冲区,这个缓冲区位于企业内部网络和外部网络之间的小网络区域内,在这个小网络区域内可以放置一些必须公开的服务器设施,如企业Web服务器、FTP服务器等。DMZ防火墙方案为要保护的内部网络增加了一道安全防线,通常认为是非常安全的。同时它提供了一个区域放置公共服务器,从而又能有效地避免一些互联应用需要公开,而与内部安全策略相矛盾的情况发生。

    问题2要求考生回答漏洞扫描的功能和扫描器的分类。漏洞扫描是一项重要的安全技术,它采用模拟攻击的形式对网络系统组成元素(服务器、工作站、路由器、防火墙和数据库等)可能存在的安全漏洞进行逐项检查,根据检查结果提供详细的漏洞描述和修补方案,形成系统安全性分析报告,从而为网络管理员完善网络系统提供依据。至于扫描器的分类,就可以根据不同的角度来划分,划分角度不同,就有不同的分类。例如,根据工作模式,漏洞扫描器分为主机漏洞扫描器和网络漏洞扫描器。针对检测对象的不同,漏洞扫描器可分为网络扫描器、操作系统扫描器、WWW服务扫描器、数据库扫描器以及最近出现的无线网络扫描器等。

    问题3要求考生确定安全测评中漏洞扫描工具的接入点,并说明选择漏洞扫描工具各接入点的原因和目的。在本题中,系统一共分为3个区,可以选择Web服务区和后台信息系统区作为漏洞扫描工具的接入点,以便对信息系统和Web网站进行安全防护。

    总的来说,本次考试下午试题继续了前几次的出题风格,难度一般。所考查的一些知识也具有一定的代表性。对于希赛教育软考学院的学员而言,只要做好了模拟试题,对模拟试题的答案进行了理解,拿个45分应该是没有任何问题的。

    原文地址:http://training.51cto.com/art/200805/74929.htm

  • 2009年软考软件评测师考试大纲

    千里 发布于 2009-05-14 10:50:28

    一、考试说明
    1. 考试要求
    (1)熟悉计算机基础知识;
    (2)熟悉操作系统、数据库、中间件、程序设计语言基础知识;
    (3)熟悉计算机网络基础知识;
    (4)熟悉软件工程知识,理解软件开发方法及过程;
    (5)熟悉软件质量及软件质量管理基础知识;
    (6)熟悉软件测试标准;
    (7)掌握软件测试技术及方法;
    (8)掌握软件测试项目管理知识;
    (9)掌握C语言以及C++或Java语言程序设计技术;
    (10)了解信息化及信息安全基础知识;
    (11)熟悉知识产权相关法律、法规;
    (12)正确阅读并理解相关领域的英文资料。
    2. 通过本考试的合格人员能在掌握软件工程与软件测试知识的基础上,运用软件测试管理办法、软件测试策略、软件测试技术,独立承担软件测试项目;具有工程师的实际工作能力和业务水平。
    3. 本考试设置的科目包括:
    (1)软件工程与软件测试基础知识,考试时间为150分钟,笔试,选择题;
    (2)软件测试应用技术,考试时间为150分钟,笔试,问答题。
    二、考试范围
    考试科目1:软件工程与软件测试基础知识
    1.计算机系统基础知识
    1.1 计算机系统构成及硬件基础知识
    •计算机系统的构成
    •处理机
    •基本输入输出设备
    •存储系统
    1.2 操作系统基础知识
    •操作系统的中断控制、进程管理、线程管理
    •处理机管理、存储管理、设备管理、文件管理、作业管理
    •网络操作系统和嵌入式操作系统基础知识
    •操作系统的配置
    1.3 数据库基础知识
    •数据库基本原理
    •数据库管理系统的功能和特征
    •数据库语言与编程
    1.4 中间件基础知识
    1.5 计算机网络基础知识
    •网络分类、体系结构与网络协议
    •常用网络设备
    •Internet基础知识及其应用
    •网络管理
    1.6 程序设计语言知识
    •汇编、编译、解释系统的基础知识
    •程序设计语言的基本成分(数据、运算、控制和传输、过程(函数)调用)
    •面向对象程序设计
    •C语言以及C++(或Java)语言程序设计基础知识
    2.标准化基础知识
    •标准化的概念(标准化的意义、标准化的发展、标准化机构)
    •标准的层次(国际标准、国家标准、行业标准、企业标准)
    •标准的类别及生命周期
    3.信息安全知识
    •信息安全基本概念
    •计算机病毒及防范
    •网络入侵手段及防范
    •加密与解密机制
    4.信息化基础知识
    •信息化相关概念
    •与知识产权相关的法律、法规
    •信息网络系统、信息应用系统、信息资源系统基础知识
    5.软件工程知识
    5.1 软件工程基础
    •软件工程概念
    •需求分析
    •软件系统设计
    •软件组件设计
    •软件编码
    •软件测试
    •软件维护
    5.2 软件开发方法及过程
    •结构化开发方法
    •面向对象开发方法
    •瀑布模型
    •快速原型模型
    •螺旋模型
    5.3 软件质量管理
    •软件质量及软件质量管理概念
    •软件质量管理体系
    •软件质量管理的目标、内容、方法和技术
    5.4 软件过程管理
    •软件过程管理概念
    •软件过程改进
    •软件能力成熟度模型
    5.5 软件配置管理
    •软件配置管理的意义
    •软件配置管理的过程、方法和技术
    5.6 软件开发风险基础知识
    •风险管理
    •风险防范及应对
    5.7 软件工程有关的标准
    •软件工程术语
    •计算机软件开发规范
    •计算机软件产品开发文件编制指南
    •计算机软件需求规范说明编制指南
    •计算机软件测试文件编制规范
    •计算机软件配置管理计划规范
    •计算机软件质量保证计划规范
    •数据流图、程序流程图、系统流程图、程序网络图和系统资源图的文件编制符号及约定
    6.软件评测师职业素质要求
    •软件评测师职业特点与岗位职责
    •软件评测师行为准则与职业道德要求
    •软件评测师的能力要求
    7.软件评测知识
    7.1 软件测试基本概念
    •软件质量与软件测试
    •软件测试定义
    •软件测试目的
    •软件测试原则
    •软件测试对象
    7.2 软件测试过程模型
    •V模型
    •W模型
    •H模型
    •测试模型的使用
    7.3 软件测试类型
    •单元测试、集成测试、系统测试
    •确认测试、验收测试
    •开发方测试、用户测试、第三方测试
    •动态测试、静态测试
    •白盒测试、黑盒测试、灰盒测试
    7.4 软件问题分类
    •软件错误
    •软件缺陷
    •软件故障
    •软件失效
    7.5 测试标准
    7.5.1GB/T 16260.1—2003 软件工程产品质量第1部分:质量模型
    7.5.2GB/T 18905.1—2002 软件工程产品评价第1部分:概述
    7.5.3GB/T 18905.5—2002 软件工程产品评价第5部分:评价者用的过程
    8.软件评测现状与发展
    •国内外现状
    •软件评测发展趋势
    9.专业英语
    •正确阅读并理解相关领域的英文资料
    考试科目2:软件测试应用技术
    1.软件生命周期测试策略
    1.1 设计阶段的评审
    •需求评审
    •设计评审
    •测试计划与设计
    1.2 开发与运行阶段的测试
    •单元测试
    •集成测试
    •系统(确认)测试
    •验收测试
    2.测试用例设计方法
    2.1 白盒测试设计
    •白盒测试基本技术
    •白盒测试方法
    2.2 黑盒测试用例设计
    •测试用例设计方法
    •测试用例的编写
    2.3 面向对象测试用例设计
    2.4 测试方法选择的策略
    •黑盒测试方法选择策略
    •白盒测试方法选择策略
    •面向对象软件的测试策略
    3.软件测试技术与应用
    3.1 软件自动化测试
    •软件自动化测试基本概念
    •选择自动化测试工具
    •功能自动化测试
    •负载压力自动化测试
    3.2 面向对象软件的测试
    •面向对象测试模型
    •面向对象分析的测试
    •面向对象设计的测试
    •面向对象编程的测试
    •面向对象的单元测试
    •面向对象的集成测试
    •面向对象的系统测试
    3.3 负载压力测试
    •负载压力测试基本概念
    •负载压力测试解决方案
    •负载压力测试指标分析
    •负载压力测试实施
    3.4 Web应用测试
    •Web应用的测试策略
    •Web应用设计测试
    •Web应用开发测试
    •Web应用运行测试
    3.5 网络测试
    •网络系统全生命周期测试策略
    •网络仿真技术
    •网络性能测试
    •网络应用测试
    3.6 安全测试
    •测试内容
    •测试策略
    •测试方法
    3.7 兼容性测试
    •硬件兼容性测试
    •软件兼容性测试
    •数据兼容性测试
    •新旧系统数据迁移测试
    •平台软件测试
    3.8 易用性测试
    •功能易用性测试
    •用户界面测试
    3.9 文档测试
    •文档测试的范围
    •用户文档的内容
    •用户文档测试的要点
    •用户手册的测试
    •在线帮助的测试
    4.测试项目管理
    •测试过程的特性与要求
    •软件测试与配置管理
    •测试的组织与人员
    •测试文档
    •软件测试风险分析
    •软件测试的成本管理
    三、题型举例
    (一)选择题
    •下面的哪一项测试步骤中需要进行局部数据结构测试:(1)
    (1)A.单元测试B. 集成测试C. 确认测试D. 系统测试
    •软件的六大质量特性包括:(2)
    (2)A.功能性、可靠性、可用性、效率、可维护、可移植
    B.功能性、可靠性、可用性、效率、稳定性、可移植
    C.功能性、可靠性、可扩展性、效率、稳定性、可移植
    D.功能性、可靠性、兼容性、效率、稳定性、可移植
    (二)问答题
    1.白盒测试方法中的代码检查法需要重点考虑代码的执行效率,阅读以下两个循环,回答问题1和问题2。
    循环1:
    for (i=0;i<n;i++)
    {
    if(condition)
    DoSomething();
    else
    DoOtherthing();
    }
    循环2:
    if(condition)
    {
    for (i=0;i<n;i++)
    DoSomething()
    }
    else
    {
    for (i=0;i<n;i++)
    DoOtherthing();
    }
    问题1:循环1的优点和缺点。
    问题2:循环2的优点和缺点。
    2.请简述软件系统负载压力测试的主要目的。
  • zt: 怎么看自己电脑是多少位的操作系统

    rejoicexu 发布于 2009-05-26 10:53:47

    这里的64位技术是相对于32位而言的,这个位数指的是CPU GPRs(General-Purpose Registers,通用寄存器)的数据宽度为64位,64位指令集就是运行64位数据的指令,也就是说处理器一次可以运行64bit数据。64bit处理器并非现在才有的,在高端的RISC(Reduced Instruction Set Computing,精简指令集计算机)很早就有64bit处理器了 
    64bit计算主要有两大优点:可以进行更大范围的整数运算;可以支持更大的内存。不能因为数字上的变化,而简单的认为64bit处理器的性能是32bit处理器性能的两倍。实际上在32bit应用下,32bit处理器的性能甚至会更强,即使是64bit处理器,目前情况下也是在32bit应用下性能更强。所以要认清64bit处理器的优势,但不可迷信64bit 

    8位处理器、16位处理器、32位处理器和64位处理器,其计数都是8的倍数。它表示一个时钟周期里,处理器处理的二进制代码数。“0”和“1”就是二进制代码,线路上有电信号,则计做1,没有电信号则为0。8位机有8条线路,每个时钟周期有8个电信号,组成一个字节。所以,随8位处理器上升至64位处理器,每个时钟周期传送1个字节到8个字节,关联到时钟速度提高到若干个千兆赫之后,处理器处理信息的能力越来越大。 

    在开始>运行中输入“winver”,如果你的系统是64位的,同样会明确标示出“x64 Edition”。 

    在开始>运行中输入“cmd”,然后在命令提示符窗口中输入“systeminfo”,如果你的系统是64位的,会在“OS 名称: Microsoft
    Windows XP Professional”一行后明确标示出“x64 Edition”,否则你的系统就是32位的。 

    打开我的电脑属性,没有“物理地址扩展”的是32位,有“物理地址扩展”的是64位。
  • mysql性能指标-zt

    fairylly 发布于 2009-01-07 10:01:59

    mysql性能指标


    重点去监视的值有:
    * Slave_running:如果系统有一个从复制服务器,这个值指明了从服务器的健康度
    * Threads_connected:当前客户端已连接的数量。这个值会少于预设的值,但你也能监视到这个值较大,这可保证客户端是处在活跃状态。
    * Threads_running:如果数据库超负荷了,你将会得到一个正在(查询的语句持续)增长的数值。这个值也可以少于预先设定的值。这个值在很短的时间内超过限定值是没问题的。当Threads_running值超过预设值时并且该值在5秒内没有回落时, 要同时监视其他的一些值。
    2)mysqladmin extended(计数器)
    * Aborted_clients:客户端被异常中断的数值(因为连接到mysql服务器的客户端没有正常地断开或关闭)。对于一些应用程序是没有影响的,但对于另一些应用程序可能你要跟踪该值,因为异常中断连接可能表明了一些应用程序有问题。
    * Questions:每秒钟获得的查询数量。也可以是全部查询的数量(注:可以根据你输入不同的命令会得到你想要的不同的值)。
    * Handler_*:如果你想监视底层(low-level)数据库负载,这些值是值得去跟踪的。如果Handler_read_rnd_next值相对于你认为是正常值相差悬殊,可能会告诉你需要优化或索引出问题了。Handler_rollback表明事务被回滚的查询数量。你可能想调查一下原因。
    * Opened_tables:表缓存没有命中的数量。如果该值很大,你可能需要增加table_cache的数值。典型地,你可能想要这个值每秒打开的表数量少于1或2.
    * Select_full_join: 没有主键(key)联合(Join)的执行。该值可能是零。这是捕获开发错误的好方法,因为一些这样的查询可能降低系统的性能。
    * Select_scan:执行全表搜索查询的数量。在某些情况下是没问题的,但占总查询数量该比值应该是常量(注:Select_scan除以总查询数量商应该是常数)。如果你发现该值持续增长,说明需要优化,缺乏必要的索引或其他问题。
    * Slow_queries:超过该值(--long-query-time)的查询数量,或没有使用索引查询数量。对于全部查询会有小的冲突。如果该值增长,表明系统有性能问题。
    * Threads_created:该值应该是低的。较高的值可能意味着你需要增加thread_cache的数值,或你遇到了持续增加的连接,表明了潜在的问题。
    3)mysqladmin processlist or "SHOW FULLPROCESSLIST"命令
    你可以通过使用其他的统计信息得到已连接线程数量和正在运行线程的数量,检查正在运行的查询花了多长时间是一个好主意。如果有一些长时间的查询(由于很差的构思或公式),管理员可以被通知。你可能也想了解多少个查询是在"Locked"的状态—---该值作为正在运行的查询不被计算在内而是作为非活跃的。一个用户正在等待一个数据库响应。
    4) "SHOW INNODB STATUS"命令
    该语句产生很多信息,从中你可以得到你感兴趣的。首先你要检查的就是“从最近的XX秒计算出来的每秒的平均负载”。
    * Pending normal aio reads: 该值是innodb io请求查询的大小(size)。如果该值大到超过了10—20,你可能有一些瓶颈。
    * reads/s, avg bytes/read, writes/s, fsyncs/s:这些值是io统计。对于reads/writes大值意味着io子系统正在被装载。适当的值取决于你系统的配置。
    * Buffer pool hit rate:这个命中率非常依赖于你的应用程序。当你觉得有问题时请检查你的命中率
    * inserts/s, updates/s, deletes/s, reads/s:有一些Innodb的底层操作。你可以用这些值检查你的负载情况查看是否是期待的数值范围。
    4)OS数据。查看系统状态好的工具是vmstat/iostat/mpstat,这些可以看man手册
    5)SQL" ōnclick="tagshow(event)" class="t_tag">MySQL错误日志-----在服务器正常完成初始化后,什么都不会写到错误日志中,因此任何在该日志中的信息都要引起管理员的注意。
    6)InnoDB表空间信息。InnoDB仅有的危险情况就是表空间填满----日志不会填满。检查的最好方式就是:show table status;你可以用任何InnoDB表来监视InnoDB表的剩余空间。
  • mysql-开启慢查询&所有操作记录日志

    fairylly 发布于 2009-01-09 11:54:21

    在运营网站的过程中,可能会遇到网站突然变慢的问题,一般情况下和 MySQL 慢有关系,可以通过开启慢查询,找到影响效率的 SQL ,然后采取相应的措施。下面介绍一下如何开启慢查询:

    1、开启慢查询

    找到 MySQL 的配置文件 ,my.cnf (Windows 为 my.ini ),在 [mysqld]下增加下面几行:

    long_query_time=2
    log-slow-queries= /usr/var/slowquery.log


    上面的 2 是查询的时间,即当一条 SQL 执行时间超过2秒的时候才记录,/usr/var/slowquery.log 是日志记录的位置。

    然后重新启动MySQL服务

    注意,mysql 5.6版本,记录慢查询日志的配置方式有修改为:

    long_query_time=2
    slow_query_log=1
    slow_query_log_file=/tmp/slow-query.log

    另外,可配置记录没有使用索引的查询日志:
    log_queries_not_using_indexes=1 


    2、 MySQL 配置文件的位置

    Windows:Windows 的配置文件为 my.ini,一般在 MySQL 的安装目录下或者 c:\Windows 下。

    Linux:Linux 的配置文件为 my.cnf ,一般在 /etc 下。

     

    注:可通过mysql>show full processlist;来查看当前mysql的连接进程;

     

    3、要记录所有操作日志,包括select

    在my.ini或my.cnf配置文件,[mysqld]中增加:log=文件名

    例:log=/tmp/mysqlquery.log

    重启mysqld,即会把所有相关操作日志都记录下来

    注意:log记录的位置,mysql要有写权限;

    注意,mysql 5.6版本,记录所有操作日志的配置方式有修改为:

    general_log=on
    general_log_file=/tmp/mysqlquery.log


  • MySQL常用命令及基本操作总结-zt

    fairylly 发布于 2009-02-24 10:20:54

    MySQL常用命令及基本操作总结
     

    MySQL常用操作基本操作,以下都是MySQL5.0下测试通过首先说明下,记住在每个命令结束时加上;(分号)
    1.
    导出整个数据库
    mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1)
    mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
    2.
    导出一个表
    mysqldump -u
    用户名 -p 数据库名 表名> 导出的文件名
    mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
    3.
    导出一个数据库结构
    mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:wcnc_db.sql
    -d
    没有数据 –add-drop-table 在每个create语句之前增加一个drop table
    4.
    导入数据库
    常用source 命令
    进入mysql数据库控制台,
    mysql -u root -p
    mysql>use
    数据库
    然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
    mysql>source d:wcnc_db.sql

    一、启动与退出
    1、进入MySQL:启动MySQL Command Line ClientMySQLDOS界面),直接输入安装时的密码即可。此时的提示符是:mysql>
    2
    、退出MySQLquitexit
    二、库操作
    1、、创建数据库
    命令:create database <数据库名>
    例如:建立一个名为xhkdb的数据库
    mysql> create database xhkdb;
    2
    、显示所有的数据库
    命令:show databases (注意:最后有个s
    mysql> show databases;
    3
    、删除数据库
    命令:drop database <数据库名>
    例如:删除名为 xhkdb的数据库
    mysql> drop database xhkdb;
    4
    、连接数据库
    命令: use <数据库名>
    例如:如果xhkdb数据库存在,尝试存取它:
    mysql> use xhkdb;
    屏幕提示:Database changed
    5
    、当前选择(连接)的数据库
    mysql> select database();

    6、当前数据库包含的表信息:
    mysql> show tables;
    (注意:最后有个s

    三、表操作,操作之前应连接某个数据库
    1
    、建表
    命令:create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]);

    mysql> create table MyClass(
    > id int(4) not null primary key auto_increment,
    > name char(20) not null,
    > sex int(4) not null default '0',
    > degree double(16,2));
    2
    、获取表结构
    命令: desc 表名,或者show columns from 表名
    mysql>
    DESCRIBE  MyClass
    mysql> desc MyClass;
    mysql> show columns from MyClass;
    3
    、删除表
    命令:drop table <表名>
    例如:删除表名为 MyClass 的表
    mysql> drop table MyClass;
    4
    、插入数据
    命令:insert into <表名> [( <字段名1>[,..<字段名n > ])] values ( 1 )[, ( n )]
    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99,编号为3 的名为Wang 的成绩为96.5.
    mysql> insert into MyClass values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang', 96.59);
    5
    、查询表中的数据
    1)
    、查询所有行
    命令: select <字段1,字段2...> from < 表名 > where < 表达式 >
    例如:查看表 MyClass 中所有数据
    mysql> select * from MyClass;
    2
    )、查询前几行数据
    例如:查看表 MyClass 中前2行数据
    mysql> select * from MyClass order by id limit 0,2;
    6
    、删除表中数据
    命令:delete from 表名 where 表达式
    例如:删除表 MyClass中编号为1 的记录
    mysql> delete from MyClass where id=1;
    7
    、修改表中数据:update 表名 set 字段=新值,… where 条件
    mysql> update MyClass set name='Mary' where id=1;
    7
    、在表中增加字段:

    命令:alter table 表名 add字段 类型 其他;
    例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0
    mysql> alter table MyClass add passtest int(4) default '0'
    8
    、更改表名:
    命令:rename table 原表名 to 新表名;
    例如:在表MyClass名字更改为YouClass
    mysql> rename table MyClass to YouClass;


    更新字段内容
    update
    表名 set 字段名 = 新内容
    update
    表名 set 字段名 = replace(字段名,'旧内容','新内容');

    文章前面加入4个空格
    update article set content=concat('
      ',content);

    字段类型
    1INT[(M)] 型: 正常大小整数类型
    2
    DOUBLE[(M,D)] [ZEROFILL] 型: 正常大小(双精密)浮点数字类型
    3
    DATE 日期类型:支持的范围是1000-01-019999-12-31MySQLYYYY-MM-DD格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE
    4
    CHAR(M) 型:定长字符串类型,当存储时,总是是用空格填满右边到指定的长度
    5
    BLOB TEXT类型,最大长度为65535(2^16-1)个字符。
    6
    VARCHAR型:变长字符串类型

    mysql怎么定义外键

    建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。

    外键作用: 使两张表形成关联,外键只能引用外表中的列的值!

    指定主键关键字: foreign key(列名)

    引用外键关键字: references <外键表名>(外键列名)

    事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action

    例如:

    outTable表 主键 id 类型 int

    创建含有外键的表:
    create table temp(
    id int,
    name char(20),
    foreign key(id) references outTable(id) on delete cascade on update cascade);

    说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表中对应的列筛除 当外键的值改变 本表中对应的列值改变。

    5.导入数据库表  
       1)创建.sql文件
       2)先产生一个库如auction.c:mysqlbin>mysqladmin -u root -p creat auction,会提示输入密码,然后成功创建。
       2)导入auction.sql文件
       c:mysqlbin>mysql -u root -p auction < auction.sql
       通过以上操作,就可以创建了一个数据库auction以及其中的一个表auction
       6.修改数据库
       1)在mysql的表中增加字段:
       alter table dbname add column userid int(11) not null primary key auto_increment;
       这样,就在表dbname中添加了一个字段userid,类型为int(11)
       7mysql数据库的授权
       mysql>grant select,insert,delete,create,drop
       on *.* (test.*/user.*/..)
       to 用户名@localhost
       identified by '密码'
       如:新建一个用户帐号以便可以访问数据库,需要进行如下操作:
       mysql> grant usage
       -> ON test.*
       -> TO testuser@localhost;
       Query OK, 0 rows affected (0.15 sec)
       此后就创建了一个新用户叫:testuser,这个用户只能从localhost连接到数据库并可以连接到test 数据库。下一步,我们必须指定testuser这个用户可以执行哪些操作:
       mysql> GRANT select, insert, delete,update
       -> ON test.*
       -> TO testuser@localhost;
       Query OK, 0 rows affected (0.00 sec)
       此操作使testuser能够在每一个test数据库中的表执行SELECTINSERTDELETE以及UPDATE查询操作。现在我们结束操作并退出MySQL客户程序:
       mysql> exit
       Bye9!

Open Toolbar