ベンチマーク・レビュー

DeepSWE v1.1

原文:DeepSWE v1.1

ベンチマークの解説

DeepSWEはソフトウェアエンジニアリングのベンチマークで、課題は一から書き下ろされ、91のリポジトリにわたる。113課題のうち少なくとも23課題(20.3%超)に問題が見つかったため、このベンチマークを「欠陥あり(Flawed)」と判定した。

方法論

Opus 5とSol 5.6を使って、113課題すべてと実行軌跡(トラジェクトリ)の一部を一通り分析し、誤りを検出した。誤りはそれぞれ人手で監査し、確認した。まず偽陰性だけを調べ、23件を特定した時点で、ベンチマークを「欠陥あり」とするのに必要な証拠のしきい値を超えたため、ほかの種類の誤りは確認しなかった。

観察された23件の偽陰性のうち18件(78%)は、どの課題にも影響しうると私たちが考える誤りによるものだった。これらの事例では、モデルが既存のテストを編集していた。既存のテストを編集したり新しいテストを加えたりすると採点器が壊れることがあるが、モデルにはそれを知るすべがなく、そうしないようにという指示も受けていない。1

代表的な誤り

提出物を採点するとき、検証器は新しいコンテナの中でエージェントが提出した変更を適用する。また、非公開のテストを追加し、課題によって古くなる既存のテストを更新する。その前に、検証器はエージェントがこれらのファイルに加えた変更を破棄する。この検証の仕組みのせいで、採点の処理が失敗することがある。主な失敗の仕方は次のとおりである。

  • シンボル定義の重複:エージェントがシンボル(たいていはテスト関数)を定義し、検証器のテストも同じパッケージの中で同じシンボルを定義している。例:onedump-dump-encryption-pipelineの課題を解く際、Fable 5はencryption/config_test.goを変更し、encryptionパッケージの中にTestLoadKeyFromEnv、TestLoadKeyFromFile、TestLoadKeyFromLiteralを定義した。検証器は同じパッケージの中で同じ名前の非公開テストを定義しているため、再宣言のエラーが起きる。
  • エージェントのテストが、検証器が削除するシンボルに依存している:エージェントは、検証器が元に戻すファイルの中でシンボルを定義し、検証器が手を付けない別のファイルからそれを参照している。例:actionlint-action-pinning-lintの課題を解く際、Sol 5.6 maxはrule_action_pinning_test.goの中にヘルパー関数actionPinningWorkflowを定義し、ほかのテストファイルからそれを呼び出した。検証器は同じ名前のテストファイルを追加するため、エージェントによる関数の定義が消え、未定義のエラーが起きる。

誤り

