Mercurial > hg > Papers > 2015 > atton-sigse
changeset 11:0863e8f0a3d6
Add figure for version combination
author | Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 09 Dec 2014 15:08:52 +0900 |
parents | 15ca58a54b6a |
children | f0724df5ddbc |
files | .hgignore figure/versions.graffle figure/versions.xbb sigse.tex |
diffstat | 4 files changed, 313 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Tue Dec 09 14:13:39 2014 +0900 +++ b/.hgignore Tue Dec 09 15:08:52 2014 +0900 @@ -1,5 +1,6 @@ syntax: glob +.DS_Store *.swp *.log
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/versions.graffle Tue Dec 09 15:08:52 2014 +0900 @@ -0,0 +1,284 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>ActiveLayerIndex</key> + <integer>0</integer> + <key>ApplicationVersion</key> + <array> + <string>com.omnigroup.OmniGraffle</string> + <string>139.18.0.187838</string> + </array> + <key>AutoAdjust</key> + <true/> + <key>BackgroundGraphic</key> + <dict> + <key>Bounds</key> + <string>{{0, 0}, {558.99997329711914, 783}}</string> + <key>Class</key> + <string>SolidGraphic</string> + <key>ID</key> + <integer>2</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + </dict> + <key>BaseZoom</key> + <integer>0</integer> + <key>CanvasOrigin</key> + <string>{0, 0}</string> + <key>ColumnAlign</key> + <integer>1</integer> + <key>ColumnSpacing</key> + <real>36</real> + <key>CreationDate</key> + <string>2011-11-13 18:31:24 +0000</string> + <key>Creator</key> + <string>Nobuyasu Oshiro</string> + <key>DisplayScale</key> + <string>1 0/72 in = 1.0000 in</string> + <key>GraphDocumentVersion</key> + <integer>8</integer> + <key>GraphicsList</key> + <array> + <dict> + <key>Bounds</key> + <string>{{57, 67}, {320, 239}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>4</integer> + <key>Magnets</key> + <array> + <string>{1, 1}</string> + <string>{1, -1}</string> + <string>{-1, -1}</string> + <string>{-1, 1}</string> + <string>{0, 1}</string> + <string>{0, -1}</string> + <string>{1, 0}</string> + <string>{-1, 0}</string> + <string>{-0.5, -0.233518}</string> + <string>{-0.49144199, 0.26006298999999999}</string> + <string>{0.50711799000000002, -0.22408600000000001}</string> + <string>{0.50711799000000002, 0.26717900999999999}</string> + <string>{-0.27430999, -0.47402799000000001}</string> + <string>{0.27977999999999997, -0.47847801000000001}</string> + <string>{0.29393801000000003, 0.54304397000000004}</string> + <string>{-0.28623198999999999, 0.55380397999999997}</string> + </array> + <key>Shape</key> + <string>Rectangle</string> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>CornerRadius</key> + <real>9</real> + <key>GapRatio</key> + <real>0.5</real> + <key>Width</key> + <real>4</real> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf210 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 Ricty3.2.2-Regular;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs44 \cf0 \CocoaLigature0 \ + variable = [x, y]\ + function = [f, g, h]\ +\ + variable >>= function =\ + [[f(x), g(x), h(x)],\ + [f(y), g(y), h(y)]]\ + =\ + [f(x), g(y), h(y)]\ +\ +\ +\ +}</string> + <key>VerticalPad</key> + <integer>0</integer> + </dict> + <key>TextPlacement</key> + <integer>0</integer> + </dict> + </array> + <key>GridInfo</key> + <dict/> + <key>GuidesLocked</key> + <string>NO</string> + <key>GuidesVisible</key> + <string>YES</string> + <key>HPages</key> + <integer>1</integer> + <key>ImageCounter</key> + <integer>1</integer> + <key>KeepToScale</key> + <false/> + <key>Layers</key> + <array> + <dict> + <key>Lock</key> + <string>NO</string> + <key>Name</key> + <string>Layer 1</string> + <key>Print</key> + <string>YES</string> + <key>View</key> + <string>YES</string> + </dict> + </array> + <key>LayoutInfo</key> + <dict> + <key>Animate</key> + <string>NO</string> + <key>circoMinDist</key> + <real>18</real> + <key>circoSeparation</key> + <real>0.0</real> + <key>layoutEngine</key> + <string>dot</string> + <key>neatoSeparation</key> + <real>0.0</real> + <key>twopiSeparation</key> + <real>0.0</real> + </dict> + <key>LinksVisible</key> + <string>NO</string> + <key>MagnetsVisible</key> + <string>NO</string> + <key>MasterSheets</key> + <array/> + <key>ModificationDate</key> + <string>2014-12-09 06:03:18 +0000</string> + <key>Modifier</key> + <string>atton</string> + <key>NotesVisible</key> + <string>NO</string> + <key>Orientation</key> + <integer>2</integer> + <key>OriginVisible</key> + <string>NO</string> + <key>PageBreaks</key> + <string>YES</string> + <key>PrintInfo</key> + <dict> + <key>NSBottomMargin</key> + <array> + <string>float</string> + <string>41</string> + </array> + <key>NSHorizonalPagination</key> + <array> + <string>int</string> + <string>0</string> + </array> + <key>NSLeftMargin</key> + <array> + <string>float</string> + <string>18</string> + </array> + <key>NSPaperSize</key> + <array> + <string>size</string> + <string>{594.99997329711914, 842}</string> + </array> + <key>NSPrintReverseOrientation</key> + <array> + <string>int</string> + <string>0</string> + </array> + <key>NSRightMargin</key> + <array> + <string>float</string> + <string>18</string> + </array> + <key>NSTopMargin</key> + <array> + <string>float</string> + <string>18</string> + </array> + </dict> + <key>PrintOnePage</key> + <false/> + <key>ReadOnly</key> + <string>NO</string> + <key>RowAlign</key> + <integer>1</integer> + <key>RowSpacing</key> + <real>36</real> + <key>SheetTitle</key> + <string>Canvas 1</string> + <key>SmartAlignmentGuidesActive</key> + <string>YES</string> + <key>SmartDistanceGuidesActive</key> + <string>YES</string> + <key>UniqueID</key> + <integer>1</integer> + <key>UseEntirePage</key> + <false/> + <key>VPages</key> + <integer>1</integer> + <key>WindowInfo</key> + <dict> + <key>CurrentSheet</key> + <integer>0</integer> + <key>ExpandedCanvases</key> + <array> + <dict> + <key>name</key> + <string>Canvas 1</string> + </dict> + </array> + <key>Frame</key> + <string>{{373, 4}, {693, 874}}</string> + <key>ListView</key> + <true/> + <key>OutlineWidth</key> + <integer>142</integer> + <key>RightSidebar</key> + <false/> + <key>ShowRuler</key> + <true/> + <key>Sidebar</key> + <true/> + <key>SidebarWidth</key> + <integer>120</integer> + <key>VisibleRegion</key> + <string>{{0, 0}, {558, 735}}</string> + <key>Zoom</key> + <real>1</real> + <key>ZoomValues</key> + <array> + <array> + <string>Canvas 1</string> + <real>1</real> + <real>1</real> + </array> + </array> + </dict> +</dict> +</plist>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/figure/versions.xbb Tue Dec 09 15:08:52 2014 +0900 @@ -0,0 +1,8 @@ +%%Title: ./versions.pdf +%%Creator: extractbb 20130405 +%%BoundingBox: 0 0 328 297 +%%HiResBoundingBox: 0.000000 0.000000 328.000000 297.000000 +%%PDFVersion: 1.3 +%%Pages: 1 +%%CreationDate: Tue Dec 9 15:02:17 2014 +
--- a/sigse.tex Tue Dec 09 14:13:39 2014 +0900 +++ b/sigse.tex Tue Dec 09 15:08:52 2014 +0900 @@ -1,4 +1,7 @@ \documentclass{ipsjpapers} +\usepackage{url} +\usepackage[dvipdfmx]{graphicx} + % ユーザが定義したマクロなど. \makeatletter @@ -84,15 +87,26 @@ ここで,異なるバージョン数を持つ Delta や関数の組み合せを考える. その際,前のバージョンの組み合せを保存しつつ新たな変更も取り入れるように組み合せる必要がある. -バージョンの組み合せを表現するために Delta を Monad とする. +バージョンの組み合せの例を図\ref{fig:versions}に示す. +変数 variable と関数 function が存在するとする. +variable はバージョンが2つ存在し,関数はバージョンが3つ存在する. +これらの組み合せの中から,variableのバージョン2つを保存しつつ関数のバージョン3を含んだ組み合せを選ぶ. +\begin{figure}[htpb] + \begin{center} + \scalebox{0.35}{\includegraphics{figure/versions.pdf}} + \end{center} + \caption{バージョンの組み合せの例} + \label{fig:versions} +\end{figure} + +バージョンの組み合せを一意に定義するために Delta を Monad とする. Monad とはデータ構造とメタ計算を対応付ける手法である\cite{moggi}. ここでのメタ計算とはバージョン間の組み合せを一意に決めるルールである. 関数の実行時にメタ計算も含めて実行することにより,異なるバージョンに存在するの独立した計算も全て実行することができる. なお,データ構造を Monad として定義する際に満たすべき Monad則が存在するが,Monad則を満たしていることは証明支援系言語Agda\cite{agda}によって証明した. -TODO: ルールを得るサンプルを書くかな? or Delta の定義 -よって,プログラムをデータ構造 Delta とDelta を返す関数として記述することにより,全てのバージョンを同時に実行できるプログラムが得られる. +プログラムをデータ構造 Delta と Delta を返す関数として記述することにより,全てのバージョンを同時に実行できるプログラムが得られる. ここで,バージョンとはある一意な Delta の組み合せの列として表現される. 組み合せの列を比較することにより異なるバージョン間の比較ができると考えた. @@ -102,10 +116,10 @@ Delta によって表現されたプログラムの任意のバージョンを2つ選ぶ. 2つのバージョンを同時に実行し,実行結果が変化する点を検出する. -実行結果の比較を行なうことにより,プログラムの変更時に混入したバグを発見できるのでは無いかと考えた. +変化した実行結果の比較により,プログラムの変更時に混入したバグを発見できるのでは無いかと考えた. さらに,2つのバージョンのうち片方を実行しつつ,もう片方はデバッグモードとして実行する. -バージョンアップ前の挙動をバージョンアップ後も保存しているか自動で確認することも可能であると考えている. +そうすることにより,バージョンアップ前の挙動をバージョンアップ後も保存しているか確認することができる. 加えて,テストなどと併用することにより異なるバージョン間における信頼性や品質の比較も可能である. @@ -140,7 +154,7 @@ \bibitem{moggi} Eugenio Moggi: Notion of Computation and Monads(1991) \bibitem{category} Michael Barr and Charles Wells: Category Theory for Computing Science(1989) \bibitem{proofs-and-types} Jean-Yves Girard, Paulr Taylor, Yves Lafont: Proofs and Types(1990) -\bibitem{agda} The Agda Wiki - Agda: \\ http://wiki.portal.chalmers.se/agda +\bibitem{agda} The Agda Wiki - Agda: \url{http://wiki.portal.chalmers.se/agda} \end{thebibliography}