SET（Software Engineer in Test）エンジニア

## SETエンジニア（Software Engineer in Test）の現状

昨今、**「QAエンジニア」**　とは別に　**「SETエンジニア」**と呼ばれる**テスト自動化アーキテクト**をメインとした職種の採用が増えてきています。

しかし、まだ**知名度**と**何をする職種**かがわかりにくく**エンジニア採用**でも苦戦します。

Indeedやスタンバイで **「SETエンジニア」** **「テスト自動化エンジニア」** で検索すると求人がヒット、掲載されています。

![スクリーンショット 2022-01-09 20.34.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/9b680983-b3b2-ea4b-30ea-6ba5a9b69dfc.png)
![スクリーンショット 2022-01-11 19.50.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/46911a74-685a-d458-0d6b-5fe7d353a17b.png)

まずは、職種に **「SETエンジニア」** **「テスト自動化エンジニア」** とあっても、**何をするエンジニア？**
 説明するところからになります。


## SETエンジニア（Software Engineer in Test）

```lang:主に何を業務とするエンジニアなのですか？
リグレッションテストの「E2E自動化」や「CIでのビルド自動化」を主に担当します。
またその先にある、「CD（継続的デリバリー）」についても進めていく。
自動テストでの修正コストの比率が高く、コードメンテナンス工数も考えなければいけない。

要は、テスト自動化は、「リグレッションテスト」が一番向いているため。

また、非機能のテスト自動化についても取り組む。SREチームとSLAの見直しや改善、運用時基準を達成しているのか。
```
現時点で自動化が難しい領域に対しては（メンテナンス対応作業があまりに多い箇所にも含め）

```lang:プロダクトの新規機能
基本「マニュアルでのQA」で行います。
※AIの力も借りたいですが、今は。
```
**SETエンジニアの必須スキル** としては下記の知識が上げられます。

```lang:SETエンジニアが最低必要とする知識
1.テスト自動化フレームワーク（SeleniumやAppium、Cypress、TestCafeなど）の知識
2.CIツール（CircleCi、Jenkins、Travis CI、Gitlab CIなど）の知識
3.Java、Ruby、Javascriptなどのプログラミング知識
4.既存処理のテスト観点を洗い出しテスト工数の削減計画
5.テストコードの管理（GitやGithub)の知識
6.常に新しいスキルを取得する（QAトレンドやイベントの参加）
7.テストコードレビュースキル（開発スキルと同様）
8.ブランチの管理計画
9.運用工程での修正方法（誰が担当するのか？どういう状態の場合に修正するのか？）
10.クラウドサービスの知識（AWSの基本サービス）
11.セキュリティの知識
```

その上で **「テスト自動化策定」** を作り、既存システムの自動化箇所、自動化することにより手動テストと比較しコスト増減、リリーススケジュール面で有利になるのか、対応人員は？を纏めることからはじめる。

**ROI（投資収益率）Return On Investment** であったり、ビジネス指標を元にそもそもテスト自動化するメリットがあるのか。

**意味もない自動化の保守**をし続けることにもつながりますし、自動化の観点が外れていれば**何のための自動化か**わからなくなります。

要はテスト自動化自体が**技術的負債**となることも（例えば、SETエンジニアが退職してしまいテストコードの理解から始める、画面を操作するためのXpath取得方法が変わっていたも）

**テストツール選定**

```lang:
プロダクトにもよるので、メリット・デメリットを考え、合うテストツールを導入する。
また有償・無償もあるので、ROI（投資収益率）やメンテナンス工数も考慮し進める。
```
[GUIテストツール一覧](https://qiita.com/jun2014/items/8cabbd52830904af49af)の紹介ページとなります

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35353136302f66643336643462362d666564342d626432392d376630642d3963373963323864396437312e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/55160/1b52ff47-bdc1-3217-a203-0ced4f0b863f.png)

[Selenium IDE](http://qiita.com/jun2014/items/bf6b87699b7622c91326)
```lang:
ブラウザのプラグインで記録しながらテストコードを作成できるメリットも。初心者には、使いやすいツールでもあります。
```
[SeleniumBuilder](http://qiita.com/jun2014/items/75a6340e1206225dcf9f)
```lang:
特に新規ニュースもないので、使っていない。
```
[Selenium RC](http://qiita.com/jun2014/items/888ee30f2a8141ce5c5c)
```lang:
最近は使うことがなくなった俗にいうSelenium1.0版
```
[Selenium WebDriver](http://qiita.com/jun2014/items/abdd9b34f446a8309f0d)
```lang:
今はこちらがメインであります。
```
[Sideex](https://qiita.com/jun2014/items/9196fe9a001331d9e672)
```lang:
※SeleniumIDEがFirefox55以降使用できなくなるので。とアナウンスしていましたが今は問題無
```

続いて、自動化環境を整えていきましょう。

まずは、テストコードを **「GitLab」** で管理してみましょう。
ディレクトリの配置とファイルの管理を考える。

```lang:自動化構築例
ECサイトの「リグレッションテスト」のテスト自動化環境構築
```

**CI：[GitLab CI](https://docs.gitlab.com/ee/ci/)**
**E2Eツール：[Selenium WebDriver](https://qiita.com/jun2014/items/abdd9b34f446a8309f0d)**
**言語：Java**
**開発環境：[Eclipse：Pleiades All in One](https://mergedoc.osdn.jp)**
**通知：Slack**

こちらに **[テスト自動化環境構築](https://qiita.com/jun2014/items/0c97f99e60109f9ec870)を纏めております。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/b44d5b49-5e09-37bd-7869-cff9930cb3a1.png)

[このあたりを参考にしてみます。](http://sil.hatenablog.com/entry/jenkins-github-auto-deploy)

```lang:GitLabでの対応
テストコードの管理
コードのバージョン管理
SETエンジニアがその都度修正
エラー通知設定
```

エラーの通知は、**「Chatwork」** か　**「Slack」**  通知で、[Webhook](http://c-note.chatwork.com/post/69274738468/chabot)にて対応


```lang:chartwork/slack(チャットツール)
エラー通知の設定(通知用のグループを作成しておく）
```
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35353136302f32313239633662622d346436382d396539342d646439342d3336643565303533393538332e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/55160/4870f5ac-b588-5c3e-97db-8006c1d8f247.png)

[Jenkinsの設定方法になります。](https://qiita.com/jun2014/items/0c97f99e60109f9ec870#jenkins%E8%A8%AD%E5%AE%9A)

```lang:
SecurityGroupの設定
JenkinsサーバにJenkinsのインストール
GitHub Plugin
GitHub からの push イベントを取得するプラグインです。

必須タスクの設定
テスト実行の設定
```

[Jenkins](http://qiita.com/jun2014/items/7935e235c7a77ba40e9d)
また、[SETエンジニア](https://note.com/jun111/n/nddfb5eb749e4)にも纏めております。