vgs-cpuをgithub上でモリモリ設計中。
https://github.com/suzukiplan/vgs-cpu
この記事執筆時点のcommit
https://github.com/suzukiplan/vgs-cpu/commit/29f8cbe684dd1489fcb3a8b3cfffbbc52a6757cd
CPUのコードを書くのって完全なる単純作業です。
こういう単純作業だと割りとバグを作りこみ易いです。
なので、こういう場合はテストを書くのが重要。
という訳で、このリポジトリを git clone して make を叩けばテストを流すようにしました。(※Mac or Linux限定で、Windowsには対応していませんが...)
プログラムを書いたことがあれば、「テスト書け」なんて耳にタコができるほど言われることで、馬の耳に念仏状態かもしれませんが。
テストを書く目的は、
1. バグの早期摘出
2. エンハンス時のデグレード防止
の2つしかありません。
1の理由は、後工程で見つけると原因を特定するのに掛かる時間(摘出コスト)が指数的に増加するためです。これは古典的なウォータフォールだろうが、アジャイルだろうが同じことです。
vgs-cpuのレジスタAに対するスタック操作(push/pop)、メモリ移動(load/store)、インクリメント、デクリメント、NOT演算のコード規模はだいたい100ステップぐらいですが、テストを書いてみて摘出できたこの部分のバグは以下の3件です。
https://github.com/suzukiplan/vgs-cpu/commit/9b4f49235a60d63202a0f753d1233768284f4810
https://github.com/suzukiplan/vgs-cpu/commit/f31ddfbf9f355a590e78448c858f905e1c81e47e
https://github.com/suzukiplan/vgs-cpu/commit/53ca01c247086f886758a4bb7dfc3a4931849558
これらを早期に潰すことで、最小のコストで品質を担保できます。
で、スタック操作(push/pop)、メモリ移動(load/store)の命令群には、この後メモリ検査のエンハンスが入る予定ですが、これらのテストを全て自動化しておくことで、エンハンスを入れた時にデグレードが発生しないことを保障する訳です。
ちなみに、「単純作業だと割りとバグを作りこみ易い」と上述しましたが、だいたいの人が1ks(千行)のプログラムを書いた時に作り込むバグの件数というのは、統計的に10〜15件なので、100行で3件(ksあたり30件)という具合に実際多い。
ただし、ある程度作り慣れてくると、バグの作り込みパターン(バグ知見)が脳内に蓄積されることで(主に同件の)バグを作り込む確率が減ります。
プログラムを書く時、面倒臭いから 全部作ってから後でテストすれば良い という考え方の人が結構居ると思います。少し話は飛びますが、プロジェクトの特性として「新規性」というものがありますが、これは要するに「無いものを新たに作る」という事です。既にあるものなら、わざわざ新規に作らなくても既にあるものを使えば良いですからね。で、新規性という特性を持つ以上、バグ知見が十分に足りていない可能性がものすごく高いという事は自明です。(成熟度が低い組織だったり新規性が高い分野のものづくりをすると、似たようなものを作るケースも多々ありますが)
だから、今回のvgs-cpuの開発では、スタック操作(push/pop)、メモリ移動(load/store)、インクリメント、デクリメント、NOT演算のだいたい100ステップぐらいのコードが出来たところで、一旦開発を止めて徹底的にテストすることにしました。バグ知見が十分に溜まったところであれば、テストを省略しても問題無いと思います。バグ知見が十分に溜まったところでもガリガリテストを書くのは過剰品質(テストを作るコストが品質に寄与しない)という感じになります。
「テスト書け」が馬の耳に念仏になる原因はソコにあります。
2016年6月5日日曜日
登録:
コメントの投稿 (Atom)
合理的ではないものを作りたい
ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...
-
MSX版「覇邪の封印」の攻略情報を書きます。 MSX版には、パッケージに布製の地図とフィギュアが同梱されていますが、これらは単なるオマケではなく、ゲームをプレイするために必要なツールでして、説明書でもフィギュアの左足部分を現在位置に置いてプレイする旨が指示されています。実際に地図...
-
家電量販店のPCゲームパッドコーナーに行くと、軒並みWindows用のゲームパッドしか売っていません。稀に「Mac OS X対応」を謳っているゲームパッドも置いてありますが、実際に動かしてみると妙に誤動作をして更にガッカリしたりとか(経験済み)。 色々と試してみたのですが、最...
-
MSX開発の関係者を匂わせるタイトルかもしれませんが、私は全然関係ない(外野)です。 私はマイコン世代(死語)の人間ですが、実はリアルタイムでMSXは触ったことすら無いです。私が最初に触ったパソコンはPC-9801(16bit機)で、8bit機のMSXは触る機会すらありませんでし...
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。