■ 03.Quality Assurance（品質保証、QA）に必要なスキルについて

# ■ Quality Assurance（品質保証、QA）に必要なスキルとは？
<br>

QAには、下記のように多岐にわたるスキルが必要となります。
<br>
・<font color="#CC99FF">技術的なスキル</font>

・<font color="#CC99FF">分析力と問題解決能力</font>

・<font color="#CC99FF">注意力と細部へのこだわり</font>

・<font color="#CC99FF">コミュニケーション能力</font>

・<font color="#CC99FF">プロセス改善能力</font>

・<font color="#CC99FF">業界や製品に関する知識</font>

・<font color="#CC99FF">テスト戦略の設計と実行能力</font>

・<font color="#CC99FF">適応力と柔軟性</font>

・<font color="#CC99FF">プロジェクト管理スキル</font>
<br>
※QAの仕事は、製品やサービスの品質を確保するための包括的なアプローチを取るため、
　幅広いスキルセットが求められます。
<br>
下記にて、詳細な内容を解説します。
<br>
# 【詳細】<font color="#00bfff">**QAに必要なスキルについて**</font>


# 1. 技術的なスキル

　-> <INS><font color="#66cdaa">テスト自動化ツールの知識：</font></INS>
 
　　 Playwright、Eggplant DAI、Seleniumなど、
　　 テストを自動化するためのツールやフレームワークを使用できることが重要
　　 （特にソフトウェアのQAでは、自動化スキルがプロセス効率化に役立ちます）
<br>
　-> <INS><font color="#66cdaa">プログラミングスキル：</font></INS>
　　 Java、JavaScriptなどのプログラミング言語に精通していることが望ましい
　　 （自動化テストやスクリプト作成に役立ちます）
<br>
　-> <INS><font color="#66cdaa">バグの根本原因を特定：</font></INS>
　　 単にバグを見つけて修正するのではなく、
　　 そのバグが発生した根本的な原因を明確にすることが目的
　　 
　　 （根本原因を特定することにより、再発防止策を講じることができ、
　　 　長期的に品質の向上に役立ちます）
<br>
　-> <INS><font color="#66cdaa">テストデータを生成：</font></INS>
　　 「テストデータを生成する」という作業は、
　　 テストを行う際に必要となるデータを準備するプロセス

　　 （テストデータは、テストケースを実行して、
　　 　アプリケーションが期待通りに動作するかを確認するために使用されます）

　　 （適切なテストデータを生成することにより、
　　 　システムの動作確認や問題の発見が容易になります）
<br>
　-> <INS><font color="#66cdaa">コードの可読性や設計パターンを理解することによるコードレビュー時の品質向上：</font></INS>
　　 コードレビューを行う際に、
　　 コードがどれだけ理解しやすく、保守しやすいか、
　　 また、設計が適切に行われているかを評価し、
　　 改善を促進することによってソフトウェアの品質を向上させるプロセス

　　 （これには、コードの可読性を高め、
　　 　設計パターンを適切に活用することが重要となります）
    
　　 ※設計パターン：一般的に使われる設計のベストプラクティス
<br>
　-> <INS><font color="#66cdaa">バグトラッキングツールの知識：</font></INS>
　　 Jira、Bugzilla、Backlogなど、
　　 バグの管理やプロジェクトの進行を追跡するツールの使用経験は、
　　 効率的なチームワークに必要となります
<br>
　-> <INS><font color="#66cdaa"> データベースの理解：</font></INS>
　　 SQLなどのデータベースクエリ言語を使ってデータを取得・操作できるスキルも、
　　 テストや検証に役立ちます

　　 ・<font color="#FF99FF">テストとは</font>：
　　 ソフトウェアが期待通りに動作するか、
　　 バグや不具合がないかを確認するための一連の確認を指します

　　 ソフトウェア開発において、テストは品質を確保するための重要なプロセスであり、
　　 製品がリリースされる前に動作確認を行い、
　　 ユーザーに提供する前に問題を発見・修正する役割を果たします

　　 ・<font color="#FF99FF">検証とは</font>：
　　 ソフトウェアが「作るべきものを作っているか」という観点で、
　　 要求仕様や設計が正しいかどうかを確認するプロセスです
　　 言い換えれば、
　　 ソフトウェアが意図された通りに開発されているかをチェックすることが目的です

　　 "テスト"とは異なり、
　　 "検証"はソフトウェアが「正しく作られているか」を確認する作業であり、
　　 バグや動作確認を目的としたテストとは異なります
<br>
　-> <INS><font color="#66cdaa">ソフトウェア開発プロセスの理解：</font></INS>
　　 AgileやScrumなどの開発手法を理解し、
　　 それに合わせた品質保証のプロセスを適用できることが求められます
<br>
# 2. 分析力と問題解決能力

