著者
小澤 祐也 中野 圭介
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.12, no.2, pp.12, 2019-05-21

定理証明支援系Coqでは,無限に続くリストのような余帰納的構造を持つデータについての証明を,タクティクと呼ばれるコマンドを用いて進めることができる.ただ,Coqでは無限のデータや証明をそのまま扱うことはできないため,再帰的な表現による有限の形で表している.このような無限のデータや証明は再帰関数として表現されるため,意味のないループの形でないという,ガード条件の検査(guardedness check)が証明の最後に行われている.このため証明全体を走査するために時間がかかってしまうという問題や,途中でガード条件が成立しなくなっていてもユーザは証明の最後の検査まで気づくことができないという問題がある.Coqには証明途中でガード条件の検査を行うGuardedコマンドが存在するが,これもそれまでの証明全体を走査するために,タクティクごとに実行すると時間効率が悪い.そこで本発表では,Coqにおける余帰納的証明のガード条件の検査を証明中に少しずつ行い,ガード条件が成立しなくなった際,即座にユーザに知らせることができるような手法を提案する.本手法ではタクティクの実行ごとに新しく作られた部分の証明のみを取得し,その部分的な証明に対してガード条件の検査を行う.検査を行った後は,その時点での環境やゴールのIDなどの情報を保持しておき,次回のタクティク実行時のガード条件の検査に用いる.
著者
今泉 良紀 篠埜 功
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.10, no.6, pp.1, 2017-12-12

パックラット構文解析ではLALR(1)よりも強力な形式文法であるParsing Expression Grammar(以下PEG)によって構文解析を行う.PEGによる文法規則には曖昧さがなく,プログラミング言語の構文の記述やその処理系の作成に際し非常に有用である.既存のPEGベースの構文解析器では直接文字列を入力として受け付けるが,字句解析と構文解析を分けたい場合にそのままでは使用に適さない.たとえば,字句ベースのマクロ処理系であるCプリプロセッサを実装する際,マクロ展開後のコードに再度マクロ展開の処理が行われうる.その結果,マクロ展開の過程で同じレクシムに対して字句解析を複数回実行する場合がある.これを避けるためにPEGベースの構文解析器を使用しないとすると,字句解析や構文解析用にPEG以外の形式文法を学んだりその処理系を導入したりする必要がある.そこで文字列だけでなく字句列などを入力できるパックラットパーサーコンビネータをC++で実装し,本発表では実装の詳細について報告する.この実装を用いて生成した構文解析器はchar型だけでなく任意の型を返す前方反復子(Forward Iterator)を入力として受け付ける.結果はtuple・variant・optional・expectedなどを組み合わせたデータ構造として得られ,意味規則によって自由に変換することが可能である.
著者
神戸 隆行
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.46, no.SIG1(PRO24), pp.78-96, 2005-01-15

現在,数多くの様々な最適化技術が研究されているが,そのすべての最適化技術,特に問題依存度の高い最適化を組み込むことは処理系の肥大化を招く.そこでこのような問題依存度の高い最適化は問題の解法とともに処理系ではなくプログラム部品としてライブラリ化することが考えられる.その手段の1 つとしてメタ・プログラミングがある.そしてこのように最適化をライブラリに組み込むにあたっては実行環境の違いをどう反映するかという問題がある.これについては最適化に適当なパラメータを導入し,実行環境で試行・計測してパラメータを求める実行時プロファイリングという方法がある.本発表ではFFT を例にとり,メモリ階層を意識した最適化をC++テンプレートの機能を用いたメタ・プログラミングで行うとともに,実行時プロファイリングに基づいて適応的な最適化を行ったので報告する.これは3 つの段階からなる.1) 核となる小さなサイズのデータに対するFFTコードをサイズごとに複数生成(ループの展開,三角関数値の静的計算).2) 前段で生成したサイズごとの核コードの実行時間計測.3) 計測結果に基づく核コードの選択・合成による最終的なFFT コードの生成.特にこのうち1) と3) でC++テンプレート・メタ・プログラミング技法を利用した.以上の実装と評価について報告を行う.
著者
鵜川 始陽 皆川 宜久 小宮 常康 八杉 昌宏 湯淺 太一
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.44, no.SIG13(PRO18), pp.72-83, 2003-10-15

