Skip to content

Commit 2c42ce8

Browse files
authored
Merge pull request #323 from online-judge-tools/update-design-doc
Update documents
2 parents 240f6e7 + 2f47c3c commit 2c42ce8

File tree

2 files changed

+39
-14
lines changed

2 files changed

+39
-14
lines changed

CONTRIBUTING.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Contribution and Hacking Guide
2+
3+
links:
4+
5+
- [CONTRIBUTING.md](https://github.com/online-judge-tools/.github/blob/master/CONTRIBUTING.md) of [online-judge-tools](https://github.com/online-judge-tools) organization
6+
- [DESIGN.md](https://github.com/online-judge-tools/verification-helper/blob/master/DESIGN.md)
7+
8+
9+
## How to add a new language / 新しい言語を足すには
10+
11+
Do the following steps:
12+
13+
1. Open an issue about the support for your language
14+
1. Make a file `onlinejudge_verify/languages/YOUR_LANGUAGE.py`
15+
- Implement a sub-class of `onlinejudge_verify.languages.models.Language`
16+
- Implement a sub-class of `onlinejudge_verify.languages.models.LanguageEnvironment`
17+
1. Register your language at `onlinejudge_verify/languages/list.py`
18+
1. Add tests to `tests/` dir if possible
19+
1. Update documents `.verify-helper/docs/static/document.md` (or `.verify-helper/docs/static/document.ja.md`)

DESIGN.md

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,32 @@ link: [DESIGN.md](https://github.com/online-judge-tools/.github/blob/master/DESI
3535
ライブラリを `#include` 文などの標準的な機能で呼び出すことはまったく不可能で、エディタのスニペット機能の利用しての丸ごと埋め込みが通例であった。
3636

3737

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-
5038
## Overview
5139

52-
TODO: 書く
40+
内部での処理は大きく分けて以下の 4 つの部分からなる。
41+
42+
1. テストの実行 (`oj-verify run`)
43+
- システムケースの取得
44+
- テストの実行
45+
- キャッシュ (`timestamps.*.json`) の管理
46+
1. 言語個別の処理
47+
- コンパイルと実行
48+
- ファイル間の依存関係解析
49+
- 単一ファイル化 (`oj-bundle` などから使われる)
50+
1. ドキュメントの生成 (`oj-verify docs`)
51+
- ドキュメント生成に必要なメタデータの収集
52+
- ドキュメントのための Markdown ファイルの書き出し
53+
- 実際の HTML の生成 ([Jekyll](http://jekyllrb-ja.github.io/) による)
54+
1. GitHub との通信
5355

5456

5557
## Detailed Design
5658

57-
TODO: 書く
59+
- テストの結果はキャッシュされる。これは速度の改善のためである。大規模なライブラリになると数百ファイルに達するため、全ファイルについて毎回テストを再実行することは快適でない。
60+
- ドキュメントを生成することは「ドキュメントを書くことをユーザに促す」および「カバレッジを可視化する」という働きをする。
61+
- 言語個別の処理は [models.py](https://github.com/online-judge-tools/verification-helper/blob/master/onlinejudge_verify/languages/models.py) にある `Language` class と `LanguageEnvironment` class の sub-class として実装される。`Language` class と `LanguageEnvironment` class の区別は、ひとつの言語 (例: C++) が複数の環境 (例: G++, Clang, MSVC++ など) と関連付けられることから来る区別である。
62+
- 競技プログラミングの文脈では end-to-end tests や integration tests と unit tests の区別が比較的曖昧である。
63+
通常の文脈では end-to-end tests などは unit tests と比べて「実際と似た環境で動かせる」という利点と「遅い」「不安定」「失敗の原因が分かりにくい」という欠点がある ([参考](https://testing.googleblog.com/2015/04/just-say-no-to-more-end-to-end-tests.html))。しかしこれは通常の end-to-end tests が「GUI の操作」「ネットワーク通信」「ファイル書き込み」などの複雑で非純粋な要素を含むからである。競技プログラミングにおいてはそのような要素はないのでテストの結果は常に「安定」しており、またファイルの依存関係が疎であることを利用して最適に差分のみテストをすることで十分に「速い」テストが可能である。このため競技プログラミングにおいては end-to-end tests の欠点とされていた特徴の多くは隠れ、unit tests との差も曖昧となる。
5864

5965

6066
## Security Considerations

0 commit comments

Comments
 (0)