在整理笔记排版的时候发现,笔记有点多,就分成了上下,如有问题,欢迎留言。
希望这份资料能带给大家帮助!
1.单元测试
①单元测试定义与目标
定义:单元测试是对软件基本的组成单元进行独立的测试,单元测试于编码同步进行
主要目标:单元模块被正确编码(测试代码的功能性)
原因:
尽早发现错误——成本低、易发现、修正容易
检查代码是否符合设计与规范——有利于将来代码维护
②单元测试的任务
单元独立执行路径的测试
单元局部数据结构的测试
单元接口测试
单元边界条件的测试
单元容错性测试
内存分析
具体可能涉及的错误见书上P98
③单元测试的种类
静态测试技术、动态测试、类测试、分层单元测试(Action层、数据访问层、Servlet)
2.静态测试
静态测试技术:不运行被测试程序,对代码通过检查、阅读进行分析
编码的标准和规范
标准:建立起来必须遵守的规则
规范:建议最佳做法,推荐更好方式
实施代码规范的原因: 可靠性;可读性和可维护性;可移植性
3.代码评审
代码走查:程序员和测试员组成审查小组,通过逻辑运行程序。
第一步:小组成员提前阅读设计规格书、程序文本等相关文档。
第二步:利用测试用例,使程序逻辑运行,记录程序的踪迹,发现、讨论、解决问题
代码审查:程序员和测试员组成审查小组。
第一步:小组成员提前阅读设计规格书、程序文本等相关文档;
第二步:召开程序审查会,开发人员读程序,审查小组讨论、发现、解决问题。
代码审查是一种正式的评审活动,而代码走查的讨论过程是非正式的。
4.动态测试
动态测试:将程序真正运行起来,需要设计系列的测试用例保证测试的完整性和有效性。
驱动程序和桩程序
驱动程序:也被称为驱动模块,用以模拟被测模块的上级模块,能够调用被测模块。对底层或子层模块进行测试所编写的调用这些模块的程序
桩程序:用以模拟被测模块工作过程中所调用的下层模块。对顶层或上层模块进行测试时编写的替代下层模块的程序
通过驱动程序和桩程序就可以隔离被测试单元,而又能使测试继续下去。驱动程序作为入口,可以设置不同的数据参数,来完成各种测试用例。
类测试
类测试,要验证类的实现是否和该类的说明完全一致
5.(了解)分层单元测试
6.单元测试工具:xUnit工具家族
JUnit(Java);CppUnit(C++);NUnit(C#(.NET));HtmlUnit(HTML);JsUnit(JavaScript);PhpUnit(PHP);PerlUnit(Perl);XmlUnit(XML)
GoogleTest单元测试框架
JUnit主要特性
使测试代码与产品代码分开,有利于代码的打包发布和测试代码的管理;
提供了一个编写测试类的框架,使测试代码的编写更加方便
易于集成到程序构建过程中,Junit和Ant的结合还可以实施增量开发
可二次开发
具有很强的扩展性
具体的测试见书上P121-124
7.系统集成的模式与方法
系统集成测试:白盒测试与黑盒测试结合的应用场景。在自底向上集成早期,白盒测试较多;随着集成测试规模扩大,黑盒测试逐渐占据主导地位。
①集成测试的两种模式:
非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在⼀起结合成所要的程序,如⼤棒模式
渐增式测试模式:把下⼀个要测试的模块同已经测试好的模块结合起来进⾏测试,测试完以后再把下⼀个应该测试的模块结合进来测试。
各自优缺点:
1)渐进式需要编写的软件较多,工作量较大;非渐进式测试开销较小;
2)渐进式发现错误往往跟最近加进来的模块有关;而非渐进式发现错误较难诊断;
3)渐进式发现模块间错误较早;而非渐进式则晚;
4)渐进式测试的更彻底;
5)渐进式需要更多的机器时间;
6)非渐进式可以并行测试;而渐进式则不能;
②渐增式测试模式的具体实践:
自顶向下:
优点:①不需要写驱动程序;
②能够在测试早期实现并验证系统主要功能,并且能在早期发现上层模块的接口错误
缺点: ①需要桩程序;
②底层模块中错误发现较晚;
③早期能不能充分展开人力;
自底向上
优缺点与自顶向下相反
③混合策略
改进的自顶向下法:基本使用自顶向下,早期使用自底向上
混合法:软件结构中较上层,使用自顶向下;中交下层,使用自底向上;如三明治集成方法
优点:将自顶向下和自底向上有机结合,不需要写桩程序是由于测试初期自底向上已经验证了底层模块的正确性。
缺点:在真正集成之前每个独立的模块没有被完全测试过。
④持续集成
特点:软件开发中各模块不是同时完成,而是根据进度将已完成模块尽早集成
自顶向下集成时,先期完成模块是后期模块的驱动程序;
自底向上集成时,先期完成模块是后期模块的桩程序;
优点:有助于发现BUG,避免集成阶段消灭BUG所消耗的时间。
NOTE:
1.代码评审的案例
空指针保护错误——按照正确规则写用常量、变量
格式化数字错误——写一个Util工具类实现常用的数据转换方法
字符串或数组越界错误——遇到截取字符串或取数组指定下标值之前一定进行异常保护
资源不合理使用——阅读源代码、压力测试、运行服务器一段时间后查看日志
不当使用synchronized导致系统性能下降或崩溃
第六章
1,功能测试
要求:客户需求为导向,前面理解功能特性。
要点:功能逻辑清晰、符合使用者习惯
系统各种状态按业务流程正常变化,并保持稳定
每项功能符合实际要求
系统的界面清晰、美观
菜单按钮操作正常、灵活,能处理一些异常操作
能接受正确的数据输入,对异常输入有容错处理
数据的输出结构准确,格式清晰,可以保存和读取
程序安装、启动正常,有相应提示框、错误提示系统测试的脚本
(如实验4)自动化测试
2.一套Web功能测试工具
Selenium适合进行功能测试、验收测试,由几个测试工具承担不同的角色。
Selenium的主要优势:
(1)适合Web应用的测试,可直接运行在浏览器上。
(2)跨平台,支持多操作系统和各种浏览器Internet Explorer、Mozilla和Firefox。
(3)支持分布式应用的测试,构造一个完整的解决方案。
(4)支持两种开发脚本的模式,使测试即可以完全在浏览器内运行,也可以脱离浏览器在远程机器上运行。
(5)支持多种脚本语言。
以Selenium IDE举例,录制测试脚本、执行测试脚本、查看测试结果
Selenium test runner脚本,就是用HTML中简单的表格格式来编写的测试用例。
Selenium驱动模式脚本支持多种编程语言,在浏览器之外的一个单独的进程中运行。
Selenium测试用例开发涉及4类文件:主文件:TestRunner.html/TestRunner.hta;Test suite(测试套件)和Test case(测试用例)文件;引擎库js文件;user-extensions.js
4.回归测试
回归测试是在有程序修改的情况下保证原有功能正常的一种测试策略和方法
目的:为了发现回归缺陷而进行的测试
软件修改的正确性是指:①所做的修改达到了预定目的,如错误得到了改正,新功能得到了实现,能够适应新的运行环境;
②不影响软件原有功能的正确性;
策略及其方法:
①再测试全部用例:最安全,成本最高
②基于风险选择测试:基于一定的风险
③基于操作剖面选择测试:优先选择重要功能或高频使用功能进行测试
④再测试修改的部分:效率最高,风险最大
⑤更智能的选择方法(结合多种回归策略)
3.性能测试
性能测试是为了发现系统性能问题或获取系统性能相关指标而进行的测试。
①系统性能指标
请求响应时间、事务响应时间、数据吞吐量
②系统负载及其模式:
系统负载可以看作:并发用户并发数量+思考时间+每次请求发送的数据量+负载模式
③性能测试的基本过程
确定性能测试需求,包括确定哪些性能指标需要度量以及系统会承受哪些负载
根据测试需求,选择测试工具和开发相应的测试脚本
建立性能测试负载模型,就是确定并发虚拟用户数量、每次请求数量等
执行性能测试,多次运行性能测试负载模型
提交性能测试报告
4.安全性测试
软件安全性测试就是检验系统权限设置有效性、防范⾮法⼊侵的能⼒、数据备份和恢复能⼒等,设法找出上述各种安全性漏洞。
安全性测试的范围:①安全功能测试; ②安全漏洞测试;
两种级别的安全性:①应用程序级别的安全性; ②系统级别的安全性;
安全性测试方法:①静态的代码分析方法;②动态的渗透测试;
或者:①基于漏洞的方法;②基于威胁的方法;Web的安全性测试中需要考虑的情形:数据加密;登录或身份验证;输入验证;SQL注入;超时限制;目录;操作留痕
5.可靠性测试
可靠性:产品在规定的条件下和规定时间内完成规定功能的能力。
软件可靠性的三个要素:规定的时间;规定的环境条件;规定的功能
软件可靠性测试:根据软件系统可靠性结构、寿命类型和各单元的可靠性试验信息,利用概率统计方法,评估出系统的可靠性特征量。
错误发现率DDP=测试发现的错误数量/已知的全部错误数量
6.容错性测试
容错性测试(Fault-tolrent test)是检查软件在异常条件下自身是否具有防护性的措施或者某种灾难性恢复的手段。
7.兼容性测试
兼容性测试: 验证软件之间是否正确地交互和共享信息
1.验收测试
验收测试是在软件产品完成了功能测试和系统测试之后,产品发布之前所进行的软件测试活动
验收测试步骤
(1)在需求分析阶段建立测试计划,根据软件需求和验收要求编制验收测试计划,并让客户参与计划评审,直至通过。
(2)建立测试环境,完成测试用例的设计,并经过评审。
(3)准备测试数据,执行测试用例,记录测试结果。
(4)分析测试结果,根据验收通过准则分析测试结果,做出验收是否通过及测试评价。
2.用户界面的要素:符合标准和规范、直观性、一致性、灵活性、舒适性、正确性、实用性
第八章1.软件本地化:将一个软件产品按特定国家的需求进行全面定制的过程
①本地化与国际化
支持国际化有下列特性:
支持Unicode字符集
分离程序代码和显示内容
消除硬代码等
②国际化标准
切换语言的机制
与语言无关的输出接口
与语言无关的输入接口和标准的输入协议
资源文件的国际化
支持和包容本地化数据模型
1.测试自动化及其框架
自动化测试:把以人为驱动的测试行为转化为机器执行的一种过程,即模拟手工测试步骤,通过执行由程序语言编制的测试脚本,自动完成软件的单元测试、功能测试、负载测试或性能测试等全部工作。
测试自动化:测试全过程的自动化和测试管理工作的自动化
测试自动化的优势
①运行速度快,是手动无法相比的;
②测试结果准确;
③高复用性;
④永不疲劳;
⑤可靠;
⑥独特的能力;
带来的益处:
①测试周期缩短;
②更高质量的产品;
③软件过程更规范;
④提高团队士气;
⑤节省人力资源,降低企业成本;
⑥充分利用硬件资源,降低企业成本;
2.脚本技术
线性脚本
线性脚本是录制手工执行的测试用例得到的脚本,线性脚本适合于简单的测试、一次性测试,多用于脚本的初始化,或者演示等。
结构化脚本
类似于结构化程序设计,具有各种逻辑结构,而且具有函数调用功能,具有很好的可重用性、灵活性,易于维护。
数据驱动脚本
数据驱动脚本,将测试脚本和数据分离开来,测试输入数据存储在独立的文件中。
关键字驱动脚本
关键字驱动脚本,是数据驱动脚本的逻辑扩张,实际上是封装了各种基本的操作,每个操作由相应的函数实现,好处是脚本编写的效率会有很大的提高,脚本维护起来也容易,而且构成简单
3.测试自动化系统的基本结构
构建、存放程序软件包和测试软件包的文件服务器
存储测试用例和测试结果的数据库服务器
执行测试的运行环境——测试试验室,或一组测试用的服务器或PC
控制服务器
客户端程序
4.测试自动化系统的构成
六部分:文件服务器、数据库服务器、控制服务器、Web服务器、测试实验室、客户端程序
①文件服务器:存放程序软件包和测试软件包
②数据库服务器:存储测试用例和测试结果
③测试实验室/一组测试用的服务器/PC:执行测试的环境
④控制服务器:测试的执行、调度,测试用例的读取,命令的发布
⑤Web服务器:显示测试结果,生成统计报表、结果曲线
⑥客户端服务器:编写特殊软件来执行测试结果或及逆行对比工作、分析工作
5.测试自动化普遍存在的问题
①不正确的观念或不现实的问题
②缺乏具有良好素质、经验的测试人才
③测试工具本身的质量问题影响测试的质量
④没有进行有效地、充分的培训
⑤没有考虑到公司的实际情况、盲目引入测试工具
⑥没有形成一个良好的使用测试工具的环境
⑦其他技术问题和组织问题