　-> <INS><font color="#66cdaa">不具合の原因分析</font></INS>
　　 バグや品質問題が発生した際に、
　　 その原因を迅速に特定し、最適な解決策を提案する能力が重要
　　 （論理的な思考力やデータに基づいた分析力が求められます）
<br>
　-> <INS><font color="#66cdaa">リスク管理：</font></INS>
　　 プロジェクトや製品のリスクを事前に特定し、
　　 品質を損なう可能性のある要因に対処する為の戦略を立てるスキルが求められます
<br>
# 3. 注意力と細部へのこだわり

　-> <INS><font color="#66cdaa">細部へのこだわり：</font></INS>
　　 QA業務では、

　　 僅かな不具合やプロセスの欠陥が重大な問題に発展する可能性がある為、
　　 <INS>細かい部分</INS>まで注意を払い、正確な検査を行う能力が不可欠となります

　　 細かい部分：
　　 注意を払うべきポイントは多岐にわたりますが、
　　 主に以下のような部分に注意を払うことが重要となります

　　 ・<font color="#FF99FF">仕様との整合性</font>：
　　 要求仕様やドキュメントに正確に従っているかを確認

　　 ・<font color="#FF99FF">ユーザーインターフェース（UI）の細部</font>：
　　 色/フォント/ボタン配置/マージン(余白)/アイコンのサイズなど

　　 ・<font color="#FF99FF">エラーメッセージと入力バリデーション</font>：
　　 ユーザーが誤った入力をした際、
　　 表示されるエラーメッセージが明確で理解しやすいものであるかを確認

　　 ユーザーが意図しない入力を防ぐため、
　　 バリデーションが正しく実装されているかにも注力する必要

　　 ・<font color="#FF99FF">パフォーマンスの詳細チェック</font>：
　　 アプリケーションが期待通りに動作するだけでなく、
　　 レスポンス時間やパフォーマンスが基準を満たしているか、
　　 特にストレステストやロードテストを行い、
　　 異常に遅くなるシナリオやクラッシュがないかを確認

　　 ・<font color="#FF99FF">セキュリティの欠陥</font>：
　　 セキュリティテストでは、特にデータの漏洩や不正アクセスの防止が求められるので、
　　 セキュリティリスクを軽視すると、重大なインシデントに繋がりかねない
　　 その為、細かいセキュリティの抜け穴にも目を光らせることが必要

　　 ・<font color="#FF99FF">異常系・エラー処理</font>：
　　 ソフトウェアがエラーや異常な状況に直面したとき、適切にハンドリングし、
　　 ユーザーにとって理解しやすいメッセージや動作が行われるかを確認することが必要

　　 ・<font color="#FF99FF">クロスブラウザおよびクロスプラットフォームの互換性</font>：
　　 同じウェブサイトやアプリケーションが
　　 異なるブラウザやデバイスで問題なく動作するかを確認

　　 特にウェブアプリケーションでは、
　　 最新のブラウザだけでなく、古いブラウザにも対応しているかの確認も重要
<br>
　-> <INS><font color="#66cdaa">品質基準の維持：</font></INS>
　　 規格や仕様に基づき、基準を守りながら作業を進めることが求められます
<br>
# 4. コミュニケーション能力

　-> <INS><font color="#66cdaa">チームとの連携：</font></INS>
　　 開発チーム／マネージャー／クライアントと、
　　 円滑にコミュニケーションを取る能力が必要となります
    
　　 （不具合の報告やテスト結果の共有など、
　　 明確かつ効果的な情報伝達が品質向上につながる為）
<br>
　-> <INS><font color="#66cdaa">ドキュメント作成能力：</font></INS>
　　 テストケース／テストシナリオ／品質レポートなど、
　　 ドキュメントを作成するスキルが求められます
<br>
# 5. プロセス改善能力

　-> <INS><font color="#66cdaa">継続的な改善思考：</font></INS>
　　 プロジェクト全体の品質向上を目的に、常に現状のプロセスを評価し、
　　 改善点を見つけ出して提案・実施する力が重要
    
　　 （PDCAサイクル（Plan-Do-Check-Act）を実践できることが大切です）
<br>
# 6. 業界や製品に関する知識

　-> <INS><font color="#66cdaa">業界標準の理解：</font></INS>
　　 自分が関わる<INS>業界の品質基準</INS>や規制を理解していることは、
　　 製品やサービスが規格に適合しているかどうかを確認する際に重要です

　　 <font color="#FF99FF">[Quality Assurance（QA）業界の品質基準]</font>
　　 QA業界の品質基準は、
　　 製品やサービスが特定の要件や期待を満たす事を保証する為の指標として設定されます
　　 以下に、QAで広く使用されている具体的な品質基準の例を挙げます

