# 概要
複数の他社サブスクリプションベンダーサービス(AWS,Azure,CSP等)を自社のクラウド基盤上のサーバでSaaS型サービスとして提供顧客、契約、請求を一元管理するシステムの開発・運用
# 開発手法
アジャイル開発(1スプリント2週間、jira,redmineを使用)
# チーム構成
PM(1名)->L(1名)->メンバー(自分を含む3~6名)
# 使用技術
バックエンド:Python3.7,Django2.0,DjangoRESTframework,
フロントエンド:JavaScript,jQuery
DB:MySQL
インフラ:AWS EC2,GCE,docker,Nginx,uwsgi
その他:GitHub,GitHubActions,Ansible,GAS,BashShellScript,Autify
# 役割
①開発
②SET
③QA
④テストマネージャ(都度)
中心業務が①開発→②SET→③QAにシフトしていった。
# 経緯
①:注文、契約、請求等の基盤機能のリニューアルに向けて開発メンバーとして参加
②:既存のテスト方式(手動+Autify)でテストが消化しきれなかった為、テストツールの選定、実装
③:他の開発チームも含めてテスト自動化、プロセス改善を行う為QAチーム立ち上げ
④:複数名でテスト実施が必要なテスト活動の取りまとめを行った
# 実績・取り組み
①開発:
●新規機能開発、バグ改修
・定義済み要件から製造、単体テスト、統合テストを担当。必要に応じてシーケンス図、フローチャート等資料作成
・注文、契約、請求管理等のバックエンド(django)、一覧表示系のフロント、バックエンド(js,jQuery,DRF)
②SET:
●ユースケーステスト自動化
・実装:Python(requests)、mysqlで手動時の動作を再現するテストスクリプト作成。Bashスクリプトで起動し、実行時にmysqlコマンドで担保すべきデータを取得、整合確認。
・キーワード駆動化:他のメンバーでもツールを使用できるようにする為、ユースケース一覧からシナリオ作成をスプレッドシート管理にしてGASで出力できるようにした
・並列化:AnsiblePlaybookで一括環境構築、テスト実行、管理
Autify,selenium,seleniumIDEも検討したが、実行速度、メンテナンスコスト、バグ原因がバックエンドのロジックに集中していた等の理由でリターンが少ないと判断した。
●性能テスト
・レコード数増加に対するデイリーバッチの実行時間の検証とデータ整合確認(並列処理による実行順不正検出)
③QA:
●QAチーム立ち上げ
活動内容
・品質保証を目的とした制度策定
・テスト設計のフロー作成
・ユースケース単位での優先度付け
・開発フロー改善
・テスト実施効率を上げる為のテストアドオンの開発(GUI上からDB操作する窓口を作成)
・別チームへのテストツール展開、整備
・ドキュメント整備
④テストマネージャ:
●テスト計画、マネジメント
・大規模な機能開発、改修の際はチーム全体でテスト実施を行う為、その際テストリーダーとして最大3名の開発メンバー、テスターを取りまとめ
●テスト分析、設計、実装、実施
・要件、仕様書、設計書、ソースコードからテスト項目を作成
・運用データ、ログから優先度設定
# 工夫した点
システムの仕様上、ユースケースの入力パターンが多く、かつ条件毎に仕様が複雑だった為、以下のような課題があった。
- テスト項目数が多く、テストにかかる工数が莫大になる(開発に投資できるリソース減)
- 開発メンバーが仕様を把握して切れず、考慮漏れによるリリース後バグが多発
- 詳細な仕様がドキュメント化されていない為、バグ調査や他チームとの連携・情報共有に時間がかかる
これらに対し、以下の取り組みによって工数削減と開発体験の向上に貢献した。
- リリース後バグ発生頻度の高いユースケースに絞ってユースケーステストを自動化
▶テスト工数削減(最も効果のあったテストは40日→5日に短縮)
- 開発フロー改善
製造前に開発担当とユースケーステストの範囲の認識合わせ
▶ユースケース考慮漏れが減り、リリース後バグが減った
- ドキュメント整備
問い合わせの多い仕様のドキュメントとして、複雑な条件を網羅する期待値表を作成(リグレッションテスト実行時のスナップショットからデータを抽出し、有識者チェックして仕様とした)
▶バグ調査時間の削減