開発ツールとは?テスト支援・IDE・Git・バージョン管理を基礎から理解しよう
はじめに
ソフトウェア開発では、プログラマがソースコードを書くだけではありません。
例えば、
プログラムを書く
↓
エラーを見つける
↓
テストする
↓
性能を調査する
↓
ソースコードを保存する
↓
チームで変更履歴を管理する
といった、さまざまな作業が必要です。
これらをすべて人間が手作業で行うのは大変です。
そこで利用されるのが、
開発ツール
です。
今回は、プログラミングやテストを支援するツールから、IDE・Gitなどのバージョン管理ツールまで見ていきましょう。
1. 開発ツールとは
**開発ツール(Development Tool)**とは、
ソフトウェアの設計・プログラミング・テスト・保守などの作業を支援するソフトウェア
です。
例えば、
- ソースコードを書く
- プログラムを実行する
- バグを調査する
- テストする
- 性能を分析する
- ソースコードの変更履歴を管理する
といった作業を支援します。
開発ツールを利用することで、開発効率やソフトウェアの品質を向上させることができます。
2. プログラミングを支援するツール
プログラミングでは、
コードを入力
↓
文法をチェック
↓
コンパイル
↓
実行
↓
エラーを調査
↓
修正
という作業を何度も繰り返します。
そこで、
- コードエディタ
- コンパイラ
- デバッガ
- IDE
などのツールを利用します。
3. デバッガ
プログラムに存在する誤りを**バグ(Bug)**と呼びます。
そして、バグの原因を調査して修正する作業を**デバッグ(Debug)**と呼びます。
デバッグを支援するツールが、
デバッガ(Debugger)
です。
デバッガでは、
- プログラムを途中で停止する
- 1命令ずつ実行する
- 変数の値を確認する
- メモリの内容を確認する
などの操作ができます。
4. ブレークポイント
デバッグするとき、
この場所まで実行したら一度停止してほしい
という位置を設定できます。
これを**ブレークポイント(Breakpoint)**と呼びます。
処理A
↓
処理B
↓
処理C ← ブレークポイント
↓
処理D
プログラムを意図した位置で停止させ、変数などの状態を確認できます。
5. テスト支援ツール
作成したプログラムが想定どおりに動作するか確認するために、さまざまなテスト支援ツールが利用されます。
大きく、
テスト支援ツール
│
├─ 静的テストツール
│
└─ 動的テストツール
に分けて考えることができます。
最大の違いは、
プログラムを実際に実行するかどうか
です。
6. 静的テストツール
静的テストツールは、
プログラムを実行せずに、ソースコードなどを解析して問題を検出するツール
です。
代表的なものとして、
- 構文チェッカ
- コードオーディタ
- モジュールインタフェースチェックツール
などがあります。
7. 構文チェッカ
**構文チェッカ(Syntax Checker)**は、
ソースコードがプログラミング言語の文法に従って記述されているか確認するツール
です。
例えば、
括弧が閉じられていない
命令の記述方法が間違っている
文法上必要な記号がない
などの構文上の問題を検出します。
つまり、
「そもそも文法として正しく書けている?」を確認する
ためのツールです。
8. コードオーディタ
**コードオーディタ(Code Auditor)**は、
ソースコードを解析し、プログラムの品質やコーディング上の問題を確認するツール
です。
例えば、
- コーディング規約に違反していないか
- 保守しにくい記述がないか
- 問題につながる可能性のある記述がないか
などを確認します。
ソースコード
↓
コードオーディタ
↓
コーディング上の問題を検出
プログラムを実行せずにソースコードを調べるため、静的テストツールに分類されます。
9. モジュールインタフェースチェックツール
大きなプログラムは、複数のモジュールに分割して開発することがあります。
モジュールA
↓
モジュールB
↓
モジュールC
このとき、モジュール同士でデータを受け渡す部分が正しくなければなりません。
そこで利用されるのが、
モジュールインタフェースチェックツール
です。
モジュール間のインタフェースに矛盾や不整合がないか確認するツール
です。
例えば、
モジュールA
「数値を渡します」
↓
モジュールB
「文字列を受け取ります」
のように、受け渡すデータの仕様が一致していない場合などを確認します。
10. 静的テストツールを整理
| ツール | 主に確認すること |
|---|---|
| 構文チェッカ | プログラムの文法 |
| コードオーディタ | コーディング上の問題や品質 |
| モジュールインタフェースチェックツール | モジュール間のインタフェース |
🍯 静的テストは「プログラムを動かさずに調べる」が共通点です。
11. 動的テストツール
動的テストツールは、
プログラムを実際に実行し、その動作を解析するツール
です。
代表的なものとして、
- アサーションチェッカ
- トレーサ
- テストカバレージツール
- プロファイラ
などがあります。
静的テストとは違い、
プログラム
↓
実際に実行
↓
実行時の動作を調査
するのがポイントです。
12. アサーションチェッカ
**アサーション(Assertion)**とは、
プログラムのある時点で「この条件を満たしているはず」と記述する条件
です。
例えば、
商品の個数は0以上である
という前提があるなら、
個数 >= 0
という条件を設定できます。
アサーションチェッカは、
プログラム実行中に、設定した条件が成立しているか確認するツール
です。
もし、
個数 = -5
となれば、
「想定していた条件を満たしていない!」
と問題を検出できます。
13. トレーサ
**トレーサ(Tracer)**は、
プログラムの実行過程を追跡し、どのように処理されたかを記録・確認するツール
です。
例えば、
関数A
↓
関数B
↓
関数C
↓
関数D
という実行経路を追跡できます。
変数の値などを追跡できるものもあり、
「プログラムが実際にどんな順番で動いたのか」
を調査するときに役立ちます。
14. テストカバレージ
テストを行ったとき、
プログラムのどの程度までテストできたのか
を確認する指標が、
テストカバレージ(Test Coverage)
です。
代表的なものとして、
- 命令網羅
- 分岐網羅
- 条件網羅
などがあります。
15. 命令網羅
**C0(Statement Coverage)**とも呼ばれ、
すべての命令を少なくとも1回実行する
ことを目指します。
16. 分岐網羅
**C1(Branch Coverage)**とも呼ばれ、
すべての分岐について、それぞれの結果を少なくとも1回実行する
ことを目指します。
例えば、
if 条件
├─ TRUE
└─ FALSE
なら、TRUE側とFALSE側の両方を実行するようにテストします。
17. 条件網羅
条件式を構成する各条件について、
真と偽の両方を少なくとも1回通る
ようにテストします。
例えば、
if (A AND B)
なら、AとBそれぞれについてTRUEとFALSEになるケースを確認します。
18. プロファイラ
プログラムが正しく動いていても、
「なぜか処理が遅い」
ということがあります。
そこで利用されるのが、
プロファイラ(Profiler)
です。
プロファイラは、
プログラムを実行し、各処理にどれだけ時間や資源が使われているかを分析するツール
です。
例えば、
関数A:10ms
関数B:500ms
関数C:20ms
なら、関数Bが性能上のボトルネックになっている可能性があります。
ツールによって、
- 関数の実行時間
- 呼出し回数
- CPU使用時間
- メモリ使用量
などを調査できます。
19. 静的テストと動的テストを整理
| 分類 | プログラム実行 | 代表的なツール |
|---|---|---|
| 静的テスト | しない | 構文チェッカ |
| 静的テスト | しない | コードオーディタ |
| 静的テスト | しない | モジュールインタフェースチェックツール |
| 動的テスト | する | アサーションチェッカ |
| 動的テスト | する | トレーサ |
| 動的テスト | する | カバレージツール |
| 動的テスト | する | プロファイラ |
まず、
静的
→ 動かさない
動的
→ 動かす
で分類し、その後に各ツールの役割を覚えると整理しやすくなります。
20. ICE
組込みシステムの開発では、
ICE(In-Circuit Emulator:インサーキットエミュレータ)
というツールが利用されることがあります。
ICEは、
組込みシステム上で動作するプログラムのデバッグを支援する装置
です。
- プログラムの実行・停止
- ステップ実行
- レジスタの確認
- メモリの確認
などに利用できます。
家電や自動車など、一般的なPCアプリとは異なり内部状態を簡単に確認できない組込みシステムの開発で役立ちます。
21. IDE
IDE(Integrated Development Environment)は、日本語で統合開発環境と呼ばれます。
プログラミングに必要なさまざまな機能を統合した開発環境
です。
例えば、
IDE
├─ ソースコード編集
├─ コード補完
├─ コンパイル
├─ ビルド
├─ 実行
├─ デバッグ
└─ バージョン管理連携
などの機能をまとめて利用できます。
代表的なIDEには、
- Visual Studio
- IntelliJ IDEA
- Eclipse
- Xcode
などがあります。
22. バージョン管理
ソフトウェア開発では、
Ver.1
↓
機能追加
↓
Ver.2
↓
バグ修正
↓
Ver.3
というように、ソースコードを何度も変更します。
この、
ファイルの変更履歴を記録・管理する仕組み
をバージョン管理と呼びます。
23. バージョン管理ツール
バージョン管理ツールを利用すると、
- 誰が変更したか
- いつ変更したか
- 何を変更したか
- 過去の状態へ戻す
- 複数人の変更を統合する
といったことができます。
代表的なものが、
- Subversion
- Git
です。
24. リポジトリ
**リポジトリ(Repository)**とは、
ソースコードやファイル、その変更履歴などを管理する保管場所
です。
リポジトリ
├─ ソースコード
├─ 設定ファイル
├─ ドキュメント
└─ 変更履歴
単なるファイル置き場ではなく、変更履歴まで管理することがポイントです。
25. 集中型と分散型
バージョン管理システムには、大きく、
集中型
分散型
があります。
代表的な対応は、
Subversion
→ 集中型
Git
→ 分散型
です。
26. Subversion
**Subversion(SVN)**は、
集中型バージョン管理システム
です。
中央にリポジトリを配置します。
中央リポジトリ
│
┌────────┼────────┐
↓ ↓ ↓
開発者A 開発者B 開発者C
開発者は中央リポジトリからファイルを取得し、変更した内容を中央リポジトリへ反映します。
27. Git
Gitは、
分散型バージョン管理システム
です。
各開発者がリポジトリの履歴をローカルにも保持できます。
リモートリポジトリ
│
┌───────┼───────┐
↓ ↓ ↓
ローカル ローカル ローカル
リポジトリA リポジトリB リポジトリC
中央だけに履歴が存在するわけではないことが、集中型との大きな違いです。
28. Gitの基本操作
代表的な操作には、
clone
リモートリポジトリなどを複製します。
add
変更したファイルを次のコミット対象として登録します。
commit
変更内容をローカルリポジトリの履歴として記録します。
push
ローカルリポジトリの変更履歴をリモートリポジトリへ送ります。
pull
リモートリポジトリの変更内容を取得し、現在の作業へ反映します。
基本的には、
ファイル変更
↓
add
↓
commit
↓
push
↓
リモートリポジトリ
という流れです。
29. ブランチ
Gitでは**ブランチ(Branch)**を作成できます。
開発履歴を分岐させ、別々に作業するための仕組み
です。
main ──●──●────────●
\
feature ●──●──●
例えば新機能を別ブランチで開発することで、メインのコードへすぐに影響を与えず作業できます。
30. マージ
別のブランチで行った変更を統合することを、
マージ(Merge)
と呼びます。
main ────●──────────●
\ ↑
feature ●──●──●──┘
31. コンフリクト
複数の開発者が同じ場所を異なる内容へ変更すると、自動的に統合できない場合があります。
これを、
コンフリクト(Conflict)
と呼びます。
開発者A
x = 100
開発者B
x = 200
この場合、どちらの変更を採用するのか人間が確認して解決します。
32. SubversionとGitの違い
| 項目 | Subversion | Git |
|---|---|---|
| 管理方式 | 集中型 | 分散型 |
| 中央リポジトリ | 管理の中心 | リモートとして利用できる |
| ローカルリポジトリ | 基本的に持たない | 持つ |
| ローカルでの履歴管理 | 制限される | 可能 |
| ブランチ | 可能 | 柔軟に利用しやすい |
応用情報では、まず、
Subversion
= 集中型
Git
= 分散型
を押さえておきましょう。
33. 開発ツールの全体像
ソフトウェア開発
│
├─ プログラミング支援
│ ├─ エディタ
│ ├─ デバッガ
│ └─ IDE
│
├─ 静的テスト
│ ├─ 構文チェッカ
│ ├─ コードオーディタ
│ └─ モジュールインタフェースチェックツール
│
├─ 動的テスト
│ ├─ アサーションチェッカ
│ ├─ トレーサ
│ ├─ カバレージツール
│ └─ プロファイラ
│
├─ 組込み開発支援
│ └─ ICE
│
└─ バージョン管理
├─ リポジトリ
├─ Subversion
│ └─ 集中型
└─ Git
└─ 分散型
ツール名だけではなく、
「何をチェック・支援するツールなのか」
までセットで覚えましょう。
まとめ
この記事で覚えること
- 開発ツールはプログラミング・テスト・保守などを支援する
- 静的テストはプログラムを実行せずに解析する
- 構文チェッカはプログラムの文法を確認する
- コードオーディタはコーディング上の問題などを解析する
- モジュールインタフェースチェックツールはモジュール間の整合性を確認する
- 動的テストはプログラムを実際に実行して調査する
- アサーションチェッカは実行時に想定した条件が成立しているか確認する
- トレーサはプログラムの実行過程を追跡する
- テストカバレージはテストの網羅度を表す
- プロファイラはプログラムの性能を分析する
- ICEは組込みシステムのデバッグを支援する
- IDEは開発に必要な機能を統合した環境
- リポジトリはソースコードや変更履歴などを管理する場所
- Subversionは集中型バージョン管理システム
- Gitは分散型バージョン管理システム
🍯 はちみつメモ
テストツールはまず「静的=動かさない」「動的=動かす」で分類しよう。静的なら構文チェッカ・コードオーディタ・モジュールインタフェースチェック、動的ならアサーションチェッカ・トレーサ・カバレージ・プロファイラ。この分類ができればかなり整理しやすい!