　　 ・ISO 9001
　　 -> 品質マネジメントシステム（QMS）の国際標準
　　 -> 顧客満足を高める為の品質プロセスと継続的改善に重点を置いている

　　 ・ISO/IEC 25010
　　 -> ソフトウェア製品の品質モデル
　　 -> 以下の品質特性を定義している
　　 　・機能適合性
　　 　・性能効率性
　　 　・互換性
　　 　・使用性
　　 　・信頼性
　　 　・安全性
　　 　・保守性

　　 <font color="#FF99FF">[補足：品質基準の目的]</font>

　　 -> 効率化: プロセスを標準化し、リソースの有効活用を図る
　　 -> リスク軽減: バグや障害のリスクを最小限に抑える
　　 -> 顧客満足度の向上: ユーザーの期待を満たし、製品やサービスの信頼性を確保する
　　 -> 継続的改善: フィードバックを元にプロセスや製品を進化させる
<br>
　-> <INS><font color="#66cdaa">製品知識：</font></INS>
　　 テスト対象の製品やサービスに対する深い理解が求められる
    
　　 （特に、ソフトウェアやハードウェアのQAでは、
　　 対象システムの挙動や仕様を十分に把握することが必要となります）
<br>
# 7. テスト戦略の設計と実行能力

　-> <INS><font color="#66cdaa">テスト計画の策定：</font></INS>
　　 効果的なテスト戦略を設計し、
　　 どのようにテストを実施するか計画する能力が求められる
    
　　 （これには、リスク分析や優先順位付けも含まれます）
<br>
　-> <INS><font color="#66cdaa">テスト結果の評価：</font></INS>
　　 テスト結果を正確に分析し、品質に関する意思決定に反映させるスキル
    
　　 （バグや不具合が製品にどのような影響を与えるかを正しく判断する能力が必要です）

　　 <font color="#FF99FF">[補足：バグと不具合の違いについて]</font>
　　 「バグ」と「不具合」は、
　　 どちらもシステムやソフトウェアにおける問題や欠陥を指しますが、
　　 その使われ方やニュアンスにはいくつかの違いがあります

　　 <INS>-> バグ（Bug）</INS>
　　 1.定義：プログラムが意図しない動作をする原因となるもの
　　 2.主な特徴：プログラミングミスや設計の欠陥が原因で発生する
　　 3.使用場面：主に開発者やテスターの間で使用される技術的な用語
　　 4.具体例：ロジックエラー（例: if条件の誤り）など

　　 <INS>-> 不具合：（Defect / Issue）</INS>
　　 1.定義：製品やサービスが期待される仕様や要件を満たしていない状態を指す
　　 2.主な特徴：必ずしも技術的な問題に限定されず、
　　　　　　　　ユーザー視点や運用上の問題として扱われることが多い
　　 3.使用場面：開発者だけでなく、
　　　　　　　　ユーザーやクライアント、運用チームも使用する一般的な用語
　　 4.具体例：仕様通りではあるが、ユーザーが理解しにくい動作 など
<br>
# 8. 適応力と柔軟性

　-> <INS><font color="#66cdaa">新しいツールや技術への適応：</font></INS>
　　 QAの仕事は、技術の進化に伴い常に変化する為、
　　 新しいツールや技術、テスト手法を素早く習得し、適用できる柔軟性が求められます
<br>
# 9. プロジェクト管理スキル

　-> <INS><font color="##66cdaa">スケジュール管理：</font></INS>
　　 プロジェクトの進行状況に応じて、テストの優先順位を決定し、
　　 リソースを最適に配分する能力が重要です

　　 ・<font color="#FF99FF">プロジェクト管理スキルとは</font>：

　　 ◆プロジェクトを効果的に「計画」「実行」「監視」
　　 ◆完了させるための「能力」「知識」「ツール」「技術」

　　 これらのスキルは多くの業界や分野で重要とされており、
　　 プロジェクトの目標を達成するだけでなく、
　　 リソースの効率的な使用や関係者間の調整も可能にします

　　 [例]
　　 ・計画スキル
　　 ・コミュニケーションスキル
　　 ・リスク管理スキル
　　 ・問題解決リーダーシップスキル
　　 ・進捗管理スキル

<br>

# ・</INS>まとめ</INS>
<br>
これらの考え方をベースに、QAプロセスを計画 ／ 実行をすることで、
<br>
より高品質な製品やサービスを提供することができます。
<br>
また、継続的に学び、最新のQAツールや手法を取り入れることも重要だと考えています。
<br>

<INS><font color="#00bfff">「■ 04.QAエンジニア／テストエンジニアの違い（ソフトウェアの品質に関与する点において）」へ続く</font></INS>
https://qiita.com/aokimakiko/items/80c0885a4e5c0a3e1311