├── LICENSE ├── README.md ├── 第一章 ├── 1_10_测试的流程与计划.md ├── 1_1_大型组织.png ├── 1_1_小型组织.png ├── 1_1_软件测试发展史.md ├── 1_2_软件测试的定义、目的、对象与分类.md ├── 1_3_软件测试环境.md ├── 1_4_软件测试信息流程.png ├── 1_4_软件测试的时间、信息流程与周期性.md ├── 1_5_软件测试的停止依据.md ├── 1_6_软件测试的原则.md ├── 1_7_H 模型.png ├── 1_7_V 模型.png ├── 1_7_W 模型.png ├── 1_7_软件的开发与测试模型.md ├── 1_7_软件项目开发过程.png ├── 1_8_软件质量的概念、范围与标准.md └── 1_9_过程质量标准模型.md ├── 第三章 ├── 3_1_单元测试详解.md ├── 3_1_软件开发流程.png ├── 3_2_广度优先.png ├── 3_2_深度优先.png ├── 3_2_结构图.png ├── 3_2_自底向上.png ├── 3_2_集成测试.png ├── 3_2_集成测试详解.md └── 3_3_系统测试详解.md └── 第二章 ├── 2_1_测试环境的备份与恢复.md ├── 2_2_软件测试的策略.md ├── 2_3_软件测试的方法.md ├── 2_3_静态结构分析.png ├── 2_4_软件测试用例详解.md ├── 2_5_黑盒测试技术详解.md ├── 2_6_判定条件覆盖_1.png ├── 2_6_判定条件覆盖_2.png ├── 2_6_判定条件覆盖_3.png ├── 2_6_判定条件覆盖_4.png ├── 2_6_判定覆盖_1.png ├── 2_6_判定覆盖_2.png ├── 2_6_判定覆盖_3.png ├── 2_6_条件组合覆盖.png ├── 2_6_条件覆盖_1.png ├── 2_6_条件覆盖_2.png ├── 2_6_条件覆盖_3.png ├── 2_6_流程图.png ├── 2_6_白盒测试技术分类.png ├── 2_6_白盒测试技术详解.md ├── 2_6_语句覆盖.png ├── 2_7_软件缺陷分布位置饼状图.png ├── 2_7_软件缺陷生命周期.png └── 2_7_软件缺陷详解.md /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 软件测试基础学习笔记 2 | 3 | 各位计算机领域的工作者们、各位朋友们,大家好!我是**微软 Windows 预览体验成员 (Microsoft Windows Insider)** Ling Gao,在参与 Windows 10 系统测试工作的 2 年多时间中,我共计提交了 500 余个软件缺陷报告与建议,并且多次荣登全球 Windows Insider 排行榜前 10 名,为 Microsoft Windows 系统的蓬勃发展做出了一些微小的贡献。 4 | 5 | 下方是我的**个人软件测试学习笔记**,为了整理与校对这些笔记,我花费了很长时间,毕竟 **“追求完美”** 是每一位软件测试工程师都应当具备的基本态度。笔记中的所有图片全部由我本人自行绘制,我希望这些笔记可以为 **“以软件测试工作为职业路径”** 的朋友们提供一些学习方面的帮助。 6 | 7 | 在此,我衷心感谢中国河北师范大学**李晓鹏教师**与中国科学院**曹红杏硕士**的言传身教,感谢各位朋友们的支持。 8 | 9 | > 作者 - **Ling Gao ([高楷修](https://answers.microsoft.com/zh-hans/profile/4e1113c0-eb29-4e90-9782-f1931bae8489))** 10 | > 师承 - **XiaoPeng Li ([李晓鹏](http://software.hebtu.edu.cn/a/2013/03/20/1494554962365.html)) | HongXing Cao ([曹红杏](http://www.scholat.com/caohx))** 11 | > 学校 - **HNIST_SISE ([湖南理工学院](http://www.hnist.cn/) [信息科学与工程学院](http://sice.hnist.cn/))** 12 | > 许可证 - **[Creative Commons Zero v1.0 Universal](https://github.com/Lingggao/Software-Testing-Basics/blob/master/LICENSE)** 13 | 14 | # 目录 15 | 16 | ### 新手村 17 | 18 | - [**§ 1.1 - 软件测试发展史**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_1_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%8F%91%E5%B1%95%E5%8F%B2.md#-11---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%8F%91%E5%B1%95%E5%8F%B2) 19 | - [一、软件测试行业发展历程](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_1_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%8F%91%E5%B1%95%E5%8F%B2.md#%E4%B8%80%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%A1%8C%E4%B8%9A%E5%8F%91%E5%B1%95%E5%8E%86%E7%A8%8B) 20 | - [二、中国软件测试发展历程(截止至 2013 年)](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_1_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%8F%91%E5%B1%95%E5%8F%B2.md#%E4%BA%8C%E4%B8%AD%E5%9B%BD%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%8F%91%E5%B1%95%E5%8E%86%E7%A8%8B%E6%88%AA%E6%AD%A2%E8%87%B3-2013-%E5%B9%B4) 21 | - [三、软件测试人才](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_1_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%8F%91%E5%B1%95%E5%8F%B2.md#%E4%B8%89%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E4%BA%BA%E6%89%8D) 22 | - [四、软件测试晋升路线](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_1_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%8F%91%E5%B1%95%E5%8F%B2.md#%E5%9B%9B%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E6%99%8B%E5%8D%87%E8%B7%AF%E7%BA%BF) 23 | - [五、测试团队组织结构](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_1_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%8F%91%E5%B1%95%E5%8F%B2.md#%E4%BA%94%E6%B5%8B%E8%AF%95%E5%9B%A2%E9%98%9F%E7%BB%84%E7%BB%87%E7%BB%93%E6%9E%84) 24 | - [**§ 1.2 - 软件测试的定义、目的、对象与分类**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_2_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%AE%9A%E4%B9%89%E3%80%81%E7%9B%AE%E7%9A%84%E3%80%81%E5%AF%B9%E8%B1%A1%E4%B8%8E%E5%88%86%E7%B1%BB.md#-12---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%AE%9A%E4%B9%89%E7%9B%AE%E7%9A%84%E5%AF%B9%E8%B1%A1%E4%B8%8E%E5%88%86%E7%B1%BB) 25 | - [一、定义](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_2_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%AE%9A%E4%B9%89%E3%80%81%E7%9B%AE%E7%9A%84%E3%80%81%E5%AF%B9%E8%B1%A1%E4%B8%8E%E5%88%86%E7%B1%BB.md#%E4%B8%80%E5%AE%9A%E4%B9%89) 26 | - [二、目的](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_2_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%AE%9A%E4%B9%89%E3%80%81%E7%9B%AE%E7%9A%84%E3%80%81%E5%AF%B9%E8%B1%A1%E4%B8%8E%E5%88%86%E7%B1%BB.md#%E4%BA%8C%E7%9B%AE%E7%9A%84) 27 | - [三、对象](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_2_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%AE%9A%E4%B9%89%E3%80%81%E7%9B%AE%E7%9A%84%E3%80%81%E5%AF%B9%E8%B1%A1%E4%B8%8E%E5%88%86%E7%B1%BB.md#%E4%B8%89%E5%AF%B9%E8%B1%A1) 28 | - [四、分类](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_2_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%AE%9A%E4%B9%89%E3%80%81%E7%9B%AE%E7%9A%84%E3%80%81%E5%AF%B9%E8%B1%A1%E4%B8%8E%E5%88%86%E7%B1%BB.md#%E5%9B%9B%E5%88%86%E7%B1%BB) 29 | - [**§ 1.3 - 软件测试环境**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_3_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83.md#-13---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83) 30 | - [一、软件测试流程](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_3_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83.md#%E4%B8%80%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E6%B5%81%E7%A8%8B) 31 | - [二、测试环境概述](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_3_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83.md#%E4%BA%8C%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%E6%A6%82%E8%BF%B0) 32 | - [三、测试环境搭建原则](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_3_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83.md#%E4%B8%89%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%E5%8E%9F%E5%88%99) 33 | - [**§ 1.4 - 软件测试的时间、信息流程与周期性**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%97%B6%E9%97%B4%E3%80%81%E4%BF%A1%E6%81%AF%E6%B5%81%E7%A8%8B%E4%B8%8E%E5%91%A8%E6%9C%9F%E6%80%A7.md#-14---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%97%B6%E9%97%B4%E4%BF%A1%E6%81%AF%E6%B5%81%E7%A8%8B%E4%B8%8E%E5%91%A8%E6%9C%9F%E6%80%A7) 34 | - [一、软件生命周期](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%97%B6%E9%97%B4%E3%80%81%E4%BF%A1%E6%81%AF%E6%B5%81%E7%A8%8B%E4%B8%8E%E5%91%A8%E6%9C%9F%E6%80%A7.md#%E4%B8%80%E8%BD%AF%E4%BB%B6%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F) 35 | - [二、软件测试时间](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%97%B6%E9%97%B4%E3%80%81%E4%BF%A1%E6%81%AF%E6%B5%81%E7%A8%8B%E4%B8%8E%E5%91%A8%E6%9C%9F%E6%80%A7.md#%E4%BA%8C%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E6%97%B6%E9%97%B4) 36 | - [三、测试信息流程](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%97%B6%E9%97%B4%E3%80%81%E4%BF%A1%E6%81%AF%E6%B5%81%E7%A8%8B%E4%B8%8E%E5%91%A8%E6%9C%9F%E6%80%A7.md#%E4%B8%89%E6%B5%8B%E8%AF%95%E4%BF%A1%E6%81%AF%E6%B5%81%E7%A8%8B) 37 | - [四、软件测试周期性](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%97%B6%E9%97%B4%E3%80%81%E4%BF%A1%E6%81%AF%E6%B5%81%E7%A8%8B%E4%B8%8E%E5%91%A8%E6%9C%9F%E6%80%A7.md#%E5%9B%9B%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%91%A8%E6%9C%9F%E6%80%A7) 38 | - [**§ 1.5 - 软件测试的停止依据**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_5_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%81%9C%E6%AD%A2%E4%BE%9D%E6%8D%AE.md#-15---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%81%9C%E6%AD%A2%E4%BE%9D%E6%8D%AE) 39 | - [一、推荐依据](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_5_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%81%9C%E6%AD%A2%E4%BE%9D%E6%8D%AE.md#%E4%B8%80%E6%8E%A8%E8%8D%90%E4%BE%9D%E6%8D%AE) 40 | - [二、推荐标准](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_5_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%81%9C%E6%AD%A2%E4%BE%9D%E6%8D%AE.md#%E4%BA%8C%E6%8E%A8%E8%8D%90%E6%A0%87%E5%87%86) 41 | - [**§ 1.6 - 软件测试的原则**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_6_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%8E%9F%E5%88%99.md#-16---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%8E%9F%E5%88%99) 42 | - [一、基本原则](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_6_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%8E%9F%E5%88%99.md#%E4%B8%80%E5%9F%BA%E6%9C%AC%E5%8E%9F%E5%88%99) 43 | - [二、补充原则](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_6_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%8E%9F%E5%88%99.md#%E4%BA%8C%E8%A1%A5%E5%85%85%E5%8E%9F%E5%88%99) 44 | - [**§ 1.7 - 软件的开发与测试模型**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_7_%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%BC%80%E5%8F%91%E4%B8%8E%E6%B5%8B%E8%AF%95%E6%A8%A1%E5%9E%8B.md#-17---%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%BC%80%E5%8F%91%E4%B8%8E%E6%B5%8B%E8%AF%95%E6%A8%A1%E5%9E%8B) 45 | - [一、软件项目开发过程分解图](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_7_%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%BC%80%E5%8F%91%E4%B8%8E%E6%B5%8B%E8%AF%95%E6%A8%A1%E5%9E%8B.md#%E4%B8%80%E8%BD%AF%E4%BB%B6%E9%A1%B9%E7%9B%AE%E5%BC%80%E5%8F%91%E8%BF%87%E7%A8%8B%E5%88%86%E8%A7%A3%E5%9B%BE) 46 | - [二、软件项目成员与角色](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_7_%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%BC%80%E5%8F%91%E4%B8%8E%E6%B5%8B%E8%AF%95%E6%A8%A1%E5%9E%8B.md#%E4%BA%8C%E8%BD%AF%E4%BB%B6%E9%A1%B9%E7%9B%AE%E6%88%90%E5%91%98%E4%B8%8E%E8%A7%92%E8%89%B2) 47 | - [三、软件开发模型](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_7_%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%BC%80%E5%8F%91%E4%B8%8E%E6%B5%8B%E8%AF%95%E6%A8%A1%E5%9E%8B.md#%E4%B8%89%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E6%A8%A1%E5%9E%8B) 48 | - [四、软件测试模型](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_7_%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%BC%80%E5%8F%91%E4%B8%8E%E6%B5%8B%E8%AF%95%E6%A8%A1%E5%9E%8B.md#%E5%9B%9B%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E6%A8%A1%E5%9E%8B) 49 | - [**§ 1.8 - 软件质量的概念、范围与标准**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_8_%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E7%9A%84%E6%A6%82%E5%BF%B5%E3%80%81%E8%8C%83%E5%9B%B4%E4%B8%8E%E6%A0%87%E5%87%86.md#-18---%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E7%9A%84%E6%A6%82%E5%BF%B5%E8%8C%83%E5%9B%B4%E4%B8%8E%E6%A0%87%E5%87%86) 50 | - [一、概念](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_8_%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E7%9A%84%E6%A6%82%E5%BF%B5%E3%80%81%E8%8C%83%E5%9B%B4%E4%B8%8E%E6%A0%87%E5%87%86.md#%E4%B8%80%E6%A6%82%E5%BF%B5) 51 | - [二、范围](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_8_%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E7%9A%84%E6%A6%82%E5%BF%B5%E3%80%81%E8%8C%83%E5%9B%B4%E4%B8%8E%E6%A0%87%E5%87%86.md#%E4%BA%8C%E8%8C%83%E5%9B%B4) 52 | - [三、标准](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_8_%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E7%9A%84%E6%A6%82%E5%BF%B5%E3%80%81%E8%8C%83%E5%9B%B4%E4%B8%8E%E6%A0%87%E5%87%86.md#%E4%B8%89%E6%A0%87%E5%87%86) 53 | - [四、产品质量标准模型](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_8_%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E7%9A%84%E6%A6%82%E5%BF%B5%E3%80%81%E8%8C%83%E5%9B%B4%E4%B8%8E%E6%A0%87%E5%87%86.md#%E5%9B%9B%E4%BA%A7%E5%93%81%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B) 54 | - [**§ 1.9 - 过程质量标准模型**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_9_%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B.md#-19---%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B) 55 | - [一、CMM 模型](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_9_%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B.md#%E4%B8%80cmm-%E6%A8%A1%E5%9E%8B) 56 | - [二、ISO 9000 标准](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_9_%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B.md#%E4%BA%8Ciso-9000-%E6%A0%87%E5%87%86) 57 | - [三、SQA 简介](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_9_%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B.md#%E4%B8%89sqa-%E7%AE%80%E4%BB%8B) 58 | - [**§ 1.10 - 测试的流程与计划**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_10_%E6%B5%8B%E8%AF%95%E7%9A%84%E6%B5%81%E7%A8%8B%E4%B8%8E%E8%AE%A1%E5%88%92.md#-110---%E6%B5%8B%E8%AF%95%E7%9A%84%E6%B5%81%E7%A8%8B%E4%B8%8E%E8%AE%A1%E5%88%92) 59 | - [一、软件测试流程](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_10_%E6%B5%8B%E8%AF%95%E7%9A%84%E6%B5%81%E7%A8%8B%E4%B8%8E%E8%AE%A1%E5%88%92.md#%E4%B8%80%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E6%B5%81%E7%A8%8B) 60 | - [二、流程详解](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_10_%E6%B5%8B%E8%AF%95%E7%9A%84%E6%B5%81%E7%A8%8B%E4%B8%8E%E8%AE%A1%E5%88%92.md#%E4%BA%8C%E6%B5%81%E7%A8%8B%E8%AF%A6%E8%A7%A3) 61 | - [三、软件测试计划](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_10_%E6%B5%8B%E8%AF%95%E7%9A%84%E6%B5%81%E7%A8%8B%E4%B8%8E%E8%AE%A1%E5%88%92.md#%E4%B8%89%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92) 62 | 63 | ### 主线任务 64 | 65 | - [**§ 2.1 - 软件测试环境的备份与恢复**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_1_%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%E7%9A%84%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D.md#-21---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%E7%9A%84%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D) 66 | - [一、备份](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_1_%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%E7%9A%84%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D.md#%E4%B8%80%E5%A4%87%E4%BB%BD) 67 | - [二、恢复](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_1_%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%E7%9A%84%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D.md#%E4%BA%8C%E6%81%A2%E5%A4%8D) 68 | - [**§ 2.2 - 软件测试的策略**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_2_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E7%AD%96%E7%95%A5.md#-22---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E7%AD%96%E7%95%A5) 69 | - [一、软件测试工作的难度](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_2_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E7%AD%96%E7%95%A5.md#%E4%B8%80%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E4%BD%9C%E7%9A%84%E9%9A%BE%E5%BA%A6) 70 | - [二、软件测试策略](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_2_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E7%AD%96%E7%95%A5.md#%E4%BA%8C%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%AD%96%E7%95%A5) 71 | - [**§ 2.3 - 软件测试的方法**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_3_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%96%B9%E6%B3%95.md#-23---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%96%B9%E6%B3%95) 72 | - [一、静态测试与动态测试](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_3_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%96%B9%E6%B3%95.md#%E4%B8%80%E9%9D%99%E6%80%81%E6%B5%8B%E8%AF%95%E4%B8%8E%E5%8A%A8%E6%80%81%E6%B5%8B%E8%AF%95) 73 | - [二、白盒测试与黑盒测试](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_3_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%96%B9%E6%B3%95.md#%E4%BA%8C%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95%E4%B8%8E%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95) 74 | - [三、手工测试与自动化测试](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_3_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%96%B9%E6%B3%95.md#%E4%B8%89%E6%89%8B%E5%B7%A5%E6%B5%8B%E8%AF%95%E4%B8%8E%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95) 75 | - [**§ 2.4 - 软件测试用例详解**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E8%AF%A6%E8%A7%A3.md#-24---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E8%AF%A6%E8%A7%A3) 76 | - [一、概念](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E8%AF%A6%E8%A7%A3.md#%E4%B8%80%E6%A6%82%E5%BF%B5) 77 | - [二、内容与格式](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E8%AF%A6%E8%A7%A3.md#%E4%BA%8C%E5%86%85%E5%AE%B9%E4%B8%8E%E6%A0%BC%E5%BC%8F) 78 | - [三、更新与维护](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E8%AF%A6%E8%A7%A3.md#%E4%B8%89%E6%9B%B4%E6%96%B0%E4%B8%8E%E7%BB%B4%E6%8A%A4) 79 | - [**§ 2.5 - 黑盒测试技术详解**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_5_%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#-25---%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3) 80 | - [一、黑盒测试技术的常用方法](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_5_%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#%E4%B8%80%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E7%9A%84%E5%B8%B8%E7%94%A8%E6%96%B9%E6%B3%95) 81 | - [二、等价类划分法](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_5_%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#%E4%BA%8C%E7%AD%89%E4%BB%B7%E7%B1%BB%E5%88%92%E5%88%86%E6%B3%95) 82 | - [三、边界值划分法](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_5_%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#%E4%B8%89%E8%BE%B9%E7%95%8C%E5%80%BC%E5%88%92%E5%88%86%E6%B3%95) 83 | - [四、错误推测法](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_5_%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#%E5%9B%9B%E9%94%99%E8%AF%AF%E6%8E%A8%E6%B5%8B%E6%B3%95) 84 | - [五、控件的黑盒测试方法](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_5_%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#%E4%BA%94%E6%8E%A7%E4%BB%B6%E7%9A%84%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%96%B9%E6%B3%95) 85 | - [**§ 2.6 - 白盒测试技术详解**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_6_%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#-26---%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3) 86 | - [一、概念](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_6_%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#%E4%B8%80%E6%A6%82%E5%BF%B5) 87 | - [二、逻辑驱动覆盖测试](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_6_%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#%E4%BA%8C%E9%80%BB%E8%BE%91%E9%A9%B1%E5%8A%A8%E8%A6%86%E7%9B%96%E6%B5%8B%E8%AF%95) 88 | - [三、测试题](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_6_%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#%E4%B8%89%E6%B5%8B%E8%AF%95%E9%A2%98) 89 | - [**§ 2.7 - 软件缺陷详解**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_7_%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E8%AF%A6%E8%A7%A3.md#-27---%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E8%AF%A6%E8%A7%A3) 90 | - [一、概念](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_7_%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E8%AF%A6%E8%A7%A3.md#%E4%B8%80%E6%A6%82%E5%BF%B5) 91 | - [二、软件缺陷的产生原因](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_7_%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E8%AF%A6%E8%A7%A3.md#%E4%BA%8C%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E7%9A%84%E4%BA%A7%E7%94%9F%E5%8E%9F%E5%9B%A0) 92 | - [三、软件缺陷的严重性与优先级](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_7_%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E8%AF%A6%E8%A7%A3.md#%E4%B8%89%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E7%9A%84%E4%B8%A5%E9%87%8D%E6%80%A7%E4%B8%8E%E4%BC%98%E5%85%88%E7%BA%A7) 93 | - [四、软件缺陷的生命周期](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_7_%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E8%AF%A6%E8%A7%A3.md#%E5%9B%9B%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F) 94 | - [五、软件缺陷报告的编写](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_7_%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E8%AF%A6%E8%A7%A3.md#%E4%BA%94%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E6%8A%A5%E5%91%8A%E7%9A%84%E7%BC%96%E5%86%99) 95 | - [六、示例](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_7_%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E8%AF%A6%E8%A7%A3.md#%E5%85%AD%E7%A4%BA%E4%BE%8B) 96 | 97 | ### 支线任务 98 | 99 | - [**§ 3.1 - 单元测试详解**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_1_%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#-31---%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3) 100 | - [一、概念](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_1_%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#%E4%B8%80%E6%A6%82%E5%BF%B5) 101 | - [二、测试内容](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_1_%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#%E4%BA%8C%E6%B5%8B%E8%AF%95%E5%86%85%E5%AE%B9) 102 | - [三、辅助测试模块](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_1_%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#%E4%B8%89%E8%BE%85%E5%8A%A9%E6%B5%8B%E8%AF%95%E6%A8%A1%E5%9D%97) 103 | - [**§ 3.2 - 集成测试详解**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_2_%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#-32---%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3) 104 | - [一、概念](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_2_%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#%E4%B8%80%E6%A6%82%E5%BF%B5) 105 | - [二、测试内容](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_2_%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#%E4%BA%8C%E6%B5%8B%E8%AF%95%E5%86%85%E5%AE%B9) 106 | - [三、测试形式](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_2_%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#%E4%B8%89%E6%B5%8B%E8%AF%95%E5%BD%A2%E5%BC%8F) 107 | - [**§ 3.3 - 系统测试详解 - [整理中]**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_3_%E7%B3%BB%E7%BB%9F%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#-33---%E7%B3%BB%E7%BB%9F%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3) 108 | - [一、概念](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_3_%E7%B3%BB%E7%BB%9F%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#%E4%B8%80%E6%A6%82%E5%BF%B5) 109 | - [二、功能测试](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_3_%E7%B3%BB%E7%BB%9F%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#%E4%BA%8C%E5%8A%9F%E8%83%BD%E6%B5%8B%E8%AF%95) 110 | - [三、兼容性测试](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_3_%E7%B3%BB%E7%BB%9F%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#%E4%B8%89%E5%85%BC%E5%AE%B9%E6%80%A7%E6%B5%8B%E8%AF%95) 111 | - [四、界面测试](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_3_%E7%B3%BB%E7%BB%9F%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#%E5%9B%9B%E7%95%8C%E9%9D%A2%E6%B5%8B%E8%AF%95) 112 | - [五、易用性测试](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_3_%E7%B3%BB%E7%BB%9F%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#%E4%BA%94%E6%98%93%E7%94%A8%E6%80%A7%E6%B5%8B%E8%AF%95) 113 | - [六、性能测试](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_3_%E7%B3%BB%E7%BB%9F%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#%E5%85%AD%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95) 114 | 115 | --- 116 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第一章/1_10_测试的流程与计划.md: -------------------------------------------------------------------------------- 1 | # § 1.10 - 测试的流程与计划 2 | 3 | ## 一、软件测试流程 4 | 5 | 1. 参加需求评审会议 :arrow_down: 6 | 2. 拟定软件测试计划 :arrow_down: 7 | 3. 测试设计与开发 :arrow_down: 8 | 4. 实施软件测试 :arrow_down: 9 | 5. 测试评估 :arrow_down: 10 | 6. 测试总结 :triangular_flag_on_post: 11 | 12 | ## 二、流程详解 13 | 14 | ### :one: 拟定软件测试计划 15 | 16 | **拟定软件测试计划**是软件测试工作的第一步流程,也起到**至关重要**的作用。本阶段主要是**对即将开展的测试工作进行整体的安排**(例如资金、资源、人员的分配,准备测试用例等)。 17 | 18 | **本阶段的主要工作内容**: 19 | 20 | - 仔细研究软件规格说明文档。 21 | - 将等待测试的软件产品分解为可以独立测试的单元。 22 | - 确定每个单元需要采用的测试技术。 23 | - 制定下一阶段测试工作的计划。 24 | 25 | ### :two: 测试设计与开发 26 | 27 | 分析**测试需求**,设计**测试用例**,准备**测试数据**,开发**测试代码**,搭建**测试环境**。 28 | 29 | **测试用例**:是一组条件或变量,测试工程师可以根据其来确认软件是否可以正确工作。**测试用例一般由测试输入、测试标准、预期结果等内容组成**。本质上,测试用例可以将被测对象的功能和特性进行**细化**与**展开**,可以保证软件功能**不被遗漏或重复测试**,也可以使软件测试的效果不完全依赖于测试工程师的个人能力,便于组织更加合理的安排测试人员。 30 | 31 | **测试数据**直接影响测试工作的总体质量,也是影响测试环境的因素之一。测试数据由测试工程师、DBA 或开发工程师编写,一般来源于自行编写、利用已有系统中的数据或利用非电子化的业务数据。一般情况下,**软件功能测试**不需要大量的数据,但是需要数据的覆盖率与真实度尽可能高;**软件性能测试**则需要大量的数据,并且数据量应当尽可能符合实际情况。 32 | 33 | ### :three: 实施软件测试 34 | 35 | 在执行测试用例的过程中,如果发现了错误和缺陷的话,应当记录并提交**缺陷报告**。 36 | 37 | 实施软件测试的过程主要分为以下**三个阶段**: 38 | 39 | - **初测期**:测试主要功能与关键执行路径,排除**主要障碍**。 40 | - **细测期**:根据测试计划与测试用例,**逐一测试所有的**功能、特性、性能、界面、兼容性、可用性等测试点。 41 | - **回归测试期**:软件已经趋于稳定,在测试过程中可以发现的新的错误与缺陷已经非常有限。**此时应当复查已知错误与缺陷的纠正情况,确认未引入新的缺陷时即可终止回归测试**。 42 | 43 | **缺陷报告应当包括以下内容**: 44 | 45 | - 记录问题发生时的环境 46 | - 记录问题的重现步骤 47 | - 说明问题的性质 48 | - 给出相应的改进建议 49 | - 随时记录问题的处理进度 50 | 51 | ### :four: 测试评估与总结 52 | 53 | 评估**软件产品质量**、评估**测试人员工作情况**。 54 | 55 | 总结**测试情况**,编写**软件测试报告**。 56 | 57 | ## 三、软件测试计划 58 | 59 | **软件测试计划**:指的是在软件测试工作正式实施前先行**仔细研究测试对象**,并且通过对**资源、时间、风险、测试范围和预算**等多方面因素进行**综合分析与规划**,以确保测试工作可以**有效实施**。 60 | 61 | **软件测试计划的用途**: 62 | 63 | - 将过去总结的知识与经验转化为执行测试任务的具体方案。 64 | - 为组织、安排与管理测试项目提供整体框架。 65 | - 促进测试团队成员间开展有关任务与过程的交流。 66 | - 对项目风险进行分析,并得出相应的应对策略。 67 | 68 | **软件测试计划应当尽早制定,一般在软件需求文档确定后即开始制定测试计划**。测试计划在整个的测试流程中处于 **“核心位置”**,是可以开展准备与执行测试工作的**必要条件**,是保证测试工作质量的**根本基础**。 69 | 70 | 在制定软件测试计划后,应当由组织的测试经理(高级测试工程师)团队进行**评审**。在测试工作开展的过程中,应当时刻对照确认当前测试工作是否 **“正在按照测试计划进行”**。测试计划不是一成不变的,如果在实践过程中发现计划确实存在不足需要改进的话,应当进行调整与修改。 71 | 72 | **软件测试计划的基本结构**: 73 | 74 | 1. 测试计划简介 75 | 2. 测试项目说明 76 | 3. **测试范围** 77 | 4. **测试手段和策略** 78 | 5. 项目通过或失败的标准 79 | 6. 暂停与重启测试工作的标准 80 | 7. 测试的可交付性 81 | 8. **测试任务分配** 82 | 9. 环境需求 83 | 10. 职责 84 | 11. 人员与培训需求 85 | 12. **进度表** 86 | 13. **风险与偶然事故的解决方案** 87 | 88 | > 注:此基本结构并非标准,仅为推荐。测试计划中的重要结构用**加粗**字体进行了标注。 89 | 90 | 软件测试计划的价值取决于其能够在多大的程度上帮助测试团队**管理项目 / 发现错误与缺陷**。不能为了制定计划而制定计划,不能简单的套用模板,这样是没有意义的。 91 | 92 | --- 93 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_10_%E6%B5%8B%E8%AF%95%E7%9A%84%E6%B5%81%E7%A8%8B%E4%B8%8E%E8%AE%A1%E5%88%92.md#-110---%E6%B5%8B%E8%AF%95%E7%9A%84%E6%B5%81%E7%A8%8B%E4%B8%8E%E8%AE%A1%E5%88%92) 94 | 95 | [**下一章节:§ 2.1 - 软件测试环境的备份与恢复**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_1_%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%E7%9A%84%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D.md#-21---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%E7%9A%84%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D) 96 | 97 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第一章/1_1_大型组织.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第一章/1_1_大型组织.png -------------------------------------------------------------------------------- /第一章/1_1_小型组织.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第一章/1_1_小型组织.png -------------------------------------------------------------------------------- /第一章/1_1_软件测试发展史.md: -------------------------------------------------------------------------------- 1 | # § 1.1 - 软件测试发展史 2 | 3 | ## 一、软件测试行业发展历程 4 | 5 | - **1950 年代**:**Alan Mathison Turin** 提出 ***“测试是证明程序正确性的一种极端实验方式 ”***。 6 | - **1972 年**:**Bill Hetzel** 在 North Carllina 大学举办了世界上第一次 ***“以软件测试为主题的正式议会 ”***。 7 | - **1975 年**:IEEE 组织 **John GoodEough** 与 **Susan Gerhart** 发布《**测试数据选择的原理**》,将软件测试确定为了**研究方向**。 8 | - **1979 年**:**Glenford Myers** 在《**The Art of Software Testing**》中提出 ***“测试的目的是证伪 ”***。 9 | - **1981 年**:**Bill Hetzel** 开设了 **“Structured Software Testing”** 公开课。 10 | - **1983 年**:**IEEE 组织**制定了软件测试的**定义**与**目的**。 11 | - **1988 年**:**Bill Hetzel** 与 **David Gelperin** 发表《**The Growth of Software Tseting**》论文,介绍了**系统化的测试和评估流程**。 12 | - **1996 年**:产生了**测试模型**: 13 | - TCMM - 测试能力成熟度模型 14 | - TCM - 测试支持度模型 15 | - TMM - 测试成熟度模型 16 | - **2002 年**:**Rick** 与 **Stefan** 发表《**系统的软件测试**》,对软件测试进行了**重新定义**。 17 | 18 | ## 二、中国软件测试发展历程(截止至 2013 年) 19 | 20 | - **2005 年**:中华人民共和国人力资源和社会保障部(劳动部)将 “软件测试工程师” 列为**第四批新职业**。 21 | - **2006 年**:中华人民共和国工业和信息化部(信息产业部)举办首届**中国软件质量年会**。 22 | - **2007 年**:中华人民共和国教育部将 “软件测试” 确定为**国家重点领域紧缺人才培养专业**。 23 | 24 | > 注:本课程于 2013 年录制,因此课程选取的数据与资料也截止至 2013 年。今年是 2020 年,两者之间的 7 年时间空缺我 **不打算** 另作编辑与整理,因为对软件测试课程学习的帮助不大。 25 | 26 | ## 三、软件测试人才 27 | 28 | 软件测试**人才**应当: 29 | 30 | 1. 具备**探索**与**怀疑**的精神。 31 | 2. 具备**故障排除**的能力。 32 | 3. 具备**自信心、责任心、细心与耐心**。 33 | 4. 具备**服务意识**与**团队合作精神**。 34 | 5. 具备**追求完美**的态度。 35 | 6. 善于**沟通**与**询问**。 36 | 7. 具备**编程能力**。 37 | 8. 了解**行业知识**。 38 | 39 | ## 四、软件测试晋升路线 40 | 41 | - 初级测试**工程师** :arrow_down: 42 | - 测试**工程师** :arrow_down: 43 | - 高级测试**工程师** :arrow_down: 44 | - 测试开发**工程师** :arrow_down: 45 | - 测试**组长** | 测试**经理** :arrow_down: 46 | - 测试 | 质量保证 | 开发(项目)**经理** :arrow_down: 47 | - 计划**经理** :triangular_flag_on_post: 48 | 49 | ## 五、测试团队组织结构 50 | 51 | ### :one: 小型组织 52 | 53 | ![小型组织](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_1_%E5%B0%8F%E5%9E%8B%E7%BB%84%E7%BB%87.png?raw=true) 54 | 55 | ### :two: 大型组织 56 | 57 | ![大型组织](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_1_%E5%A4%A7%E5%9E%8B%E7%BB%84%E7%BB%87.png?raw=true) 58 | 59 | ### :three: 第三方测试组织 60 | 61 | 第三方测试组织独立于软件开发组织,此类组织一般会将 **“承包软件测试”** 工作作为唯一或主要业务。第三方软件测试组织一般会秉承着公正、廉洁、客观的态度,以专业的测试水平来承接其他软件开发组织所开发的软件产品的测试工作。 62 | 63 | --- 64 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_1_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%8F%91%E5%B1%95%E5%8F%B2.md#-11---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%8F%91%E5%B1%95%E5%8F%B2) 65 | 66 | [**下一章节:§ 1.2 - 软件测试的定义、目的、对象与分类**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_2_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%AE%9A%E4%B9%89%E3%80%81%E7%9B%AE%E7%9A%84%E3%80%81%E5%AF%B9%E8%B1%A1%E4%B8%8E%E5%88%86%E7%B1%BB.md#-12---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%AE%9A%E4%B9%89%E7%9B%AE%E7%9A%84%E5%AF%B9%E8%B1%A1%E4%B8%8E%E5%88%86%E7%B1%BB) 67 | 68 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第一章/1_2_软件测试的定义、目的、对象与分类.md: -------------------------------------------------------------------------------- 1 | # § 1.2 - 软件测试的定义、目的、对象与分类 2 | 3 | ## 一、定义 4 | 5 | ### :one: 测试 6 | 7 | 测试是一种**活动**。在这种活动中,某个**系统**或**其组成部分**将在特定的条件下运行,**运行结果将被观察或记录**,并作为对系统或其组成部分进行**评价**的依据。 8 | 9 | ### :two: 软件测试 10 | 11 | **标准定义**: 12 | 13 | 1. 软件测试是指使用**人工或自动化**的手段来运行或测试某个系统的过程。其目的在与检验系统能否**满足规定需求**或理清**预期结果与实际结果**间的差别。 14 | > IEEE (Institute of Electrical and Electronics Engineers) 15 | 16 | 2. 软件测试是为了**尽快、尽早**地发现在软件产品中所存在的**各种软件缺陷**而展开的**贯穿整个软件开发生命周期**、对软件产品(包括阶段性产品)进行**验证**和**确认**的活动过程。 17 | 18 | **额外定义**: 19 | 20 | 1. 软件测试是指为了**发现错误**而执行程序的过程。 21 | 2. 软件测试是指利用根据软件开发各阶段的规格说明或内部结构设计的**测试用例**来运行程序以及**发现错误**的过程。 22 | 3. 软件测试的根本目的是**证明软件存在错误**,而并非是证明软件没有错误。 23 | 4. 一个好的软件测试用例在于其**可以发现至今未被发现的错误**。 24 | 5. 一次成功的软件测试工作也在于其**可以发现至今未被发现的错误**。 25 | 26 | ## 二、目的 27 | 28 | 1. 发现隐藏在软件中的**错误或缺陷**,并将其**修复**。 29 | 2. 最大程度满足软件需求,**提高用户满意度**。 30 | 3. 提升软件质量。 31 | 32 | ## 三、对象 33 | 34 | 软件测试的**对象**包括: 35 | 36 | - 需求说明**文档** 37 | - 概要设计文档 38 | - 详细设计文档 39 | - **程序** 40 | - **数据** 41 | - 用户文档 42 | - *等* 43 | 44 | > 注 1:软件测试**包含**程序测试,但**不等于**程序测试。软件测试也包含了对**文档**与**数据**的测试。 45 | > 注 2:**软件 = 程序 + 数据 + 文档** 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 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_2_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%AE%9A%E4%B9%89%E3%80%81%E7%9B%AE%E7%9A%84%E3%80%81%E5%AF%B9%E8%B1%A1%E4%B8%8E%E5%88%86%E7%B1%BB.md#-12---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%AE%9A%E4%B9%89%E7%9B%AE%E7%9A%84%E5%AF%B9%E8%B1%A1%E4%B8%8E%E5%88%86%E7%B1%BB) 73 | 74 | [**下一章节:§ 1.3 - 软件测试环境**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_3_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83.md#-13---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83) 75 | 76 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第一章/1_3_软件测试环境.md: -------------------------------------------------------------------------------- 1 | # § 1.3 - 软件测试环境 2 | 3 | ## 一、软件测试流程 4 | 5 | 1. 拟定计划 6 | 2. 设计与生成测试用例 7 | 3. **搭建环境**(本节内容) 8 | 4. 实施 9 | 5. 评估 10 | 6. 总结 11 | 12 | > **有关 “软件测试流程” 的详细笔记,请参照 [“§ 1.10 - 测试的流程与计划”](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_10_%E6%B5%8B%E8%AF%95%E7%9A%84%E6%B5%81%E7%A8%8B%E4%B8%8E%E8%AE%A1%E5%88%92.md#-110---%E6%B5%8B%E8%AF%95%E7%9A%84%E6%B5%81%E7%A8%8B%E4%B8%8E%E8%AE%A1%E5%88%92) 部分**。 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 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_3_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83.md#-13---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83) 41 | 42 | [**下一章节:§ 1.4 - 软件测试的时间、信息流程与周期性**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%97%B6%E9%97%B4%E3%80%81%E4%BF%A1%E6%81%AF%E6%B5%81%E7%A8%8B%E4%B8%8E%E5%91%A8%E6%9C%9F%E6%80%A7.md#-14---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%97%B6%E9%97%B4%E4%BF%A1%E6%81%AF%E6%B5%81%E7%A8%8B%E4%B8%8E%E5%91%A8%E6%9C%9F%E6%80%A7) 43 | 44 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第一章/1_4_软件测试信息流程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第一章/1_4_软件测试信息流程.png -------------------------------------------------------------------------------- /第一章/1_4_软件测试的时间、信息流程与周期性.md: -------------------------------------------------------------------------------- 1 | # § 1.4 - 软件测试的时间、信息流程与周期性 2 | 3 | ## 一、软件生命周期 4 | 5 | **人类生命周期** :arrow_down: 6 | 7 | 孕育、出生 :arrow_right: 幼年、少年、青年 :arrow_right: 中年、老年 :arrow_right: 去世 8 | 9 | --- 10 | 11 | 计划、需求 :arrow_right: 设计、编码、**测试** :arrow_right: 运行、维护 :arrow_right: 淘汰 12 | 13 | **软件生命周期** :arrow_up: 14 | 15 | ## 二、软件测试时间 16 | 17 | 软件在**需求、设计、编码、测试**直至**交付**用户使用的过程中都有可能产生错误或缺陷。随着开发时间的推移,修复缺陷或错误所需的代价将会**呈几何级数增长**。 18 | 19 | 因此,软件测试应当: 20 | 21 | - **尽早开展**:从软件**需求阶段**就开始介入测试。 22 | - **覆盖整个生命周期** 23 | 24 | ## 三、测试信息流程 25 | 26 | ![流程](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E4%BF%A1%E6%81%AF%E6%B5%81%E7%A8%8B.png?raw=true) 27 | 28 | 测试流程中需要**三类输入**: 29 | 30 | - **软件配置** 31 | - 准备好**被测试的软件、需求规格文档、设计规格文档、源代码**等。 32 | - **测试配置** 33 | - 准备好测试**环境、计划、用例**等。 34 | - **测试工具** 35 | - 如果需要执行自动化测试的话,准备好**数据生成、静态分析、动态分析、结果分析、测试驱动数据库**等工具。 36 | 37 | ## 四、软件测试周期性 38 | 39 | 软件测试的周期性是指**测试、修复、回归测试、再修复**这样的一个循环过程。 40 | 41 | 测试周期一般分为以下**两种**: 42 | 43 | - **串行测试**(使用最广) 44 | - **并行测试**(效率最高) 45 | 46 | --- 47 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%97%B6%E9%97%B4%E3%80%81%E4%BF%A1%E6%81%AF%E6%B5%81%E7%A8%8B%E4%B8%8E%E5%91%A8%E6%9C%9F%E6%80%A7.md#-14---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%97%B6%E9%97%B4%E4%BF%A1%E6%81%AF%E6%B5%81%E7%A8%8B%E4%B8%8E%E5%91%A8%E6%9C%9F%E6%80%A7) 48 | 49 | [**下一章节:§ 1.5 - 软件测试的停止依据**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_5_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%81%9C%E6%AD%A2%E4%BE%9D%E6%8D%AE.md#-15---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%81%9C%E6%AD%A2%E4%BE%9D%E6%8D%AE) 50 | 51 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第一章/1_5_软件测试的停止依据.md: -------------------------------------------------------------------------------- 1 | # § 1.5 - 软件测试的停止依据 2 | 3 | ## 一、推荐依据 4 | 5 | **不推荐(错误)标准**: 6 | 7 | 1. 超过了测试的预定时间即停止测试。 8 | 2. 所有测试用例执行完毕但未发现错误或缺陷即停止测试。 9 | 3. 直接指出停止测试的具体要求,例如发现 XX 数量的故障或缺陷后即停止测试。 10 | 11 | **推荐标准**:**是否停止软件测试,应当根据单位时间内发现错误或缺陷的数量与严重程度进行决定**。 12 | 13 | ## 二、推荐标准 14 | 15 | 1. **缺陷修复率标准** 16 | 17 | - **高严重性**错误或缺陷修复率达到 **100%** 18 | - **中等严重性**错误或缺陷修复率达到 **80%** 以上 19 | - **低严重性**错误或缺陷的修复率达到 **60%** 以上 20 | 21 | 2. **覆盖率标准** 22 | 23 | - **语句覆盖率**达到 **80%** 以上 24 | - 测试**用例**执行覆盖率达到 **100%** 25 | - 测试**需求**执行覆盖率达到 **100%** 26 | 27 | --- 28 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_5_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%81%9C%E6%AD%A2%E4%BE%9D%E6%8D%AE.md#-15---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%81%9C%E6%AD%A2%E4%BE%9D%E6%8D%AE) 29 | 30 | [**下一章节:§ 1.6 - 软件测试的原则**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_6_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%8E%9F%E5%88%99.md#-16---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%8E%9F%E5%88%99) 31 | 32 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第一章/1_6_软件测试的原则.md: -------------------------------------------------------------------------------- 1 | # § 1.6 - 软件测试的原则 2 | 3 | ## 一、基本原则 4 | 5 | 1. 软件测试应当**越早**开展越好。 6 | 7 | 2. 执行软件测试前,应当准备好**测试用例**,也就是**测试数据**与**对应预期结果**二者的组合。 8 | 9 | 3. **测试数据**应当包括**合理输入条件**与**不合理输入条件**。 10 | 11 | 4. 程序提交测试后,应当由**专门**的测试工程师进行测试。 12 | 13 | 5. 应当严格执行软件测试计划,尽量排除测试的随意性。 14 | 15 | 6. 应当全面检查软件测试用例的所有预期结果。 16 | 17 | 7. 应当充分注意软件测试中的**群体现象**。 18 | - **群体现象**:指的是 **80%** 的软件错误与缺陷会集中在 **20%** 的程序模块中,错误与缺陷一般会**扎堆**出现。 19 | 20 | 8. 应当将软件测试的**计划、用例、错误统计、分析报告**等数据全部进行**存档**,便于日后进行软件维护。 21 | 22 | ## 二、补充原则 23 | 24 | 1. 软件的错误与缺陷会随着测试工作的进展而逐渐**减少**,但是需要花费的资金也会逐渐**增加**。一般情况下,**完全要求软件没有任何的错误与缺陷是没有必要的,应当选择资金花费与剩余错误、缺陷数量相平衡的 “Good Enough” 位置终止测试**。 25 | 26 | 2. 软件的错误与缺陷具有**免疫性**。 27 | - **免疫性**:每修改 **3 - 5** 个错误或缺陷,就会引入 **1** 个新的错误或缺陷。 28 | 29 | --- 30 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_6_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%8E%9F%E5%88%99.md#-16---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E5%8E%9F%E5%88%99) 31 | 32 | [**下一章节:§ 1.7 - 软件的开发与测试模型**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_7_%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%BC%80%E5%8F%91%E4%B8%8E%E6%B5%8B%E8%AF%95%E6%A8%A1%E5%9E%8B.md#-17---%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%BC%80%E5%8F%91%E4%B8%8E%E6%B5%8B%E8%AF%95%E6%A8%A1%E5%9E%8B) 33 | 34 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第一章/1_7_H 模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第一章/1_7_H 模型.png -------------------------------------------------------------------------------- /第一章/1_7_V 模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第一章/1_7_V 模型.png -------------------------------------------------------------------------------- /第一章/1_7_W 模型.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第一章/1_7_W 模型.png -------------------------------------------------------------------------------- /第一章/1_7_软件的开发与测试模型.md: -------------------------------------------------------------------------------- 1 | # § 1.7 - 软件的开发与测试模型 2 | 3 | ## 一、软件项目开发过程分解图 4 | 5 | ![软件项目开发过程分解图](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_7_%E8%BD%AF%E4%BB%B6%E9%A1%B9%E7%9B%AE%E5%BC%80%E5%8F%91%E8%BF%87%E7%A8%8B.png?raw=true) 6 | 7 | ## 二、软件项目成员与角色 8 | 9 | - **总项目** 10 | - 项目经理 11 | - 系统架构师(技术总监) 12 | - 产品经理 13 | - 客户经理 14 | - **需求设计分支** 15 | - 需求分析师 16 | - **系统设计分支** 17 | - 数据库设计师 18 | - 软件设计师(模块) 19 | - 美术工程师 20 | - **编码分支** 21 | - 软件工程师 22 | - **实施分支** 23 | - 实施工程师 24 | - **测试分支** 25 | - 测试工程师 26 | 27 | ## 三、软件开发模型 28 | 29 | ### :one: 定义 30 | 31 | **模型**:是指我们所研究的系统、过程、事物或概念的一种**表达形式**。 32 | 33 | **软件开发模型**:是指软件开发的全部过程、活动、任务以及管理的**结构框架**。软件开发模型给出了**软件开发活动的各个阶段之间的关系**。 34 | 35 | ### :two: 常见软件开发模型 36 | 37 | - 瀑布模型 38 | - 敏捷开发模型 39 | - 快速原型模型 40 | - 喷泉模型 41 | - 并发开发模型 42 | - 基于构件开发模型 43 | - RAD 模型 44 | - XP 模型 45 | - 增量模型 46 | - 原型实现模型 47 | - 演化模型 48 | - *等* 49 | 50 | ### :three: 常见软件开发模型类型 51 | 52 | - 以**软件需求完全确定**为前提的 **“第一代”** 软件开发模型。 53 | - 在开始阶段只能**提供基本需求**的 **“渐进式”** 软件开发模型。 54 | - 以**体系结构**为基础的基于 **“构件组装”** 的软件开发模型。 55 | 56 | ### :four: 部分软件开发模型简介 57 | 58 | 1. **大棒开发法**:思路简单,通常来源于开发者的 “突发奇想” —— 想到什么就开发什么。项目质量完全依托于开发者的个人思维与技术能力。开发过程是 “非工程化” 的,随意性高,结果无法预知。测试与错误和漏洞的修复较为困难。 59 | 2. **边写边改模型**:产生软件设计想法后立即进行粗略设计,随后进行长时间的编写、测试与修复循环的过程。在认为软件已经满足了所有需求后即可发布产品。 60 | 3. **快速原型模型**:根据客户需求,在短时间内优先解决用户最迫切希望解决的问题。完成后向用户进行演示,并根据用户的进一步需求或意见建议进行下一步的开发或改进。 61 | 4. **螺旋模型**:演化软件开发过程模型,它兼顾了快速原型的迭代的特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径。螺旋模型更适合大型的昂贵的系统级的软件应用。 62 | 4. **瀑布模型**:最早强调软件或系统开发应有完整之周期,且必须完整的经历周期之每一开发阶段,并系统化的考量分析与设计的技术、时间与资源之投入等。由于该模式强调系统开发过程需有完整的规划、分析、设计、测试及文件等管理与控制,因此能有效的确保系统质量。 63 | 64 | ## 四、软件测试模型 65 | 66 | ### :one: V 模型 67 | 68 | ![V 模型](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_7_V%20%E6%A8%A1%E5%9E%8B.png?raw=true) 69 | 70 | V 模型是**最具代表意义**的测试模型。是软件开发中常用的 **“瀑布模型”** 的变种,可以用于反映测试活动与需求设计分析之间的关系。V 模型从左到右分别描述了基本的**开发过程**与**测试流程**,明确的表示了**测试流程存在不同的级别**,清楚的描述了**各阶段测试流程与开发过程之间的对应关系**。 71 | 72 | 箭头代表**时间顺序**,**左侧**下降箭头指的是**开发过程**的各个阶段,**右侧**上升箭头指的是**测试流程**的各个阶段。 73 | 74 | **V 模型的局限性**:测试工作只能在编码完成后才能开展,不能做到测试与开发工作并行,测试工作过于**落后**。 75 | 76 | **V 模型的改进**:V 模型 + 各阶段同步开展测试工作 = **W 模型** 77 | 78 | ### :two: W 模型 79 | 80 | ![W 模型](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_7_W%20%E6%A8%A1%E5%9E%8B.png?raw=true) 81 | 82 | W 模型是 V 模型的自然发展。W 模型强调了 **“软件测试流程应当伴随完整的软件开发过程同步进行”**,同时也指明了**软件测试的对象不仅仅是程序本身,还包含着软件的需求、功能与设计部分**。 83 | 84 | **W 模型的局限性**:W 模型仍然是线性流程,**缺少迭代**。前一项测试工作(例如单元测试)结束前,**无法提前执行**下一项(例如集成测试)测试。 85 | 86 | ### :three: H 模型 87 | 88 | ![H 模型](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_7_H%20%E6%A8%A1%E5%9E%8B.png?raw=true) 89 | 90 | H 模型强调了 **“软件测试是一个独立的流程,应当尽早准备、尽早执行”**。同时也指明了**软件测试是根据被测对象的不同而分层次执行的,不同层次的测试流程可以按照某个次序先后进行,也可以反复执行**。H 模型在相应条件具备时可以直接开展测试工作,没有严格或线性的执行顺序。 91 | 92 | --- 93 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_7_%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%BC%80%E5%8F%91%E4%B8%8E%E6%B5%8B%E8%AF%95%E6%A8%A1%E5%9E%8B.md#-17---%E8%BD%AF%E4%BB%B6%E7%9A%84%E5%BC%80%E5%8F%91%E4%B8%8E%E6%B5%8B%E8%AF%95%E6%A8%A1%E5%9E%8B) 94 | 95 | [**下一章节:§ 1.8 - 软件质量的概念、范围与标准**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_8_%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E7%9A%84%E6%A6%82%E5%BF%B5%E3%80%81%E8%8C%83%E5%9B%B4%E4%B8%8E%E6%A0%87%E5%87%86.md#-18---%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E7%9A%84%E6%A6%82%E5%BF%B5%E8%8C%83%E5%9B%B4%E4%B8%8E%E6%A0%87%E5%87%86) 96 | 97 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第一章/1_7_软件项目开发过程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第一章/1_7_软件项目开发过程.png -------------------------------------------------------------------------------- /第一章/1_8_软件质量的概念、范围与标准.md: -------------------------------------------------------------------------------- 1 | # § 1.8 - 软件质量的概念、范围与标准 2 | 3 | ## 一、概念 4 | 5 | **质量**:是指产品或服务满足明确与隐含需求的能力特征或特征集合。 6 | 7 | **软件质量**:是指软件**符合** 8 | 9 | - **文档或用户明确描述的功能、性能需求与开发标准**, 10 | - 以及 **专业软件应当具备的隐含特征** 的程度。 11 | 12 | 软件质量可以反映以下**三方面**问题: 13 | 14 | 1. **软件需求** 15 | 2. **开发标准** 16 | 3. **隐性需求** 17 | 18 | ## 二、范围 19 | 20 | 软件质量的评定范围可以使用 **“3A”** 进行表示。 21 | 22 | - **Accountability (可说明性)**:用户可以基于软件的描述或定义进行使用。 23 | - **Availability (有效性)**:软件对于绝大多数用户来说总是有效的。 24 | - **Accessibility (易用性)**:软件容易使用、功能非常有用。 25 | 26 | 以**用户**的角度评定软件质量,主要有以下几点: 27 | 28 | - 软件是否具有**所需功能** 29 | - 软件**可靠程度**如何 30 | - 软件**效率**如何 31 | - 软件的使用是否**方便** 32 | - 软件的**环境开放程度**如何 33 | 34 | 以**开发者**的角度判定软件质量,主要有以下几点: 35 | 36 | - 软件是否易于**维护** 37 | - 软件是否易于**移植** 38 | - 软件是否易于**重用** 39 | - 软件是否易于**测试** 40 | 41 | ## 三、标准 42 | 43 | **软件质量标准**:指的是评价软件质量好坏的**准则**。 44 | 45 | 软件质量标准主要分为两个方向: 46 | 47 | 1. **产品质量标准**:对**最终软件产品**的质量把控。 48 | - McCall 49 | - ISO 9126 50 | - Boehm 51 | - *等* 52 | 2. **过程质量标准**:对**软件开发过程**的质量把控。 53 | - CMM 54 | - ISO 9000 55 | - *等* 56 | 57 | > **注:“过程质量标准模型” 不在本篇笔记中进行介绍,请直接查看[下一篇](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_9_%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B.md#-19---%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B)笔记**。 58 | 59 | ## 四、产品质量标准模型 60 | 61 | ### :one: McCall 模型 62 | 63 | McCall 标准模型通过 **3 个大类、11 个质量特性**以把控软件产品质量: 64 | 65 | 1. **产品运行** 66 | - 正确性 67 | - 可靠性 68 | - 可用性 69 | - 完整性 70 | - 效率 71 | 2. **产品修订** 72 | - 可维护性 73 | - 可测试性 74 | - 灵活性 75 | 3. **产品变迁** 76 | - 可移植性 77 | - 可复用性 78 | - 互联性 79 | 80 | ### :two: Boehm 模型 81 | 82 | Boehm 标准模型通过 **3 个大类、6 个小类、15 个质量特性**以把控软件产品质量。 83 | 84 | **大小类**: 85 | 86 | 1. **可移植性** 87 | 2. **可用性** 88 | 1. 可靠性 89 | 2. 效率 90 | 3. 人类工程 91 | 3. **可维护性** 92 | 1. 可测试性 93 | 2. 可理解性 94 | 3. 可修改性 95 | 96 | **质量特性**: 97 | 98 | - 设备独立性 99 | - 自包含性 100 | - 正确性 101 | - 完备性 102 | - 健壮性 103 | - 一致性 104 | - 可计测性 105 | - 设备效率 106 | - 可存取性 107 | - 通信性 108 | - 自描述性 109 | - 结构化性 110 | - 简单性 111 | - 清晰性 112 | - 可扩充性 113 | 114 | ### :three: ISO 9126 模型 115 | 116 | ISO 9126 标准模型通过 **6 个质量特性、21 个子特性**以把控软件产品质量: 117 | 118 | 1. **功能性** 119 | 2. **可靠性** 120 | 3. **易用性** 121 | 4. **效率** 122 | 5. **可维护性** 123 | 6. **可移植性** 124 | 125 | > **注:“过程质量标准模型” 不在本篇笔记中进行介绍,请直接查看[下一篇](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_9_%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B.md#-19---%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B)笔记**。 126 | 127 | --- 128 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_8_%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E7%9A%84%E6%A6%82%E5%BF%B5%E3%80%81%E8%8C%83%E5%9B%B4%E4%B8%8E%E6%A0%87%E5%87%86.md#-18---%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E7%9A%84%E6%A6%82%E5%BF%B5%E8%8C%83%E5%9B%B4%E4%B8%8E%E6%A0%87%E5%87%86) 129 | 130 | [**下一章节:§ 1.9 - 过程质量标准模型**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_9_%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B.md#-19---%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B) 131 | 132 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第一章/1_9_过程质量标准模型.md: -------------------------------------------------------------------------------- 1 | # § 1.9 - 过程质量标准模型 2 | 3 | ## 一、CMM 模型 4 | 5 | CMM 标准模型全称为 **“能力成熟度模型”** (**C**apability **M**aturity **M**odel),是对**软件组织在定义、实施、度量、控制和改善其软件的过程中各个发展阶段的描述**。CMM 模型将开发视为一个**过程**,并对过程进行**监控与研究**,以实现**科学化、标准化**的最终目标。 6 | 7 | **CMM 的作用**:可以用于科学的评价某个组织的软件开发能力等级,帮助软件开发组织进行自检与强弱项的了解,从而不断改进其软件开发过程,以便达到 “确保软件质量” 与 “提高软件开发效率” 的目的。 8 | 9 | **CMM 的意义**:是迄今为止学术界与工业界公认的关于软件工程与管理实践 **“很好的标准模型”**。CMM 为**评估**软件开发组织的生产能力**提供了标准**,为**提高**软件开发组织的生产过程**指明了方向**。 10 | 11 | **CMM 的五级模型**: 12 | 13 | 1. **优化级 (Optimizing)** -> [最高] 14 | 2. **管理级 (Managed)** 15 | 3. **定义级 (Defined)** 16 | 4. **可重复级 (Repeatable)** 17 | 5. **初始级 (Intial)** -> [最低] 18 | 19 | ### :one: 初始级 (Intial) 20 | 21 | 软件开发过程没有秩序(或者混乱),没有章法或步骤可循。组织缺乏管理能力,开发过程不可预测,难以重复。类似于 “大棒开发法”,**开发的软件能否取得成功主要依赖个别开发者的个人能力与组织机遇**。 22 | 23 | ### :two: 可重复级 (Repeatable) 24 | 25 | 软件开发组织**已经建立了基本的项目管理过程**,用于对开发成本、进度和功能特性进行跟踪。在开发新的软件项目时,组织可以直接按照既定的开发过程进行重复操作,**有章可循**。 26 | 27 | ### :three: 定义级 (Defined) 28 | 29 | 软件开发组织已经将软件开发与管理的过程实现了**文档化、标准化**,形成了适用于组织的**标准软件过程**。组织的所有项目均可以直接使用对应实际情况、适度进行修改的标准软件过程进行开发。**如果某个软件开发组织已经达成了 “定义级”,则可以认定此组织已经具备了较为成熟的软件开发能力**。 30 | 31 | ### :four: 管理级 (Managed) 32 | 33 | 软件开发组织已经对软件的开发过程与产品质量**制定了相应的度量方式**,同时也**制定了明确的度量指标**。达成此级别的软件开发组织在开发软件时,开发过程可以得到**定量**的认证和控制。 34 | 35 | ### :five: 优化级 (Optimizing) 36 | 37 | CMM 模型的**最高等级**,此时软件开发组织已经具备了**非常成熟**的软件开发能力。组织只需对来源于当前开发过程、新概念、新技术等方面的有用信息进行定量分析,持续不断的对开发过程进行**改进与优化**即可。 38 | 39 | ## 二、ISO 9000 标准 40 | 41 | **ISO** 全称为 **I**nternational **O**rganization for **S**tandardization (**国际标准化组织**)。ISO 9000 是 TC176 制定的**关于质量管理与评价**的一系列国际标准,它定义了一套基本达标的方法,可以用来帮助组织交付符合客户质量要求的产品。**ISO 9000 并不是单独的某个标准,而是一族标准的统称**,针对**软件质量评估**的部分分别为 **ISO 9000-3** 与 **ISO 9001**。 42 | 43 | **ISO 9000 标准可以帮助组织解决以下的问题**: 44 | 45 | - 开发者代码风格不一致 46 | - 组织中各部门间缺少沟通 47 | - 组织中没有合适的测试团队 48 | - 产品新旧版本混乱 49 | - 错误或缺陷反复出现 50 | - 客户投诉严重 51 | - *等* 52 | 53 | **ISO 9000 标准与 CMM 模型的区别**: 54 | 55 | - ISO 9000 标准侧重于**评估**;CMM 模型侧重于**认证**。 56 | - ISO 9000 标准是通用标准,**适用于各行各业**;CMM 模型**只适用于软件**。 57 | - ISO 9000 标准是**相对固定化**的标准;CMM 模型则强调**持续改进**。 58 | - *等* 59 | 60 | ## 三、SQA 简介 61 | 62 | **SQA** 全称为 **S**oftware **Q**uality **A**ssurance (**软件质量保障**),是为了确保软件开发过程与结果符合预期要求而建立的一系列规程,以及按照规程与计划所采取的一系列活动及其结果评价。**在软件开发组织中负责此项工作的人员被称为 QA (Quality Assurance)**。 63 | 64 | 理论上,SQA 应当是组织中独立于项目团队的监督团队,QA 的权力与项目经理平行,负责监督项目中的所有软件工程环节。**QA 的主要工作内容分为以下几点**: 65 | 66 | - 监控软件开发过程,确保产品质量符合预期。 67 | - 保证开发的产品符合 ISO 9000 标准或 CMM 模型。 68 | - 确保软件开发过程中的不合规不合理问题及时得到处理。 69 | - 确保项目团队制定的计划、标准、规程、文档等符合要求。 70 | 71 | **QA 与测试工程师的职责区别**: 72 | 73 | - 软件测试工作侧重于**发现问题**,软件质量保障工作侧重于**预防问题**。 74 | - 理论上,测试工作属于软件生命周期的一部分,也应受到 SQA 的监督。 75 | 76 | --- 77 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_9_%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B.md#-19---%E8%BF%87%E7%A8%8B%E8%B4%A8%E9%87%8F%E6%A0%87%E5%87%86%E6%A8%A1%E5%9E%8B) 78 | 79 | [**下一章节:§ 1.10 - 测试的流程与计划**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/1_10_%E6%B5%8B%E8%AF%95%E7%9A%84%E6%B5%81%E7%A8%8B%E4%B8%8E%E8%AE%A1%E5%88%92.md#-110---%E6%B5%8B%E8%AF%95%E7%9A%84%E6%B5%81%E7%A8%8B%E4%B8%8E%E8%AE%A1%E5%88%92) 80 | 81 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第三章/3_1_单元测试详解.md: -------------------------------------------------------------------------------- 1 | # § 3.1 - 单元测试详解 2 | 3 | ## 一、概念 4 | 5 | ### :one: 单元 6 | 7 | **单元**:指的是软件中具有**明确的功能**与**完整的规格、接口定义**,可以清晰的与软件中其他部分**区分开来**的某一个部分。单元没有标准划分法,可以完全依照测试工程师的自身想法进行划分。以 C++ 程序为例,可以实现某些软件功能的类或者方法即可被视为一个单元。 8 | 9 | ### :two: 单元测试 10 | 11 | **单元测试**(亦称模块测试):指的是对软件组成中的**最小可测试单元**进行的测试。单元测试将会检查软件中的各模块是否存在缺陷,是编码阶段结束后、测试工作开始时的**第一项**测试工作。 12 | 13 | - **目标**:确保软件中的每个模块都能正常工作。 14 | - **开始时间**:...... -> *详细设计* -> 编码 -> 编译 -> **单元测试** -> 集成测试 -> 系统测试 -> ...... 15 | - **设计依据**:详细设计说明书、源代码。***[详见下图 ]*** 16 | - **执行者**:软件开发工程师或白盒测试工程师。 17 | - **执行方式**:以**白盒测试技术**为主。首先执行**静态测试**,检查软件代码是否符合规范。随后执行**动态测试**,检查模块的实际输出结果与预期结果是否相符。 18 | 19 | ![软件开发流程](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_1_%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B.png?raw=true) 20 | 21 | ## 二、测试内容 22 | 23 | 单元测试主要针对以下**五个方面**对软件单元进行测试: 24 | 25 | 1. **边界条件** 26 | 2. **异常处理** 27 | 3. **模块接口** 28 | 4. **局部数据结构** 29 | 5. **程序路径** 30 | 31 | ## 三、辅助测试模块 32 | 33 | 在执行单元测试时,如果被测试模块并不是一个独立的程序,那么就需要设置**辅助测试模块**: 34 | 35 | - **驱动模块 (Drive)**:用于模拟被测试模块的**上一级**模块。驱动模块相当于被测模块的 **“主程序”**,通常负责接收测试数据、将数据传递给被测模块、启动被测模块、输出测试结果等。 36 | - **桩模块 (Stub)**:用于模拟被测模块在工作过程中所调用的**子**模块,负责进行少量的数据处理。 37 | 38 | --- 39 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_1_%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#-31---%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3) 40 | 41 | [**下一章节:§ 3.2 - 集成测试详解**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_2_%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#-32---%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3) 42 | 43 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) 44 | -------------------------------------------------------------------------------- /第三章/3_1_软件开发流程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第三章/3_1_软件开发流程.png -------------------------------------------------------------------------------- /第三章/3_2_广度优先.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第三章/3_2_广度优先.png -------------------------------------------------------------------------------- /第三章/3_2_深度优先.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第三章/3_2_深度优先.png -------------------------------------------------------------------------------- /第三章/3_2_结构图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第三章/3_2_结构图.png -------------------------------------------------------------------------------- /第三章/3_2_自底向上.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第三章/3_2_自底向上.png -------------------------------------------------------------------------------- /第三章/3_2_集成测试.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第三章/3_2_集成测试.png -------------------------------------------------------------------------------- /第三章/3_2_集成测试详解.md: -------------------------------------------------------------------------------- 1 | # § 3.2 - 集成测试详解 2 | 3 | ## 一、概念 4 | 5 | 即使软件中的各个单元经过单元测试后发现均无问题,将这些单元集成到一起后,各单元在协同工作时仍然可能出现预料之外的问题。因此,执行**集成测试工作**是非常必要的。 6 | 7 | **集成测试 (Integration Test)** (亦称综合测试、组装测试、联合测试):指的是在**单元测试**工作完成之后,按照软件在设计阶段时所确定的**结构图**将每一个模块**连接**起来,进行进一步测试的流程。 8 | 9 | - **目标**:软件中的各单元连接完毕后可以正常协同工作、软件行为正常。 10 | - **测试内容**:各单元间的接口、集成后的功能。 11 | - **开始时间** 12 | - ...... -> *详细设计* -> 编码 -> 编译 -> 单元测试 -> **集成测试** -> 系统测试 -> ...... **(理论)**。 13 | - 集成测试与单元测试同步进行 **(实际工作)**。 14 | - **设计依据**:概要设计说明书、详细设计说明书。***[详见下图 ]*** 15 | 16 | ![软件开发流程](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_1_%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B.png?raw=true) 17 | 18 | ## 二、测试内容 19 | 20 | 集成测试主要针对以下**五个方面**对软件单元进行测试: 21 | 22 | 1. 数据在软件各单元的接口之间传输时是否会出现丢失。 23 | 2. 某个模块是否会破坏另一个模块的功能。 24 | 3. 各个子功能组装完毕后能否实现主功能。 25 | 4. 全局数据结构是否存在问题。 26 | 5. 是否存在误差堆积的问题。 27 | 28 | > 注:集成测试一般由开发工程师与测试工程师共同完成,结合使用白盒与黑盒测试方法。 29 | 30 | ## 三、测试形式 31 | 32 | 33 | 34 | ### :one: 非增量式测试 35 | 36 | **非增量式测试**(先分散再集中):指的是使用**一步到位**的方法来构造测试,在软件各个相关联模块均完成单元测试后,直接将多个模块集成起来,共同开展集成测试工作。**在实际工作中,一般不使用非增量式测试**。 37 | 38 | - **优点**:节省时间。 39 | - **缺点**:难以定位与修复缺陷、可能导致新旧缺陷混杂。 40 | 41 | ### :two: 增量式测试 42 | 43 | **增量式测试**(逐步集中与测试):指的是使用**逐步集成**的方法来构造测试。增量式测试方法**优于**非增量式测试方法,具体分为 **“自顶向下”、“自底向上”、“混合增量”** 三种形式,将通过下方的示例进行详细介绍。 44 | 45 | 示例:假设待测试软件的各模块**结构图**如下: 46 | 47 | 48 | 49 | 1. **自顶向下**:首先找到**主控模块**(亦称关键模块),主控模块通常至少具备以下特征之一: 50 | - 满足软件的主要需求。 51 | - 在软件的模块结构中位于较高层次。 52 | - 复杂且易出错。 53 | - 有明确定义了的性能要求。 54 | 55 | **将主控模块作为测试驱动器,根据集成方式,将下层的桩模块依次替换为真正的软件模块进行测试**。在每个模块被集成时,都要先进行单元测试。按照**深度优先**或**广度优先**的方式进行集成。 56 | 57 | - **深度优先方式**:优先集成软件结构中的某一个主控路径下的所有模块,路径可以任意选择。 58 | - **广度优先方式**:沿着水平方向依次将每一层中直接隶属于上一层的模块集成起来,直到最后一层。 59 | 60 | 以上方的待测试软件为例,深度优先与广度优先的集成顺序分别如下图所示 (按**红橙黄绿蓝紫**颜色顺序): 61 | 62 | 63 | 64 | 65 | 2. **自底向上**:与自顶向下形式**相反**,从底层模块逐渐向主控模块进行测试 (按**红橙黄绿蓝紫**颜色顺序): 66 | 67 | 68 | 69 | 3. **混合增量**:将自顶向下与自底向上两种形式**混合使用**,同时利用二者优点并摒弃缺点。在实际工作中,一般会优先测试**输入输出模块**与**引入了新算法的模块**(衍变了的自顶向下形式)。 70 | 71 | ### :three: 比较 72 | 73 | **自顶向下与自底向上测试方式的比较**: 74 | 75 | | | 自顶向下增量式测试 | 自底向上增量式测试 | 76 | | ---- | :----------------------------------------------------------: | :----------------------------------------------------------: | 77 | | 优点 | 可以做到逐步求精、可以直接的看到系统框架、容易发现上层接口存在的缺陷、不需要驱动模块。 | 容易发现底层模块中存在的缺陷、驱动模块可以模拟所有调用参数,便于生成测试数据。 | 78 | | 缺点 | 需要提供桩模块、底层模块中的缺陷发现时间较晚、如果未接入输入输出模块的话,难以在桩模块中表示测试数据。 | 直至最后一个模块继承完毕后才可以看到系统框架。 | 79 | 80 | --- 81 | 82 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_2_%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#-32---%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3) 83 | 84 | [**下一章节:§ 3.3 - 系统测试详解**]() 85 | 86 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第三章/3_3_系统测试详解.md: -------------------------------------------------------------------------------- 1 | # § 3.3 - 系统测试详解 2 | 3 | ## 一、概念 4 | 5 | **系统测试**:指的是将软件产品看作为一个**整体**,对包括**功能、性能、兼容性、安全性、易用性**等方面进行测试。系统测试将**计算机硬件、配套软件、数据、人员**等系统元素结合起来,在**实际运行环境**下开展测试工作。系统测试工作由**黑盒测试工程师**或**专门测试工程师**(例如性能测试工程师、安全测试工程师等)负责。 6 | 7 | 系统测试主要分为以下几种: 8 | 9 | - **功能测试** 10 | - **兼容性测试** 11 | - **界面测试** 12 | - **易用性测试** 13 | - **性能测试** 14 | - **安全性测试** 15 | - 国际化 / 本地化测试 16 | - 安装测试 17 | - 文档测试 18 | - *等* 19 | 20 | ![软件开发流程](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_1_%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B.png?raw=true) 21 | 22 | ## 二、功能测试 23 | 24 | **功能测试**:指的是对软件产品的各个**功能点**进行验证的测试流程。功能测试以**需求规格说明书**与**功能性测试用例**为依据逐项进行测试,检查软件产品是否满足用户需求。测试内容主要包括**业务测试**、**通过测试**与**失败测试**。 25 | 26 | **增、删、查、改**功能的常用功能测试点示例: 27 | 28 | ### :one: 新增 29 | 30 | 1. 必填栏位测试。 31 | 2. 栏位值是否可以重复。 32 | 3. 栏位格式是否正确。 33 | 4. 栏位新增权限测试。 34 | 5. 自动填充栏位测试。 35 | 6. 提交与重置功能是否可以正常工作。 36 | 7. 提交成功时,数据库中是否增添了对应的数据。 37 | 8. 提交失败时,数据库中是否错误的增添了对应的数据。 38 | 9. 通过与失败时的提示信息是否正确。 39 | 10. 时间限制功能测试。 40 | 11. *等* 41 | 42 | ### :two: 删除 43 | 44 | 1. 二次确认功能测试。 45 | 2. 是否在数据库中彻底删除对应的数据。 46 | 3. 全选删除、取消全选功能测试。 47 | 4. 未选中任何待删除数据时,删除按钮能否成功按下。 48 | 5. 多页显示时,删除某一页中的所有数据后,能否自动弹回至上一页。 49 | 6. 删除权限验证测试。 50 | 7. *等* 51 | 52 | ### :three: 查询 53 | 54 | 1. 是否可以成功查询数据库中的已有数据。 55 | 2. 将查询条件或查询内容置空后进行测试。 56 | 3. 输入特殊字符作为查询内容进行测试。 57 | 4. 查询结果能否正常分为多页。 58 | 5. 重置查询条件的按钮是否可以正常工作。 59 | 6. 在查询内容中插入空格,测试能否正常查询到结果。 60 | 7. 使用边界值划分法测试查询条件的边界。 61 | 8. 使用多个条件进行查询,测试查询结果是否同时符合所有条件。 62 | 9. 模糊查询功能测试。 63 | 10. *等* 64 | 65 | ### :four: 修改 66 | 67 | 1. 必填栏位测试。 68 | 2. 栏位值是否可以重复。 69 | 3. 栏位格式是否正确。 70 | 4. 自动填充栏位测试。 71 | 5. 测试能否正常带出所需资料。 72 | 6. 修改权限验证测试。 73 | 7. 测试只读数据能否被修改。 74 | 8. 提交与重置功能是否可以正常工作。 75 | 9. 测试修改完毕后能否成功显示新数据。 76 | 10. *等* 77 | 78 | ## 三、兼容性测试 79 | 80 | **兼容性测试**:指的是对软件产品在特定的**硬件平台**以及不同的**软件、操作系统、网络**等环境中能否正常运行的测试流程。 81 | 82 | ### :one: ​兼容性测试的作用 83 | 84 | - 尽可能的提高软件产品的质量。 85 | - 尽可能的让软件产品与其他第三方软件 “和平共处”。 86 | - 尽可能的确保软件产品的存在价值。 87 | - 尽可能的使软件产品的市场更加广阔。 88 | 89 | ### :two: ​兼容性测试的主要关注内容 90 | 91 | 1. **向前兼容**:可以使用软件的未来版本(例如 Word 97 - 2003 文档可以在 Microsoft 365 中打开)。 92 | 2. **向后兼容**:可以使用软件的过去版本(例如 Microsoft 365 的 docx 格式文档可以在 Word 2003 中打开)。 93 | 3. **不同版本间兼容**:实现测试平台与软件的多个版本间可以正常工作。 94 | 4. **标准与规范**:遵守相应的软件平台标准与规范(例如 Microsoft Windows 徽标认证)。 95 | 5. **数据共享兼容**:支持并遵守相应的标准,允许用户从软件中向外部传输数据。 96 | 97 | ### :three: ​兼容性测试用例的制定原则 98 | 99 | - **流行程度**:优先在主流平台中开展测试。 100 | - **类型**:优先针对常用类型的平台开展测试。 101 | - **厂商**:优先针对主流厂商的平台开展测试。 102 | - **年限**:优先选择未被淘汰掉的平台开展测试。 103 | 104 | ## 四、界面测试 105 | 106 | **界面测试**:指的是对软件产品的**用户界面**进行验证的测试流程。界面测试通常用于验证软件产品的界面布局是否合理、风格是否一致、控件位置是否合理、文字是否准确、内容是否美观等。 107 | 108 | **界面测试的主要关注内容**: 109 | 110 | - **风格** 111 | - **正确性** 112 | - **一致性** 113 | - **合理性** 114 | - **美观性** 115 | - **协调性** 116 | - *等* 117 | 118 | ## 五、易用性测试 119 | 120 | **易用性测试**:指的是对软件产品在使用上的**合理性**与**方便性**进行验证,进而发现 “不方便用户使用” 的情况的测试流程。软件产品应当尽可能的实现 **“三容易”**,即 **“容易理解”、“容易学习”、“容易操作”**。 121 | 122 | **易用性测试的常用测试点示例**: 123 | 124 | 1. 软件中的常用功能应当有对应的快捷键或快捷按钮。 125 | 2. 功能相同或相近的控件应当放置在同一区域。 126 | 3. 如果某个操作可能需要花费较长时间,则应当提供进度条与 “取消操作” 按钮。 127 | 4. 功能按钮的图标应当直观的表示此按钮所对应的操作。 128 | 5. 软件应当提供友好的疑难解答与技术支持。 129 | 6. 可以一步完成的操作,不应当分为两步来显示。 130 | 7. *等* 131 | 132 | ## 六、性能测试 133 | 134 | // 在写了,在写了! 135 | 136 | ![鸽子](https://camo.githubusercontent.com/01892b3b88989eae06fd01545aa99e2a0b68cf05/68747470733a2f2f747365322d6d6d2e636e2e62696e672e6e65742f74682f69642f4f49502e547a64333564376e7a594175624651467430762d5451414141413f7069643d4170692672733d31) 137 | 138 | 139 | 140 | --- 141 | 142 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_3_%E7%B3%BB%E7%BB%9F%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#-33---%E7%B3%BB%E7%BB%9F%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3) 143 | 144 | [**下一章节:§ 3.4 -还不好说**]() 145 | 146 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) 147 | 148 | -------------------------------------------------------------------------------- /第二章/2_1_测试环境的备份与恢复.md: -------------------------------------------------------------------------------- 1 | # § 2.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 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_1_%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%E7%9A%84%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D.md#-21---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%E7%9A%84%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D) 26 | 27 | [**下一章节:§ 2.2 - 软件测试的策略**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_2_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E7%AD%96%E7%95%A5.md#-22---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E7%AD%96%E7%95%A5) 28 | 29 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第二章/2_2_软件测试的策略.md: -------------------------------------------------------------------------------- 1 | # § 2.2 - 软件测试的策略 2 | 3 | ## 一、软件测试工作的难度 4 | 5 | 软件测试工作虽然相比于软件开发工作 *“较为简单 ”*,但是**通过软件测试工作以达到 “保证软件质量” 的最终目的是非常困难的**,因此在执行软件测试工作时应当保持慎重。 6 | 7 | **保证软件质量的困难度较高的原因**: 8 | 9 | - 剩余时间可能较紧,无法完全测试整个软件。 10 | - 错误或缺陷可能隐藏较深,无法轻易发现。 11 | - 软件测试存在免疫性,平均每修改 3 - 5 个错误或缺陷,就会引入 1 个新的错误或缺陷。 12 | - 保证软件永远没有错误或缺陷是基本不可能的,没有十全十美的软件。 13 | - *等* 14 | 15 | ## 二、软件测试策略 16 | 17 | **软件测试策略**:指的是在软件测试计划的指导下,根据被测项目的特定环境约束而制定的软件测试的**原则、方式、思路**等方法的**集合**。 18 | 19 | **基本测试策略**: 20 | 21 | - 如果未能做到测试软件所有可能的情况,则软件就是有风险的。 22 | - 如果软件在交付后由用户发现了错误或缺陷的话,此时的负面代价是最大的。 23 | - 将发生各种意外的可能性尽可能的降低至可控范围。 24 | - 提前进行风险评估,针对风险的不同选择恰当的测试方法。 25 | - 找到最佳测试量,选择资金花费与剩余错误缺陷数量相平衡的位置终止测试。 26 | - *等* 27 | 28 | --- 29 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_2_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E7%AD%96%E7%95%A5.md#-22---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E7%AD%96%E7%95%A5) 30 | 31 | [**下一章节:§ 2.3 - 软件测试的方法**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_3_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%96%B9%E6%B3%95.md#-23---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%96%B9%E6%B3%95) 32 | 33 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第二章/2_3_软件测试的方法.md: -------------------------------------------------------------------------------- 1 | # § 2.3 - 软件测试的方法 2 | 3 | ## 一、静态测试与动态测试 4 | 5 | ### :one: 静态测试 6 | 7 | **静态测试 (Static Testing)**:指的是**并不实际运行**被测试的软件,仅**静态**的检查**程序代码、软件界面以及项目文档**中可能存在的**错误与缺陷**的过程。 8 | 9 | **静态测试主要检查以下三个位置**: 10 | 11 | 1. **程序代码**:[会在**下方**详细介绍] 12 | 2. **软件界面**:测试软件的**实际界面**与需求文档中的**说明界面**是否完全相符。 13 | 3. **项目文档**:测试**用户手册**与**需求说明文档**是否完全符合最终用户的实际需求。 14 | 15 | **程序代码**方面主要检查以下几点: 16 | 17 | 1. **代码检查**:检查编码风格是否符合规范。 18 | 2. **静态结构分析**:检查算法是否仍有优化空间、程序函数逻辑是否存在错误等。[会在**下方**详细介绍] 19 | 3. **代码质量度量**:使用人工或软件工具检查程序代码质量是否合乎设计标准。 20 | 21 | **静态结构分析**:指的是将软件的程序内部结构抽象为**图形** (例如**函数调用关系图、函数内部控制流图**等),并对其进行结构层面的分析。**例图如下**: 22 | 23 | ![静态结构分析](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_3_%E9%9D%99%E6%80%81%E7%BB%93%E6%9E%84%E5%88%86%E6%9E%90.png?raw=true) 24 | 25 | **静态测试阶段的主要活动**: 26 | 27 | - 检查**算法逻辑**是否正确。 28 | - 检查**模块接口**是否正确。 29 | - 检查函数是否对输入参数进行了**合法性检查**。 30 | - 检查程序能否对**异常或错误**进行适当的处理。 31 | - 检查代码**表达式与语句**是否准确并且**不存在二义性**。 32 | - 检查**常量与全局变量**的使用是否符合规范。 33 | - 检查**标识符**的使用是否符合规范。 34 | - 检查程序**代码风格**的**一致性、规范性**。 35 | - 检查代码是否仍然可以继续**优化** (**算法效率**是否足够高)。 36 | - 检查代码**注释**是否**完整且规范**,是否可以准确的反映代码功能。 37 | 38 | **示例**: 39 | 40 | ``` c++ 41 | #include 42 | max(float x,float y) 43 | { 44 | float z; 45 | z=x>y?x:y; 46 | return z; 47 | } 48 | main() 49 | { 50 | float a,b; 51 | int c; 52 | std::cin>>a>>b; 53 | c=max(a,b); 54 | std::cout<<"Max num is: "< 注意:这是一段**不规范、包含错误**的待测试代码。 59 | 60 | 在上述代码块中,以下几点是**必须修改**的: 61 | 62 | 1. 函数没有任何注释。 63 | 2. max 函数的返回值存在错误。 64 | 3. main 函数中存在 float 精度丢失的问题。 65 | 66 | 以下几点是**建议修改**的: 67 | 68 | 1. main 函数自身没有返回值类型和参数列表。 69 | 2. 1 行代码应当只定义 1 个变量。 70 | 3. 代码风格不良,缩进混乱,应当多添加一些空格与换行。 71 | 72 | **静态测试结束后,代码改进后的情况如下**: 73 | 74 | ``` c++ 75 | /* 76 | 程序功能:求解两个实数中的最大值。 77 | 作者:Ling Gao 78 | 日期:2020 年 4 月 2 日 79 | 学校:湖南理工学院 80 | 院系:信息科学与工程学院 81 | */ 82 | #include 83 | 84 | //用途:返回变量 x 与 y 中的最大值。 85 | float max(float x, float y) 86 | { 87 | float z; 88 | z = x>y ? x:y; 89 | 90 | return z; 91 | } 92 | 93 | int main(int argc, char *argv[]) 94 | { 95 | float a, 96 | float b; 97 | float c; 98 | std::cin >> a >> b; 99 | c = max(a, b); 100 | std::cout << "Max num is: " << c << std::endl; 101 | 102 | return 0; 103 | } 104 | ``` 105 | 106 | ### :two: 动态测试 107 | 108 | **动态测试 (Dynamic Testing)**:指的是**实际运行**被测试的软件,向其中**输入测试数据**,检查**实际输出结果**与**预期结果**是否**相符**的过程。**判断测试属于静态还是动态,仅需要确认是否实际运行了软件**。 109 | 110 | **动态测试主要包括**: 111 | 112 | 1. **功能确认、接口测试** 113 | 2. **覆盖率分析** 114 | 3. **性能分析** 115 | 4. **内存分析** 116 | 117 | 以上方的代码块为例,当执行**动态测试**时,需要测试工程师**执行此程序**,输入**多组测试用例 (每组两个实数)**,确认程序是否可以**按照预期结果**准确的输出两实数中的最大数。 118 | 119 | ## 二、白盒测试与黑盒测试 120 | 121 | **“黑盒测试”** 与 **“白盒测试”** 两种测试方法分别从两种**完全不同的角度**出发,反映了两种**截然不同的思路**。它们分别适用于**不同的测试阶段**。**黑盒测试既可以是动态测试,也可以是静态测试,白盒测试同样如此**。 122 | 123 | ### :one: 白盒测试 124 | 125 | **白盒测试** (亦称程序员测试、结构测试、逻辑驱动测试):指的是需要完全了解软件的**结构**与**处理过程**,按照软件的**内部逻辑**来测试软件,**检验软件中的每条路径能否按照规格说明文档中的规定或要求正常执行**。 126 | 127 | ### :two: 黑盒测试 128 | 129 | **黑盒测试** (亦称用户测试、功能测试、数据驱动测试):指的是将待测试软件当作一个 **“打不开的黑盒子”**,在程序接口开展测试工作,**只检查软件功能是否满足规格说明文档**,根据软件功能需求来设计测试用例并执行测试。**集成、系统、验收测试流程一般都使用黑盒测试作为主要的方法**。 130 | 131 | **黑盒测试正规概念**:黑盒测试是一种**从软件外部对软件实施的测试**,也称功能测试或基于规格说明的测试。其基本观点是:任何程序都可以看作是从输入定义域到输出值域的映射,这种观点将被测程序看作一个打不开的黑盒,黑盒里面的内容 (实现) 是完全不知道的,只知道软件要做什么。 132 | 133 | **黑盒测试的特点**: 134 | 135 | - 黑盒测试与软件的具体实现过程无关,如果实现过程发生了变化,测试用例与数据仍然可以正常使用。 136 | - 黑盒测试的测试用例设计可以与软件的开发工作同时进行,可以压缩项目的总开发时间。 137 | 138 | ## 三、手工测试与自动化测试 139 | 140 | **常用自动化测试工具**: 141 | 142 | 1. **功能性**自动化测试工具 143 | - QuickTest Professional 144 | - Rational Robot 145 | - Compuware QARun 146 | - *等* 147 | 2. **性能**自动化测试工具 148 | - LoadRunner 149 | - MS WAS 150 | - Rational Robot 151 | - *等* 152 | 153 | **主要理论**: 154 | 155 | 1. 手工测试与自动化测试都是**不可或缺**的,两者是**相辅相成**的关系。 156 | 2. 手工测试与自动化测试都**以测试用例为核心**。 157 | 3. 理论上,所有的手工测试都可以改为以自动化的方式来执行,不过应当考虑使用自动化测试工具带来的效率上的增益能否抵消掉项目资金的消耗。 158 | 159 | --- 160 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_3_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%96%B9%E6%B3%95.md#-23---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%9A%84%E6%96%B9%E6%B3%95) 161 | 162 | [**下一章节:§ 2.4 - 软件测试用例详解**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E8%AF%A6%E8%A7%A3.md#-24---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E8%AF%A6%E8%A7%A3) 163 | 164 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第二章/2_3_静态结构分析.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_3_静态结构分析.png -------------------------------------------------------------------------------- /第二章/2_4_软件测试用例详解.md: -------------------------------------------------------------------------------- 1 | # § 2.4 - 软件测试用例详解 2 | 3 | ## 一、概念 4 | 5 | **软件测试用例 (Test Case)**:指的是为了实施软件测试而向被测试软件提供的有关**测试目标、输入数据、操作方式、测试环境、预期结果以及测试脚本**等必要信息的特定**集合**。测试用例可以体现软件测试的方法、技术与策略,可以用于核实软件是否满足相应的需求。 6 | 7 | **软件测试用例可以解决的问题**: 8 | 9 | 1. 确定需要测试软件的哪些功能。 10 | 2. 具体如何执行软件测试。 11 | 3. 如何衡量软件测试得出的结果。 12 | 13 | **测试用例的用途**: 14 | 15 | - **指导**测试工程师**开展测试工作**。 16 | - **指导**测试工程师**规划测试数据**。 17 | - **指导**测试工程师**编写测试脚本**。 18 | - 作为测试工作成功与否的评判标准。 19 | - 作为软件缺陷严重程度的评判标准。 20 | 21 | **补充概念**: 22 | 23 | 1. 软件测试用例是测试工作的 **“关键”** 部分(软件测试计划是 **“核心”** 部分)。 24 | 2. 软件测试用例可以用来测试软件的**某一需求能否得到满足**。 25 | 3. 软件测试用例的编写方式**不唯一**,应当具体问题具体分析。 26 | 27 | **使用软件测试用例的好处**: 28 | 29 | - 测试用例可以帮助测试人员**理清思路、避免遗漏**。 30 | - 测试用例可以便于**跟踪测试工作进展**。 31 | - 测试用例可以作为**历史参考**。 32 | - 使用测试用例可以开展**重复测试**。 33 | 34 | ## 二、内容与格式 35 | 36 | ### :one: 内容 37 | 38 | 一般情况下,可以参照已有的软件测试用例模板来编写新的待测软件的测试用例。模板不是标准,在实际的编写过程中,应当根据待测软件的不同对最终的测试用例进行相应的调整。 39 | 40 | **软件测试用例应当具备以下特性**: 41 | 42 | 1. **简洁性**:应当使用**简单、精炼**的语言来编写测试用例。 43 | 2. **正确性**:工程师可以**顺利**的依照测试用例来执行工作,并且可以得到**准确**的测试结果。 44 | 45 | 软件测试用例中应当明确说明 **“测试工程师应当做什么”** 以及 **“软件应当呈现什么结果”**,也就是说,测试用例要明确**输入**与**预期输出**。为了避免语义混淆,操作步骤应当采用 **“动词 + 名词”** 的结构编写,**动词**应当总是 **“测试工程师要做的事情”**,**名词**应当总是 **“测试工程师所操作的对象”**。 46 | 47 | ### :two: 格式 48 | 49 | **软件测试用例的基本格式**: 50 | 51 | - **软件名称** 52 | - 软件版本 53 | - 功能模块名称 54 | - 编号 55 | - **测试标题** 56 | - 重要级别 57 | - 前置要求 58 | - **测试数据** 59 | - **测试输入** 60 | - **操作步骤** 61 | - **预期结果** 62 | - *等* 63 | 64 | **示例**: 65 | 66 | |软件|Windows 10| 67 | |:-|:-| 68 | |软件版本|版本 2004 (OS 内部版本 19592.1001)| 69 | |编号|000001| 70 | |制作人|Ling Gao| 71 | |制作日期|2020 年 4 月 4 日| 72 | |**功能模块名**|**夜间模式**| 73 | |**测试目的**|**确认此版本 Windows 下夜间模式能否正常使用**| 74 | |**测试数据**|**账户:hnistgkx@outlook.com、密码:password**| 75 | |**操作步骤**|**[1. 启动开始菜单] > [2. 点击 “齿轮” 图标] > [3. 点击 “系统”] > [4. 点击 “夜间模式设置”] >**| 76 | ||**[5. 将 “强度” 滑块拉动至中间位置] > [6. 点击 “立即启用”] > [操作完毕]**| 77 | |**预期结果**|**在 5 秒钟时间内,屏幕背景颜色由亮白色变为暗黄色,也可能呈现为橙色**。| 78 | |测试工程师|*待填写*| 79 | |开发工程师|*待填写*| 80 | |项目负责人|*待填写*| 81 | 82 | ## 三、更新与维护 83 | 84 | 随着软件项目的**需求变更**与**功能变化**,软件测试用例也需要不断的进行**细化**与**完善**,这是一个**循序渐进**的过程。软件测试用例一般需要由多名**经验丰富**的测试工程师进行**正式、有效**的评审,以便及时的进行查缺补漏。如果确实需要的话,推荐**使用专业的软件来管理软件测试用例**,而不仅仅是将测试用例放置在 Word 文档中。 85 | 86 | --- 87 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_4_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E8%AF%A6%E8%A7%A3.md#-24---%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E8%AF%A6%E8%A7%A3) 88 | 89 | [**下一章节:§ 2.5 - 黑盒测试技术详解**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_5_%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#-25---%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3) 90 | 91 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第二章/2_5_黑盒测试技术详解.md: -------------------------------------------------------------------------------- 1 | # § 2.5 - 黑盒测试技术详解 2 | 3 | ## 一、黑盒测试技术的常用方法 4 | 5 | 黑盒测试技术中的常用方法有以下几种: 6 | 7 | - **等价类划分法** 8 | - **边界值分析法** 9 | - 因果图法 10 | - 决策表法 11 | - **错误推测法** 12 | - 正交试验法 13 | - 场景法 14 | - *等* 15 | 16 | ## 二、等价类划分法 17 | 18 | ### :one: 概念 19 | 20 | **等价类划分法**:指的是依据软件需求对测试输入数据的范围进行细分,然后在每个细分区域中选取一个**有代表性**的测试数据,以此测试数据来开展测试工作。 21 | 22 | 等价类划分法摒弃了工作量繁重的穷举测试法,将测试输入数据进行合理的分类,形成对应的有代表性的测试用例,以此来减轻软件测试的工作量。 23 | 24 | **等价类分为以下两种**:等价类 = 有效等价类 + 无效等价类 25 | 26 | 1. **有效等价类**:**符合**需求说明的**合理**软件测试输入数据的集合。 27 | 2. **无效等价类**:**不符合**需求说明的**无意义**软件测试输入数据的集合。 28 | 29 | **使用等价类划分法的步骤**: 30 | 31 | 1. 依据常用方法来为软件的测试输入数据**划分等价类** :arrow_down: 32 | 2. 为列表中的每一个等价类规定**唯一**的编号 :arrow_down: 33 | 3. 设计一个新的**软件测试用例**,使其可以覆盖**尽可能多**的尚未被覆盖的**有效等价类** :arrow_down: 34 | 4. **重复步骤 3**,直至**所有的有效等价类**全部被测试用例覆盖 :arrow_down: 35 | 5. 设计一个新的**软件测试用例**,使其**仅覆盖一个**尚未被覆盖的**无效等价类** :arrow_down: 36 | 6. **重复步骤 5**,直至**所有的无效等价类**全部被测试用例覆盖 :triangular_flag_on_post: 37 | 38 | ### :two: 示例 39 | 40 | |软件测试技术|黑盒(等价类划分法)| 41 | |---|---| 42 | |待测试软件|一个可以计算范围均在 **0 - 100** 之间的**两数相加**结果的计算器。| 43 | |测试输入数据 **(有效等价类)**|**输入数据 >= 0 且 <= 100**| 44 | |测试输入数据 **(无效等价类)**|**输入数据 < 0 或 > 100**| 45 | |测试输入数据 **(无效等价类)**|不在此列表中的其他测试输入情况| 46 | 47 | **加数的等价类划分**: 48 | 49 | - **数值** 50 | - 整数 51 | - **< 0 [1]** 52 | - **0 - 100 [2]** 53 | - **> 100 [3]** 54 | - 浮点数 **[4]** 55 | - **非数值** 56 | - 字母 **[5]** 57 | - 特殊字符 **[6]** 58 | - 空格 **[7]** 59 | - 无输入 **[8]** 60 | 61 | **编写测试用例**: 62 | 63 | |测试用例编号|所属等价类|加数 1|加数 2|预期结果| 64 | |:--:|:--:|:--:|:--:|:--:| 65 | |0|**[2]** - **有效**等价类|5|83|软件输出 **“88”** 的结果。| 66 | |1|**[2]** - **有效**等价类|0|100|软件输出 **“100”** 的结果。| 67 | |2|**[1]** - **无效**等价类|-1|5|软件输出 **“输入错误”** 的提示。| 68 | |3|**[3]** - **无效**等价类|101|5|软件输出 **“输入错误”** 的提示。| 69 | |4|**[4]** - **无效**等价类|1.5|70.73|软件输出 **“输入错误”** 的提示。| 70 | |5|**[5]** - **无效**等价类|G|kx|软件输出 **“输入错误”** 的提示。| 71 | |6|**[6]** - **无效**等价类|$|😁|软件输出 **“输入错误”** 的提示。| 72 | |7|**[7]** - **无效**等价类|空格|空格|软件输出 **“输入错误”** 的提示。| 73 | |8|**[8]** - **无效**等价类|无输入|无输入|软件输出 **“输入错误”** 的提示。| 74 | |...|...|...|...|...| 75 | 76 | ## 三、边界值划分法 77 | 78 | ### :one: 概念 79 | 80 | **边界值划分法**(又称边界值**分析**法):指的是对软件的输入或输出的**边界值**进行着重测试的一种测试方法。在实际应用中,边界值划分法通常会与等价类划分法共同使用,作为等价类划分法的补充。 81 | 82 | **为什么要使用边界值划分法**:根据软件测试领域长时间以来总结的经验,通常情况下,**软件中数据范围的边界值是最容易产生错误与缺陷的位置**。因此,如果我们将软件测试的重点放在这些边界值周围,可以有效的提高缺陷的发现效率,并且节省一定的测试工作开销。 83 | 84 | ### :two: 使用步骤 85 | 86 | **使用边界值划分法的步骤**: 87 | 88 | 1. 如果软件需求中对输入数据规定了**范围**,则在实施测试时应当选择**范围的边界 [1]**、**略微超出边界 [2]**、**略微低于边界 [3]** 的三种值作为软件测试的输入数据。 89 | - **示例**:待测试软件为一个可以计算 **0 - 100** 之间的**两整数**相加结果的计算器。当使用边界值划分法进行测试时,可以选择 **0、100、1、101、-1、99** 作为加数的主要测试输入数据,而不必测试例如 “30 + 45” 一类的结果。 90 | 91 | 2. 如果软件需求中对输入数据规定了**个数**,则在实施测试时应当选择**最大个数 [1]**、**最小个数 [2]**、**最大个数 +1 [3]、最小个数 -1 [4]** 的四种值作为软件测试的输入数据。 92 | - **示例**:待测试软件为一个可以计算 **4 - 7** 个数字相加结果的计算器。当使用边界值划分法进行测试时,可以选择 **4 个、7 个、3 个、8 个数字**作为加数个数的主要测试输入数据,而不必测试例如 “5 个数字” 或 “6 个数字” 相加时的结果。 93 | 94 | 3. 如果软件需求中指出输入域或输出域是**有序集合**的话,则在实施测试时应当选择集合中的第一个与最后一个元素作为测试用例。如果软件中使用了**内部数据结构**的话,则应当选择内部数据结构的边界上的值作为测试用例。 95 | 96 | **边界值数据的总体选择原则:刚刚等于、刚刚大于、刚刚小于**。 97 | 98 | ## 四、错误推测法 99 | 100 | **错误推测法**:指的是基于软件测试工程师的**经验与直觉**,对软件中可能存在缺陷的功能与模块进行**推测**,并根据这些**推测**有针对性的设计软件测试用例的一种测试方法。 101 | 102 | **使用前提**:**深度熟悉**被测试软件、过去已经**系统的分析过**此软件中存在的缺陷。 103 | 104 | 错误推测法是等价类划分法与边界值划分法等测试方法的**补充**,在实际的软件测试工作中可以**灵活使用**此方法即可,不需要进行详细的学习。 105 | 106 | ## 五、控件的黑盒测试方法 107 | 108 | ### :one: 常用控件 109 | 110 | - **文本框** 111 | - **按钮** 112 | - **单选按钮** 113 | - **复选框** 114 | - 列表框 115 | - 组合列表框 116 | - 滚动条 117 | - *等* 118 | 119 | ### :two: 文本框 120 | 121 | 软件中的**文本框**的测试工作需要考虑以下情况:**内容、长度、类型(大小写 / 是否隐藏*等* )、唯一性、空文本框、空格、复制粘贴、特殊字符、功能键*等*** 。 122 | 123 | **示例**: 124 | 125 | 等待测试的是某个软件的**账户登录**功能,因此需要对软件的 **“账户文本框”** 与 **“密码文本框”** 分别进行测试。在开展测试工作时,应当按照下方的步骤进行操作: 126 | 127 | 1. 输入正确的账户名与密码,密码的每一位均显示为 “\*” 符号。点击 “登录” 按钮,可以**成功登录**账户 :arrow_down: 128 | 2. 输入正确的账户名与错误的密码(再测试一次错误的账户名与正确的密码)。点击 “登录” 按钮,**无法登录**账户,提示 “用户名或密码错误” :arrow_down: 129 | 3. 注册新账户,输入未使用过的账户名,可以**成功注册** :arrow_down: 130 | 4. 注册新账户,输入已注册过的账户名,**无法注册**,提示 “用户名已存在” :arrow_down: 131 | 5. 软件需求文档中应当已经给出了账户名允许的长度范围。注册新账户,按照 “边界值划分法” 进行测试,注册大于长度范围的账户名,**无法注册**,提示 “用户名过长” :arrow_down: 132 | 6. 注册新账户,输入空格账户名,**无法注册**,提示 “用户名不符合要求”。不输入账户名,无法注册,提示 “未输入用户名” :arrow_down: 133 | 7. 软件需求文档中应当已经给出了账户名的格式要求(例如不能使用特殊字符 / 汉字等)。注册新账户,输入不允许使用的特殊字符或汉字作为账户名,**无法注册**,提示 “用户名不符合要求” :arrow_down: 134 | 8. 软件需求文档中应当已经给出了是否允许在 **“密码文本框”** 中复制粘贴文本。登录或注册新账户,向密码文本框中粘贴文本,确认实际结果是否与预期结果相同 :arrow_down: 135 | 9. 软件需求文档中应当已经给出了是否允许注册 **“特殊字符集”** 为账户名。注册新账户,输入类似 “NULL”、“\0” 等特殊字符集为账户名,确认实际结果是否与预期结果相同 :arrow_down: 136 | 10. 执行软件测试用例中的其余操作,确认实际结果是否与预期结果相同 :triangular_flag_on_post: 137 | 138 | ### :three: 按钮 139 | 140 | 软件中的**按钮**的测试工作需要考虑以下情况: 141 | 142 | - **按钮能否实现相应的功能 (例如确认 / 取消*等* )** 143 | - **按钮能否提示正确的信息 (例如正确性 / 友好性 / 二次确认*等* )** 144 | - **对于不符合要求的输入数据,按钮能否进行相应的处理 (例如输入错误 / 查询失败*等* )** 145 | 146 | **示例**:待测试软件与上方 “文本框” 部分的示例相同。账户登录的功能除了需要用于输入账户名与密码的两个文本框之外,**还需要一个 “登录” 按钮**。在开展测试工作时,应当注意以下情况: 147 | 148 | 1. 输入正确的账户名与密码,点击 “登录” 按钮,可以**成功登录**账户 :arrow_down: 149 | 2. 输入错误的账户名或密码时,按钮给出 **“用户名或密码错误”** 的提示 :arrow_down: 150 | 3. 注册新账户时,应当有 **“密码二次确认”** 的过程,不能只让用户输入一次密码即可完成注册 :triangular_flag_on_post: 151 | 152 | > 注:按钮应当具备 **“友好性”**。**可能会导致数据丢失的操作不能在用户点击按钮时立即执行,而是应当弹出 “是否确认执行此操作?” 的提示,让用户进行二次确认**。 153 | 154 | ### :four: 单选按钮 155 | 156 | 软件中的**单选按钮**的测试工作需要考虑以下情况: 157 | 158 | - **每个按钮是否都能实现相应的功能** 159 | - **一组单选按钮是否只能选中一个** 160 | - **是否有默认的选中项** 161 | 162 | ### :five: 复选框 163 | 164 | 软件中的**复选框**的测试工作需要考虑以下情况: 165 | 166 | - 多个复选框能否**同时**选中 167 | - 多个复选框能否**部分**选中 168 | - 多个复选框能否**均不**选中 169 | - **每个复选项目是否都能实现相应的功能** 170 | - **多个复选项目是否可以实现叠加的功能** 171 | 172 | --- 173 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_5_%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#-25---%E9%BB%91%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3) 174 | 175 | [**下一章节:§ 2.6 - 白盒测试技术详解**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_6_%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#-26---%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3) 176 | 177 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第二章/2_6_判定条件覆盖_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_判定条件覆盖_1.png -------------------------------------------------------------------------------- /第二章/2_6_判定条件覆盖_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_判定条件覆盖_2.png -------------------------------------------------------------------------------- /第二章/2_6_判定条件覆盖_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_判定条件覆盖_3.png -------------------------------------------------------------------------------- /第二章/2_6_判定条件覆盖_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_判定条件覆盖_4.png -------------------------------------------------------------------------------- /第二章/2_6_判定覆盖_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_判定覆盖_1.png -------------------------------------------------------------------------------- /第二章/2_6_判定覆盖_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_判定覆盖_2.png -------------------------------------------------------------------------------- /第二章/2_6_判定覆盖_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_判定覆盖_3.png -------------------------------------------------------------------------------- /第二章/2_6_条件组合覆盖.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_条件组合覆盖.png -------------------------------------------------------------------------------- /第二章/2_6_条件覆盖_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_条件覆盖_1.png -------------------------------------------------------------------------------- /第二章/2_6_条件覆盖_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_条件覆盖_2.png -------------------------------------------------------------------------------- /第二章/2_6_条件覆盖_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_条件覆盖_3.png -------------------------------------------------------------------------------- /第二章/2_6_流程图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_流程图.png -------------------------------------------------------------------------------- /第二章/2_6_白盒测试技术分类.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_白盒测试技术分类.png -------------------------------------------------------------------------------- /第二章/2_6_白盒测试技术详解.md: -------------------------------------------------------------------------------- 1 | # § 2.6 - 白盒测试技术详解 2 | 3 | ## 一、概念 4 | 5 | **白盒测试** (亦称程序员测试、结构测试、逻辑驱动测试):指的是需要完全了解软件的**结构与处理过程**,按照软件的**内部逻辑**来测试软件,**以检验软件中的每条路径能否按照规格说明文档中的规定或要求正常执行**的一种测试技术。 6 | 7 | 白盒测试是针对被测试软件的 **“内部工作方式”** 来开展测试工作的,测试工程师根据软件的**内部结构**设计测试用例。白盒测试着重于检查软件的**内部结构、逻辑、循环**与**路径**中存在的错误与缺陷。 8 | 9 | ![白盒测试技术分类](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_6_%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E5%88%86%E7%B1%BB.png?raw=true) 10 | 11 | > 注:白盒测试技术中的 **“边界值测试”** 一般用于检查程序代码中的**数组是否越界、变量是否溢出**等错误。 12 | 13 | ## 二、逻辑驱动覆盖测试 14 | 15 | **逻辑驱动覆盖主要分为以下几种**(按强弱顺序排行): 16 | 17 | 1. **条件组合覆盖**(最强) 18 | 2. **判定 - 条件覆盖** 19 | 3. **条件覆盖** 20 | 4. **判定覆盖** 21 | 5. **语句覆盖**(最弱) 22 | 23 | **示例**: 24 | 25 | ``` c++ 26 | /* 27 | 程序功能:学习白盒测试技术中的逻辑驱动覆盖测试方法。 28 | 作者:Ling Gao 29 | 日期:2020 年 4 月 15 日 30 | 学校:湖南理工学院 31 | 院系:信息科学与工程学院 32 | */ 33 | #include 34 | 35 | int main(int argc, char *argv[]) 36 | { 37 | float a; 38 | float b; 39 | float x; 40 | 41 | std::cin >> a >> b >> x; 42 | if (a > 1 && b == 0) 43 | x /= a; 44 | if (a == 2 || x > 1) 45 | x += 1; 46 | std::cout << x << std::endl; 47 | 48 | return 0; 49 | } 50 | ``` 51 | > 注:这是一段用来演示 **“逻辑驱动覆盖测试”** 方法的代码,并没有实际的功能。 52 | 53 | **为了更加直观的开展软件测试工作,可以先将程序代码转换为流程图形式**: 54 | 55 | 56 | 57 | ### :one: 语句覆盖(最弱) 58 | 59 | **语句覆盖测试**:指的是**制定足够多的软件测试用例**,使得软件中的**每一个代码语句至少都能被执行一次**的软件测试方法。这是一种效果**较差**的逻辑驱动覆盖测试方法。 60 | 61 | 以上述的代码块为例,当使用测试输入数据为 **“a = 2,b = 0,x = 4”** 作为测试用例时,**程序中的所有语句恰好都可以被执行一次**,软件的预期输出为 **“x = 3”**。在流程图中,本次测试工作的程序执行路径如下图的**红色线条**所示: 62 | 63 | 64 | 65 | 可以看到,语句覆盖测试虽然可以覆盖软件中的所有代码语句,但是**无法覆盖到所有的代码分支**,图中**蓝色线条**分支是未被测试到的。此时,如果软件代码中存在 **“误将 AND 条件写为了 OR”** 或 **“误将 x > 1 写为了 x >= 1”** 一类的分支语句错误的话,是**无法被语句覆盖测试所发现**的。这也是认为 **“语句覆盖测试是一种效果较差的测试方法”** 的原因之一。 66 | 67 | ### :two: 判定覆盖(较弱) 68 | 69 | **判定覆盖测试**:指的是制定足够多的软件测试用例,使得软件中的**每一个分支至少都能被执行一次**的软件测试方法。这是一种比 “语句覆盖测试” 效果**稍强一些**的逻辑驱动覆盖测试方法。 70 | 71 | 以上述的代码块为例,当使用下面的**一组**输入数据来编写软件测试用例时,程序中的**所有分支**恰好都可以被执行一次: 72 | 73 | |输入数据|预期结果| 74 | |--|--| 75 | |测试用例 1:**a = 3,b = 0,x = 1**|输出:**x = 0.33**| 76 | |测试用例 2:**a = 3,b = 2,x = 0**|输出:**x = 1**| 77 | 78 | **测试用例 1** 的程序执行路径如下图的**红色线条**所示;**测试用例 2** 的程序执行路径如下图的**蓝色线条**所示: 79 | 80 | 81 | 82 | 判定覆盖测试的覆盖率虽然高于语句覆盖测试,但是仍然**不是非常充分**。例如,下方**绿色线条**所表示的程序执行路径,在刚刚编写的 **“判定覆盖”** 测试用例中是**未能**被测试到的: 83 | 84 | 85 | 86 | ### :three: 条件覆盖(中等) 87 | 88 | **条件覆盖测试**:指的是制定足够多的软件测试用例,使得软件中的**每一个判定条件都获得各种可能的取值**的软件测试方法。这是一种效果**更强一些**的逻辑驱动覆盖测试方法。 89 | 90 | 以上述的代码块为例,程序中的两个判定条件有如下的几种**取值范围**: 91 | 92 | ![取值范围](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_6_%E6%9D%A1%E4%BB%B6%E8%A6%86%E7%9B%96_1.png?raw=true) 93 | 94 | 当使用下面的**一组**输入数据来编写软件测试用例时,程序中**每一个判定条件**恰好都可以**获得所有可能的取值**: 95 | 96 | | 输入数据 | 预期结果 | 97 | | ------------------------------------ | --------------- | 98 | | 测试用例 1:**a = 2,b = 1,x = 4** | 输出:**x = 5** | 99 | | 测试用例 2:**a = -1,b = 0,x = 1** | 输出:**x = 1** | 100 | 101 | **测试用例 1** 的程序执行路径如下图的**红色线条**所示;**测试用例 2** 的程序执行路径如下图的**蓝色线条**所示: 102 | 103 | 104 | 105 | 可以看到,条件覆盖测试虽然可以覆盖软件中判断条件所有可能的取值范围,但是依旧**无法覆盖所有的程序执行路径**。条件覆盖测试也是一种**并不非常充分**的逻辑驱动覆盖测试方法。 106 | 107 | ### :four: 判定 - 条件覆盖(较强) 108 | 109 | **判定 - 条件覆盖**:顾名思义,指的是**综合**判定覆盖与条件覆盖,制定足够多的软件测试用例,使得软件**判定中的每一个条件都获得各种可能的取值**,同时使得软件中的**每一个分支至少都能被执行一次**的软件测试方法。 110 | 111 | 以上述的代码块为例,当使用下面的**一组**输入数据来编写软件测试用例时,可以**同时**符合**判定覆盖**与**条件覆盖**: 112 | 113 | | 输入数据 | 预期结果 | 114 | | ----------------------------------- | --------------- | 115 | | 测试用例 1:**a = 2,b = 0,x = 4** | 输出:**x = 3** | 116 | | 测试用例 2:**a = 1,b = 1,x = 1** | 输出:**x = 1** | 117 | 118 | **测试用例 1** 的程序执行路径如下图的**红色线条**所示;**测试用例 2** 的程序执行路径如下图的**蓝色线条**所示: 119 | 120 | 121 | 122 | 判定 - 条件覆盖测试的覆盖率虽然更高,但是依旧**不充分**。例如,下方**绿色线条**所表示的程序执行路径,在刚刚编写的 **“判定 - 条件覆盖”** 测试用例中是**未能**被测试到的: 123 | 124 | 125 | 126 | ### :five: 条件组合覆盖(最强) 127 | 128 | **条件组合覆盖**:指的是制定足够多的软件测试用例,使得软件中的**所有条件的各种组合都能被至少执行一次**的软件测试方法。这是效果**最强**但**仍不完美**的逻辑驱动覆盖测试方法。 129 | 130 | 以上述的代码块为例,可以将程序中的每个判定条件都进行**拆分**,绘制为下方新的流程图: 131 | 132 | 133 | 134 | 软件测试工程师可以制定足够多的软件测试用例,使得软件中的所有条件的各种组合都能被至少执行一次(此处不再展示测试用例)。对比上述其他四种逻辑驱动覆盖测试方法的特点,可以发现:**条件组合覆盖也是不完美的**。但是,条件组合覆盖测试方法足以应对绝大多数的情况,没有必要再设计更加详细的逻辑驱动覆盖测试方法,到此为止即可。 135 | 136 | 在实际的软件测试工作中,通常**不必直接使用条件组合覆盖测试方法**,因为会大幅度的增加测试工程师的工作量。一般情况下,大多数的软件测试工作只需使用**语句覆盖**与**判定覆盖**这两种逻辑驱动覆盖测试方法。 137 | 138 | ## 三、测试题 139 | 140 | 针对以下程序段,对于变量 c 的取值,至少需要制定 **( 3 )** 个测试用例才能够满足语句覆盖要求。 141 | 142 | ```c 143 | c = ((u8_t *) q -> payload) [i]; 144 | switch (c) 145 | { 146 | case SLIP_END: 147 | { 148 | sio_send(SLIP_ESC, netif -> state); 149 | sio_send(SLIP_ESC_END, netif -> state); 150 | break; 151 | } 152 | case SLIP_ESC: 153 | { 154 | sio_send(SLIP_ESC, netif -> state); 155 | sio_send(SLIP_ESC_ESC, netif -> state); 156 | break; 157 | } 158 | default: 159 | { 160 | sio_send(c, netif -> state); 161 | break; 162 | } 163 | } 164 | ``` 165 | 166 | > 注:本题选取自**中国计算机技术与软件专业技术资格(水平)考试**中的 **“软件评测师”** 考试部分。 167 | 168 | --- 169 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_6_%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3.md#-26---%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3) 170 | 171 | [**下一章节:§ 2.7 - 软件缺陷详解**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_7_%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E8%AF%A6%E8%A7%A3.md#-27---%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E8%AF%A6%E8%A7%A3) 172 | 173 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) -------------------------------------------------------------------------------- /第二章/2_6_语句覆盖.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_6_语句覆盖.png -------------------------------------------------------------------------------- /第二章/2_7_软件缺陷分布位置饼状图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_7_软件缺陷分布位置饼状图.png -------------------------------------------------------------------------------- /第二章/2_7_软件缺陷生命周期.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Lingggao/Software-Testing-Basics/5432535e41102d8f796a33b89e7bdd5d9a74b7eb/第二章/2_7_软件缺陷生命周期.png -------------------------------------------------------------------------------- /第二章/2_7_软件缺陷详解.md: -------------------------------------------------------------------------------- 1 | # § 2.7 - 软件缺陷详解 2 | 3 | ## 一、概念 4 | 5 | **软件缺陷**(Software Defect,亦称 Bug):指的是软件中存在的某种可以**破坏软件正常运行能力**的**问题、错误**或隐藏在软件功能中的**缺陷**。一切的程序、系统与文档中的问题,实际软件与需求说明文档中不一致的情况,软件无法满足用户需求的情况等,全部可以被视为**软件缺陷**。 6 | 7 | **标准定义**:**从软件的内部来看**,软件缺陷指的是软件在开发或维护的过程中所存在的错误与其他各种问题。**从软件的外部来看**,软件缺陷指的是软件与其所需要实现的功能的失效与违背。 8 | 9 | > IEEE (1983) 729 10 | 11 | 一般情况下,满足以下情况**之一**,即可称为软件缺陷: 12 | 13 | 1. 软件未实现产品说明文档中要求的功能。 14 | 2. 软件出现了产品说明文档中明确指出了的 “不应当出现” 的错误。 15 | 3. 软件实现了产品说明文档中未要求实现的功能。 16 | 4. 软件未实现产品说明文档中未要求实现、但是实际上应当实现的功能。 17 | 5. 软件难以使用、不易使用、运行缓慢或最终用户不满意。 18 | 19 | **软件缺陷并不全部被称为 Bug,也有其他的称呼方式**: 20 | 21 | - **缺陷**(Defect) 22 | - **故障**(Fault) 23 | - **问题**(Problem) 24 | - **错误**(Error) 25 | - **异常**(Anomy) 26 | - **差异**(Variance) 27 | - **失败**(Failure) 28 | - **矛盾**(Inconsistency) 29 | - **事故**(Incident) 30 | - *等* 31 | 32 | ## 二、软件缺陷的产生原因 33 | 34 | ### :one: ​**软件缺陷的产生原因** 35 | 36 | - **技术问题** 37 | - 算法错误 38 | - 语法错误 39 | - 计算与精度问题 40 | - 参数传递问题 41 | - *等* 42 | - **团队协作** 43 | - 误解 44 | - 沟通不充分 45 | - *等* 46 | - **软件自身** 47 | - 文档编写错误 48 | - 用户在不恰当的场合使用 49 | - 时间时区不一致 50 | - *等* 51 | 52 | ### :two: **软件缺陷分布位置饼状图** 53 | 54 | 55 | 56 | 由于软件开发流程的初期经常会存在例如 “团队间沟通与协作困难” 的情况,因此接近 **60%** 的软件缺陷是在开发流程中的 **“需求”** 阶段出现的,也就是说大多数的缺陷都存在于**软件产品说明书**(需求规格说明文档)中。 57 | 58 | 软件开发流程中**最早**开展的 **“需求”** 阶段存在最多的缺陷,同时随着时间的推移,修复软件缺陷的成本将会**呈指数级增长**,因此,在软件开发工作的各个流程都开展**审查**与**评审**是非常有必要的。 59 | 60 | 综上所述,每个软件开发团队都应当意识到: 61 | 62 | - **需求评审非常重要**。 63 | - **设计评审必不可少**。 64 | - **文档更新应当及时**。 65 | - **开发测试仔细思考**。 66 | 67 | ## 三、软件缺陷的严重性与优先级 68 | 69 | ### :one: ​严重性 70 | 71 | 软件缺陷的**严重性**用来表示**缺陷所造成的危害的恶劣程度**,一般分为以下几种(恶劣程度由高到低排列): 72 | 73 | 1. **致命缺陷**(Fatal):指的是可以直接造成软件**崩溃、挂起、冻结**或**无响应**,或者可以造成软件**数据丢失**或**主要功能完全失效**等致命问题的软件缺陷。 74 | 2. **关键缺陷**(Critical):指的是可以造成软件的**主要功能部分失效**或者**次要功能完全失效**的软件缺陷。 75 | 3. **主要缺陷**(Major):指的是**几乎不影响**软件正常使用,但是**没有完全实现需求**、**未能达到预期效果**的软件缺陷。 76 | 4. **次要缺陷**(Minor):指的是**完全不影响**软件正常使用的**细微**的软件缺陷。 77 | 5. **建议**(Suggestion):软件产品用户提出的友好建议。 78 | 79 | ### :two: 优先级 80 | 81 | 软件缺陷的**优先级**用来表示**修复缺陷时应当遵循的先后顺序**。一般情况下,缺陷的优先级可以使用字母 A、B、C、D 或数字 1、2、3、4 进行划分,A (1) 表示最高级别,D (4) 表示最低级别。 82 | 83 | - **A - 1 - 最高优先级**:停止进一步的测试与开发工作,**立即**修复此缺陷。 84 | - **B - 2 - 次高优先级**:在软件正式发布前**必须**修复此缺陷。 85 | - **C - 3 - 中等优先级**:如果时间允许的话,**应当**修复此缺陷。 86 | - **D - 4 - 最低优先级**:**可以**修复此缺陷,也可以不修复。 87 | 88 | > 注:大部分软件缺陷的严重性与优先级成正比,但不一定完全成正比。 89 | 90 | ## 四、软件缺陷的生命周期 91 | 92 | ![软件缺陷生命周期](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_7_%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.png?raw=true) 93 | 94 | **软件缺陷状态**主要分为以下几种: 95 | 96 | | 软件缺陷状态 | 详解 | 97 | | :-------------------------------------: | :----------------------------------------------------------: | 98 | | **激活 / 开启**(Active / Open) | 新提交的软件缺陷,正在等待处理。 | 99 | | **已修复**(Fixed / Resolved) | 软件开发工程师已经检查并修复此缺陷,但尚未执行回归测试。 | 100 | | **关闭**(Closed / Inactive) | 软件测试工程师已经执行回归测试,确认缺陷不再存在。 | 101 | | **重启**(Reopen) | 软件测试工程师已经执行回归测试,发现缺陷仍然存在。 | 102 | | **推迟**(Deferred) | 这个软件缺陷将在下一个版本中修复。 | 103 | | **保留**(On Hold) | 由于某些技术原因,这个软件缺陷暂时无法修复。 | 104 | | **无法重现**(Cannot Duplicate) | 软件开发工程师无法重现这个缺陷,需要测试工程师提供重现步骤。 | 105 | | **需要更多信息**(Need More Infor) | 缺陷可以重现,但仍需要更多详细信息,例如日志文件等。 | 106 | | **重复**(Duplicate) | 这个软件缺陷已经被其他的测试工程师发现。 | 107 | | **非缺陷**(Not A Bug) | 这个问题并非是软件缺陷。 | 108 | | **需要修改规格说明书**(Spec Modified) | 根据软件规格说明书的相关要求,这个缺陷无法修复,除非先行修改规格说明书。 | 109 | 110 | ## 五、软件缺陷报告的编写 111 | 112 | ### :one: ​软件缺陷管理方式的演变 113 | 114 | 1. **口头传达**:测试工程师直接联系开发工程师**口头说明**软件缺陷 :arrow_down: 115 | 2. **流水记录**:测试工程师将软件缺陷记录至 **Word 文档**中,开发工程师可以随时查看 :arrow_down: 116 | 3. **系统管理**:软件项目团队使用**专业工具**完整的记录与跟踪缺陷的实时处理情况 :triangular_flag_on_post: 117 | 118 | ### :two: 软件缺陷报告的用途 119 | 120 | - **记录软件缺陷** 121 | - **分类软件缺陷**(便于分配资源) 122 | - **跟踪软件缺陷的处理情况** 123 | 124 | 只要软件仍然处于生命周期之内,测试工程师无论在任何情况下发现缺陷,都应当及时编写并提交缺陷报告。 125 | 126 | ### :three: 编写软件缺陷报告时应当注意以下几点 127 | 128 | 1. **确保问题可以重现**:一个优秀的软件缺陷报告应当可以让其他技术工程师**轻松、快速**的重现问题。 129 | 2. **对缺陷进行分析**(使用最少的步骤重现问题):便于开发工程师准确定位软件缺陷的成因。 130 | 3. **包含重现问题的所有必要步骤**。 131 | 4. **方便阅读**。 132 | 5. **每个软件缺陷报告只记录一个问题**。 133 | 6. **理性编写报告,注意语气态度**。 134 | 135 | ## 六、示例 136 | 137 | ### :one: 软件缺陷报告​ 138 | 139 | | 软件缺陷报告 | 示例 | 140 | | :------------: | :----------------------------------------------------------: | 141 | | 编号 | AA8fkj1 | 142 | | 时间 | 2020 年 4 月 3 日 | 143 | | 提交者 | Ling Gao (Microsoft Windows Insider) | 144 | | Windows 版本号 | Windows 10_1909_18363.752 | 145 | | 问题 | 在任务栏搜索框中输入待搜索文本后,无法搜索到任何 Web 结果。 | 146 | | 处理情况 | 已修复 - Resolved | 147 | | 开发工程师答复 | Thanks for reaching out about this - inline web results in Search should now be back up and running for all supported regions. —— Jennifer (Microsoft Engineer) | 148 | 149 | ### :two: 软件缺陷调查报告 150 | 151 | 请 [**点击此处**](https://github.com/Lingggao/SDIR#software-defect-investigation-report) 查看由我本人编写的一份软件缺陷调查报告。 152 | 153 | --- 154 | [**回到顶部**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/2_7_%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E8%AF%A6%E8%A7%A3.md#-27---%E8%BD%AF%E4%BB%B6%E7%BC%BA%E9%99%B7%E8%AF%A6%E8%A7%A3) 155 | 156 | [**下一章节:§ 3.1 - 单元测试详解**](https://github.com/Lingggao/Software-Testing-Basics/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/3_1_%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3.md#-31---%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E8%AF%A6%E8%A7%A3) 157 | 158 | [**回到主页**](https://github.com/Lingggao/Software-Testing-Basics#%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) 159 | 160 | --------------------------------------------------------------------------------