SlideShare a Scribd company logo
Scalaによるドメイン特化言語を
使ったソフトウェアの動作解析
Scala Kansai summit 2015, 2015/08/01
山形賴之
自己紹介
• 産総研主任研究員
• もともと数学科でλ計算とかやっていた
• その流れでOCamlを
• Scalaは去年の12月くらいから
• http://staff.aist.go.jp/yoriyuki.yamagata/
ドメイン特化言語
ドメイン特化言語(DSL)
• 特定の目的に特化した言語
Make, shellスクリプト,Rails等のWebフレーム
ワーク…
• c.f. 汎用言語 Scala, Java, Python…
分類
• 外部DSL
• 内部(埋め込み)DSL(EDSL)
• 浅い埋め込み
• 深い埋め込み
Scala上でのEDSL - 利点
• 型安全性
• 演算子の型多態
• 暗黙の型変換
Scala上でのEDSL - 欠点
• 演算子の優先度が固定
• 演算子の結合性が固定
だんだんScalaの字句解析器と格闘している気がし
てくる
Modbat
Modbat
• MODel BAsed Testerの略
• Cyrille Artho(産総研)とArmin Biere(ヨハネス・
ケプラー大学)が共同開発
https://staff.aist.go.jp/c.artho/modbat/
普通のUnit test
ArrayList<Integer> testArrayList = new ArrayList<Integer>();
Iterator<Integer> it = testArrayList.iterator();
try {
testArrayList.remove(-1);
} catch (IndexOutOfBoundsException e) {
}
try {
it.next();
} catch (ConcurrentModificationException e) {
System.err.println("ArrayList: Should be NoSuchElementException!");
}
Modbatの考え方
• オブジェクトの状態遷移ルールを記述
• ランダムにテストシナリオ生成
テストモデル
import modbat.dsl._
class SimpleListModel extends Model {
val SUT = new java.util.ArrayList[Integer]() var n = 0
def add {
val ret = SUT.add(new Integer(choose(0, 10))) assert (ret)
n += 1
}
def remove {
require(n > 0) SUT.remove(choose(0, n)) n -= 1
}
def bounds { choose(
{ () => SUT.remove(-1) },
{ () => SUT.remove(n) } )
}
"main" -> "main" := add weight 10
"main" -> "main" := remove
"main" -> "main" := { assert (SUT.size == n) }
"main" -> "main" := { SUT.clear; n = 0 }
"main" -> "main" := bounds throws("IndexOutOfBoundsException")
実行結果
yoriyuki$ scala -classpath . openmodbat-3.1-dev.jar -s=7 -n=1000 --abort-
probability=0.02 model.ArrayListModel
[INFO] 1000 tests executed, 999 ok, 1 failed.
[INFO] One type of test failure:
[INFO] 1) java.util.ConcurrentModificationException at failingNext:
[INFO] 6945df2424fcf4ff
[INFO] model.ArrayListModel: 1 states covered (100 % out of 1),
[INFO] model.ArrayListModel: 11 transitions covered (100 % out of 11).
[INFO] model.IteratorModel: 2 states covered (100 % out of 2),
[INFO] model.IteratorModel: 9 transitions covered (81 % out of 11).
[INFO] model.ListIteratorModel: 2 states covered (100 % out of 2),
[INFO] model.ListIteratorModel: 26 transitions covered (89 % out of 29).
[INFO] Random seed for next test would be: 90606ba433a51041
Java 1.8 ArrayListの不整合な挙動
• list.remove(-1)したあと、iterator.next()する
• ConcurrentModificationExceptionがthrowされる
https://bugs.openjdk.java.net/browse/JDK-8114832
その他の事例
• Incremental SAT solverのテストスイーツ
• Apache Zookeeperのテストスイーツ(開発中)
CSP_E
CSP
• Communicating Sequential Processesの略
• Hoareにより70年代に並行プログラミングのモデ
ルとして提案
• 同期通信がプリミティブ
• c.f. CCS, π計算, アクターモデル…
CSP_E
• CSPライクに生成されるイベントを記述
• ログを監視、逸脱を報告
CSP_Eのよる記述例
現状
• メモリーを多量に消費して落ちる
• 非同期通信をどう表現するか?
• アクターモデルのほうが良かったかも
まとめ
• Scalaを使って型安全なEDSLを作る
• EDSLを使って、ソフトウェアテストを自動化
• 動的なテストシナリオ生成→Modbat
• 並行分散システムのログ監視→CSP_E
Ad

More Related Content

Viewers also liked (6)

Runtime verification based on CSP
Runtime verification based on CSPRuntime verification based on CSP
Runtime verification based on CSP
Yamagata Yoriyuki
 