実行にスタックを利用している処理系でファーストクラスの継続を生成する場合,スタックの内容をヒープにコピーするのが一般的である.スタックの内容をヒープにコピーする戦略には様々なものが提案されているが,実際の処理系の多くはスタック法を採用している.スタック法では継続の生成のたびに処理系のスタック全体の内容をヒープにコピーする.このように,スタック法は動作が単純なので簡単に実装でき,また他言語呼び出しをサポートした処理系でも利用できるという長所がある.しかし,継続の生成に時間がかかり,また,メモリ効率が悪いという欠点があり,利用の妨げとなる場合もある.本発表では,スタック法による継続の生成に対する効率化手法として,スタックのコピーの遅延を提案する.継続の生成によりコピーされるスタックの内容は,継続を生成した関数からリターンするまでスタック上にも残っている.したがって,スタックのコピーを継続を生成した関数からリターンするまで遅らせてもよい.もし,生成した継続が,スタックをコピーする前にごみになれば,スタックのコピーを省略できる.本発表では,さらに,スタックコピーの遅延により可能となる,継続オブジェクトの部分的共有も提案する.これらの効率化手法をScheme処理系に組み込んで性能を評価したところ,継続を使ったプログラムの実行効率が改善された.
著者
上田 陽平 小原 盛幹
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.13, no.1, pp.17, 2020-01-29

Webアプリケーション開発においては,動的コンパイル言語やスクリプト言語が実装言語として選択されることが多い.これは,静的コンパイル言語に比べてデプロイに必要な時間が短く,新しい機能やバグ修正を迅速にリリースでき,開発生産性の向上に寄与するためと考えられる.しかし,近年のコンテナ技術や継続的インテグレーション・継続的デリバリーの普及により,静的コンパイル言語を用いたWebアプリケーションの開発においても動的コンパイル言語やスクリプト言語と遜色ない生産性を実現する環境が整いつつある.本発表では,静的コンパイル言語のGoと動的コンパイル言語のJavaおよびJavaScriptで実装されたWebアプリケーションの性能評価結果を報告する.WebアプリケーションであるAcme Airベンチマークの各言語での実装を使用して性能評価を行い,Goによる実装はJavaScriptに対して約1.6倍,Javaに対して約1.8倍のスループットを達成することを確認した.性能プロファイルの分析によると,GoのWebフレームワークはJavaのWebフレームワークに比べてREST型Webリクエストの処理に必要なコードフットプリントが少なく,また,動的型付けのJavaScriptと比較して静的型付けのGoはランタイム検査のオーバヘッドが少ないことが判明した.GoはJavaおよびJavaScriptに対して優位な性能を示しており,Webアプリケーションにおいても静的コンパイル言語の普及が期待される.
著者
阿部 正佳 山崎 淳 山根 雅司
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.49, no.SIG1(PRO35), pp.127, 2008-01-15

本発表ではコンパイラキットSCKを紹介する.SCKはEmacs Lispで実装された,マルチソース,マルチターゲットのコンパイラ作成支援環境である.コンパイラキットは,単一のコンパイラと異なり,ユーザはそれを構成する各モジュールを選択的に利用するものであるから,それらのモジュラリィー,インタフェースの簡潔さと柔軟性がきわめて重要であるにもかかわらず,既存のコンパイラ作成支援環境はその実装言語に依存した複雑なインタフェースのみを提供し続けてきた.SCKでは,データ構造というものを実装言語とはまったく無関係な,独立した簡潔なプログラミング言語として定義し,さらに徹底的なモジュール分割を行うことで,実装言語から独立したコンパイラ部品を提供している.実際の実装言語はEmacs Lispであるが,Emacs Lispの知識がなくてもSCKを利用することができる.これが実装言語独立の意味である.一方で,Emacs Lispはコンパイラのような記号処理向きのプログラミング言語であり,現在最も使われている完成度の高いLisp処理系の1つである.SCKをEmacs上で利用するユーザには,簡潔で強力なコンパイラ作成環境が提供される.
著者
渡邉 遥輔 山口 大輔 倉光 君郎
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.12, no.3, pp.3, 2019-09-18