課題誤りの種類備考影響を受けたDatacurveの試行
actionlint-action-pinning-lint偽陰性検証器はrule_action_pinning_test.goを削除するが、command_test.goとlinter_test.goはそこにあるヘルパーactionPinningWorkflowを呼び出したままである。そのため、テストパッケージのコンパイルが失敗する。Sol 5.6 max
anko-typed-variable-bindings偽陰性モデルのvm/vmTypedBindings_test.goと非公開のvm/typed_bindings_test.goの両方がTestTypedBindingsDeclarationsを定義しているため、テストパッケージのコンパイルが失敗する。Opus 5 max
eicrud-keyset-pagination-cursor偽陰性モデルはshared/CrudErrors.tsにCURSOR_*のエラーを追加するが、検証器は生成済みの古いshared/CrudErrors.jsをビルドし直さずにJestを実行する。そのため、新しいエラーは未定義になる。Opus 5 max
Kimi K3 max
etree-xml-diff-patch偽陰性検証器はdiff_test.goを削除するが、diff_edge_test.goはそこにあるヘルパーmustDocとdocWriteを呼び出したままである。そのため、P2Pのテストパッケージのコンパイルが失敗する。Qwen3 8 Max xhigh
geo-shapeindex-serialization偽陰性モデルのshapeindex_coder_test.go、shapeindex_coding_test.go、またはshapeindex_encode_decode_test.goと、非公開のshapeindex_encode_test.goが、同じヘルパーencodeDecodeIndexを定義している。そのため、テストパッケージのコンパイルが失敗する。Opus 4.8 max
Opus 4.8 max
Qwen3 8 Max xhigh
Opus 4.8 xhigh
go-critic-doc-link-checker偽陰性非公開のパッチはlinttest.goのstripDirectivesを、/*!の目印をすべて取り除くように変更する。これにより、残っているposition_tests.goとuppercase_alias_tests.goのフィクスチャが無効になり、それらのフィクスチャのせいでTestCheckersが失敗する。Sol 5.6 max
ink-grid-box-layout偽陰性配置のアルゴリズムは指示で指定されていない。「sparse」のアルゴリズム(CSSの既定)を選ぶモデルもあるが、非公開のテストは「dense」の配置を求めている。Opus 5 max
Opus 5 high
Fable 5 max
Fable 5 max
Fable 5 max
Fable 5 high
Fable 5 high
Gemini 3 7 Flash medium
Gemini 3 7 Flash medium
Fable 5 medium
Luna 5.6 xhigh
Sol 5.6 low
kcp-go-multiplexed-kcp-streams偽陰性検証器はmux_test.goを削除するが、mux_edge_test.go、mux_extra_test.go、またはmux_kcp_test.goは、そこにあるヘルパーmuxPair、pipeSessions、waitForのいずれかを呼び出したままである。そのため、テストパッケージのコンパイルが失敗する。Deepseek V4 Pro max
Opus 4.8 xhigh
Opus 4.8 high
Opus 4.8 medium
obsidian-linter-auto-table-of-contents偽陰性テストIDは、新しいプラグインの英語名から生成される。プラグインを「Auto TOC」と名付けるモデルもあるが、検証器は「Auto Table of Contents」を想定している。Sol 5.6 max
Fable 5 max
Sol 5.6 high
onedump-dump-encryption-pipeline偽陰性モデルが書いたテストファイルと非公開のテストファイルの両方が、パッケージレベルの同じテスト関数(TestConfigValidateCaseInsensitiveSource、TestDecryptReaderLazyInit、TestJobEncrypted)のうち一つ以上を定義している。そのため、該当するパッケージのコンパイルが失敗する。Opus 5 xhigh
Opus 5 high
Sol 5.6 max
Fable 5 xhigh
Fable 5 max
Terra 5.6 max
Kimi K3 max
Grok 4 6 medium
Grok 4 6 xhigh
Gemini 3 7 Flash high
Grok 4 6 high
GPT 5.5 high
Deepseek V4 Pro max
Sol 5.6 medium
Opus 4.8 max
Qwen3 8 Max xhigh
Sonnet 5 max
Glm 5 2 max
Sonnet 5 medium
Sonnet 4.6 high
opa-template-string-reconstruction偽陰性モデルのcmd/eval_test.goと非公開のcmd/eval_partial_template_string_test.goの両方がTestEvalPartialSourceReconstructsTemplateStringsを定義しているため、CLIのテストパッケージのコンパイルが失敗する。Sol 5.6 high
Grok 4 6 medium
Grok 4 6 xhigh
Grok 4 6 xhigh
Grok 4 6 high
participle-grammar-conflict-analysis偽陰性モデルのanalysis_test.goと非公開のanalyze_test.goの両方が、TestAnalyzeFirstFirstConflict、TestAnalyzeFirstFollowThroughEmbedding、TestAnalyzeUnreachableAlternativeを定義している。そのため、テストパッケージのコンパイルが失敗する。Fable 5 xhigh
prometheus-transactional-reload-status偽陰性モデルのtransactional_reload_integration_test.goと非公開のreload_state_test.goが、パッケージレベルで同じ名前を持つ別々のヘルパーgetReloadStatusを定義しているため、テストパッケージのコンパイルが失敗する。Deepseek V4 Pro max
returns-validated-error-accumulation偽陰性非公開のパッチがtests/test_validated/__init__.pyを追加するため、pytestはこのファイルとtests/test_validated/test_validated_functions/test_validated.pyを同じtest_validatedという名前でインポートしてしまう。そのため、テストの収集が中断する。Grok 4 6 xhigh
skrub-duration-encoding偽陰性モデルはskrub/tests/test_table_vectorizer.pyにあるtest_auto_castとtest_cleaner_dtypesのパラメータリストの途中に_get_durations_dataframeを追加する。pytestが位置に基づいて付けるexpected_typesのIDがずれるため、採点器は古いIDが欠けていると判定する。GPT 5.4 xhigh
sqlfmt-create-table-ddl-formatting偽陰性create table name(は、開き括弧がテーブル名と同じ行でその直後に続くという明記された要件を満たしており、プロンプトにあるほかの「括弧の前に空白を入れない」規則とも整合する。ところが非公開のフィクスチャは、テーブル名と開き括弧の間に空白を入れたcreate table name (を求めている。Sol 5.6 max
Sol 5.6 xhigh
Sol 5.6 high
task-task-graph-export偽陰性ある実行では、graph_feature_test.goと非公開のgraph_test.goの両方が、TestGraphCycle、TestGraphReverse、TestGraphDefaultTask、TestGraphWildcardという名前のテストを定義している。別の実行では、graph_test.goを置き換えたことで、task_test.goがまだ使っているGraphTestとGraphTestOptionが消える。どちらの場合も、テストパッケージのコンパイルが失敗する。Opus 5 high
Glm 5 2 max
tengo-destructuring-bindings偽陰性モデルのdestructuring_ext_test.goと非公開のdestructuring_test.goの両方がrunDestructuringとexpectDestructuringErrorを定義しているため、テストパッケージのコンパイルが失敗する。Opus 5 high
testem-bail-on-test-failure偽陰性非公開のテストは、警告の文面に「invalid」という語が含まれている場合にだけそれを受け入れる。これは指示に書かれていない要件である。Qwen3 8 Max xhigh
updo-policy-alerting偽陰性モデルが書いたテストと非公開のテストが、パッケージレベルの同じテスト名(TestLoadConfigAlertPolicyDefaults、TestHandleWebhookDecisionWithHeaders、TestTrackerSSLAndCooldown、TestHandleWebhookDecisionのいずれか)をそれぞれ独自に定義している。該当するパッケージのコンパイルは失敗するが、検証器はテストが欠けていると報告する。Kimi K3 max
vulture-persistent-analysis-cache偽陰性求められたキャッシュの設定をDEFAULTSに追加すると、pytestが自動生成するIDが変わる。検証器はそれらのテストが欠けていると判断し、提出物を不合格にする。Sol 5.6 max
Sol 5.6 max
Sol 5.6 max
Sol 5.6 xhigh
Sol 5.6 xhigh
Sol 5.6 xhigh
Fable 5 xhigh
Fable 5 xhigh
Fable 5 xhigh
Fable 5 xhigh
Fable 5 max
Fable 5 max
Fable 5 max
Sol 5.6 high
Sol 5.6 high
Fable 5 high
Fable 5 high
Fable 5 high
Fable 5 high
yaegi-go-embed-directives偽陰性モデルのinterp/interp_embed_test.goと非公開のinterp/embed_test.goの両方が、TestEmbedString、TestEmbedBytesなど、TestEmbed*という名前のテストを定義している。そのため、テストパッケージのコンパイルが失敗する。Opus 5 xhigh
Qwen3 8 Max xhigh
ytt-jsonpath-query-api偽陰性モデルのpkg/orderedmap/query_test.goと非公開のjsonpath_test.goの両方がmを定義し、モデルのpkg/yttlibrary/jsonpath_test.goと非公開のjsonpath_starlark_test.goの両方がTestJSONPathStarlarkQueryOneを定義している。そのため、該当するパッケージのコンパイルが失敗する。Gemini 3 7 Flash medium
Grok 4 6 low

評価基準

1. 審査可能性

水準意味状態
完全すべての課題と採点ロジックを確認でき*、各モデルに使ったハーネス/APIの設定(推論努力、トークン/時間の上限、ツールへのアクセス、システムプロンプト)がすべて開示されている [2へ進む]
部分的課題の代表的なサンプルと採点ロジックを確認でき、ハーネス/APIの設定がすべて開示されている [2へ進む]
不十分確認できる課題や採点ロジックが限られている、偏っている、またはまったくない。ハーネス/APIの設定が開示されていない [中止 → 情報不足(NEI)]

* 一般に公開されているか、審査者に非公開で提供されていればよい。

2. 採点

これは「検証済み(Verified)」と判定されるのに必要な最低限の基準である。これらの項目のどれか一つでも満たさなければ、判定は「欠陥あり(Flawed)」となる。

採点
例
  • 書かれたとおりでは正しく答えることが事実上不可能(例:課題の指定が不十分、隠れた要件がある、ファイル/ツールが欠けている)
  • 偽陰性(例:採点が厳しすぎる、正解が古いか誤っている、変わりうる外部の現在の状態に依存している、エージェントと無関係にサンドボックスが故障する)
  • 偽陽性(例:採点が甘い、報酬ハッキングができる環境である、採点ロジックの誤りを突いたりハーネスやウェブから答えを取り出したりする近道で、うたわれている技能を使わずに済ませられる)
  • 課題が、うたわれている能力をまったくと言ってよいほど測っていない
「欠陥あり」の既定のしきい値確認したサンプル†の20%以上に誤りがある、または大規模に採点を損なう問題がある
Status 合格 問題あり [中止 → 欠陥あり] 未審査
備考—
ベンチマークの一貫性
例
  • バージョンを上げずに、採点器、指示、正解が変更された
「欠陥あり」の既定のしきい値リーダーボードに、異なるバージョンによる比較できない結果が混在している
Status 合格 問題あり [中止 → 欠陥あり] 未審査
備考—
能力の引き出し
例

モデルの能力を引き出す条件が極めて制約的で、しかもその制約がベンチマークの主眼ではない。

  • 課題の規模に比べて資源が足りない(トークン/ターン/時間の上限、サンドボックスの資源)
  • コンテキストの管理が不適切
  • エージェント用の環境を用意するのが自然な場面で、それがない
  • エージェント型のベンチマークで、エージェントの意思によらない打ち切りが多すぎる
「欠陥あり」の既定のしきい値課題に対する妥当な代替の設定と比べて、性能が大幅に下がっている
Status 合格 問題あり [中止 → 欠陥あり] 未審査
備考—
評価設定の偏り
例
  • 計算資源/トークンの予算が不均等
  • 足場(scaffold)の選び方が不公平(例:一部のモデルだけが最適化されている)
「欠陥あり」の既定のしきい値特定のモデルに有利な、無視できない差が見つかった
Status 合格 問題あり [中止 → 欠陥あり] 未審査
備考—

† 利用できる課題が50を超えるベンチマークでは、50課題を無作為に抽出する(区分がある場合は区分で層化する)。観測された誤りの率が15〜25%なら、サンプルを100に広げる。利用できる課題が50以下のベンチマークでは、利用できるすべての課題を評価する。

3. 評価の質

これはすべてのベンチマークに満たしてほしい基準だが、これらの項目を省いたり満たさなかったりしても、必ずしも失格にはならない。

問い状態備考
能力の引き出しと資源の妥当性:モデルに与えた資源(推論のトークン/ターンの予算、ツールへのアクセスなど)は、モデルが上限に近い性能を出すのに十分か 十分 制約的 不当に制約的 不明 未審査—
足場の公平性:リーダーボードはどの足場での結果を報告しているか 共通の足場を共用 モデル専用の足場と共通の足場が混在 モデル専用の足場 未審査—
汚染の証拠やリスクはあるか 未審査—
人間が課題をやり遂げられるかは評価されているか すべての課題 代表的な課題のセット 実施方法が不適切(課題のセットが代表的でない、参加者の構成が妥当でない) 確認されていない 未審査—
スコアの範囲(推定できる場合)下限 —、上限 — 未審査—
統計的な妥当性:モデルあたりの実行回数(エラーバーには5回以上を推奨)モデルあたり — 回 不明 未審査—
構成概念妥当性 うたわれている能力を測っている うたわれている能力を部分的に測っている うたわれている能力を測っていない 未審査—

免責事項

これは部分的なレビューである。欠陥のあるベンチマークについて公表しているしきい値を超える誤りが見つかった時点で、確認を打ち切った。

公開前にベンチマークの開発者に連絡を試みた。開発者がこのレビューへの回答を書いた場合は、ここにリンクを載せる。ベンチマークの開発者の方で、回答をここに掲載してほしい場合は、回答へのリンクを添えてreviews@epoch.aiまでメールでお知らせいただきたい。

注

← ベンチマーク一覧へ

非公式の日本語訳公式ページ(英語):epoch.ai/benchmarks/deepswe/review