ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

PHPUnitの作り方とComposerが「依存解決」のためにSATソルバー使っている話を聞いてきた

6月28日のPHPカンファレンスの話。
 ほかにも、PHPUnitの作り方の話を会場で、
 Composerの「依存解決」の話を家で(YouTubeで)
聴いたので、その内容をメモメモ

-----------------------------------------------------

■ちいさくPHPUnitを作り、仕組みと拡張ポイントを

・自己紹介

・PHP Unitとは
 単体テスト用
 多様なアサーション
 読みやすいテストコードは適切なアサーション
 AssertSame,assertEqualsが中心→つくれるのでは

・物語
 1.樽を知る
 2.大は小を兼ねる

1.ちいさくつくる
 どのようぬつくるか
  アサーションを作る
 テスト実行スクリプトを作る

 AssertSame,AssertEquals作成でも

2.拡張ポイントを探る
 拡張性=設計パターン
 デザインパターンに注目

 拡張ポイント
 いろんなアサーション
 テストの前後処理
 . Fなどの結果出力

 PHPUnitのつくり
  assertThatに渡している。
   ここで、evaluateしている

 Strategyパターンを使っている

・テストの前後処理
 runBareの中で読んでる
 テンプレートメソッドパターン

・Fの出力
  runBareのnaka
  Observerパターンを使っている

-----------------------------------------------

■Composerが「依存解決」のためにどんな工夫をしているか

・組み合わせ(依存解決)は爆発的に
 →SATソルバー
 「いくつかのルールを全部守れるか?」を調べるロボット

 問題を扱いやすい形に変換
   幅指定を列挙に変換 
   間接パッケージの情報を追加

 A→(X1|X2|X3)の形へ
   ↓
 CNF連言標準形
   ↓
 節、クローズ=PHPではルールの世界に変換(リテラル)
   ↓
 ネットワーク上に整理
   ↓
 任意のノードを借り決めしてスタート
   ↓
 矛盾したら出直し
   レベルという概念
   若いところから見ていく
   コンフリクトクローズラーニング
   ↓
 最終的な組み合わせを決める

・超ミニLT
 Two Watched Literal 2つのリテラルを監視
 Pool Optimizer かき集めたパッケージを管理しておく:pool
 マップのキー最適化
 Spl double Linked List
 gc_disable

----------------------------------------------------------------------