開発ツール

このページでは、静的・動的テストを助けるツール、統合開発環境(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 ソフトウェアの目次に戻る

タイトルとURLをコピーしました