ベンチマーク・レビュー
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 | 合格 問題あり [中止 → 欠陥あり] 未審査 |
| 備考 | — |
| 評価設定の偏り | |
|---|---|
| 例 |
|
| 「欠陥あり」の既定のしきい値 | 特定のモデルに有利な、無視できない差が見つかった |
| Status | 合格 問題あり [中止 → 欠陥あり] 未審査 |
| 備考 | — |
† 利用できる課題が50を超えるベンチマークでは、50課題を無作為に抽出する(区分がある場合は区分で層化する)。観測された誤りの率が15〜25%なら、サンプルを100に広げる。利用できる課題が50以下のベンチマークでは、利用できるすべての課題を評価する。
3. 評価の質
これはすべてのベンチマークに満たしてほしい基準だが、これらの項目を省いたり満たさなかったりしても、必ずしも失格にはならない。
| 問い | 状態 | 備考 |
|---|---|---|
| 能力の引き出しと資源の妥当性:モデルに与えた資源(推論のトークン/ターンの予算、ツールへのアクセスなど)は、モデルが上限に近い性能を出すのに十分か | 十分 制約的 不当に制約的 不明 未審査 | — |
| 足場の公平性:リーダーボードはどの足場での結果を報告しているか | 共通の足場を共用 モデル専用の足場と共通の足場が混在 モデル専用の足場 未審査 | — |
| 汚染の証拠やリスクはあるか | 未審査 | — |
| 人間が課題をやり遂げられるかは評価されているか | すべての課題 代表的な課題のセット 実施方法が不適切(課題のセットが代表的でない、参加者の構成が妥当でない) 確認されていない 未審査 | — |
| スコアの範囲(推定できる場合) | 下限 —、上限 — 未審査 | — |
| 統計的な妥当性:モデルあたりの実行回数(エラーバーには5回以上を推奨) | モデルあたり — 回 不明 未審査 | — |
| 構成概念妥当性 | うたわれている能力を測っている うたわれている能力を部分的に測っている うたわれている能力を測っていない 未審査 | — |
免責事項
これは部分的なレビューである。欠陥のあるベンチマークについて公表しているしきい値を超える誤りが見つかった時点で、確認を打ち切った。
公開前にベンチマークの開発者に連絡を試みた。開発者がこのレビューへの回答を書いた場合は、ここにリンクを載せる。ベンチマークの開発者の方で、回答をここに掲載してほしい場合は、回答へのリンクを添えてreviews@epoch.aiまでメールでお知らせいただきたい。