uchan note

プログラミングや電子工作の話題を書きます

プログラム解析の目的

来年からサイボウズ・ラボ株式会社に所属して研究活動をすることになりました。 研究テーマは今のところプログラム解析をやろうと思っています。 プログラム解析は初心者ですので勉強したことをブログにしてみます。

プログラム解析の目的の一つはデバッグ支援

プログラム解析はざっくり言えば,プログラムを解析して何らかの情報を得ることです。 プログラム解析の代表的な手法と応用先を知りたかったのでこの論文を読んでみました。

チュートリアルシリーズ『ソフトウェア工学の実証的アプローチ』第2回 プログラムの動的解析, コンピュータ ソフトウェア,Vol.29,No.1 (2012),pp.47-60

プログラムの動的解析はプログラムを実際に動作させ,その実行トレースを用いて解析を行う手法の総称です。

実行トレースを使うということは,必然的に解析したいバグを踏む必要があるということです。疑問だったのは,バグを実際に踏むことができるなら,別に動的解析手法を用いなくてもバグは見つけられるよな,ということでした。ではなぜ動的解析手法が必要なのでしょうか?

上記の論文を読んで分かったのは,動的解析手法の目的は「バグを見つけること」だけではなく,最終的には「バグを修正するまでの過程を支援すること」なのですね。バグの直接の原因がヌルポインタ参照だってことが分かったとして,ではなぜヌルポインタになってしまったのかを辿るのはかなり難しい場合があります。特に並行性に起因するバグの場合はバグの再現が困難で,原因特定はめちゃくちゃ難しいです。プログラム解析の手法を用いてデバッグを支援する,というのがプログラム解析手法の大きな目的の一つです。

プログラム解析の他の目的

プログラム解析の手法の多くは「バグのないプログラムを生成する」ということが真の目的だと思いますが,目的を細分化してみると次のようなものがあるようです(先の論文での分類。コロン:以降は私(uchan_nos)の意見)。

  • コードカバレッジ計算:プログラムのテストがカバーする割合を計算することでテストが十分かどうかの指標とする。
  • 振舞いの可視化:プログラムの動作を可視化してプログラム理解を支援する。
  • フェイズ検出:?
  • 統計的デバッギング:バグに関連しそうな文を特定することでデバッグ作業のとっかかりを作る。
  • 動的スライシング:注目する変数に影響を与えた文を特定することでバグ発見を支援する。
  • Capture & Replay:プログラムの入力値を記録し再生することで,バグを再現してデバッグ作業をやりやすくする。
  • プロトコルマイニング:注目するオブジェクトの使われ方(メソッドの呼び出され方の規則)を発見しプログラム理解を支援する。
  • 動的不変条件の検出:各変数の実行時の関係性(大小関係とか)を求めてプログラム理解を支援する。
  • Live Sequence Chart の抽出:?

まとめ

プログラム解析の技術はバグのないプログラムを作る,およびプログラムを理解するという目的を支援できる技術だということが分かりました。私が修士論文研究で作った C-Helper は C 言語初学者に向けた静的解析ツールでしたが,来年は一般のプログラムのバグを対象にしたプログラム解析の手法を勉強したり研究してみようと思っています。

MikanOSの歴史

この記事は 自作 OS アドベントカレンダー 2019 の 2 日目の記事です。

MikanOS

筆者(uchan_nos)はここ数年,教育用 OS である MikanOS(ミカノス)を作っています。 MikanOS は「未完」と「蜜柑」を掛けた名前です。

MikanOS は教育用 OS と言っている通り,将来は大学などの授業で採用されたらいいなあと思って作っています。 今のところ 2020 年 12 月から 2021 年 1 月に東工大で開催する予定の自作 OS 講義のサンプルとして採用を予定しています。 (この講義については 筆者の宣伝ツイート を参照してください)

この記事は MikanOS 製作の進捗を過去から現在までまとめてみるものです。

続きを読む

「asm volatile」におけるvolatileの効果

インラインアセンブラは低レイヤプログラミングをする人にとっては有名な機能ですが,私はなぜ「volatile」を付ける必要があるのかイマイチ分かりませんでした。いままで「volatile」を付けずとも意図通り動いていたからです。しかし今回,「volatile」を付けない場合に意図しない最適化をされてしまったのでここで紹介します。

続きを読む

FIFOバッファ

この記事はプログラミング,とりわけ自作OSに興味を持った計算機科学初心者の方に向け,FIFOバッファの紹介,および具体的な実装例を紹介するものです. FIFOバッファとは何か,自作OSでの応用例,ナイーブな実装例と性能を多少考慮した改良例を紹介します.

続きを読む

割り込み「ベクタ」と呼ぶ理由

割り込みハンドラへのポインタを配列状に並べたものを「割り込みベクタテーブル」と呼びます。英語ではInterrupt Vector Table。なぜ「ベクタ(ベクトル)」という語が使われるのか疑問に思い、ツイッターで聞いたりした結果、ベクタはポインタとほぼ同じ意味である、という結論になりました。

続きを読む

セキュリティキャンプ2019全国大会 OS開発ゼミ 紹介

このページはセキュリティキャンプ全国大会 2019 の集中開発コース「OS 開発ゼミ」の紹介ページです.

OS 開発ゼミ 基本情報

OS 開発ゼミの基本的な情報は以下の通りです。

  • イベント:セキュリティキャンプ全国大会 2019
  • コース:集中開発コース
  • トラック:システムプログラミングトラック
  • ゼミ:OS 開発ゼミ
  • 時間帯:3 日間連続(8/14 - 8/16)
  • 必要機材:PC、その他必要に応じて仕様書や参考書など
  • 事前学習:あり(詳しくは後述)
  • 講師:粟本さん,武内さん,西永さん,内田
続きを読む

【技術書典6】「Local APICタイマー入門」を出します(ダウンロード頒布有)

大人気の技術書オンリーの同人誌即売会技術書典 6」が、2019/04/14(日)に池袋サンシャインシティで開かれます。

今回は「Local APICタイマー入門」を出しますので、そのお知らせです。

頒布情報

  • 日時 2019 年 4 月 14 日(日)
  • 場所 池袋サンシャインシティ 2F 展示ホール D(文化会館ビル 2F)
  • ブース う38「bitnos」 bitnos のサークルページ
  • 書名 Local APICタイマー入門
    • bitnos ブースでは既刊 4 種類も展示します。
  • ページ数 44(表紙含む)

f:id:uchan_nos:20190327212524p:plain:w150

その他の新刊

う38 ではその他に委託の新刊を頒布する予定です。

  • PythonとColabでできる - ゼロから作るRAW現像
    • 著者 @MuneOiz
    • デジタルカメラのRAW画像についての解説をし、RAW画像をRGBカラー画像へと現像するソフトウェアを作ってしまう意欲作
  • もしかしたら後1冊、新刊が出るかも!?
続きを読む