見出し画像

【専門分野共有会レポート】ソフトウェアテストについて

こんにちは。インターンの完山です!

この記事ではインターン目線による「メンバー専門分野共有会」で発表されたテーマについて紹介していきます。

シンプルフォームでは、メンバーの知識・スキルの底上げを目指して定期的に「専門分野共有会」という名の勉強会を開催しています。有志社員1名がプレゼンテーターを務め、テーマに沿って発表を行います。シンプルフォームには各領域の専門家がメンバーとして揃っているため、専門分野共有会を行うことで会社・業務理解が深まるだけでなく、普遍的に使える知識を全員で身につけるのが狙いです。

今回のテーマは、エンジニアチーム 犬束が発表した「ソフトウェアテストについて」です。

※本記事は、2022年8月25日公開時の内容を一部修正し投稿しています。


今回のテーマ

ソフトウェアのバグや不具合を防ぎ、円滑に使用するためのソフトウェアテストについてです。ソフトウェアテストの基本情報、実行方法、CIへの組み込み、シンプルフォームにおける展望について、Pythonの事例に則した解説です。

ソフトウェアテストとは?

コンピュータのプログラムから仕様にない振る舞い、または欠陥(バグ)を見つけ出す作業。どの値を入力しても適切な判定が返ることを漏れなく確認することが大切です。
このテストが不十分だと、予期しない不具合が生じる可能性が高くなってしまいます。

ソフトウェアテストの種類

ソフトウェアテストは大きく以下の2つに分けられます。

  • 手動テスト

  • 自動テスト

手動テストは、一つ一つ手作業でテストを行うもので手軽に始められますが、規模が大きくなると時間や労力がかかります。
自動テストは、始めにテスト用のプログラムを書き、それ以降はそのプログラムを用いて自動的にテストを行うものです。テストを書くのは時間・労力がかかりますが、一度書いてしまえば規模が大きくなっても簡単にテストをすることができます。ただし、適切にテストを設計しないとメンテナンスに労力がかかってしまう場合もあります。
ソフトウェアの規模に合わせてどちらのテストがよりメリットが大きいかを判断し、使い分ける必要があります。

ソフトウェアテストの分類

ソフトウェアはさらに以下の3つに分類されます。

  • ユニットテスト:アプリケーションの機能単体でプログラムが正しく動作するかを検証

  • 結合テスト:アプリケーションの複数の機能が組み合わさった時に正しく動作するかを検証

  • システムテスト:ユーザがアプリケーションを使う時と同じ状況で動かして正しく動作するかを検証

以上の分類は絶対的なものではなく、Google社などは自社独自の分類を行っています。人によって分類の認識が違う場合もあるため、社内でテスト分類を統一し、共有することが大切です。

ソフトウェアテストの実行方法

ソフトウェアがPythonで書かれている場合、次のどちらかを用いてテストを実行するのが一般的です。

  • unittest

  • pytest

特にpytestは、より短いコードでテストを実行できる、複数のテストを1つのコードで実行できる、などの点からより効率的にテストを実行できます。

CI*ツール例及びCIへの組み込み方法

CI*ツールの代表的な例を以下に挙げています。

  • CI 専用 SaaS……CirCleCI、Travis CI

  • OSS……Jenkins

  • Git サービス系……GitLab CI、GitHub Actions

  • パブリッククラウド系……AWS CodeBuild、Google Cloud Build

ソフトウェアテストを CI へ組み込む際には Pipeline as Code方式(YAML ファイルに実行したいシェルコマンドを書いていく方法)が一般的で、特段の制約がなければCI 専用 SaaS が使いやすいです。

一方、ソフトウェアにパブリッククラウドを用いている場合、「プラットフォーマーが提供する CI サービス 」(AWS CodeBuild など)もしくは「その他の CI サービス」のどちらかを選択しなければなりません。

例えば組織で AWS を利用している場合、サードパーティの CI ツールを使う時はアクセスキーなどの機密情報を払い出す必要があり、セキュリティリスクが上がることとなるので注意が必要です。

反対に、AWS CodeBuild を利用すれば必要最低限の権限の払い出しで済むのでセキュリティリスクが下がりますが、便利さがリスクを上回ることからサードパーティツールを利用するという判断もありです。組織において最も重要視している項目で、最適なツールを判断します。

*CI : Continuous Integration(継続的インテグレーション)の略。
ソフトウェアに変更が加えられた際や一定期間が経過した際に自動でテストを実施し、結果をレポートしてくれる機能。

実際に起こったミスもしっかり共有

今後の展望

今後は組織において以下のように取り組んでいきたいと考えています。

  • CIでLint & Format 導入:CI ツールを選定すれば実行可能

  • ユニットテスト作成:順次作成中

  • CI でユニットテスト導入:モノレポなので仕組みを要検討 (修正した箇所に関わるテストのみ走らせるなどしたい)

  • 個人レベルでユニットテストを複数バージョン化:今後の Python バージョンアップを見据えて複数バージョンでテストするようにする

  • CI のユニットテストを複数バージョン化

  • 結合テスト作成

  • CIで結合テスト導入

  • 個人レベルで結合テストを複数バージョン化

  • CI の結合テストを複数バージョン化

まとめ

本レポートでは、ソフトウェアのバグや不具合を防ぎ、円滑に使用するための「ソフトウェアテスト」についてご紹介しました。

ソフトウェアテストの重要性、有効性を理解するとともに、それらの性能がシンプルフォームのプロダクトにどのように役立っているのかを知ることができました。

今回の講義内容のようなIT基礎知識は、これからの社会で当たり前に求められるようになるものだと思うので、社会に出る前にそういった知識を学ぶことができる機会があることを嬉しく思います。

以上になります。ご一読ありがとうございました。


SimpleForm専門分野共有会に参加してみませんか?

こうした専門分野共有会については、社員に限らず、興味がある方はどなたでもご参加可能です。
SimpleFormに興味がある、オフィスに遊びに行くきっかけにしたい、などの理由でも、大歓迎です。
参加してみたい、どんなテーマの共有会を行ってる?など、ぜひ、以下フォームよりお気軽にお問い合わせいただき、ご参加ください。

SimpleForm採用お問い合わせフォーム

話だけでも聞いてみたい!という場合、カジュアル面談を設定いたします。お気軽に以下よりお申込みください。

SimpleFormカジュアル面談お申込みフォーム