> For the complete documentation index, see [llms.txt](https://ranger-nju.gitbook.io/software-testing-intro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ranger-nju.gitbook.io/software-testing-intro/master.md).

# 简介

## 简介

[《软件测试简介》Gitbook在线阅读地址](https://ranger-nju.gitbook.io/software-testing-intro)

[《软件测试简介》GitHub项目地址](https://github.com/RangerNJU/Software-Testing-Intro)

Software testing introduction. An introductory booklet written for friends who are interested in software quality assurance.

软件测试简介。为对软件质量保障感兴趣的小伙伴们撰写的入门小册子。

### 进度条

* Dec. 16th 2020 通用测试方法部分完结，撒花！
* 由于时间关系，暂时停止本仓库的更新。课程后半部分会介绍一系列的特殊测试方法，这部分测试方法相对冷门，可能只有少部分小伙伴会对其感兴趣。如果你对他们感兴趣，可以提issue或者给我的邮箱发邮件催更。这些方法包括：
  * 随机测试、自适应随机测试、组合测试
  * 基于约束的测试&#x20;
  * 基于搜索的测试、有限状态机测试
  * 变异测试、蜕变测试
  * Fuzzing、故障注入测试、智能软件测试
* 目前主要精力在[另外一个repo](https://github.com/RangerNJU/Static-Program-Analysis-Book)的编写上

### 我想听到你的声音

* **批评的意见很有价值。** 本简介一定有很多做得不好的地方。如果你觉得我写得不好，可以选择提issue或者通过邮箱联系我（ranger.nju#gmail.com)。
* 如果你觉得我写得不错，可以到GitHub仓库中给我一个Star，也可以在自己的社交圈子中宣传，让更多的人了解这个项目。

## 本简介对谁有用？

学生，开发者，研究者……几乎所有当代生活者都能从中受益。

* 学习方向与程序有关的**学生。**&#x20;
  * 计算机方向的学生能了解常见的bug的产生原因并在实践中下意识避免，也能够通过对自己的程序进行测试而获得更高的实验评价。
  * 其他方向的学生既然看到这里，相比对计算机相关知识感兴趣，本书或许能够为你开启一段新的职业生涯。
* 工作内容与程序有关的**开发者。**&#x20;
  * 无论你希望直接应用某种测试工具，还是希望自己开发一个，本简介都能帮助你理解背后的工作原理和特性，并选定合适的方法。
* 研究领域与程序相关的**研究者。** 或许你希望微调研究方向，却因没有合适的入门材料而苦恼；或许你希望了解计算机领域的相关知识以期获得启发……本简介可以作为你的入门材料或是闲暇读物。
* 生活与程序相关的**每个人**
  * 软件质量是信息化时代的重要议题之一，在这个时代生活与工作，你一定会遇到相关的问题。
  * 软件测试这门课程在大学中很常见，但少有公开材料。
  * 测试的思想很容易应用在生活中社交、消费、工作、教育、制造等领域。

## 不会开发，所以想学测试？

> 软件测试这门课程在大学中很常见，但往往有同学认为在课程上没有学到有用的东西，对自己的未来发展也没有什么作用。**以下的介绍或许会让你对软件测试有新的认识。**

### 软件测试的学术界简介

根据一个知名软件测试领域的网站的统计与调查，**数年前软件测试领域的前十大重要的课题，在今天依然存在。**

作者所在的大学以人工智能和软件方向见长，有许多老师在“给软件找bug”这件事情上做出了**非常酷炫的成果**。比如：

1. 用随机测试的方法给GCC找出了一批真实的bug。
2. 用特殊方法对并行程序进行测试。（例如，有一款叫做[rr](https://rr-project.org/)的开源软件能够**记录下程序运行过程中的每一个细节并回放，从而保证复现bug**）
3. [跳出程序分析领域的固有认知，提出新的分析方法](https://cs.nju.edu.cn/50/1b/c1654a479259/page.htm)实现高精度高速度的分析。
4. 利用人工智能的方法为软件找bug。

### 软件测试的工业界简介

#### 学生眼中的职场现状

通常来说，小企业会有专门的测试工程师岗位，大企业则倾向于不设专门的测试岗——因为**自己写测试用例和维护测试框架是合格开发者的基本素养。**

从工资水平上看，测试与运维岗位普遍比开发岗位低。

#### 老师口中的职业前景

一位老师曾经在课上教导我们多用封装与抽象，少用copy-paste编程模式。且提及了有前辈**专门针对copy-paste编程模式引入的bug进行研究，进而创业并取得了相当好的成绩。**

### 软件测试方向前景小结

* 待解决的问题长久存在，但能够解决问题的技术思想与方法日新月异。
* 不具备创新的眼光与扎实的专业技能，往往不能做出突破性的贡献。

我的其他项目：

[《静态程序分析》Gitbook在线阅读地址](https://ranger-nju.gitbook.io/static-program-analysis-book/)

[《静态程序分析》GitHub项目地址](https://github.com/RangerNJU/Static-Program-Analysis-Book)
