開発ツール
2026.10.09
このページでは、静的・動的テストを助けるツール、統合開発環境(IDE)、リポジトリ、SubversionやGitによるバージョン管理、AI開発のツールがわかります。
- 一言で言うと:
- プログラムを書いて、テストして、直して、管理するときに使う道具の用語集。「実行せずに調べる道具」と「実行しながら調べる道具」、それに「開発全体を支える道具」が出てくる。
テストを助ける道具(プログラミング・テスト支援)→ 開発全体を助ける道具(IDE・リポジトリ・バージョン管理)→ AI開発の道具
覚え方の軸
- テストツールは「プログラムを動かすかどうか」で2つに分ける:
- 動かさない=静的(構文チェッカ、コードオーディタ、モジュールインタフェースチェックツール)、動かす=動的(アサーションチェッカ、トレーサ、カバレージ、プロファイラ、ICE)
- 動的ツールは「何を知りたいか」で選ぶ:
- 条件が正しいか(アサーションチェッカ)、どう動いたか(トレーサ)、どこまでテストしたか(カバレージ)、どこが遅いか(プロファイラ)、機械の上でどう動くか(ICE)
- 「ある時点を写す」⇔「動いている最中を見る」:
- スナップショット(特定の時点のメモリやレジスタ)⇔ インスペクタ(実行中のデータ)
- バージョン管理は「本体が1つ(集中型)」か「各自が丸ごとコピーを持つ(分散型)」か:
- Subversion(中央集中型)⇔ Git(分散型)
プログラミング・テスト支援:テストを助ける道具
| ツール |
何を調べる? |
| 構文チェッカ |
言語で決められた構文どおりに書かれているか |
| コードオーディタ |
開発で独自に決めたプログラミング規約(コーディング規約)に違反していないか |
| モジュールインタフェースチェックツール |
モジュール間のインタフェースの不一致(実引数と仮引数の個数や、対応する引数のデータ型の不一致)を見つける |
- 実引数:
- 仮引数:
- MISRA-C:
- 車載製品など、C言語で書く組込みシステムの品質(安全性と信頼性)を確保するための、C言語のコーディング規約
- 動的テストツール(動的解析ツール):
- アサーションチェッカ:
- プログラムの処理の正当性を検証する
- プログラムの好きな位置に、アサーション(成り立っていなければならない変数間の関係や条件)を論理式で埋め込み、実行時にその式が成り立っているかを確かめる
- 例:
- 配列を昇順に整列するプログラムなら、終了直前に「すべての要素で A[i]≦ A[i+1]」が成り立っているはず、という条件を埋め込む
- トレーサ(追跡プログラム):
- 命令単位、または指定した範囲でプログラムを実行し、実行直後のレジスタやメモリの内容などを逐次得られる
- 実行順に命令と結果を確認できるので、誤りの箇所を特定できないときに効果がある
- テストカバレージ(分析)ツール(カバレージモニタ):
- ホワイトボックステストで、カバレージを測定する。テストの進み具合の確認と、テストそのものの品質測定ができる
- カバレージ(網羅率):
- プログラムのすべての命令や経路のうち、テストで実行できた部分の割合
- 種類:
- C0(命令網羅)、C1(分岐網羅)、C2(条件網羅)など
- 補足:
- 自動車分野の機能安全規格ISO 26262では、テスト指標としてC1カバレージを使う
- 例:
- 命令が100個あって、テストで80個を通ったなら、C0カバレージは 80 ÷ 100 = 80%
- プロファイラ:
- プログラムの性能を分析するツール
- モジュールや関数の呼出し回数とその時間、実行時のメモリ使用量やCPU使用量などを集める
- 「動作が遅い」「メモリ不足エラーが出る」とき、どこで遅くなっているか、何がメモリを使っているかなど、ボトルネックを見つけるのに役立つ
- ICE(インサーキットエミュレータ):
- ソフトウェアやハードウェアのデバッグを行う装置
- MPUをエミュレートする機能を持つ。対象システムのボード上に、MPUの代わりに接続して使う
- 機能:
- プログラムを1ステップずつ実行する、実行途中で一時停止させるブレークポイント、レジスタやメモリの値の表示・変更など
- エミュレート:
- その他のプログラミング・テスト支援ツール
| ツール |
何をする? |
| スナップショット |
プログラムの特定の時点での、メモリやレジスタの内容を出力する |
| インスペクタ |
実行中のプログラムのデータ(変数やオブジェクト)の内容を表示する |
| テストデータ生成ツール |
テストデータのデータ構造を与えると、自動でテストデータを作る |
| テストベッドツール |
新しい技術の実証実験や、プログラムの一部を隔離してテストするときに使うテスト環境(プラットフォーム) |
開発を支援するツール:開発全体を支える道具
- IDE(Integrated Development Environment:統合開発環境):
- ソフトウェアの開発作業全体を、1つの環境で一貫して支援する
- ふつうの開発は「エディタでソースを書く → コンパイラとリンカで実行ファイルを作る → テスト支援ツールでデバッグする」。IDEはこれを1つにまとめ、エディタ、コンパイラ、リンカ、デバッガに加え、バージョン管理などの支援ツールもまとめて提供する
- 代表例:
- Eclipse(もとはJava用。今はC、C++、Python、Rubyなど多くの言語に対応)
- リポジトリ:
- ソフトウェアの開発と保守での、さまざまな情報を一元管理するデータベース
- 各工程の成果物を一元管理するので、用語を統一でき、開発・保守の効率が上がる
- 同じ情報でもバージョンの違うものがあるので、複数のバージョンを管理する機能が必要
- メタデータ:
- データの属性や意味内容など、データ自身に関する情報
- データディクショナリ:
- メタデータを収集・登録して管理したもの。データの管理が基本
- リポジトリとの違い:
- リポジトリは、対象をプログラムやシステムにまで広げ、各工程の成果物をメタ情報として管理するデータベース
- バージョン管理ツール(ソースコード管理ツール):
- ソースコードのバージョンや変更履歴を管理するツール。代表はSubversionとGit
| ツール |
型 |
仕組み |
| Subversion(Apache Subversion) |
中央集中型 |
ソースと変更履歴はすべて中央リポジトリに記録される。開発者はネットワーク経由で中央リポジトリにつなぎ、checkoutかupdateでソースを取り出し、commitで中央リポジトリに変更を反映する |
| Git |
分散型 |
全履歴を含む中央リポジトリの完全な複製を、各開発者の作業用ディレクトリ(ローカルリポジトリ)にコピーして使う。ローカルリポジトリで開発してcommitし、好きなタイミングで中央リポジトリに反映する |
- Subversionの短所:
- 複数の開発者が1つのリポジトリを共有するので、変更点の競合が起きやすい
- 補足:
- Gitで、ローカルリポジトリの内容を中央(リモート)リポジトリに反映するコマンドは push
- 注意:
- 同じ「commit」でも、Subversionは中央リポジトリに反映、Gitはローカルリポジトリに反映
AIの開発に用いられるOSS
| 名前 |
何のためのもの? |
| Chainer |
ニューラルネットワークを使う機械学習の機能を持つオープンソース・ライブラリ。ディープラーニング(深層学習)のフレームワーク。Pythonで簡単なコードを書くだけでモデルを作れ、GPUで高速化もできる |
| OpenCV |
Open Source Computer Vision Library。画像処理・画像解析の機能を持つオープンソース・ライブラリ。ディープラーニングの画像認識でよく使う。Python、C/C++、Java、MATLAB用に公開されている |
| R |
統計解析に特化したプログラミング言語と実行環境。データ分析やグラフ描画のパッケージが多数公開されていて、機械学習やデータマイニングでも使われる |
- MATLAB:
- 数値解析ソフトウェア。行列計算やベクトル演算のライブラリが豊富な、行列ベースのテクニカルコンピューティング言語
- 注意(古くなっている情報):
- Chainerは、開発元のPreferred Networksが2019年12月に研究開発基盤をPyTorchに移行すると発表し、メンテナンスフェーズに入っている(新機能の開発は終了)。試験では「ディープラーニングのフレームワーク」として覚えればよい
混同しやすいペア
- 静的テストツール(実行しない)/動的テストツール(実行する)
- 構文チェッカ(言語の構文に合っているか)/コードオーディタ(自分たちのコーディング規約に合っているか)
- 実引数(呼び出す側が渡す)/仮引数(手続の中で定義された)
- アサーションチェッカ(条件が成り立っているかを確かめる)/トレーサ(命令ごとの実行結果を追う)
- テストカバレージツール(どこまでテストしたか)/プロファイラ(どこが遅いか、何がメモリを使っているか)
- スナップショット(特定の時点のメモリやレジスタを出力)/インスペクタ(実行中の変数やオブジェクトを表示)
- ICE(MPUの代わりにつなぐデバッグ装置)/エミュレータ(言語処理ツールのほう。ハードで内部動作まで再現する)
- リポジトリ(プログラムやシステムまで含めた成果物を管理)/データディクショナリ(データのメタデータを管理)
- Subversion(中央集中型。commitで中央に反映)/Git(分散型。commitでローカルに反映し、後で中央へ)
- Chainer(ディープラーニング)/OpenCV(画像処理)/R(統計解析)
← 05 ソフトウェアの目次に戻る