スマートコントラクトはブロックチェーン技術に基づいたプラットフォーム上で実行される分散型アプリケーションである.スマートコントラクトでは,資産のやり取りや権利の譲渡といった契約事項をプログラムとして実装でき,ブロックチェーン上で安全に実行できる.スマートコントラクトの開発言語としてSolidityと呼ばれるJavaScript風プログラミング言語がよく用いられる.しかし,Solidityは契約事項の可読性が低く,契約内容の理解が困難という課題がある.本発表では,より自然な日本語でスマートコントラクトを記述可能なプログラミング言語Nicoを提案する.Nicoの設計と実装を述べ,スマートコントラクトの記述をNicoで行う効果について考察を行う.
著者
石崎 一明 安江 俊明 川人 基弘 小松 秀昭
出版者
一般社団法人情報処理学会
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.43, no.8, pp.110, 2002-09-15

本発表では,Java などの動的クラスロードをともなう言語において,実装が容易な動的メソッド呼び出しの直接devirtualization 手法を提案する.本手法では,コンパイル時に動的メソッド呼び出しに対して直接devirtualization されたコードとメソッドがオーバライドされた場合に実行する動的メソッド呼び出し,の2 種類のコードを生成する.最初は前者を実行し,オーバライドが起きたときにコードを書き換えて後者を実行する.本手法では,コード書換えによって直接devirtualization されたコードを無効化するので,脱最適化のような再コンパイルのための複雑な実装が不要である.一方,再コンパイルを不要にするためにコンパイル時に2 種類のコードを用意するので,制御フロー上に合流点が生成される.一般に制御フローの合流点はコンパイラの最適化を妨げるが,本発表では合流点が存在しても十分な最適化を可能にする手法を示す.さらに,本手法と他のdevirtualization 手法を組み合わせてJava のJust-In-Time コンパイラに実装し,評価を行った.その結果,devirtualizationを行わない場合に比べ,SPECjvm98 とSPECjbb2000 において0 ?181%(平均24%)性能を改善できることを示す.This presentation presents a direct devirtualization technique for a language such as Java with dynamic class loading.The implementation of this technique is easy.For a given dynamic method call,a compiler generates the inlined code of the method,together with the code of making the dynamic call.Only the inlined code is actually executed until our assumption about the devirtualizationbecomes invalidated,at which time the compiler performs code patching to make the code of dynamic call executed subsequently.This technique does not require the complicated implementation such as deoptimization to recompile the method that is active on stack.Since this technique prevents some optimizations across the merge point between the inlined code and the dynamic call,we have further more proposed optimization techniques effectively.We made some experiments to understand the effectiveness and characteristics of the devirtualization techniques in our Java Just-In-Time compiler.In summary, we improved the execution performance of SPECjvm98 and SPECjbb2000 by ranging from 0%to 181%(with the geometric mean of 24%).
著者
加賀江 優幸 南出 靖彦
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.8, no.3, pp.1-10, 2015-09-21

