[Lesson Test Automation. Day 01] What's Test Automation

# Outline
本コンテンツは、これからテスト自動化を始める人向けに作成するコンテンツ。
筆者のこれまでの経験を元に作成しているので、教科書と異なる場合があります。
もしくは、他企業で異なる考え方もあると思う。その場合は是非コメントをください！
1回につき10分ほどで終わるコンテンツ量で毎週記載する予定です。


# Condition
筆者はWEBサービスのテストエンジニアである。
そのため、WEBサービスの開発を前提としたテスト自動化の話になる。


# What's Test Automation

Test Automation は、名前の通り、テストに関する一連作業を自動化することである。
execute test以外にも、自動化することはある。
以下に、Test Automation の例を挙げる。

```
What can be automated
1. implement test cases
2. build test environment (Ex. Docker
3. create test data
4. execute test and validate
5. evaluate and report test result
```


# Why is Test Automation

テスト自動化を始めようと思う人は、以下のような目的で始めると思う。

```
Test Automation objective
1. improve efficiency
2. expand test function coverage
3. reduce total cost
4. execute tests manual tester cannot
5. improve test speed , increase test cycles (frequency) 
6. execute exactly same behavior every time 
```

尚、"improve quality"は、テスト自動化のobjectiveに入れていません！
ISTQBのtest automation syllabusにも、記載されていません。
テスト自動化は、主に現在の品質を維持することが目的である。
後述するが、テスト自動化は新規バグを見つけるものではない。

テスト自動化で、数多くのテストを毎回同じ操作で短時間で実施する。
この結果、テストサイクルを増やすことで、リリース回数を増やすことができる。
このサイクルが増えると、最終的にコストがマニュアルテストで実施するより減らすことができる。

人間の手による繰り返しテストはある意味、蔵人である。
リリースのたびに、全く同じ操作を繰り返し実施することが必要だからである。
テスト自動化の場合、まさにこの全く同じ操作を繰り返して実施することは得意である。

上記にない目的でテスト自動化を始めようとしている場合、改めてその目的が正しいかをチェックしたほうが良い。


<B>テスト自動化導入の悪い例</B>
<B>部長</B>　「今の時代はテスト自動化だ。テスト自動化カバレッジ１００％を目指そう！」
<B>現場</B>　「はぁ　（；￣д￣）↓↓ 」



# Merit & Demerit & Limitation

テスト自動化導入すると、当然Merit/Demeritが発生する。
また、これとは別にテスト自動化は万能ではない。
Meritが上回るかどうかで、導入判断基準になる

### Merit

```
Merit
1. increase test cycle
2. possibility to execute test manual tester cannot, difficult, complex
3. execute test faster
4. reduce human mistake to execute test
5. more efficient use of test resources
6. quick feedback of test result
7. improve consistency of tests
```

筆者の業務上で一番恩恵を受けているのは、3と7。
常時、一貫性のあるテストを実行し、開発側がテスト環境にリリースしてバグが混入した時に
すぐに検知し、開発へフィードバックする。これにより、プロジェクトのスピードが落ちない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/f59b3e0b-29ec-6c50-94c7-c210f9804a35.png)




### Demerit

```
Demerit
1. consider initial cost and maintenance cost
2. require technical skill, tool
3. tend to forget true testing objective. 
4. testing to be complex
5. additional investigation for automation testing error
```

まわりでよく聞く悪い例が、テスト自動化が目的になること。
たとえば、テスト自動化の指標として、カバレッジの数字を挙げる。
<B>　「目指せ！テストカバレッジ１００％」</B>
そうなると、数字ばかりを追いかけてしまい、本来テスト自動化でやりたいことを置き去りにしてしまう。

テスト自動化を始める時、テスト、自動化両方のスキルを持った人をアサインする必要がある。
自動化は、エンジニアリング経験がないと実現方法や、環境構築、運用設計が困難になる。
テストのスキルがないと、先に述べたように、自動化が目的になってしまいがちである。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/f296c59d-e894-bf20-6fd5-f24f538da746.png)


### limitation

```
Limitation
1. not all manual test can be automated
2. can only check machine-understandable result
3. can only check actual result with test oracle prepared
4. cannot do exploratory test
```

2,3 は結構重要である。機械がvalidateするので、機械が理解でき、事前に準備したテストオラクルがないと
テスト結果が正しいかを判断することはできない。
例えば、デザインが崩れていないことを確認するとき、人間の目で判断することはできる。
ただし、機械はデザインが崩れていないという定義を明確に定めないと結果が正しいかどうか判別できない。


# Finaly

次は6月5日（金）頃配信予定です。
Test Layerと対応するtest automation toolに関してを予定。


# reference

- <A href="https://www.istqb.org/certification-path-root/test-automation-engineer.html">ISTQB Advanced Level Test Automation Engineer</A>