|
| 1 | +# Design Doc |
| 2 | + |
| 3 | +link: [DESIGN.md](https://github.com/online-judge-tools/.github/blob/master/DESIGN.md) of [online-judge-tools](https://github.com/online-judge-tools) organization |
| 4 | + |
| 5 | + |
| 6 | +## Objective |
| 7 | + |
| 8 | +`oj-verify` コマンドは、競技プログラミングのためのライブラリを現代的な方法で管理する機能を提供する。 |
| 9 | +特に、実際の競技プログラミングの問題を用いたテストを簡単かつ快適に実行できるようにする。 |
| 10 | + |
| 11 | +副次的な機能として、`oj-bundle` コマンドは、複数ファイルを単一ファイルにまとめて、現代的な形で書かれたソースコードをオンラインジャッジに提出できるようにする。 |
| 12 | + |
| 13 | + |
| 14 | +## Goals |
| 15 | + |
| 16 | +- ユーザのライブラリの信頼性を向上させること |
| 17 | + - これにはドキュメントを書かせることも含む |
| 18 | +- 競技プログラミング界隈における「ライブラリ」を「スニペットの寄せ集め」から脱却させ、それぞれの言語における標準的なライブラリに寄せていくこと |
| 19 | + |
| 20 | + |
| 21 | +## Non-Goals |
| 22 | + |
| 23 | +- ユーザのライブラリの機能性を向上させること |
| 24 | + - ライブラリ整備が楽しくなるような機能を追加することはあるが、あくまでバグがでにくくなる |
| 25 | + |
| 26 | + |
| 27 | +## Background |
| 28 | + |
| 29 | +競技プログラミング用のライブラリのテストは、実際にそれを利用する問題に提出してみて AC することを確認するという手法が一般的である。 |
| 30 | +これをすることは「ライブラリを verify する」と呼ばれている。 |
| 31 | +しかし、これはとても面倒な作業であり、大規模ライブラリになりファイル数が増えるとすべてきちんと実行するのは非現実的であった。 |
| 32 | + |
| 33 | +`oj-verify` コマンドの登場と普及の前は、ほとんどすべての競技プログラミング用のライブラリにテストは書かれていなかったことに注意したい。 |
| 34 | +そもそも、過去において、競技プログラミングの「ライブラリ」とは通常の意味のライブラリではなく、むしろ「スニペット集」と呼ばれるべきものであった。 |
| 35 | +ライブラリを `#include` 文などの標準的な機能で呼び出すことはまったく不可能で、エディタのスニペット機能の利用しての丸ごと埋め込みが通例であった。 |
| 36 | + |
| 37 | + |
| 38 | +### Coding styles |
| 39 | + |
| 40 | +TODO: もっと詳しく書く |
| 41 | + |
| 42 | + |
| 43 | +### End-to-end tests vs. unit tests |
| 44 | + |
| 45 | +競技プログラミングの文脈で end-to end tests や integration tests と unit tests の区別をするのは不適切である。 |
| 46 | + |
| 47 | +TODO: もっと詳しく書く |
| 48 | + |
| 49 | + |
| 50 | +## Overview |
| 51 | + |
| 52 | +TODO: 書く |
| 53 | + |
| 54 | + |
| 55 | +## Detailed Design |
| 56 | + |
| 57 | +TODO: 書く |
| 58 | + |
| 59 | + |
| 60 | +## Security Considerations |
| 61 | + |
| 62 | +システムケースの取得にログインが必要なオンラインジャッジがある (現在は yukicoder のみ)。 |
| 63 | +その利用にはアクセストークンの設定が必要であるが、ユーザの設定ミスによりこれが公開されるとインイデントとなる。 |
| 64 | +設定方法のドキュメントで encrypted secrets を使うよう要求するようにする。 |
| 65 | + |
| 66 | + |
| 67 | +## Privacy Considerations |
| 68 | + |
| 69 | +特になし。 |
| 70 | +ユーザが自分から公開しているコードについてのツールである。 |
| 71 | + |
| 72 | + |
| 73 | +## Metrics Considerations |
| 74 | + |
| 75 | +GitHub 上での検索結果 <https://github.com/search?q=online-judge-verify-helper+path%3A.github> からユーザ数のほぼ正確な値が得られる。 |
| 76 | +個別の機能の利用状況についての統計は得られない。 |
| 77 | + |
| 78 | +2020/09/20 時点では利用数はおよそ 100 個である。 |
| 79 | +競技プログラミング用のライブラリを内製しているユーザの総数を取得することは難しいため、利用割合などついては不明である。 |
| 80 | + |
| 81 | + |
| 82 | +## Testing Plan |
| 83 | + |
| 84 | +開発者による dogfooding を中心とする。 |
| 85 | +実行結果が GitHub Pages として公開されるという性質により、大まかなテストはそれで十分であろう。 |
0 commit comments