文字列から新たな文字列を生成する計算モデルとしてAlurとCernyによるストリーミング文字列トランスデューサ(Streaming String Transducer: SST)がある.SSTは,文字を受け取るごとに文字列を保存できる変数の内容を更新し,最終的には変数の内容を用いて出力文字列を構成するトランスデューサである.本研究では,関数的非決定性ストリーミング文字列トランスデューサ(関数的SST)の等価性判定を正規表現による文字列置換の等価性判定に応用する.ここで,関数的とは非決定性であっても出力がたかだか1つであることを示す.関数的SSTの等価性判定問題の決定可能性はAlurらによって証明されている.しかしながら,判定方法は複雑であり直感的な理解が困難であった.そこで,本論文では関数的SSTの等価性判定アルゴリズムの簡略化について述べる.また,本アルゴリズムの実装および実験結果についても述べる.正規表現による文字列置換はグループ変数にマッチした箇所を複数回出力することができることから有限状態トランスデューサでは模倣できない.そこで,本論文では正規表現による文字列置換を関数的SSTで模倣することにより,関数的SST上の検証問題に帰着させる.最終的には,関数的SSTの等価性判定アルゴリズムを正規表現による文字列置換の等価性判定に応用する.
著者
山崎 進 森 正和 上野 嘉大 高瀬 英希
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.12, no.1, pp.15, 2019-01-30

ElixirではFlowというMapReduceの並列ライブラリが普及している.Flowを用いると簡潔な表現でマルチコアCPUの並列性を活用できる.我々はFlowによるプログラム記述がGPGPUにも容易に適用できるという着想を得て,OpenCLによるプロトタイプを実装した.現行のGPUで採用されるSIMDでは,単純な構造で均質で大量にあるデータを同じような命令列で処理する場合に効果を発揮する.一方,Flowでは,そのようなリストに対し一連の命令列で処理する.そこで,このような命令列と,リストを配列化したデータをGPUに転送・実行することで高速化を図る手法,Hastegaを提案する.そこで,ロジスティック写像を用いたベンチマークプログラムを開発し,期待される性能向上を評価した.Mac ProとGCEで評価した.言語はElixir,Hastega,Rust,Pythonで比較した.その結果,次の3つの結果が得られた:(1) HastegaはElixir単体のコードと比べて4.43~8.23倍高速になった(2) HastegaはRustと比べて,1.48~1.54倍程度遅くなっただけである(3) HastegaはPythonのコードと比べて,3.67倍高速である.今後,本研究で得た知見を元にLLVMを用いてコード生成器を含む処理系を開発する予定である.
著者
芝 哲史 笹田 耕一 卜部 昌平 松本 行弘 稲葉 真理 平木 敬
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.4, no.1, pp.90-108, 2011-03-16

本稿では,Ruby 処理系とほぼ完全な互換性を持つ AOT コンパイラの設計と実装について述べる.Ruby は数多くのライブラリを持ち,数多くの環境をサポートしているプログラミング言語の 1 つである.本研究では,Ruby 処理系との互換性,および可搬性に優れた手法を用いて,既存のすべての Ruby プログラムを,Ruby がサポートするすべての環境で高速化することを目標としている.我々は,この目標を達成するために,Ruby スクリプトをコンパイルしたバイトコード列を C 言語に変換し,Ruby 処理系の仮想マシン (RubyVM) 上で動作させる AOT コンパイラを開発した.開発した AOT コンパイラは,生成する C 言語ソースコードを RubyVM のメソッド呼び出し機構,例外処理機構などを利用して動作させることで,Ruby 処理系との互換性をほぼ完全に保ちながら,Ruby プログラムの実行を高速化する.本稿では開発した AOT コンパイラの設計と実装,開発によって得られた知見について詳しく解説する.そして,開発した AOT コンパイラの機能と性能を評価する.
著者
滝本 宗宏
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.2, no.5, pp.15-27, 2009-11-20

コンパイラが行うコード最適化の1つである部分冗長除去は,冗長な式を除去するとともに,ループ不変式をループの外に移動する強力な手法である.部分冗長除去に基づいて行うプログラム変形は,いずれの実行経路上にも式を増加させないことを保証しており,その意味で,安全な最適化であるといわれる.一方,ループ内に存在する計算のように,頻繁に実行されることが予想される式は,たとえ実行経路上の式の数を増加させても,ループの外に移動させる投機的な移動を行う方が,プログラムの効率的な実行に貢献する場合がある.本研究では,ループ内の式についてだけ,投機的な移動によって,ループの外に移動させる部分冗長除去法を提案する.従来,部分冗長除去において,一部の実行経路上で冗長な部分冗長な式とループ不変式とを見分けることは困難であった.本手法では,質問伝播という要求駆動型の解析法を用いることによって,任意の制御フローグラフに対して,ループ不変式だけを投機的にループ外に移動させることができる.本手法の効果を示すために,本手法をCコンパイラに実装し,評価を行った.その結果,従来法と比べ,実行効率が17%以上向上する場合があることを確認した.
著者
長慎也 甲斐 宗徳 川合 晶 日野 孝昭 前島真一 筧 捷彦
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.45, no.SIG09(PRO22), pp.25-46, 2004-07-15