新しい並行計算ライブラリ js-csp のご紹介
新しい並行計算ライブラリ js-csp のご紹介新しい並行計算ライブラリ js-csp のご紹介
新しい並行計算ライブラリ js-csp のご紹介
Tajima Itsuro
 
CSPによる並行システムの検証(2)
CSPによる並行システムの検証(2)CSPによる並行システムの検証(2)
CSPによる並行システムの検証(2)
Yamagata Yoriyuki
 
CSPによるコンカレントシステムの検証(1)
CSPによるコンカレントシステムの検証(1)CSPによるコンカレントシステムの検証(1)
CSPによるコンカレントシステムの検証(1)
Yamagata Yoriyuki
 
しかくのお勉強
しかくのお勉強しかくのお勉強
しかくのお勉強
Tatsuki SHIMIZU
 
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法
shigeki_ohtsu
 
Runtime verification based on CSP
Runtime verification based on CSPRuntime verification based on CSP
Runtime verification based on CSP
Yamagata Yoriyuki
 
新しい並行計算ライブラリ js-csp のご紹介
新しい並行計算ライブラリ js-csp のご紹介新しい並行計算ライブラリ js-csp のご紹介
新しい並行計算ライブラリ js-csp のご紹介
Tajima Itsuro
 
CSPによる並行システムの検証(2)
CSPによる並行システムの検証(2)CSPによる並行システムの検証(2)
CSPによる並行システムの検証(2)
Yamagata Yoriyuki
 
CSPによるコンカレントシステムの検証(1)
CSPによるコンカレントシステムの検証(1)CSPによるコンカレントシステムの検証(1)
CSPによるコンカレントシステムの検証(1)
Yamagata Yoriyuki
 
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法
shigeki_ohtsu
 

Similar to Scalaによるドメイン特化言語を使ったソフトウェアの動作解析 (20)

Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
Kota Mizushima
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
 
Scala界隈の近況
Scala界隈の近況Scala界隈の近況
Scala界隈の近況
takezoe
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Tomoharu ASAMI
 
Overview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker TackleOverview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker Tackle
Daisuke Kasuya
 
Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and design
Tomoharu ASAMI
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
Kota Mizushima
 
Kaleidox
KaleidoxKaleidox
Kaleidox
Tomoharu ASAMI
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
Tomoharu ASAMI
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
Takahiro YAMADA
 
Scalaノススメ
ScalaノススメScalaノススメ
Scalaノススメ
Yasuyuki Maeda
 
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
Kei Nakazawa
 
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
Jiro Hiraiwa
 
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間
Haruki Okada
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみた
Asami Abe
 
Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後
Kota Mizushima
 
2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ
kumake
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Yuto Suzuki
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
Kota Mizushima
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
 
Scala界隈の近況
Scala界隈の近況Scala界隈の近況
Scala界隈の近況
takezoe
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Tomoharu ASAMI
 
Overview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker TackleOverview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker Tackle
Daisuke Kasuya
 
Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and design
Tomoharu ASAMI
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
Kota Mizushima
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
Tomoharu ASAMI
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
Takahiro YAMADA
 
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
Kei Nakazawa
 
Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5Scala採用の背景とその後 @ hitomedia night #5
Scala採用の背景とその後 @ hitomedia night #5
Jiro Hiraiwa
 
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間
Haruki Okada
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみた
Asami Abe
 
Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後
Kota Mizushima
 
2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ
kumake
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
K Kinzal
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Yuto Suzuki
 
Ad

More from Yamagata Yoriyuki (16)

ヴォイニッチ手稿と私
ヴォイニッチ手稿と私ヴォイニッチ手稿と私
ヴォイニッチ手稿と私
Yamagata Yoriyuki
 
Consistency proof of a feasible arithmetic inside a bounded arithmetic
Consistency proof of a feasible arithmetic inside a bounded arithmeticConsistency proof of a feasible arithmetic inside a bounded arithmetic
Consistency proof of a feasible arithmetic inside a bounded arithmetic
Yamagata Yoriyuki
 
モデル検査紹介
モデル検査紹介モデル検査紹介
モデル検査紹介
Yamagata Yoriyuki
 
CSPを用いたログ解析その他
CSPを用いたログ解析その他CSPを用いたログ解析その他
CSPを用いたログ解析その他
Yamagata Yoriyuki
 
Consistency proof of a feasible arithmetic inside a bounded arithmetic
Consistency proof of a feasible arithmetic inside a bounded arithmeticConsistency proof of a feasible arithmetic inside a bounded arithmetic
Consistency proof of a feasible arithmetic inside a bounded arithmetic
Yamagata Yoriyuki
 
