免费智能真题库 > 历年试卷 > 软件评测师 > 2015年下半年 软件评测师 上午试卷 综合知识
  第51题      
  知识点:   安全性   安全性测试   单元测试   集成测试   可靠性   确认测试   系统测试   可靠性测试
  关键词:   安全   单元测试   集成测试   可靠性   系统测试   测试        章/节:   软件测试类型       

 
以下不属于系统测试的是(51)。
单元测试
集成测试
安全性测试
可靠性测试
确认测试
⑥验证测试
 
 
  A.  ①②③④⑤⑥
 
  B.  ①②③④
 
  C.  ①②⑤⑥
 
  D.  ①②④⑤⑥
 
 
 

 
  第7题    2013年下半年  
   40%
(7)不是单元测试主要检查的内容。
  第53题    2020年下半年  
   39%
以下关于验收测试的叙述中,不正确的是(53)。
  第65题    2014年下半年  
   29%
集成测试关注的问题不包括 (65) 。
   知识点讲解    
   · 安全性    · 安全性测试    · 单元测试    · 集成测试    · 可靠性    · 确认测试    · 系统测试    · 可靠性测试
 
       安全性
        安全性是指软件产品在指定使用环境下,获得可接受的对人类、事务、软件、财产或环境有害的风险级别的能力。
 
       安全性测试
        测试应用程序的体系结构和设计可以消除很多与设计有关的漏洞,从而提高应用程序的整体安全性。设计时修复漏洞要比在开发后期解决问题更为简单,也更经济,因为开发后期可能要进行大量的重新工程处理。开发时如果考虑一些与目标部署环境相关的设计以及该环境定义的安全策略,可确保应用程序的部署更加平稳和安全。如果应用程序已创建完毕,安全测试可修复漏洞并完善未来的设计。
        一个完整的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系统的安全需求。
 
       单元测试
        单元测试又称模块测试,是针对软件设计的最小单位——程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。
        . 单元测试的内容。
        在进行单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。这要求对所有的局部的和全局的数据结构、外部接口和程序代码的关键部分,都要进行桌面检查和严格的代码审查。
        在单元测试中进行的测试工作如下图所示,需要在五个方面对所测模块进行检查。
        
        单元测试的工作
        ①模块接口测试。
        在单元测试的开始,应对通过所测模块的数据流进行测试。如果数据不能正确地输入和输出,就谈不上进行其他测试。为此,对模块接口可能需要如下的测试项目:调用所测模块时的输入参数与模块的形式参数在个数、属性、顺序上是否匹配;所测模块调用子模块时,它输入给子模块的参数与子模块中的形式参数在个数、属性、顺序上是否匹配;是否修改了只作输入用的形式参数;输出给标准函数的参数在个数、属性、顺序上是否正确;全局量的定义在各模块中是否一致;限制是否通过形式参数来传送。
        当模块通过外部设备进行输入/输出操作时,必须附加如下的测试项目:文件属性是否正确;OPEN语句与CLOSE语句是否正确;规定的I/O格式说明与I/O语句是否匹配;缓冲区容量与记录长度是否匹配;在进行读写操作之前是否打开了文件;在结束文件处理时是否关闭了文件;正文书写/输入错误,以及I/O错误是否检查并做了处理。
        ②局部数据结构测试。
        模块的局部数据结构是最常见的错误来源,应设计测试用例以检查以下各种错误:不正确或不一致的数据类型说明;使用尚未赋值或尚未初始化的变量;错误的初始值或错误的缺省值;变量名拼写错或书写错;不一致的数据类型。可能的话,除局部数据之外的全局数据对模块的影响也需要查清。
        ③路径测试。
        由于通常不可能做到穷举测试,所以在单元测试期间要选择适当的测试用例,对模块中重要的执行路径进行测试。应当设计测试用例查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。对基本执行路径和循环进行测试,可以发现大量的路径错误。
        常见的不正确计算有:运算的优先次序不正确或误解了运算的优先次序;运算的方式错,即运算的对象彼此在类型上不相容;算法错;初始化不正确;运算精度不够;表达式的符号表示不正确。
        常见的比较和控制流错误有:不同数据类型的相互比较;不正确的逻辑运算符或优先次序;因浮点数运算精度问题而造成的两值比较不等;关系表达式中不正确的变量和比较符;“差1”错,即不正确地多循环一次或少循环一次;错误的或不可能的循环中止条件;当遇到发散的迭代时不能中止的循环;不适当地修改了循环变量等。
        ④错误处理测试。
        比较完善的模块设计要求能预见出错的条件,并设置适当的出错处理,以便在一旦程序出错时,能对出错程序重做安排,保证其逻辑上的正确性。这种出错处理也应当是模块功能的一部分。若出现下列情况之一,则表明模块的错误处理功能包含有错误或缺陷:出错的描述难以理解;出错的描述不足以对错误定位,不足以确定出错的原因;显示的错误与实际的错误不符;对错误条件的处理不正确;在对错误进行处理之前,错误条件已经引起系统的干预等。
        ⑤边界测试。
        在边界上出现错误是常见的。例如,在一段程序内有一个n次循环,当到达第n次重复时就可能会出错。另外,在取最大值或最小值时也容易出错。因此,要特别注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。
        此外,如果对模块运行时间有要求的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。这类信息对进行性能评价是十分有用的。
        虽然模块测试通常是由编写程序的人自己完成的,但是项目负责人应当关心测试的结果。所有测试用例和测试结果都是模块开发的重要资料,必须妥善保存。
        总之,模块测试针对的程序规模较小,易于查错;发现错误后容易确定错误的位置,易于排错,同时多个模块可以并行测试。做好模块测试可为后续的测试打下良好的基础。
        . 单元测试的步骤。
        通常单元测试是在编码阶段进行的。在源程序代码编制完成,经过评审和验证,确认没有语法错误之后,就开始进行单元测试的测试用例设计。利用设计文档,设计可以验证程序功能、找出程序错误的多个测试用例。对于每一组输入,应有预期的正确结果。
        模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,用一些辅助模块去模拟与所测模块相联系的其他模块。这些辅助模块分为两种:
        驱动模块(driver)——相当于所测模块的主程序。它接收测试数据,把这些数据传送给所测模块,最后再输出实测结果。
        桩模块(stub)——也叫做存根模块。用以代替所测模块调用的子模块。桩模块可以做少量的数据操作,不需要把子模块所有功能都带进来,但不允许什么事情也不做。
        所测模块、与它相关的驱动模块及桩模块共同构成了一个“测试环境”,如下图所示。驱动模块和桩模块的编写会给测试带来额外的开销。因为它们在软件交付时不作为产品的一部分一同交付,而且它们的编写需要一定的工作量。特别是桩模块,不能只简单地给出“曾经进入”的信息。为了能够正确地测试软件,桩模块可能需要模拟实际子模块的功能,这样,桩模块的建立就不是很轻松了。
        
        单元测试的测试环境
        模块的内聚程度高,可以简化单元测试过程。如果每一个模块只完成一种功能,则需要的测试用例数目将明显减少,模块中的错误也容易被预测和发现。
        当然,如果一个模块要完成多种功能,且以程序包(package)的形式出现的也不少见,这时可以将这个模块看成由几个小程序组成。必须对其中的每个小程序先进行单元测试要做的工作,对关键模块还要做性能测试。对支持某些标准规程的程序,更要着手进行互联测试。有人把这种情况特别称为模块测试,以区别单元测试。
 
       集成测试
        集成测试也叫做组装测试或联合测试。通常,在单元测试的基础上,需要将所有模块按照概要设计说明书和详细设计说明书的要求进行组装。
        . 组装时需要考虑的问题。
        ①在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
        ②一个模块的功能是否会对另一个模块的功能产生不利的影响;
        ③各个子功能组合起来,能否达到预期要求的父功能;
        ④全局数据结构是否有问题;
        ⑤单个模块的误差累积起来,是否会放大,以至达到不能接受的程度。
        因此,在单元测试的同时可进行集成测试,发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统。
        子系统的集成测试称为部件测试,它所做的工作是要找出组装后的子系统与系统需求规格说明之间的不一致。
        选择什么方式把模块组装起来形成一个可运行的系统,直接影响到模块测试用例的形式、所用测试工具的类型、模块编号的次序和测试的次序以及生成测试用例的费用和调试的费用。
        . 模块组装成为系统的方式。
        模块组装成为系统的方式有两种:一次性组装方式和增殖式组装方式。
        ①一次性组装方式(big bang)。
        它是一种非增殖式组装方式,也叫做整体拼装。使用这种方式,首先对每个模块分别进行模块测试,再把所有模块组装在一起进行测试,最终得到要求的软件系统。例如,有一个模块系统结构,如下图(a)所示。其单元测试和组装顺序如下图(b)所示。
        
        一次性组装方式
        在如上图(b)中,模块d1,d2,d3,d4,d5是对各个模块做单元测试时建立的驱动模块,s1,s2,s3,s4,s5是为单元测试而建立的桩模块。这种一次性组装方式试图在辅助模块的协助下,在分别完成模块单元测试的基础上,将所测模块连接起来进行测试。但是由于程序中不可避免地存在涉及模块间接口、全局数据结构等方面的问题,所以一次试运行成功的可能性并不很大。其结果是,发现有错误,却茫然找不到原因。查错和改错都会遇到困难。
        ②增殖式组装方式。
        这种组装方式又称渐增式组装,是首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统,在组装的过程中边连接边测试,以发现连接过程中产生的问题。最后通过增殖逐步组装成为要求的软件系统。
        . 自顶向下的增殖方式。这种组装方式是将模块按系统程序结构,沿控制层次自顶向下进行组装。其步骤如下:首先以主模块作为所测模块兼驱动模块,所有直属于主模块的下属模块全部用桩模块代替,对主模块进行测试。再采用深度优先(如下图所示为自顶向下的增殖方式)或广度优先的策略,用实际模块替换相应的桩模块,再用桩模块代替它们的直接下属模块,与已测试的模块或子系统组装成新的子系统。然后,进行回归测试(即重新执行以前做过的全部测试或部分测试),排除组装过程中引入新的错误的可能。最后,判断是否所有的模块都已组装到系统中。是,则结束测试;否则,转到B去执行。
        
        自顶向下的增殖方式
        自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。在一个功能划分合理的程序模块结构中,判断常常出现在较高的层次里,因而,能够较早地遇到这种问题。如果主要控制有问题,尽早发现它能够减少以后的返工,这是十分必要的。如果选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能,可先对逻辑输入的分支进行组装和测试,检查和克服潜藏的错误和缺陷,验证其功能的正确性,就为其后对主要加工分支的组装和测试提供了保证。此外,功能可行性较早地得到证实,还能够增强开发者和用户成功的信心。
        . 自底向上的增殖方式。这种组装方式是从程序模块结构的最底层模块开始组装和测试。因为模块是自底向上进行组装的,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测试完成,所以不再需要桩模块。在模块的测试过程中需要从子模块得到的信息可以通过直接运行子模块得到。自底向上增殖的步骤如下:首先由驱动模块控制最底层模块的并行测试;也可以把最底层模块组合成实现某一特定软件功能的簇,由驱动模块控制它进行测试。再用实际模块代替驱动模块,与它已测试的直属子模块组装成为子系统。然后,为子系统配备驱动模块,进行新的测试。最后判断是否已组装到达主模块。是,则结束测试;否则,执行B。
        以如下图一(a)所示的一次性组装方式系统结构为例,可以用如下图二说明自底向上组装和测试的顺序。
        
        一次性组装方式
        
        自底向上的增殖方式
        . 混合增殖式测试。自顶向下增殖的方式和自底向上增殖的方式各有优缺点。一般来讲,一种方式的优点是另一种方式的缺点。
        自顶向下增殖方式的缺点是需要建立桩模块。要使桩模块能够模拟实际子模块的功能十分困难,因为,桩模块在接收了所测模块发送的信息后,需要按照它所代替的实际子模块功能返回应该回送的信息,这必将增加建立桩模块的复杂度,而且导致增加一些附加的测试。同时,涉及复杂算法和真正输入/输出的模块一般在底层,它们是最容易出问题的模块,到组装和测试的后期才遇到这些模块,一旦发现问题,就会导致过多的回归测试。而自顶向下增殖方式的优点是能够较早地发现主要控制方面的问题。
        自底向上增殖方式的缺点是“程序一直未能作为一个实体存在,直到最后一个模块加上去后才形成一个实体”。就是说,在自底向上组装和测试的过程中,对主要的控制直到最后才接触到。这种方式的优点是不需要桩模块,而建立驱动模块一般比建立桩模块容易,同时由于涉及到复杂算法和真正输入/输出的模块最先得到组装和测试,可以把最容易出问题的部分在早期解决。此外自底向上增殖的方式可以实施多个模块的并行测试,提高测试效率。因此,通常是把以上两种方式结合起来进行组装和测试。
        在进行集成测试时,测试者应当确定关键模块,对这些关键模块及早进行测试。关键模块至少应具有以下几种特征之一:
        . 满足某些软件需求;
        . 在程序的模块结构中位于较高的层次(高层控制模块);
        . 较复杂、较易发生错误;
        . 有明确定义的性能要求。
        在做回归测试时,也应该集中测试关键模块的功能。
        . 集成测试的组织和实施。
        集成测试是一种正规测试过程,必须精心计划,并与单元测试的完成时间协调起来。在制定测试计划时,应考虑如下因素:
        ①采用何种系统组装方法来进行集成测试。
        ②集成测试过程中连接各个模块的顺序。
        ③模块代码编制和测试进度是否与集成测试的顺序一致。
        ④测试过程中是否需要专门的硬件设备。
        解决了上述问题之后,就可以列出各个模块的编制、测试计划表,标明每个模块单元测试完成的日期、首次集成测试的日期、集成测试全部完成的日期、以及需要的测试用例和所期望的测试结果。
        在缺少软件测试所需要的硬件设备时,应检查该硬件的交付日期是否与集成测试计划一致。例如,若测试需要数字化仪和绘图仪,则相应的测试应安排在这些设备能够投入使用之时,并要为硬件的安装和交付使用保留一段时间,以留下时间余量。此外,在测试计划中需要考虑测试所需软件(驱动模块、桩模块、测试用例生成程序等)的准备情况。
        . 集成测试完成的标志。
        集成测试完成的标志主要有以下几项。
        ①成功地执行了测试计划中规定的所有集成测试。
        ②修正了所发现的错误。
        ③测试结果通过了专门小组的评审。
        集成测试应由专门的测试小组来进行,测试小组由有经验的系统设计人员和程序员组成。整个测试活动要在评审人员出席的情况下进行。
        在完成预定的集成测试工作之后,测试小组应负责对测试结果进行整理、分析,形成测试报告。测试报告中要记录实际的测试结果在测试中发现的问题、解决这些问题的方法以及解决之后再次测试的结果。此外还应提出目前不能解决、还需要管理人员和开发人员注意的一些问题,提供测试评审和最终决策,以提出处理意见。
        集成测试需要提交的文档有集成测试计划、集成测试规格说明和集成测试分析报告。
 
       可靠性
        在指定条件下使用时,软件产品维持规定的性能级别的能力。
               成熟性
               成熟性是指软件产品避免因软件中错误的发生而导致失效的能力。
               容错性
               容错性是指在软件发生故障或者违反指定接口的情况下,软件产品维持规定的性能级别的能力。
               易恢复性
               易恢复性是指在失效发生的情况下,软件产品重建规定的性能级别并恢复受直接影响的数据的能力。
               可靠性依从性
               可靠性依从性是指软件产品依附于同可靠性相关的标准、约定或规定的能力。
 
       确认测试
        确认测试的任务是验证软件的功能和性能及其他特性是否与用户的要求一致。对软件的功能和性能要求在软件需求规格说明中明确规定。确认测试一般包括有效性测试和软件配置复查,确认测试一般由独立的第三方测试机构进行。
        . 进行有效性测试。
        有效性测试是在模拟的环境下,运用黑盒测试的方法,验证所测软件是否满足需求规格说明书列出的需求。为此,需要制定测试计划、测试步骤以及具体的测试用例。通过实施预定的测试计划和测试步骤,确定软件的特性是否与需求相符,确保所有的软件功能需求都能得到满足,所有的软件性能需求都能达到。所有的文档都是正确且便于使用的。同时,对其他软件需求,例如可移植性、可靠性、易用性、兼容性、可维护性等,也都要进行测试,确认是否满足。
        在全部软件测试的测试用例运行完后,所有的测试结果可以分为两类。
        ①测试结果与预期的结果相符。这说明软件的这部分功能或性能特征与需求规格说明书相符合,从而接受了这部分程序。
        ②测试结果与预期的结果不符。这说明软件的这部分功能或性能特征与需求规格说明不一致,因此要为它提交一份问题报告。
        . 软件配置复查。
        软件配置复查的目的是保证软件配置的所有成分都齐全,各方面的质量都符合要求,具有维护阶段所必须的细节,而且已经编排好分类的目录。
        在确认测试的过程中,还应当严格遵守用户手册和操作手册中规定的使用步骤,以便检查文档资料的完整性和正确性。
 
       系统测试
        系统测试是将通过集成测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际或者模拟运行(使用)环境下,对计算机系统进行一系列测试。
        系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统定义不符合或与之矛盾的地方。
 
       可靠性测试
        软件可靠性是软件质量的一个重要标志。美国电气和电子工程师协会(IEEE)将软件可靠性定义为:系统在特定的环境下,在给定的时间内无故障地运行的概率。软件可靠性涉及软件的性能、功能、可用性、可服务性、可安装性,以及可维护性等多方面特性,是对软件在设计、生产以及在它所预定环境中具有所需功能的置信度的一个度量。
        可靠性测试一般伴随着强壮性测试,是评估软件在运行时的可靠性,通过测试确认平均无故障时间(Mean Time to Failure,MTTF)、故障发生前平均工作时间(Mean-Time-To-First-Failure,MTTFF)或因故障而停机的时间(Mean Time To Repairs,MTTR)在一年中应不超过多少时间。可靠性测试强调随机输入,并通过模拟系统实现,很难通过实际系统的运行来实现。
   题号导航      2015年下半年 软件评测师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第51题    在手机中做本题