初学者がプログラミングを学習する場合,一般に,最初は簡単な概念を学び,次第に高度な概念を習得するという順序を踏む.学習環境も,その進行に沿ったものが用意できるとよい.最初は,難しい概念を知らなくても使える取っ付きやすい言語や環境を与え,学習が進むに従って,高度な概念も扱えるJavaなどの実用的な言語へ移行させるとよい.これによって,初学者にプログラミングに対する興味を持たせ,学習意欲を継続させることが可能であると考えられる.そこで,プログラミング学習の導入部において用いるのに適した言語Nigariとその環境を開発した.Nigariの言語仕様は,Javaのそれを簡素化したものになっており,クラスやメソッドの宣言など,初学者にとって理解が難しいものを書く必要がない.一方,基本的な制御構造などは,Javaとほとんど同じ仕様である.Nigariの実行環境は,オブジェクトを自動的に可視化する機能を持つ.これによって,学習者のプログラミングへの意欲を向上させるだけでなく,オブジェクトの概念をも理解させることができる.早稲田大学コンピュータ・ネットワーク工学科1年前期のプログラミングの授業を実験の場とした.この授業は本来Javaを用いて実習を行うが,導入部にNigariを用いた.実験では,オブジェクトの可視化機能について学生から高い評価を得られた.また,言語を簡素にすることについても,ある程度の評価を得られた.
著者
藤澤 徹
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.11, no.2, pp.31, 2018-06-26

動的型付き言語の高速化においては,型ごとに最適化したコードをいかに高速かつ効率的に生成するかが鍵となる.プロダクションコードの巨大化かつ抽象化にともないポリモーフィックな関数の最適化手法の重要度が増してきている.あるポリモーフィックな関数が,各コールサイトごとに見ればモノモーフィックとみなせる場合,コールサイトごとの型に特化した関数インライン展開を行うことで効率の良いコードが生成できることが広く知られている.しかし,従来から広く使用されている関数ごとの型フィードバックでは,関数をインライン展開する前の状態において複数のコールサイト由来の型情報を区別することができず,不要に汎用的なコードを生成してしまい,これを最適化するにはもう一段のJITコンパイル層が必要となる.本発表では,この問題を改善する既存実装に適用可能な最適化手法として,オブジェクト構造を意識したシグネチャごとの型フィードバックを提案する.これにより,複数のコールサイト由来の型情報を区別可能となり最初のインライン展開においてコールサイトに特化した型情報を用いることができ,さらなる最適化を可能とする.本手法をMozilla FirefoxのJavaScript処理系SpiderMonkeyに実装し,ポリモーフィックな関数のコールサイトごとの最適化への適用可能性を提示するとともに,各状況への最適化の可能性や性能向上,および手法の軽量さについて評価する.
著者
大平 怜 平木 敬
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.46, no.SIG1(PRO24), pp.134-148, 2005-01-15

