goo blog サービス終了のお知らせ 

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

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

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

2025-06-30 07:02:51 | PHP
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

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

この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« さとうさおりさんの党から深... | トップ | 実感!シンギュラリティはも... »
最新の画像もっと見る

PHP」カテゴリの最新記事