Consistency proof of a feasible arithmetic inside a bounded arithmetic
Consistency proof of a feasible arithmetic inside a bounded arithmeticConsistency proof of a feasible arithmetic inside a bounded arithmetic
Consistency proof of a feasible arithmetic inside a bounded arithmetic
Yamagata Yoriyuki
 
OCamlとUnicode
OCamlとUnicodeOCamlとUnicode
OCamlとUnicode
Yamagata Yoriyuki
 
Rubyでデータマイニング: RubyKaigi2007ライトニングトーク
Rubyでデータマイニング: RubyKaigi2007ライトニングトークRubyでデータマイニング: RubyKaigi2007ライトニングトーク
Rubyでデータマイニング: RubyKaigi2007ライトニングトーク
Yamagata Yoriyuki
 
Bounded arithmetic in free logic
Bounded arithmetic in free logicBounded arithmetic in free logic
Bounded arithmetic in free logic
Yamagata Yoriyuki
 
Bounded arithmetic in free logic
Bounded arithmetic in free logicBounded arithmetic in free logic
Bounded arithmetic in free logic
Yamagata Yoriyuki
 
UML&FM 2012
UML&FM 2012UML&FM 2012
UML&FM 2012
Yamagata Yoriyuki
 
Camomile - OCaml用Unicodeライブラリ
Camomile - OCaml用UnicodeライブラリCamomile - OCaml用Unicodeライブラリ
Camomile - OCaml用Unicodeライブラリ
Yamagata Yoriyuki
 
Camomile : A Unicode library for OCaml
Camomile : A Unicode library for OCamlCamomile : A Unicode library for OCaml
Camomile : A Unicode library for OCaml
Yamagata Yoriyuki
 
Google 日本語入力 TechTalk 2010
Google 日本語入力 TechTalk 2010Google 日本語入力 TechTalk 2010
Google 日本語入力 TechTalk 2010
Yamagata Yoriyuki
 
ヴォイニッチ手稿と私
ヴォイニッチ手稿と私ヴォイニッチ手稿と私
ヴォイニッチ手稿と私
Yamagata Yoriyuki
 
Consistency proof of a feasible arithmetic inside a bounded arithmetic
Consistency proof of a feasible arithmetic inside a bounded arithmeticConsistency proof of a feasible arithmetic inside a bounded arithmetic
Consistency proof of a feasible arithmetic inside a bounded arithmetic
Yamagata Yoriyuki
 
CSPを用いたログ解析その他
CSPを用いたログ解析その他CSPを用いたログ解析その他
CSPを用いたログ解析その他
Yamagata Yoriyuki
 
Consistency proof of a feasible arithmetic inside a bounded arithmetic
Consistency proof of a feasible arithmetic inside a bounded arithmeticConsistency proof of a feasible arithmetic inside a bounded arithmetic
Consistency proof of a feasible arithmetic inside a bounded arithmetic
Yamagata Yoriyuki
 
Consistency proof of a feasible arithmetic inside a bounded arithmetic
Consistency proof of a feasible arithmetic inside a bounded arithmeticConsistency proof of a feasible arithmetic inside a bounded arithmetic
Consistency proof of a feasible arithmetic inside a bounded arithmetic
Yamagata Yoriyuki
 
Rubyでデータマイニング: RubyKaigi2007ライトニングトーク
Rubyでデータマイニング: RubyKaigi2007ライトニングトークRubyでデータマイニング: RubyKaigi2007ライトニングトーク
Rubyでデータマイニング: RubyKaigi2007ライトニングトーク
Yamagata Yoriyuki
 
Bounded arithmetic in free logic
Bounded arithmetic in free logicBounded arithmetic in free logic
Bounded arithmetic in free logic
Yamagata Yoriyuki
 
Bounded arithmetic in free logic
Bounded arithmetic in free logicBounded arithmetic in free logic
Bounded arithmetic in free logic
Yamagata Yoriyuki
 
Camomile - OCaml用Unicodeライブラリ
Camomile - OCaml用UnicodeライブラリCamomile - OCaml用Unicodeライブラリ
Camomile - OCaml用Unicodeライブラリ
Yamagata Yoriyuki
 
Camomile : A Unicode library for OCaml
Camomile : A Unicode library for OCamlCamomile : A Unicode library for OCaml
Camomile : A Unicode library for OCaml
Yamagata Yoriyuki
 
Google 日本語入力 TechTalk 2010
Google 日本語入力 TechTalk 2010Google 日本語入力 TechTalk 2010
Google 日本語入力 TechTalk 2010
Yamagata Yoriyuki
 
Ad

Scalaによるドメイン特化言語を使ったソフトウェアの動作解析