実行時の安全を保証するための例外機構は一方で速度低下の原因となるため,部分冗長性除去(Partial Redundancy Elimination; PRE)で上方移動を用いて不要な例外命令を削除することが有効である.しかし我々はプログラムの意味を保つために例外命令どうしの順序関係である例外依存関係を保つ必要がある.したがって,従来の部分冗長性除去では例外命令の上方移動が阻害されることが多い.本研究で我々はプログラムの意味を保存しつつ例外依存関係を越える部分冗長性除去,Sentinel PRE を提案する.Sentinel PRE は例外依存関係を無視して上方移動を行い,その後で高速な解析により例外順序の入れ替わりを検出する.順序が入れ替わった例外命令で例外が起きた場合,プログラムの意味を保つために上方移動する前の状態に脱最適化でコードを戻す.現実のプログラムで例外が起きることは稀であるため,ほとんどの場合は上方移動により最適化された高速なコードが実行される.Sentinel PRE は特別なハードウェアのサポートには依存せず,動的なコード書き換えにより脱最適化を実現する.我々はSentinel PRE をJava の実行時コンパイラに実装して実験を行い,Java Grande Benchmark 中のheapsort プログラムで8.4%の性能向上を得た.
著者
笹田 耕一 松本 行弘
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.10, no.3, pp.16-16, 2017-06-16

マルチスレッドプログラミングは,共有するデータに対して,複数のスレッドから同時に読み込み,書き込みを行うとデータレースなどの問題を発生させるため,排他制御などの同期を適切に行わねばならず,難しい.この問題は,スレッドが変更可能なデータを簡単に共有できるため生じるので,そのような共有を制限する方法が必要である.プログラミング言語Rubyの次期メジャーバージョンであるRuby 3では,マルチスレッドプログラミングの持つ難しさを緩和するため,“Guild” というRuby向けの新しい並行実行モデルを検討している.インタプリタは1つ以上のGuildを持つ.変更可能なすべてのオブジェクトはある1つのGuildに所属し,Guild間では,変更可能なオブジェクトを共有しない.ただし,不変オブジェクトや,クラスやモジュールは共有する.Guildは1つ以上のスレッドを持ち,異なるGuildは並列に実行する.Guild間の通信はチャネルを通して行い,変更可能なオブジェクトをGuild間で通信するにはコピーと移籍という2つの方式を提供する.移籍は,所属するGuildを変更する操作であり,単なるコピーより軽量となる.性能などの観点から,変更可能なオブジェクトを共有しなければならない場合,特別なデータ構造を提供することができる.本提案は,既存のアイデアの「いいとこどり」を狙ったものである.本発表では,この並行実行モデルの目論見について議論する.
著者
佐藤憲一郎 松井 祥悟
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.45, no.SIG12(PRO23), pp.93-93, 2004-11-15

UNIX等のマルチプロセスOSに実装されているプロセス生成用システムコールのforkを用いて,並列ガーベジコレクション(GC)を実現した.forkによって生成されたGCプロセスがコピーされたヒープ空間上で印付けを行うために,ライトバリアが不要となる.ごみ情報を通知するためにプロセス間通信が必要となるが,一般的な停止-回収型マークスイープGCは容易にこの方法へ変更することができる.パイプおよび共有メモリを用いた本GCをLispインタプリタに実装し,停止-回収型マークスイープGCと比較評価を行った.
著者
中島 一 増田 健 秋山 幸生
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.5, no.1, pp.32-32, 2012-03-28

