全部科目 > 系统分析师 >
2016年上半年 下午试卷 论文
第 2 题
知识点 系统测试   性能测试   安全性   安全性测试   安装测试   功能性   计算机硬件   界面测试   软件测试   硬件   用户界面   用户界面测试  
 
 
论软件的系统测试及其应用
软件测试是软件交付客户前必须要完成的重要步骤之一,目前仍是发现软件错误(缺陷)的主要手段。系统测试是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起,针对整个系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提出更加完善的方案。系统测试的主要内容包括功能性测试、健壮性测试、性能测试、用户界面测试安全性测试、安装与反安装测试等。
 
问题:2.1   请围绕“软件的系统测试及其应用”论题,依次从以下三个方面进行论述。
1.概要叙述你参与管理和开发的软件项目以及你在其中所担任的主要工作。
2.详细论述软件的系统测试的主要活动及其所包含的主要内容,并说明功能性测试和性能测试的主要的目的。
3.结合你具体参与管理和开发的实际项目,概要叙述如何采用软件的系统测试方法进行系统测试,说明具体实施过程以及应用效果。




 
 
 
知识点讲解
· 系统测试
· 性能测试
· 安全性
· 安全性测试
· 安装测试
· 功能性
· 计算机硬件
· 界面测试
· 软件测试
· 硬件
· 用户界面
· 用户界面测试
 
        系统测试
        如果项目不只包含软件,还有硬件和网络等,则要将软件与外部支持的硬件、外设、支持软件、数据等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列集成与确认测试。一般来说,系统测试的主要内容包括功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、安装与反安装测试等。系统测试计划通常在系统分析阶段(需求分析阶段)完成。
 
        性能测试
        性能测试是通过自动化的测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行,统称为负载压力测试。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或不能接收的性能点,来获得系统能提供的最大服务级别的测试。
               性能测试的目的
               性能测试的目的是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,并优化软件,最后达到优化系统的目的。具体来说,包括以下几个方面。
               (1)评估系统的能力:测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助做出决策。
               (2)识别体系中的弱点:受控的负荷可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。
               (3)系统调优:重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。
               (4)检测软件中的问题:长时间的测试执行可导致程序发生由于内存泄漏等引起的失败,揭示程序中的隐含的问题或冲突。
               (5)验证稳定性和可靠性:在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。
               性能测试的类型
               性能测试类型包括负载测试、强度测试和容量测试等。
               (1)负载测试:负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担。
               (2)强度测试:强度测试是在系统资源特别低的情况下考查软件系统运行情况。
               (3)容量测试:确定系统可处理的同时在线的最大用户数。
               性能测试的步骤
               由于工程和项目的不同,所选用的度量及评估方法也有不同之处。不过仍然有一些通用的步骤可帮助我们完成一个性能测试项目。其步骤如下:
               (1)制定目标和分析系统。
               (2)选择测试度量的方法。
               (3)学习相关技术和工具。
               (4)制定评估标准。
               (5)设计测试用例。
               (6)运行测试用例。
               (7)分析测试结果。
               负载压力测试
               系统的负载压力测试(负载测试)中的负载是指系统在某种指定软件、硬件及网络环境下承受的流量,例如并发用户数、持续运行时间、数据量等,其中并发用户数是负载压力的重要体现。系统在应用环境下主要承受并发访问用户数、无故障稳定运行时间和大数据量操作等负载压力。
               负载压力测试的目的如下:
               (1)在真实环境下检测系统性能,评估系统性能是否可以满足系统的性能设计要求。
               (2)预见系统负载压力承受力,对系统的预期性能进行评估。
               (3)进行系统瓶颈分析、优化系统。
               在网络应用系统中,负载压力测试应重点关注客户端、网络及服务器(包括应用服务器和数据库服务器)的性能。应获取的关键测试指标如下。
               (1)客户端:并发用户数、响应时间、交易通过率及吞吐量等。
               (2)网络:带宽利用率、网络负载、延迟,以及网络传输和应用错误等。
               (3)服务器:操作系统的CPU占用率、内存使用和硬盘I/O等;数据库服务器的会话执行情况、SQL执行情况、资源争用及死锁等;应用服务器的并发连接数、请求响应时间等。
 
        安全性
        (1)可用性。可用性评价指标及测量,如下表所示。
        
        可用性评价指标及测量
        
        (2)完整性。完整性评价指标及测量,如下表所示。
        
        完整性评价指标及测量
        (3)保密性。保密性评价指标及测量,如下表所示。
        
        保密性评价指标及测量
        
 
        安全性测试
        测试应用程序的体系结构和设计可以消除很多与设计有关的漏洞,从而提高应用程序的整体安全性。设计时修复漏洞要比在开发后期解决问题更为简单,也更经济,因为开发后期可能要进行大量的重新工程处理。开发时如果考虑一些与目标部署环境相关的设计以及该环境定义的安全策略,可确保应用程序的部署更加平稳和安全。如果应用程序已创建完毕,安全测试可修复漏洞并完善未来的设计。
        一个完整的Web安全体系测试可以从部署与基础结构、输入验证、身份验证、授权、配置管理、敏感数据、会话管理、加密、参数操作、异常管理、审核和日志记录等几个方面入手。
               安全体系测试
                      部署与基础结构
                      检验底层网络和主机基础结构提供给应用程序的安全设置,然后检验运行环境要求的所有限制。此外,考虑部署的拓扑结构以及中间层应用程序服务器、外围区域以及内部防火墙对设计的影响。检验下列问题,确定可能存在的部署和基础结构问题。
                      . 网络是否提供了安全的通信。
                      数据在客户端与服务器(或服务器与服务器)之间传输时最易受到攻击。网络负责数据传输的完整性和私密性。如果必须保证数据安全,可使用适当的加密算法。此外,还必须确保网络设备安全。因为这是维护网络完整性所必需的。
                      . 部署拓扑结构是否包括内部防火墙。
                      如果内部防火墙将Web服务器与应用程序服务器(或数据库服务器)分隔开来,则需要考虑下列问题,确保设计能适应这种配置。
                      ①下游服务器如何验证Web服务器的身份;
                      ②如果使用域账户和Windows身份验证,防火墙是否打开了必要的端口;
                      ③是否使用分布式事务;
                      ④如果Web服务器使用DTC(Microsoft Distributed Transaction Coordinator)的服务来启动分布式事务,内部防火墙是否为DTC通信打开了必要的端口。
                      . 部署拓扑结构中是否包括远程应用程序服务器。
                      如果部署拓扑结构包括了一个物理远程中间层,则需要考虑下列问题。
                      ①是否使用企业服务。如果是,是否已限制了DCOM端口范围,内部防火墙是否打开了这些端口。
                      ②是否使用.NET远程处理。
                      ③远程处理用在受信服务器方案中,网络是否支持IPSec策略。
                      ④ASP.NET承载远程组件是否支持身份验证和授权。
                      ⑤是否使用Web服务,如果是,中间层Web服务如何验证Web应用程序的身份。Web应用程序是否通过在Web服务代理中配置凭据来使Web服务验证Web服务器的身份,如果否,Web服务如何明确调用者。
                      . 基础结构安全性要求的限制是什么。
                      设计是否假定主机基础结构安全限制要失效。例如,安全限制可能要求根据所需的服务、协议或账户特权来对设计进行权衡。需要考虑下列问题。
                      ①是否依赖可能不可用的服务或协议。开发和测试环境中可用的服务和协议可能在生产环境中不可用。
                      ②是否依赖敏感的账户特权。设计应尽量使用特权最少的进程、服务和用户账户。
                      ③要执行的操作是否要求可能不被许可的敏感特权。例如,应用程序是否要创建线程级模拟令牌来创建资源访问的服务身份。这项操作要求“作为操作系统的一部分”特权,而该特权不应授予Web服务器进程(因为可能增加进程被利用的风险)。如果需要此功能,设计应对更高级别的特权进行划分,例如,在进程外的企业服务应用程序中。
                      . 目标环境支持怎样的信任级别。
                      运行环境的代码访问安全信任级别决定了代码可访问的资源,以及它能执行的特权操作。请检查运行环境支持的信任级别。如果允许Web应用程序以完全信任级别运行,代码将能够访问操作系统安全性许可的任何资源。
                      如果Web应用程序必须以受限信任级别运行,则代码能访问的资源类型以及能执行的特权操作都将受到一定的限制。在部分信任案例中,设计应对特权代码进行沙盒(sandboxing)处理。此外,还应使用不同的程序集来分隔特权代码。这样,可以对特权代码和应用程序的其余部分单独配置特权代码,然后授予必要的附加代码访问权限。
                      注意:如果应用程序部署在共享服务器(或应用程序将由宿主公司运行),信任级别通常是个问题。此时,需要检查安全策略,然后确定Web应用程序的信任级别。
                      输入验证
                      需要对应用程序验证输入内容的方式进行检验,因为很多Web应用程序攻击都故意使用格式错误的输入。SQL注入、跨站点脚本(XSS)、缓冲区溢出、代码注入以及无数其他拒绝服务和特权提升攻击都可利用输入验证中的漏洞。下表中重点列出了常见的输入验证漏洞。
                      
                      常见的输入验证漏洞
                      测试时应考虑下列问题,以帮助发现潜在的输入验证安全问题。
                      . 如何验证输入。
                      设计指定的输入验证方法是什么?首先,设计必须展示策略。应用程序应对收到的所有输入进行约束、拒绝和净化。约束输入是最佳的方法,因为针对已知有效类型、模式和范围对数据进行验证,要比通过查找已知坏字符来验证数据简单得多。
                      测试时应考虑下列问题,帮助识别潜在的漏洞。
                      ①是否清楚入口点。
                      确保设计标出了应用程序的入口点,以便跟踪各个输入字段的操作。可考虑Web页输入、输入到组件和Web服务,以及从数据库输入。
                      ②是否清楚信任边界。
                      如果输入是从信任边界内受信源传递的,并非总要验证输入;但如果输入是从不受信任的源传递的,必须验证输入。
                      ③是否验证Web页输入。
                      不要将最终用户看作受信任的数据源。确保对正常和隐藏的表单字段、查询字符串和cookie都进行验证。
                      ④是否对传递到组件或Web服务的参数进行验证。
                      如果不进行验证,惟一的安全条件就是数据接收自当前信任边界之内。但是,如果使用深层防御策略,则需要使用多层验证。
                      ⑤是否验证从数据库中检索的数据。
                      这种形式的输入也应验证,特别是当其他应用程序也写入该数据库时。不要对其他应用程序的数据验证程度进行假设。
                      ⑥是否将方法集中起来。
                      对于相同类型的输入字段类型,检验使用的是否是相同的验证和筛选库,确保一致地执行验证规则。
                      ⑦是否依赖客户端的验证。
                      客户端验证可用于降低到服务器的回程数量,但不能依靠它来维护安全性,因为它很容易被忽略。需要在服务器验证所有的输入。
                      . 如何处理输入。
                      检查应用程序处理输入的方式,不同类型的处理可能导致不同类型的漏洞。例如,如果在SQL查询中使用输入,应用程序可能易受SQL注入的攻击。
                      测试中考虑下列问题,帮助发现潜在的漏洞。
                      ①应用程序是否易受规范化问题的影响。
                      检查应用程序是否使用基于输入的名称来制定安全决策。例如,应用程序是否接受用户名、文件名或URL。由于名称的表示方法多种多样,以上各项都极易造成规范化错误问题。如果应用程序接受输入作为名称,则应确保对它们进行验证并在处理之前将它们转换为规范的表示法。
                      ②应用程序是否易受SQL注入攻击。
                      密切注意形成SQL数据库查询的所有输入字段。确保对这些字段的类型、格式、长度和范围进行正确的验证。此外,检查查询的生成方式。如果使用参数化的存储过程,输入参数将被当作文本,而不会当作可执行代码。这是降低风险的一种有效措施。
                      ③应用程序是否易受XSS攻击。
                      如果在HTML输出流中包括输入字段,可能受到XSS攻击。确保对输入进行验证,并对输出进行编码。密切注意系统对接受一定范围HTML字符的输入字段的处理方法。
                      身份验证
                      检查应用程序验证调用者身份的方法,在何处使用身份验证,如何确保凭据在存储中或通过网络传递的安全。身份验证中的漏洞可能导致应用程序易受哄骗攻击、词典攻击、会话劫持等。下表重点列出了常见的身份验证漏洞。
                      
                      常见的身份验证漏洞
                      测试中需要考虑下列问题,确定在应用程序进行身份验证的方法中的潜在漏洞。
                      . 是否区分公共访问和受限访问。
                      如果应用程序既有不要求身份验证的公共区域,也有要求身份验证的受限区域,检查站点设计区分二者的方法。必须为受限的页和资源使用单独的子文件夹,然后在IIS中将它们配置为要求SSL来确保安全。这种方法允许只在需要的地方使用SSL来确保敏感数据和身法验证cookie的安全性,从而避免了因在整个站点中使用SSL而造成的附加性能负担。
                      . 是否明确服务账户要求。
                      设计应明确连接不同资源(包括数据库、目录服务和其他类型的网络资源)的服务账户范围。设计中不能使用单个的、有高度特权的账户(有足够的权限连接多种不同类型的资源)。
                      ①设计是否要求特权最少的账户。
                      检查设计并准确标识各账户执行特定功能所需的特权,然后在任何情况下都使用特权最少的账户。
                      ②应用程序是否要维护服务账户凭据。
                      如果是,确保加密这些凭据,然后保存在受限的位置中。例如,保存在有受限访问控制列表(ACL)的注册表项。
                      . 如何验证调用者身份。
                      测试时考虑与调用者身份验证相关的下列事项。具体事项由设计中使用的身份验证类型决定。
                      ①是否在网络中传递明文凭据。如果使用表单或基本身份验证(或使用Web服务并在SOAP头中传递凭据),确保使用SSL来保护传输中的凭据。
                      ②是否实现自己的用户存储。如果是,检查用户凭据的存储位置和存储方式。一种常见错误是将明文或加密密码保存在用户存储中。实际上,必须保存密码的哈希值来进行身份验证。
                      如果根据SQL Server用户存储验证凭据,密切注意用户名和密码的输入。检查是否存在恶意注入的SQL字符。
                      ③是否使用表单身份验证。如果是,除使用SSL保护凭据外,还应使用SSL来保护身份验证cookie。此外,还要检查设计是否使用受限的会话生存期来抵御cookie重播攻击,并确保加密cookie。
                      . 如何验证数据库的身份。
                      如果应用程序要连接数据库,检查使用的身份验证机制、打算使用的账户(一个或多个),以及如何在数据库中授权应用程序。
                      明确下列问题有助于对数据库身份验证进行评价。
                      ①是否使用SQL身份验证。
                      在理想情况下,设计使用Windows身份验证来连接SQL Server,因为这种方法本身更加安全。如果使用SQL身份验证,检查在网络中和数据库连接字符串中确保凭据安全的方法。
                      如果网络基础结构不提供IPSec加密通道,确保在数据库中安装服务器证书来提供自动SQL凭据加密。此外,还要检验确保数据库连接字符串安全的方法,因为这些字符串中包含SQL账户的用户名和密码。
                      ②是否使用进程账户。
                      如果使用应用程序的进程账户并使用Windows身份验证连接SQL服务器,应在设计中使用特权最少的账户。本地ASP.NET账户便是为此提供的,尽管对于本地账户来说,用户需要在数据库服务器上创建一个相同的账户。
                      如果打算使用域账户,首先确保它是特权最少的账户,然后打开相关的端口来确保所有相关防火墙都支持Windows身份验证。
                      ③是否使用服务账户。
                      如果设计要求使用多个身份来支持数据库中的高粒度授权,则需要检查保存账户凭据(在理想情况下,这些凭据使用数据保护API(DPAPI)加密并保存在安全注册表项中)的方法,以及使用服务身份的方法。
                      此外,还要检查使用哪些进程通过该服务账户创建模拟的安全上下文。该操作不应由Microsoft Windows 2000中的ASP.NET应用程序进程来完成,因为它将强制提升进程账户的特权,并授予“作为操作系统的一部分”特权。这种情况必须尽量避免,它将大大增加风险。
                      ④是否考虑使用匿名Internet用户身份。
                      对于使用表单或Passport身份验证的应用程序而言,可为各个程序配置单独的匿名用户账户。然后,启用模拟并使用匿名身份来访问数据库。该方法适于对同一服务器的不同应用程序进行单独的授权和身份跟踪。
                      ⑤是否使用原始用户身份。
                      如果设计要求模拟原始调用者,必须考虑该方法是否能提供足够的伸缩性,因为连接池是无效的。另一种备选方法是,通过受信的查询参数在应用程序级流动原始调用者身份。
                      ⑥如何保存数据库连接字符串。
                      如果数据库连接字符串硬编码,或以明文形式保存在配置文件或COM+目录中,则很容易受到攻击。实际上,应加密它们,然后限制对加密数据的访问。
                      . 是否强制使用强账户管理措施。
                      如果应用程序使用Windows身份验证,Windows安全策略将强制使用强密码、受限登录和其他最佳账户管理策略。其他情况,则由应用程序层负责这些措施。测试要考虑与应用程序账户管理相关的下列问题。
                      ①应用程序是否强制使用强密码。
                      例如,ASP.NET Web页是否使用正则表达式来验证密码复杂性规则。
                      ②是否限制失败登录的次数。
                      这样做有助于对抗词典攻击。
                      ③是否在故障发生后公开过多的信息。
                      确保不显示类似“不正确的密码”这样的消息,因为它将告诉恶意用户:用户名是正确的。结果,恶意用户便可集中精力破解密码。
                      ④是否强制定期更改密码。
                      如果不强制定期更改密码,用户极有可能不更改自己的密码,结果风险更高。
                      ⑤是否能在泄露发生时迅速禁用账户。
                      如果账户泄露,是否能方便地禁用账户来防止攻击者继续使用账户。
                      ⑥应用程序是否记录登录企图。
                      记录失败的登录企图是检测攻击者试图侵入的有效方法。
                      授权
                      检查应用程序是如何向用户授权的。还要检验应用程序在数据库中是如何被授权的,以及如何控制系统级资源的访问。授权中的漏洞可能导致信息泄漏、数据篡改及特权提升。使用深层防御策略是一种重要的方法,它可应用于应用程序的授权策略中。下表重点列出了常见的授权漏洞。
                      
                      常见的授权漏洞
                      测试中需要考虑下列问题,帮助验证应用程序设计的授权策略。
                      . 如何向最终用户授权。
                      应在设计时从两种角度考虑授权。首先,考虑最终用户授权。哪些用户可访问哪些资源,并执行哪些操作。其次,如何防止恶意用户使用应用程序访问系统级资源。考虑下列问题,验证应用程序的授权策略。
                      ①是否使用深层防御策略。
                      确保设计不依赖于单个网关守卫来加强访问控制。考虑该网关守卫失败(或攻击者设法忽略它)时发生的情况。
                      ②使用了哪些网关守卫。
                      可能的选择有IISWeb权限、NTFS权限、ASP.NET文件授权(仅适用于Windows身份验证)、URL授权和用户权限请求。如果不使用某个特定类型,需要明确不使用的理由。
                      ③是否使用基于角色的方法。
                      如果是,如何维护角色列表,维护角色列表所需的管理界面安全性如何。
                      ④角色是否提供足够的特权隔离。
                      设计是否提供了适当的粒度,使不同用户角色的关联特权得到充分的隔离。避免出现仅为满足特定用户需要而授予角色较高特权的情况。
                      . 如何在数据库中授权应用程序。
                      在应用程序中连接数据库的账户必须有受限的能力,只需满足应用程序的要求即可,不要再高了。
                      应用程序是否使用存储过程来访问数据库呢?建议应用程序使用存储过程来访问数据库,因为一般用户只能授予应用程序登录访问特定存储过程的权限。可以限制登录不在数据库中直接执行创建/读取/更新/删除(CRUD)操作。
                      . 如何将访问限定于系统级资源。
                      设计应用程序时,应考虑应用程序在可访问系统级资源方面的限制。只能授予应用程序访问最低限度的资源。这是缓解风险的一种策略,可在应用程序遭受攻击时限制受损程度。考虑下列问题。
                      ①设计是否使用代码访问安全性。
                      代码访问安全性提供了一种资源约束模型,该模型可防止代码(和Web应用程序)访问特定类型的系统级资源。如果使用代码访问安全性,设计必将受到影响。明确是否在设计规划中包括代码访问安全性,然后通过对特权代码进行隔离和沙盒处理(sandboxing),并将资源访问代码置于自己独立的程序集中,从而进行相应的设计。
                      ②应用程序使用哪些身份。
                      设计必须明确应用程序使用的所有身份,包括进程身份和所有模拟身份(包括匿名Internet用户账户和服务身份)。此外,设计还要指出这些身份要访问的资源。
                      在部署时,可对系统级资源配置正确的ACL,确保应用程序的身份只能访问所需的资源。
                      配置管理
                      如果应用程序提供了可配置的管理界面,要检查确保管理界面安全的方法。此外,还要检查如何确保敏感配置数据的安全。下表显示了常见的配置管理漏洞。
                      
                      常见的配置管理漏洞
                      测试时考虑下列问题,帮助验证应用程序设计在配置管理方面的方法。
                      . 是否支持远程管理。
                      如果设计指定了远程管理,必须确保管理界面和配置存储的安全,因为这些操作本身非常敏感,而且通过管理界面访问的数据也很敏感。考虑与远程管理设计相关的下列问题。
                      ①是否使用强身份验证。
                      必须要求对所有管理界面用户进行身份验证。使用强身份验证,如Windows或客户端证书身份验证。
                      ②是否加密网络通信数据。
                      使用经过加密的信道,如IPSec或虚拟专用网络(VPN)连接提供的通道。不支持不安全通道中的远程管理。IPSec允许对可用来管理服务器的客户计算机的身份和数量进行限制。
                      . 是否保证配置存储的安全。
                      明确应用程序的配置存储,然后检查限制访问这些存储的方法,以及确保存储中数据安全的方法。
                      ①配置存储是否在Web空间中。
                      对于保存在Web空间文件中的配置数据,其安全性要低于保存在Web空间之外的数据。主机配置错误或未发现的Bug都可能导致攻击者通过HTTP检索,并下载配置文件。
                      ②配置存储中的数据是否安全。
                      确保在存储中加密关键的配置数据项(如数据库连接字符串、加密密钥和服务账户凭据)。
                      ③如何限制对配置存储的访问。
                      确保管理界面提供必要的授权,只有经过验证的管理员才可访问并操作这些数据。
                      . 是否隔离管理员特权。
                      如果管理界面支持不同的功能(如站点内容更新,服务账户重新配置和数据库连接详细信息),要确认管理界面支持基于角色的授权,从而区分内容开发人员和操作员或系统管理员。例如,不必许可更新静态Web站点的人改变客户的信用额度或重新配置数据库连接字符串。
                      敏感数据
                      检查应用程序对存储中、应用程序内存中以及网络中的敏感数据的处理方法。下表显示了与处理敏感数据相关的常见漏洞。
                      
                      敏感数据处理中的常见漏洞
                      测试中要考虑下列问题,帮助验证应用程序处理敏感数据的方法。
                      . 是否存储机密信息。
                      机密信息包括了应用程序的配置数据,如账户密码和加密密钥。如果可能,明确其他避免保存机密信息的设计方法。如果要处理机密信息,由系统平台处理它们,尽可能不在应用程序中承担这一任务。如果确实要保存机密信息,则要考虑下列问题。
                      ①是否能避免存储机密信息。
                      如果使用其他的实施技术,是否能避免存储机密信息。例如,如果只需了解用户是否知道密码,则无需存储密码。或者,仅保存单向的密码哈希值。
                      此外,如果使用Windows身份验证,可通过嵌套凭据来避免存储连接字符串。
                      ②如何存储机密信息。
                      如果使用加密,如何确保加密密钥的安全。考虑使用系统平台提供的DPAPI加密,这种加密能替用户完成密钥管理。
                      ③在何处保存机密信息。
                      检查应用程序保存加密数据的方法。要获得尽可能高的安全性,应使用Windows ACL限制对加密数据的访问。确认应用程序不以明文或源代码形式存储机密信息。
                      如果使用本地安全机构(LSA),检索机密信息的代码必须使用管理员特权才可以运行,这将增加风险。另一种不要求扩展特权的方法是使用DPAPI。
                      ④如何处理机密信息。
                      检验应用程序访问机密信息的方法,以及它们以明文形式存留在内存中的时间。机密信息通常应根据需要检索,并尽快使用,然后丢弃。
                      ⑤是否在cookie中存储机密信息。
                      如果是,应确保cookie是加密的,且不会永久保存在客户计算机中。
                      . 如何存储敏感数据。
                      如果存储了敏感的应用程序数据(如客户信用卡详细信息),检查数据保护方法。
                      ①使用怎样的加密算法。
                      应使用强加密算法来加密。例如,使用较长的密钥(如Triple DES)。
                      ②如何确保加密密钥的安全性。
                      数据的安全性与加密密钥安全性同等重要。因此,检查确保密钥安全的方法。在理想状况下,使用DPAPI加密密钥并保存在受限位置(如注册表项中)来确保安全。
                      . 是否在网络中传递敏感数据。
                      如果通过网络传递敏感数据,应确保通过应用程序加密这些数据,或通过加密的通信链接来传递它们。
                      . 是否记录敏感数据。
                      检查应用程序(或主机)是否在明文日志文件中记录用户账户密码这样的敏感数据。通常,必须避免这样做。确保应用程序不在查询字符串中传递敏感数据,因为查询字符串会被记录,并可在客户端浏览器地址栏中直接看到。
                      会话管理
                      由于Web应用程序基于无状态的HTTP协议生成,因此会话管理是应用程序级任务。检查应用程序的会话管理方法,因为它将直接影响应用程序的整体安整。下表显示了与会话管理相关的常见漏洞。
                      
                      常见的会话管理漏洞
                      测试中需要考虑下列问题,帮助验证应用程序处理敏感数据的方法。
                      . 如何交换会话标识符。
                      检查应用程序管理用户会话的会话标识符,以及这些会话标识符的交换方式。考虑下列问题。
                      ①是否通过未加密的通道传递会话标识符。
                      如果使用会话标识符(如cookie中包含的令牌)跟踪会话状态,检查是否仅通过加密的通道(如SSL)传递标识符或cookie。
                      ②是否加密会话cookie。
                      如果使用表单身份验证,确保应用程序使用“”元素中的protection="All"属性加密身份验证。建议同时使用SSL和这种方法,以便降低XSS攻击的风险,XSS攻击可设法窃取用户的身份验证cookie。
                      ③是否在查询字符串中传递会话标识符。
                      确保应用程序不在查询字符串中传递会话标识符。这些字符串可在客户端轻易修改,使用户能作为另一用户访问应用程序,访问其他用户的私有数据,并可能提升特权。
                      . 是否限制会话生存期。
                      检查应用程序认为会话标识符有效的时间。应用程序应限制这段时间的长度,以降低会话劫持和重播攻击的威胁。
                      . 如何确保会话状态存储的安全。
                      检查应用程序存储会话状态的方法。会话状态可存储在Web应用程序进程、ASP.NET会话状态服务,或SQL Server状态存储中。如果使用远程状态存储,请确保Web服务器到该远程存储的链接使用IPSec或SSL加密,以保护在网络中传输的数据。
                      加密
                      如果应用程序使用加密来提供安全性,检查加密的内容以及加密的使用方法。下表显示了与加密有关的常见漏洞。
                      
                      常见的加密漏洞
                      测试中需要考虑下列问题,帮助验证应用程序处理敏感数据的方法。
                      . 为何使用特定的算法。
                      加密只有在正确使用时才能提供真正的安全保障。不同作业使用不同的算法。算法的程度也非常重要。考虑下列问题,评价所使用的加密算法。
                      ①是否开发自己的加密技术。
                      不应开发自己的加密技术。众所周知,加密算法和例程的开发非常难,而且很难成功。自定义实施的安全保护一般很弱,基本上不如久经考验的系统平台服务提供的安全措施。
                      ②是否使用合适的密钥大小来应用正确的算法。
                      检查应用程序使用的算法及使用该算法的目的。较大的密钥可提供较高的安全性,但会影响性能。对于在数据存储中长时间保存的永久数据,较强的加密非常重要。
                      . 如何确保加密密钥的安全性。
                      加密数据的安全与密钥的安全同等重要。要破解加密数据,攻击者必须能检索出密钥和密码文本。因此,需要检查设计,确保加密密钥和加密数据的安全。考虑下列评价问题。
                      ①如何确保加密密钥的安全。
                      如果使用DPAPI,将由系统平台为用户管理密钥。其他情况下,则由应用程序负责密钥管理。检查应用程序确保加密密钥安全的方法。一种较好的方法是,使用DPAPI加密其他加密形式所需的加密密钥。然后,安全地保存加密密钥,例如,将其放在配置了受限ACL的注册表项目下。
                      ②回收密钥的频率如何。
                      不能滥用密钥。同一密钥使用的时间越长,被发现的可能性就越高。设计是否考虑了怎样回收密钥、回收的频率,以及如何将它们分发并安置在服务器中。
                      参数操作
                      检查应用程序使用参数的方法。这些参数包括了在客户端和服务器间传递的表单字段、查询字符串、cookie、HTTP头和视图状态。如果使用像查询字符串这样的参数传递敏感数据(如会话标识符),恶意客户端可轻松使用简单的参数操作逃避服务器端检查。下表显示了常见的参数操作漏洞。
                      
                      常见的参数操作漏洞
                      测试中需要考虑下列问题,以帮助确保您的设计不受参数操作攻击影响。
                      . 是否验证所有的输入参数。
                      确保应用程序验证所有的输入参数,包括正常和隐藏的表单字段、查询字符串和cookie。
                      . 是否在参数中传递敏感数据。
                      如果应用程序在参数(如查询字符串或表单字段)中传递敏感数据,应检查应用程序使用这种方法而不是更安全的方法(传递会话标识符)的原因。例如,在加密的cookie中传递会话标识符。使用这些信息将会话与在服务器状态存储中维护的用户状态相关联。考虑下列评价问题。
                      ①是否加密包含敏感数据的cookie。
                      如果应用程序使用包含敏感数据的cookie,如用户名或角色列表,确保它是经过加密的。
                      ②是否在查询字符串或表单字段中传递敏感数据。
                      不能这样做,因为就操作查询字符串或表单字段中的数据而言,没有简便的方法可用。实际操作过程中,应考虑使用加密的会话标识符,然后将敏感数据保存在服务器的会话状态存储中。
                      ③是否保护视图状态。
                      如果Web页或控件使用视图状态在HTTP请求之间维持状态,确保视图状态经过加密,并使用消息验证代码(MAC)检查其完整性。用户可在计算机级配置该设置,也可按页配置。
                      . 是否为了安全问题而使用HTTP头数据。
                      确保Web应用程序不根据HTTP头中的信息制定安全决策,因为攻击者可轻松地操作头数据。不要依赖HTTP引用站点字段的值来检查源于页的请求是否由Web应用程序生成,这将带来漏洞。这种操作本身很不安全,因为引用站点字段可在客户端轻松更改。
                      异常管理
                      检查应用程序处理错误的方法。应前后一致地使用结构化的异常处理。同样,确保应用程序不在发生异常时公开太多信息。下表显示了两大异常管理漏洞。
                      
                      常见的异常管理漏洞
                      测试时应考虑下列问题,以确保设计不易受到异常管理安全漏洞的影响。
                      . 是否使用结构化的异常处理。
                      检查应用程序如何使用结构化的异常处理。设计应强制在整个应用程序中使用一致的结构化异常处理。这将创建更强大的应用程序,使应用程序不易处在暴露安全漏洞的不一致状态下。
                      . 是否向客户端公开了太多的信息。
                      确保恶意用户无法利用错误信息中的细节信息,考虑下列问题。
                      ①是否在服务器中捕获、处理和日志记录异常。
                      确保应用程序不会将内部异常情况传播到应用程序边界以外。异常应在服务器中捕获并记录日志。如果必要,应向客户端返回常规错误信息。
                      ②是否使用集中的异常管理系统。
                      在应用程序中一致处理并日志记录异常的最佳方法是,使用正式的异常处理系统。还可将该系统与操作组监视系统性能的监控系统相结合。
                      ③是否定义了一组自定义错误信息。
                      设计必须明确,应用程序在发生严重错误时使用自定义的错误信息。确保这些消息中不包含任何可能被恶意用户利用的敏感数据。
                      审核和日志记录
                      检查应用程序的审核和日志记录方法。除了防止抵赖之外,定期分析日志文件有助于识别入侵迹象。下表显示了常见的审核和日志记录漏洞。
                      
                      常见的审核和日志记录漏洞
                      测试中需要考虑下列问题,帮助验证应用程序审核和日志记录的方法。
                      . 是否明确了要审核的关键活动。
                      设计必须定义要审核的活动。考虑下列问题:
                      ①是否审核失败的登录尝试。
                      这允许用户检测入侵和密码破解企图。
                      ②是否审核其他关键操作。
                      确保审核其他关键事件,包括数据检索、网络通信和管理功能(如启用和禁用日志记录)。
                      . 是否考虑过如何流动原始调用者身份。
                      设计必须确保跨多个应用程序层来进行审核活动。为此,原始调用者的身份必须在每个层都可用。
                      ①是否跨应用程序层进行审核。
                      检验每个层是否都按预期计划对活动进行审核。
                      ②如何同步多个日志。
                      日志文件是证明个人犯罪行为和解决抵赖问题的法律程序所必需的。通常,在访问资源的时候,如果由访问资源的同一例程生成审核,则审核最具权威性。确认应用程序设计中与日志文件同步相关的问题,然后记录某种形式的请求标识符,确保多个日志文件条目可互相关联,并能关联至同一请求。
                      ③如何流动原始调用者身份。
                      如果不在操作系统级流动原始调用者身份(例如,由于此方法伸缩性有限),应明确应用程序如何流动原始调用者身份。对于跨层审核,这是必需的(对于授权来说,可能同样必需)。
                      此外,如果多个用户映射到同一应用程序角色,应确保应用程序记录原始调用者的身份。
                      . 是否考虑过保护日志文件管理策略。
                      检查应用程序设计是否考虑到日志文件的备份、存档和分析。日志文件必须定期存档来确保不被充满;如果充满,应开始回收。而且,还要经常分析日志文件来检测入侵迹象。此外,确保执行备份的账户都是特权最少的,确保仅为备份而公开的所有附加信道安全。
               应用及传输安全
               Web应用系统的安全性从使用的角度可分为应用级的安全与传输级的安全,安全性测试也可从这两个方面入手。
               应用级的安全测试的主要目的是查找Web应用系统自身程序设计中存在的安全隐患,主要测试区域如下。
               . 注册与登录:现在的Web应用系统基本采用先注册,后登录的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否存在大小写敏感,可以试多少次的限制,是否可以不登录而直接浏览某个页面等。
               . 在线超时:Web应用系统是否有超时的限制,也就是说,用户登录后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登录才能正常使用。
               . 操作留痕:为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件,是否可追踪。
               . 备份与恢复:为了防范系统的意外崩溃造成的数据丢失,备份与恢复手段是一个Web系统的必备的功能。备份与恢复根据Web系统对安全性的要求可以采用多种手段,如数据库增量备份、数据库完全备份、系统完全备份等。出于更高的安全性要求,某些实时系统经常会采用双机热备或多机热备。除了对于这些备份与恢复方式进行验证测试以外,还要评估这种备份与恢复方式是否满足Web系统的安全性需求。
               传输级的安全测试是考虑到Web系统的传输的特殊性,重点测试数据经客户端传送到服务器端可能存在的安全漏洞,以及服务器防范非法访问的能力。一般测试项目包括以下几个方面。
               . HTTPS和SSL测试:默认的情况下,安全HTTP(Secure HTTP)通过安全套接字SSL(Secure Socket Layer)协议在端口443上使用普通的HTTP。HTTPS使用的公共密钥的加密长度决定的HTTPS的安全级别,但从某种意义上来说,安全性的保证是以损失性能为代价的。除了还要测试加密是否正确,检查信息的完整性和确认HTTPS的安全级别外,还要注意在此安全级别下,其性能是否达到要求。
               . 服务器端的脚本漏洞检验:存在于服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。这可以通过设计一些相应的测试案例来进行验证。
               . 防火墙测试:防火墙是一种主要用于防护非法访问的路由器,在Web系统中是很常用的一种安全系统。防火墙测试是一个很大很专业的课题,但这里所涉及的只是对防火墙的功能、设置进行测试,以判断是否满足本Web系统的安全需求。
 
        安装测试
        除了嵌入式软件之外,安装是软件产品实现其功能的第一步。对于一般的应用软件来说,最早体现其易用性的就是软件安装。现在的软件系统越来越庞大,有可能使安装过程变得复杂,安装耗时也会越来越长。没有正确的安装根本就谈不上正确的使用,因此安装测试就显得尤为重要,安装的易用性是安装测试的主要内容。
        安装测试的方法很简单,就是按照用户安装手册安装软件,来评估安装过程的易用性、正确性。那么对于安装测试需要注意一些什么呢,我们认为至少应该从以下几个方面来考虑。
        . 安装手册的评估。在安装前需要检查安装手册或用户文档中的安装说明,一般来说,安装手册需要对安装平台、安装过程需注意的事项以及需手动配置的部分进行详细说明。
        . 安装的自动化程度测试。由于制作安装程序的软件很多,其中很成熟的有Installshield等,很多软件采用了自动安装的方式。但由于部分软件的特殊性,有时必须采用一定的手动配置来完成安装。我们要评估软件安装过程的自动化程度。一般来说,软件的安装程序尽量要做到“全自动化”,即使在不得已的情况下需要进行手动配置,也要采取一些措施,比如选择框方式等,使手动配置变得简便和明确。
        . 安装选项和设置的测试。在安装过程中常常需要对安装的项目进行选择,也可能要设置不同的信息,比如安装路径等。安装测试时需要对不同的选项和设置方案进行测试,验证各种方案是否都能安装成功。
        . 安装过程的中断测试。一个大型的软件有可能需要数小时来进行安装,如果因为断电、文件冲突或读写错误导致安装过程的非正常中断,有可能使已进行的安装工作前功尽弃。一个好的自动化安装程序应该能记忆安装的过程,当恢复安装时,安装程序能自动进行检测,并从“断点”继续安装。
        . 安装顺序测试。对于大多数应用系统,特别是分布式系统,常常需要安装软件系统的不同组成部分。不同的安装顺序常常会导致安装失败,或者会引起一些不可预料的错误,例如,先安装客户端后安装服务器,会导致某些软件的客户端与服务器连接不上。如果《安装手册》中未明确指出安装顺序,则需要测试不同顺序的安装过程。
        . 多环境安装测试。不同的应用环境下安装的情况也是不一样的,我们至少要在标准配置、最低配置和笔记本电脑三种环境中进行安装测试。很多情况下产品声称的最低配置并不符实,所以最低配置环境测试是非常必要的。另外,有些系统级的软件常常在笔记本电脑上安装时发生错误,例如,由于笔记本电脑的高集成度特性,Linux桌面操作系统在笔记本安装时出现硬件兼容性问题。
        . 安装的正确性测试。在上述的安装测试后,都需要进行简单的使用以验证安装的正确性。另外,还要考察对其他应用程序的影响。
        . 修复安装测试与卸载测试。修复安装测试指软件使用后,根据需要添加或删除软件的一些组件或者修复受损的软件。修复安装和卸载也应该是自动化的,通常情况下,安装、修复安装以及卸载是一个完整安装程序中的不同选项。进行修复安装测试时,需检查修复对软件有无不良的影响,例如,修复可能造成系统数据丢失。卸载测试重点检查卸载是否完全,不能完全卸载时有无明确提示信息等。
 
        功能性
        功能性是指当软件在指定条件下使用时,软件产品满足明确和隐含要求功能的能力。
               适合性
               适合性是指软件产品为指定的任务和用户目标提供一组合适的功能的能力。
               准确性
               准确性是指软件产品具有所需精确度的正确或相符的结果及效果的能力。
               互操作性
               互操作性是指软件产品与一个或更多的规定系统进行交互的能力。
               保密安全
               保密安全是指软件产品保护信息和数据的能力,以使未授权的人员或系统不能阅读或修改这些信息和数据,但不拒绝授权人员或系统对它们的访问。
               功能性依从性
               功能性依从性是指软件产品依附于同功能性相关的标准、约定或法规以及类似规定的能力。
 
        计算机硬件
        基本的计算机硬件系统由运算器、控制器、存储器、输入设备和输出设备5大部件组成,随着网络技术的发展和应用,通信部件也成为计算机系统的基本组件。运算器和控制器及其相关部件已被集成在一起,统称为中央处理单元(Central Processing Unit,CPU)。CPU是硬件系统的核心,用于数据的加工处理,能完成各种算术、逻辑运算及控制功能。
        运算器是对数据进行加工处理的部件,它主要完成算术和逻辑运算。控制器的主要功能是从主存中取出指令并进行分析,以控制计算机的各个部件有条不紊地完成指令的功能。
        存储器是计算机系统中的记忆设备,分为内部存储器(Main Memory,MM,简称内存、主存)和外部存储器(简称外存或辅存)。相对而言,内存速度快、容量小,一般用来临时存储计算机运行时所需的程序、数据及运算结果。外存容量大、速度慢,可用于长期保存信息。寄存器是CPU中的存储器件,用来临时存放少量的数据、运算结果和正在执行的指令。与内存储器相比,寄存器的速度要快得多。
        习惯上将CPU和主存储器的有机组合称为主机。输入/输出(I/O)设备位于主机之外,是计算机系统与外界交换信息的装置。所谓输入和输出,都是相对于主机而言的。输入设备的作用是将信息输入到计算机中,输出设备则将运算结果按照人们所要求的形式输出到外部设备或存储介质上。
 
        界面测试
        有人说,除了一定的技术外,Web系统的好与坏取决于其页面的设计艺术水平。这个话虽有失偏颇,但也从另外一个角度说明了Web系统的界面的重要性。由于Web系统的客户端均采用浏览器,不同用户可能会在浏览器里设置不同的显示方式,因此,我们在作界面测试的时候尽量使用默认的设置。
        在开始进行界面测试以前,我们需要重点调研两个问题:
        . Web应用系统的最终用户群是谁;
        . Web应用界面(大多数等同于网页)的设计策略是什么。
        这两个问题决定了我们评价一个Web应用系统界面采用什么样的标准。尽管不同的Web应用系统的界面千变万化,但其测试方法和评价准则仍有一些共同的内容。以下是界面测试中需要重点关注的。
        . 页面中各元素布局的协调性。
        一个复杂的页面会包含多种元素,如文字、表单、图片、动画、表格、视频等,从美学的角度来看,如果只是把所有的Web应用功能简单地堆砌到页面上,其易用性是很差的。需要评估的协调性包括以下几个方面:
        ①各元素位置的协调性;
        ②各元素颜色的协调性;
        ③各元素大小比例的协调性。
        . 不同页面风格的统一性。
        一个统一的Web系统的不同页面应该从颜色、框架、操作方式等多个方面统一起来。由于Web日益流行,很多人把它看作图形设计作品。人们为了体现出网页设计的丰富多彩,在不同页面使用很多不同风格的图片、特效,初看觉得网页非常艳丽多彩,但忽略了不同网页的协调统一。
        . 用户在界面中操作的便利性。
        网页设计中用得最多的是表格,而用户操作最容易导致界面缺陷的也就是表格,因此要对表格进行操作验证。例如,需要验证表格是否设置正确、用户是否需要向右滚动页面才能看见表格中的内容;每一栏的宽度是否足够宽,表格里的文字是否都有折行;是否有因为某一格的内容太多,而将整行的内容拉长等。
        . 界面动态操作测试。
        主要测试以下几个方面:
        ①屏幕分辨率设置的影响;
        ②浏览窗口最大化/最小化的影响;
        ③选定目标元素的置中与缩放。
 
        软件测试
        测试是为评价和改进产品质量、识别产品的缺陷和问题而进行的活动。
        软件测试是针对一个程序的行为,在有限测试用例集合上动态验证软件是否达到预期的行为。
        软件测试过程如下:
        (1)拟定测试计划。
        (2)编制测试大纲。
        (3)设计和生成测试用例。
        (4)实施测试。
        (5)生成测试报告。
        软件测试方法:
        .人工测试:采用人工方式进行测试,目的是通过对程序静态结构的检查,找出编译时不能发现的错误。人工测试包括个人复查、抽查和会审等。
        .机器测试:把设计好的测试用例作用于被测程序,比较测试结果和预期结果是否一致。机器测试包括黑盒测试(功能测试)和白盒测试(结构测试)。
        软件测试伴随软件开发和维护过程,通常可以在概念上划分为以下三个阶段:
        .单元测试:也称为模块测试,在模块编写完成且无编译错误后就可以进行。
        .集成测试:也称为组装测试,就是把模块按系统设计说明书的要求组合起来进行测试。
        .系统测试:是将已经确认的软件、计算机硬件、外设和网络等其他因素结合在一起,进行信息系统的各种组装和确认测试。其目的是通过与系统需求相比较,发现所开发的系统与用户需求不符合的地方。
 
        硬件
        硬件是计算机物理设备的总称,也称为硬件设备,通常是电子的、机械的、磁性的或光的元器件或装置,一般分为中央处理器、存储器和输入、输出设备。
 
        用户界面
        用户界面是计算机中实现用户与计算机通信的软件和硬件部分的总称。用户界面也称为用户接口或人机界面。
               控制面板式用户界面
               计算机发展早期,用户通过控制台开关、板键或穿孔纸带向计算机送入命令或数据,而计算机通过指示灯及打印机输出运行情况或结果。这种界面的特点是人去适应计算机,现在看来是十分笨拙的。
               字符用户界面
               字符用户界面是基于字符型的。用户通过键盘或其他输入设备输入字符,由显示器或打印机输出字符。字符用户界面的优点是功能强、灵活性好、屏幕开销少;缺点是操作步骤繁琐,学会操作较费时。
               图形用户界面
               随着文字、图形、声音、图像等多媒体技术的出现,各种图形用户界面应运而生,用户既可使用传统的字符,也可以使用图形、图像和声音同计算机进行交互,操作更为自然、更加方便,多媒体技术进一步推广、发展与完善。现代界面的关键技术是超文本。超文本的"超"体现在它不仅包括文本,还包括图像、音频、视频等多媒体信息,即将文本的概念扩充到超文本,超文本的最大特点是具有指向性。
               新一代用户界面
               多媒体、多通道及智能化是新一代用户界面的技术支持。新的、更加自然的交互技术,将为用户提供更方便的输入技术。计算机将通过多种感知通道来理解用户的意图,实现用户的要求;计算机不仅以二维屏幕向用户输出,而且能以真实感的计算机仿真环境向用户提供真实的体验。
 
        用户界面测试
        用户界面测试主要核实用户与软件之间的交互,验证用户界面中的对象是否按照预期的方式运行,并符合国家或行业的标准。
        界面测试中的部分工作主观性比较强,测试结果往往与测试人员的喜好有关。因此,界面测试的一个缺点就是,测试人员在整个测试过程中身心不可能保持一致,在一定程度上会影响测试结果的准确性。
        用户界面测试可分为整体界面测试和界面中的元素测试。界面中的元素主要包括窗口、菜单、图标、文字、鼠标等。
               界面整体测试
               界面整体测试是指对界面的规范性、一致性、合理性等进行测试和评估。
                      规范性测试
                      软件的界面要尽量符合现行标准和规范,并在应用软件中保持一致。而开发软件时就要充分考虑软件界面的规范性,最好的办法是采取一套行业标准。现在许多行业已有自己的标准,如IBM标准、Microsoft标准、Apple标准。这些标准已经基本包含“菜单条、工具栏、工具箱、状态栏、滚动条、右键快捷菜单”的标准格式,以上标准已经基本完善,对某些行业只需利用已有的成果就可以。
                      对于一些特殊行业,由于系统使用环境和用户使用习惯的特殊性,使用以上标准是远远不够的,还要对自身特殊的需要加以补充。如软件的用户定位包括不同年龄阶段的用户,那么就会有一些用户基本不使用鼠标右键,年龄较大的用户难以看清密集的较小的文字,或用户对计算机系统和网络不够熟悉,或硬件环境一般,甚至比较差,少有配置优良的计算机等等。在这种环境下,用户对计算机的使用一般没有使用倾向,大多更适应手工操作。像这种情况,特殊行业都要有一套自己比较完善的标准和规范。
                      这些标准和规范是经过各种类型的测试与评估,不断总结,经验积累和反反复复设计成果。在界面测试中,测试工程师应该严格遵循这些标准和规范设计界面规范性测试用例。
                      合理性测试
                      界面的合理性是指界面是否与软件功能相融洽,界面的颜色和布局是否协调等。如果界面不能体现软件的功能,那么界面的作用将大打折扣。所以,界面的合理性是界面美的首要因素,它提醒设计者不要片面追求外观漂亮而导致失真或华而不实。
                      合理性差的界面无疑会混淆软件意图,致使用户产生误解。即使它不损害软件功能与性能,也会使用户产生不该有的情绪波动。合理的用户界面是应用程序的一个重要组成部分,也是使软件易用的重要基础。空间使用应当形成一种简洁、有序、易于操作的布局,使信息组织具有艺术性。如果一个界面上有太多或者杂乱无章的控件,会给用户寻找字段或者控件带来不便和困难。
                      测试软件界面的合理性一般通过观察进行,举例如下。
                      . 界面中元素的文字、颜色等信息是否与功能不一致;
                      . 前景与背景色搭配是否合理协调,反差是不是太大;
                      . 界面中的元素大小和布局是否协调;
                      . 窗口的比例是否合适。
                      一致性测试
                      一致性既包括使用标准的控件,也指相同的信息表现方法,如在字体、标签风格、颜色、术语、显示错误信息等方面确保一致。好的软件界面都具有相似的界面外观、布局、交互方式以及信息显示等。界面保持高度一致性,用户可以减少过多的学习和记忆量,从而降低培训和支持成本。
                      此外,软件的界面在不同平台上是否表现一致呢?作为测试人员不要忽略这一点。如颜色、字体,有时有些软件在不同的平台表现得不尽如人意“——”在一个系统上看上去很好,在另一个系统上常常看上去很糟。
                      对于在不同的平台测试软件界面的一致性可以用下面的方法:在不同分辨率下,观察界面的美观程度,分别在800×600,1024×768,1152×864, 1280×768,1280×1024,1200×1600大小的字体下进行测试。一个好的软件要有一个默认的分辨率,而在其他分辨率下也都能运行。
                      作为测试工程师,在测试界面一致性时应该注意以下几点因素。
                      . 布局是否一致,如所有窗口按钮的位置和对齐方式要一致;
                      . 标签和讯息的措辞是否一致,如在提示、菜单和帮助中产生相同的术语;
                      . 界面外观是否一致,如控件的大小、颜色、背景和显示信息等属性要一致,但一些需要艺术处理或有特殊要求的地方除外;
                      . 操作方法是否一致,如双击其中的项,使得某些事件发生,那么双击任何其他列表框中的项,都应该有同样的事件发生;
                      . 颜色的使用是否一致,颜色的前后一致会使整个应用软件有同样的观感;
                      . 快捷键在各个配置项上语义是否保持一致。
                      下表列出了常用的快捷键及其功能。
                      
                      常用的快捷键及功能
                      界面定制性测试
                      对于适用于多层次用户的软件,由于用户熟练程度(外行、初学、熟练)不同、使用频度不同和不同角色,需要不同的操作方式或用户界面。如财务软件中财务总监的界面应提供大量查询功能和更多使用鼠标的操作,而会计、出纳的界面应提供更多的键盘快捷方式和以最少的步骤完成日常凭证制作审核。因此需要对界面的可定制性进行测试,测试中可参考以下几项测试内容。
                      . 界面元素的可定制性。可以允许用户定义工具栏、状态栏是否显示,工具栏显示在界面上的位置,如上方、下方或悬浮等;一些软件还可以定义菜单的位置。随着Windows XP的出现,界面风格的可定制也为软件个性化提供了新的特性。
                      . 工具栏的可定制性。工具栏为用户使用常用的功能提供了方便,但不同用户对“常用”的理解是不同的,因此,应当允许用户自定义工具栏,包括建立新的工具栏,选择要显示的工具栏,定义工具栏上的按钮,制定为工具按钮定义所链接的功能等。
                      . 统计检索的可定制性。检索和统计是用户向系统索取数据最经常用到的功能,检索条件是否灵活、分类统计是否合理、是否允许用户定义检索条件和统计项,需要测试人员在充分了解用户需求和使用习惯的基础上,制定大量案例,通过实际操作来体会。
                      . 报表的可定制性。各种各样的报表是软件对用户输出的重要方式,报表表头包括的项目、表格的行高列宽、表中数据的单位和显示格式超长超宽表的分页方式等如果能够允许用户自定义,则可以使软件生成的报表适用于更广泛的范围,减少用户二次处理表格的工作量,极大地方便用户的使用。
               界面元素测试
                      窗口测试
                      在Windows平台上运行的应用软件,窗口是软件界面的基础,正如操作系统的名字。窗口是显示设备中的一个区域,用于观看对象、对象相关信息以及应用与对象的动作进行交互。窗口有标题栏可以进行打开、关闭、创建、缩放、移动、删除、重叠等操作。
                      现在让我们了解一下窗口的基本组成部分,从外观上讲,一般窗口是由标题、边框、菜单、工作区、滚动条等组成(如下图所示)。虽然软件产品的窗口各种各样,令人眼花缭乱,但基本组成是相同的。
                      
                      Microsoft Word窗口的配置部件示意图
                      下面是一些窗口测试用例设计的参考例子。
                      . 窗口控件的大小、对齐方向、颜色、背景等属性的设置值是否和程序设计规约相一致。
                      . 是否显示相关的下拉菜单、工具条、滚动条、对话框、按钮、图标和其他控制,既能正确显示又能调用。
                      . 若窗口无法显示,所有内容是否能够改变大小、移动和滚动。
                      . 活动窗口是否能够被反显加亮。
                      . 窗口是否正确地关闭。
                      . 多个窗口叠加时窗口的名称是否显示正确。
                      . 窗口的数据是否能够利用鼠标、功能键、方向箭头和键盘操作。
                      . 当窗口被覆盖并重新调用后,窗口是否能够正确再生。
                      . 如果使用多任务,是否所有的窗口被实时更新。
                      . 窗口是否支持最小化和最大化或放大。
                      . 窗口上的控件是否随着窗体的缩放而缩放。
                      . 父窗体支持缩放时,子窗体是否也缩放。
                      . 在一个窗口中按Tab键,移动聚焦是否按顺序移动。Tab的顺序应是先从上至下,再从左至右。
                      . 子窗口位置是否在父窗口的左上角或正中,由于屏幕对角线相交的位置是用户直视的地方,正上方1/4处为易吸引用户注意力的位置,在放置窗口时要注意利用这两个位置。父窗口或主窗口的中心位置应该在对角线焦点附近。
                      . 当多个子窗口弹出时是否依次向右下方偏移,以显示出窗口标题为宜,如下图所示为Microsoft PowerPoint窗口重叠示意图。通常重叠的窗口具有固定大小和位置,新打开的窗口要堆叠在最近打开的窗口上,这些重叠的窗口都带有突出的标签以便选择。
                      . 重要的命令按钮与使用较频繁的按钮是否放在了界面上醒目的位置。因错误使用而引起界面退出或关闭的按钮,放在容易点击的位置。横排开头或结尾,与竖排结尾为容易点击的位置。
                      . 与正在进行的操作无关的按钮应该加以屏蔽(Windows中用灰色显示,没法使用该按钮)。
                      . 按钮的大小要与界面的大小和空间是否协调。避免在空旷的界面上放置很大的按钮。放置完控件后界面不应有很大的空缺位置。
                      . 多窗口的切换响应时间是否过长。如果切换时间过长就会使用户出现意外的焦躁情绪,而响应时间过短有时会造成用户操作节奏加快,从而导致用户操作错误。
                      
                      Microsoft PowerPoint窗口重叠示意图
                      菜单测试
                      菜单对我们来讲是很熟悉的,它是应用程序命令项列表,菜单位置按照功能来组织。菜单按图形方式可以产生丰富多彩的菜单形式,例如条形菜单、水平和垂直的弹出式菜单、下拉菜单、T形菜单等。无论采用哪种方式,仅仅是菜单显示方式不同罢了,菜单的测试方法还是基本一样的。
                      菜单是否易用主要体现在它能否提供线索帮助用户识别,而不用强迫用户去记忆。如果用户只通过简单的培训或偶尔的使用,就可以接受该系统,那么简单和有规则的菜单尤其有效。
                      作为测试工程师,设计菜单界面测试用例主要应从以下几点考虑。
                      . 是否符合需求;
                      . 菜单项的措辞是否准确;
                      . 菜单项的顺序是否合理;
                      . 图形的布局是否一致。
                      菜单界面测试用例设计范例如下表所示。
                      
                      菜单界面测试用例
                      这个测试用例可以适用不同的菜单,上表是针对菜单界面测试所设计的一个测试用例说明。这个测试用例通过测试人员测试,会找出更多的Bugs。
                      图标测试
                      图标实际上属于菜单交互方式,只是它使用图标来代表文本菜单的菜单项。使用图标可以形象、逼真地反映菜单的功能,从而使理解、学习和操作变得更加易用。
                      由于图标是表示实体信息的简洁、抽象的符号,所以在日常生活中被广泛地使用。图标不仅仅作为表示实体的符号,还可以作为可视按钮项,当被选中激活时,可以完成指定的功能。
                      图标测试比较主观,与测试人员的喜好有关。比如,图标基调颜色刺眼,用户登入界面比较难于找到,图标比较抽象,图标范围太广等都属于用户界面测试中的缺陷。
                      形象的图标给人很大的帮助,使人容易理解其内涵。那么图标测试用例要考虑的重点有哪些呢,以下所提供的几点可以作为参考。
                      . 图标是否符合常规的表达习惯。
                      . 不同的目标是否采用不同的图标。
                      . 图标是否具有清晰的轮廓,轮廓清晰的图标可保证图像在不同背景色上都具有较好效果。
                      . 注意图标的尺寸,建议图标的尺寸小一些较好。如工具栏图标非常小,您使用简单的图像,以直观方式显示图像即可清晰地表达图标的含义,而不必使用其他的复杂方式。Windows XP图标有四种尺寸,建议使用以下四种尺寸:48×48像素,32×32像素,24×24像素以及16×16像素。
                      . 建议图标的外形与实际功能相似,应尽量避免抽象。这样的图标可以使用户很轻松、容易地认识此图标。
                      . 在图标上是否加有标注。
                      鼠标测试
                      鼠标问题经常被人们忽略,但我们无时无刻都不能离开它。用户会把鼠标移进、移出窗口,或当光标在窗口中,用户按下、释放鼠标键,鼠标是否准确、灵活,对一个测试人员来说必将提到日程上来。
                      以下所提供的几点可以作为鼠标测试的参考。
                      . 在整个交互式语境中,是否可以识别鼠标操作;
                      . 如果要求多次点击鼠标,是否能够在语境中正确识别;
                      . 如果鼠标有多个按钮,是否能够在语境中正确识别;
                      . 光标、处理指示器和识别指针是否随操作恰当地改变;
                      . 点击选中而不是滑动停留选中;
                      . 支持滑轮(鼠标中间的滚动轮)上下翻动操作;
                      . 对于相同种类的元素采用相同的操作激活;
                      . 用沙漏表示系统忙,用手型表示可以点击;
                      . 鼠标无规则点击时是否会产生无法预料的结果;
                      . 单击鼠标右键是否弹出菜单,取消右键是否隐藏弹出的菜单。
                      文字测试
                      文字在视觉上向用户传达作者的意图和各种信息,如果文字的组合巧妙,在视觉传达的过程中能够给人以美的感受,从而获得良好的心理反应。反之,则使人看后心里不愉快,视觉上难以产生美感,甚至会让用户拒而不看,这样势必难以传达出作者想表现的意图和构想。
                      要达到这一目的必须考虑文字的整体诉求效果,给人以清晰的视觉印象。因此,在测试过程中,测试人员应该注意文字是否繁杂零乱,使人易认、易懂,测试文字主要依靠软件设计标准,观察文字是否有效地传达作者的意图,表达设计的主题和构想意念。
                      文字测试是测试软件中是否拼写正确,是否易懂,不存在二义性,没有语法错误;文字与内容是否有出入等等,包括图片文字。比如,“请输入正确的证件号码”中何谓正确的证件号码。证件可以为身份证、驾驶证,也可为军官证,如果改为“请输入正确的身份证号码”用户就比较容易理解了。
               界面测试典型用例
               现在介绍一个菜单界面测试的模拟,软件人员开发了第一版的软件,如下图所示为菜单测试用例,供测试人员测试,此时测试人员将根据上面章节中提到的测试用例来找出软件的问题。
               
               菜单测试用例
               菜单界面测试用例设计范例如上表所示。
               这个测试用例可以适用不同的菜单,如下表所示是针对菜单界面测试所设计的一个例子。这个测试用例通过测试人员测试,会找出更多的缺陷。
               
               菜单界面用例测试用例
               



更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2025 All Rights Reserved
软考在线版权所有