本記事は、製品としてソフトウェアを作る場合で、複数の開発者が共同して作業する、企業でのビジネスを想定しています。プログラミング言語は、コンパイラ型でオブジェクト指向プログラミング機能を想定しています。逆に、サービスの提供が目的でソフトウェア自体が製品ではない場合、開発規模が小さい(ごく少人数の開発で阿吽の呼吸が通じる)場合、既にある製品やサービスを活用し、ちょっとしたアドオンやカスタマイズで実現する場合、などは本記事の想定外となります。開発環境と一言でいうとどこまでを含むのかソフトウェアの開発環境を整備しようとしたら、何を含めるのかについて同じ職場でもコンセンサスがなかなか得られていません。そんなときは両極端な思考をしてみて検討の幅を持たせて適切なところを探ります。最小限の開発環境まず、片方の極端な思考として、もっとも少ない開発環境を考えます。ミニマムではソースコードを実行体にコンパイル(ビルド)するのに必要なコンパイラがあればいいでしょう。作業効率も問わなけらば、ソースコードの記述は何でもよくて(メモ帳でもWordPadでも)、ソースファイルは日時のフォルダに整理して保存し、ソースファイルをコンパイルして実行体を生成します。続いて、もう片方の極端な思考として、もっとも多い開発環境を考えます。Environment)を用意します。開発者がそれぞれバラバラなソースコードを記述しないようコーディング規約を策定し、IDEに可能な限り規約に合わせた設定を行い、それを全員に配布し適用します。プロジェクトで定めたファイル先頭コメント(ライセンス記述やプロジェクト記述等)やコメントの雛形等をファイル新規作成時に自動で展開できるようにIDEに設定しておきます。設定を展開するのに必要であればIDEのプラグインを作って全員に配布します。リリース管理の方法を構成管理規約を策定し全員に配布します。要件(仕様)からのトレーサビリティを確保するため、要件から展開したタスクをタスク管理システムに登録し、タスク番号をブランチ名としてソースコードをコミットし管理するなども構成管理規約に含めます。ソースコードの品質を評価する作業も開発の一部として開発環境に組み込みます。品質の代表的な評価手段としてレビュー(インスペクション)とテストがあります。ソースコードに対して静的解析ツールを適用して、予め定義した検査ルールに逸脱する箇所を検出します。APIの呼び出し方法、バグパターンなどを定義しておきます。組み込み方も、ある程度開発が進んでから一括して検証するだけでなく、開発者がコードを書いている最中に検証をしておくのが望ましいので、IDEへ組み込めるようにします。ユニットテストツールを適用して、小さいモジュール単位(クラス/メソッド等)で機能の確認をします。その際、カバレッジツールや動的解析ツールを併用してテストの検証範囲や計算機リソース(CPU、メモリ、ディスク、ネットワーク等)の使用状況を評価します。ユニットテストで不可欠なモックの作成をツールを使って効率化するならモックツールも適用します。開発されたソースコードをまとめてビルドしテスト環境や納品用のリリース媒体を作るビルド・リリース環境も用意します。ビルドしたソースコードのレビジョンとリリースバージョンの対応付け、バグ管理ツールとの対応(そのリリースで修正されたバグ、既知のバグなど)などを行って、リリースノートへの記載などができるようにします。このビルド環境にも静的解析ツールを組み込んでの評価、ドキュメントコメントからのドキュメント生成などができるようにしておきます。テストや運用中に発生したバグを管理し、バグの修正コードを記述するために、バグ管理ツールを導入し、バグ管理規約を作成します。バグ管理ツールは構成管理ツールとの紐づけが最低限必要です。静的解析ツールユニットテストツールカバレッジツール動的解析ツールテスト規約(ユニットテスト)ビルドツール(自動ビルド)リリースツール(必要ならインストール媒体作成を含む)ドキュメント生成ツールバグ管理ツールバグ管理規約ソフトウェア開発環境が対象とするものソフトウェア開発環境が対象とするものをソースコードとするのか、製品の媒体(バイナリ、インストーラー等)とするのかもブレがありそうです。ソースコードまでを範囲とする場合、各開発者が自分の環境でソースコードの作成をすることが主作業で、作業の必要上コンパイルする、ユニットレベルのテストをする、デバッグをする、といった範囲が開発環境となります。ソースコードをテスト環境や運用環境に展開する、あるいはインストール用媒体を生成する、などはおざなりに付く程度です。実行体までを範囲とする場合は、テスト環境や運用環境に展開する、あるいはインストール用媒体を生成するまでが開発環境となります。品質活動をどこまで開発環境に取り込むかによって、対象が増減します。規約とツールIDEにEclipseを使います。ソースコード管理にGitLabを使います。テストはJUnitを使います。ビルドにはJenkinsを使います。バグ管理にはJIRAを使います。ツールだけを決めても開発現場は混乱します。ファイルの改行コード、エンコーディングがバラバラ、ビルドツールはIDE固有の人、Ant使う人、maven使う人などでビルド困難、命名規約がバラバラ、パッケージ単位もバラバラ(やたら細かい人、数十クラスを1つのパッケージにする人)、コメント記述バラバラ、ユニットテストの書き方、メンテナンスがバラバラ、などなど。しまらないまとめソフトウェア開発環境はピンキリですが、品質保証活動を取り入れた製品の開発を行う場合は、言わば開発対象のビジネス業務を丸ごと一つ業務設計するような決め事が必要になります。これを、ソフトウェアをエンジニアリングすることと言いたいのですが、伝わらないですねぇ。それをしなないとカオスの渦に飲み込まれてしまいます。月別アーカイブはてなブログをはじめよう!torutkさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。