企業の情報システムを構成するOSやハードウェアの更改に対して,それら環境の上で動作するソフトウェアの回帰検査技術を確立することが,急務となっている.特に近年は,技術の加速的な進歩によって,EOL(End Of Life)までの期間が短縮化している.それによって,ソフトウェアの動作環境の更改頻度が増加しているため,回帰検査の稼働を低減することが重要な課題である.この課題を解決するために,本研究ではGUIを持つソフトウェアを対象として,GUIアクセシビリティ技術により網羅的に自動操作し,更改前後の画面遷移を比較することで,画面遷移の回帰検査を自動化する.提案手法は,動作するソフトウェアさえあれば,画面遷移の網羅的な回帰検査が可能であるという特長がある.ソフトウェアの動作環境の更改にともなう回帰検査の現場では,検査期間,体制,開発成果物の管理状況などによって,たとえば,テストケース設計などを適切に行えない場合が数多くある.提案手法は,このような状況下にあるときの検査品質の向上にも貢献できる.本発表では,網羅的に自動操作するアルゴリズムと,提案手法を適用したときの実験結果を報告する.The one of important issues in many information departments is the regression checking of software for change of operating systems and hardware on which software run in information systems. The life of operating systems and hardware gets shorter because of the rapid progress of these techniques. Therefore information departments often must renew such environments in information systems and check whether same software run on new environments immutably. For information departments, reducing costs for the regression checking is a big challenge. To accomplish this goal, we propose the automation technique for the regression checking of screen transitions in software with the graphical user interface (GUI). In our method, we operate the GUI of software exhaustively using GUI accessibility techniques and compare obtained screen transitions between old environments and new ones. The feature of our method is that it enables us to check exhaustively with only running software. The many fields of such the regression checking usually cannot design test cases faithfully by several factors, for example the lack of testing time and the knowledge of test techniques, sloppy managements of development deliverables and so on. Our technique can check screen transitions thoroughly in such conditions. In this presentation, we report our automatic operation algorithm and experimental results.
著者
湯淺 太一
出版者
一般社団法人情報処理学会
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.44, no.4, pp.1-16, 2003-03-15
参考文献数
21
被引用文献数
2

Java 言語によって開発するアプリケーションに組み込んで使用することを主要目的として設計したLisp ドライバを紹介する.設計にあたって重視した点は,(1) Lisp 処理系の実装ノウハウを持たないJava プログラマにも機能の追加・削除・変更が容易に行えること,(2) コンパクトな実装であること,(3) 性能が極端に悪くないこと,などである.これらの条件を満たすために,Java の持つ機能を有効に利用し,大域的な制御情報を排除し,自然なJava コーディングを採用して,ドライバを開発した.このドライバは,高度なLisp プログラム開発支援ツールを備えていないが,単独でLisp処理系として利用することも可能である.Lisp の言語機能としては,IEEE Scheme のほぼフルセットをサポートしている.処理系のソースコードはわずか約3 500 行,100K バイト程度である.実行性能はけっして良くないが,許容できる範囲に収まっている.We present a Lisp driver which is designed to be used primarily as an embedded systemin Java applications. The key design issues include: (1) it should be easy to extend, modify,and delete the functionality even for a Java programmer who is not familiar with Lisp implementation,(2) the driver itself should be compact enough, and (3) the performance shouldbe comparable, though not excellent. In order to develop a driver that solves these issues,we highly made use of Java features, avoided global control mechanisms, and applied widelyacceptable Java coding. Although the driver is not equipped with powerful tools to supportLisp programming, it can be used as a stand-alone Lisp processor. It supports the functionalityof nearly the full-set of IEEE Scheme. The current implementation consists only of 3,500lines or 100 Kbytes of source code. The runtime performance is not excellent, but remains inan acceptable range.1.
著者
矢口 拓実 池袋 教誉 前田 敦司
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.9, no.1, pp.14-14, 2016-02-26

Packrat Parsingは,広範囲な構文規則を解析できる構文解析手法である.この手法では,解析が成功するまで構文を探索するバックトラックを用い,一度解析した解析対象文字列の位置と結果を保存するメモ化と呼ばれる手法によって解析時間を線形時間に保っている.既存の多くのPackrat Parsing実装は,PEG(Parsing Expression Grammer)で記述された文法規則を,再帰呼び出しによるバックトラックとメモ化表を用いるプログラムに変換するが,このような処理系の実行速度は,正規表現に基づいて表引きを用いた字句解析器と,同じく表引きとスタックを用いて処理を進めるLALR(1)などのパーサアルゴリズムの組み合わせと比較すると,一般的に劣っている.本発表では,Packrat Parsingの高速化のため,解析の意味が変化しない範囲で表引きによって構文解析を進める手法を検討する.本発表では,Packrat Parsingの処理の中に可能な限り表引きをとり入れることで,実行速度を向上させる手法を提案する.また,基本的な実行方式としてはMedeirosらの提案した仮想マシン方式を改良したものを採用している.既存の手法と比較した性能評価の結果を示す.