Mercurial > hg > Papers > 2015 > atton-sigse
changeset 6:ff11e487203e
Wrote basics
author | Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 09 Dec 2014 11:42:50 +0900 |
parents | 19c10b1b8287 |
children | dd9431a77a9a |
files | sigse.tex |
diffstat | 1 files changed, 70 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/sigse.tex Mon Dec 08 22:56:37 2014 +0900 +++ b/sigse.tex Tue Dec 09 11:42:50 2014 +0900 @@ -46,15 +46,15 @@ \author{比嘉 健太\affiref{ie-ryukyu}\and 河野 真治\affiref{ie-ryukyu}} % 英文著者名 -\eauthor{Yasutaka HIGA\affiref{ie-ryukyu}\and - Shinji KONO\affiref{ie-ryukyu}} +\eauthor{Yasutaka Higa\affiref{ie-ryukyu}\and + Shinji Kono\affiref{ie-ryukyu}} % 和文概要 \begin{abstract} 本研究ではプログラムの信頼性を保ちながら開発するための手法を提案することを目的とする。 プログラムの信頼性が変化するのはプログラムの変更時である。 -そこで、プログラムの変更を表現するデータ構造 Delta を定義し、異なるバージョンのプログラムを同時に実行可能にする。 +プログラムの変更を表現するデータ構造 Delta を定義し、異なるバージョンのプログラムを同時に実行可能にする。 異なるバージョン間のプログラムのトレースを比較し、信頼性の変化の可視化とデバッグの支援を行なう手法を提案する。 \end{abstract} @@ -72,7 +72,73 @@ % 本文はここから始まる \section{はじめに} -はじめに +プログラムの信頼性を保ちながら開発するための手法を提案する。 +プログラムの変更時に信頼性が変化すると仮定し、圏を用いてプログラムの変更を形式化する。 + +本研究ではプログラムの変更を Monad として表現する。 +Monad とはメタ計算と対応付けられたデータ構造である。 +Monad として任意の異なるバージョンのプログラムを同時に実行するデータ構造 Delta を定義した。 +プログラムの変更は特定バージョンの Delta から次のバージョンの Delta への変換として記述する。 + +ここで、任意の2つのバージョンのプログラムを同時に実行する。 +実行した際に振舞いが変化する点がバージョン間における変更点である。 +変更点を自動で検出することにより、バージョンが変わることによって信頼性の変化する部分を指摘する。 + +\section{プログラムの変更を表す Delta} +プログラミング言語 Haskell においてデータ構造 Delta を定義した。 +Delta は全てのバージョンの実行結果の値を保持するデータ構造である。 +値の変更は値から Delta を返す関数として定義する。 +返す Delta に内包する値を複数個持たせることにより、複数のバージョンを表現する。 + +ここで、異なるバージョン数を持つ Delta や関数の組み合せを考える。 +その際、前のバージョンの組み合せを保存しつつ新たな変更も取り入れるように組み合せる必要がある。 +バージョンの組み合せを表現するために Delta を Monad とする。 + +Monad とはデータ構造とメタ計算を対応付ける手法である。(TODO: ref moggi?) +ここでのメタ計算とはバージョン間の組み合せを一意に決めるルールである。 +関数の実行時にメタ計算も含めて実行することにより、異なるバージョンに存在するの独立した計算も全て実行することができる。 +TODO: ルールを得るサンプルを書くかな? or Delta の定義 + +よって、プログラムをデータ構造 Delta とDelta を返す関数として記述することにより、全てのバージョンを同時に実行できるプログラムが得られる。 +ここで、バージョンとはある一意な Delta の組み合せの列として表現される。 +組み合せの列を比較することにより異なるバージョン間の比較ができると考えた。 + + +\section{任意の2つのバージョンを実行する Parallel Debugger} +任意の2つのバージョンを同時に実行することによりデバッグを支援する手法 Parallel Debugger を提案する。 + +Delta によって表現されたプログラムの任意のバージョンを2つ選ぶ。 +2つのバージョンを同時に実行し、実行結果が変化する点を検出する。 +実行結果の比較を行なうことにより、プログラムの変更時に混入したバグを発見できるのでは無いかと考えた。 + +さらに、2つのバージョンのうち片方を実行しつつ、もう片方はデバッグモードとして実行する。 +バージョンアップ前の挙動をバージョンアップ後も保存しているか自動で確認することも可能であると考えている。 +加えて、テストなどと併用することにより異なるバージョン間における信頼性や品質の比較も可能である。 + + +\section{まとめと課題} +本研究ではプログラムの変更をMonadによって表現した。 +定義したデータ構造 Delta により全てのバージョンを同時に実行できることを確認した。 +Delta における特定のバージョン2つを同時に実行することにより、デバッグの支援や信頼性の比較を行なう手法 Parallel Debugger を提案した。 + +今後の課題としては大きく3つある。 +1 つめは Delta におけるプログラムの表現能力である。 +可能なプログラムの全ての変更を Delta によって表現可能かどうか調べなくてはならない。 +この課題については Delta と他の Monad との組み合せが可能であれば可能であると考えている。 +今回 Delta を実装した Haskell においては入出力の処理が Monad として表現される。 +そのため、入出力を含めた変更は Monad に + +2 つめはDelta におけるそれぞれのバージョンのトレースを得ることである。 +異なるバージョンにおいて実行結果が変化する点を指摘するには実行結果が比較可能でなくてはいけない。 +このためにバージョンごとの実行結果やトレースを得る必要がある。 +この問題に対しても Monad との組み合せによって解決しようと考えている。 +トレースを得る Monad を定義し、そのMonadと Delta との組み合せで各バージョンのトレースを得る。 + +3 つめは Delta を圏として表現することとその解析である。 +Monad は Kleisli圏の Kleisli Triple との対応が存在しており(TODO: ref higher order?)、Deltaもある圏を構築すると考えている。 +特に、 Parallel Debugger は圏における Product と対応すると考えている。 +圏における他の性質から、プログラムの変更の性質の解析や他の手法を提案しようと考えている。 + %}{