日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

JavaScriptを有効にし、Cookieを受け入れ、以下のブラウザを使うことで完全なコンテンツが楽しめます。
Mozilla Firefox 3.0(Get Firefox)・Opera 9.6・Safari 3.2・Lunascape 4/5(Gecko)・Lunascape 5(WebKit)
Internet Explorer 7/8とそれを使うIEコンポーネントブラウザ(Lunascape・Sleipnirなど)

タイミングがちょっと変化したらNG

最近、以前の開発で実行していた論理シミュレーションを開発中の製品に移植して実行している。

何も手を入れずに動くものもあるし、信号名などの変更を反映させればそのまま動くものもあるし、

今回、仕様変更になった部分は期待値など修正した上で実行しないといけない。

とはいえ、修正ポイントが明確ならば、それを修正した上でOKかNGかという話なので、そんなに難しくはない。


ところが、この以前の開発で作られたテストの中には、あまり出来が良くないものもある。

例えば、タイマレジスタの動作確認を行うテストがあったのだが、

とりあえず通してみてNGになったから、どういうこっちゃと思ってテストの中身を見たら、タイマレジスタの値を決め打ちで確認しているだけ。

おそらく、起動に要する時間を考慮して、起動直後に読み出して正しい値が入っているのか確認したのだろうけど、

システム構成の変更に伴い、起動時間も大きく変わったので、当然のことながら一致しない。

というか、このテストはちゃんとタイマレジスタの機能を網羅的に確認するものになっているのかというと、かなり怪しいんだよね。

というわけで、おそらくこのテストは捨てて、全く新しいテストを作る必要があるのだろう。


さすがにこれはあまりに雑だが、時間決め打ちというテストはけっこうある。

例えば処理Aの結果を確認するのに、処理Aの開始トリガをかけて、固定時間待って、結果が格納されるレジスタを確認するというのがある。

ところが処理Aの開始トリガをかけてから、実際に処理が完了するまでの時間が変化すると、処理Aが完了していない段階でレジスタを見に行くような場合も発生する。

こういう問題はけっこう発生しているのだが、実は処理A自体の動作時間が変わったことが原因ではなさそうで、

シミュレーション環境が変化したことで、トリガをかけてから実際に処理が開始されるまでの時間が変わったのが原因っぽいのよね。

とはいえ、時間決め打ちじゃなくて、外部仕様に基づいて完了信号の出力タイミングなどを基準にした方がよいことは確かで、

というわけで、この手の問題については、できるだけ時間決め打ちにならないように修正を行っている。


もっとも時間決め打ちになるのもやむを得ない場合もあるんだけどね。

サブシステムAとサブシステムBからメモリコントローラに同時にアクセスした場合の挙動を確認するテストがあるのだけど、

これも各サブシステムのアクセス動作開始のタイミングが時間決め打ちになっている。

各サブシステムの内部動作依存なので、外部仕様から明確なタイミングを規定できないんだよね。

なのでこのテストはタイミングの微調整を前提に作られている。

実行時に想定したタイミングでアクセスが入っているかチェックして、想定通りでなければNGにしてしまうと。

NGになった場合は、タイミングの微調整を行って、正しいタイミングでアクセスが入るようにすると。

そこまで考えられたものだったらよかったんだけどさ。


以前、テストの期待値で他の人と言い争いになったことがあった。

エラーログレジスタなのだが、特定のエラー時には仕様上、値が不定になるというものだった。

タイミングが少し変わるだけで、格納される値が変わってしまうというという代物で、それでテストNGが発生したんだよね。

でも仕様上は不定値なわけだから、僕は不定値となるレジスタは全てチェック対象から外しましょうと提案した。

不定値になるレジスタをチェック対象から全て外せばタイミング非依存になるので。

そしたら、もともとこのテストを作った人は、不定値のレジスタでも確認すべきだと主張してきた。

確かにレジスタAに格納される値は不定値かもしれないが、レジスタBにはレジスタAの値と同じ値が格納される仕様だから、そこは確認するようにとのことだった。

不定にならない場合はレジスタAもレジスタBも正しい値が入る必要があるのだが、不定値になる場合はこの値は使わないので食い違ってもよいような気はするのだが……

というわけでその指示に従ってテストを作り直したら、案の定というべきか、不定値になる場合にはレジスタAとレジスタBの値が食い違う例が発見された。

これを修正するのかはよくわからない。レジスタAが不定値の場合はレジスタBも不定値ですと定義すればおしまいだと思うのだが。


作り方次第では非常に再現性が高いテストも作れるんだけど、

なににおいても万全のテストを作るのはなかなか大変なことで、実際にはいろいろ妥協もある。

想定通りのタイミングでアクセスが入っているかチェックして、NGの場合は微調整をしてもらうというのは妥協の一例だろう。

そこまで考えられていたらあまり文句はないのだが。


Author : hidemaro
Date : 2018/03/09(Fri) 23:51
電気・数学・物理 | Comment | trackback (0)

Tools