今回はABAP開発において基本的なことではありますが、一番良くある不具合原因でもあるCLEAR漏れについて書きたいと思います。新人ABAPerでも知っていますが、ベテランでも気を抜くとやってしまいがちなミスでもあるので、改めて注意喚起と自分への戒めとして書いておきます。
3本指に入る不具合原因がCLEAR漏れ
何年ABAP開発に携わっていても出してしまうのがCLEAR漏れです。これは潜在しているものを含めると1つのプロジェクトの中でも相当な数が発生しているはずです。
最近はクリーンコアという考え方があるので、S/4HANA本体には可能な限り追加開発はしないようにする方針である場合も増えてきたのですが、それでも全く追加開発しないケースも少ないですよね。そうすると、ABAPを書いて機能を拡張していくわけですが、人間がコードを書く以上どうしてもミスが発生します。多くはテストで潰していくことになるのですが、複数データの場合でないと発生しなかったり、何かの条件を満たした時にしか発生しないようなものだと、なかなか見つからなかったりします。
なので、コードを書く時にできるだけよくある不具合は起きないようにチェックするわけですが、その中でも1番簡単で影響の大きくなりがちな不具合を事前に食い止めるためにできることがCLEAR漏れのチェックです。
LOOPの中で更新する変数はクリアの要否を必ずチェック
CLEAR漏れが起きやすい具体的な箇所としては繰り返し処理です。
DOやWHILEなど繰り返し処理をするための命令はいくつかありますが、ABAPで一番よく使うのはLOOPだと思います。LOOPの中で使う変数のクリアを忘れてしまっていて、意図していない値が残る事によって動作がおかしくなるということがよく起こりますよね。ですので、基本的にはLOOPの中で繰り返し値を入れ替えながら使う変数は、LOOPの最初(もしくは最後)にCLEAR命令を入れておくべきです。
クリアしてはいけない変数はコメントなどで補足しておくと良い
ただ、件数をカウントしたり、合計金額を計算するような場合は、値をクリアすると正しい値が取れなくなるので、1つずつ変数の用途を確認しながら行う必要はあります。
可能であれば、変数名で分かりやすくしておいたり、コメントも残して他者がメンテナンスする時にも誤って修正してしまわないところまで気を回せたらベストですね。
時間に追われながらプログラムを書いているケースが多いと思うので、ついうっかり忘れるという事も分からなくは無いのですが、プログラムが稼働した後に判明すると余計に時間が掛かってしまうので、作成時に注意するようにしましょう。
詳細設計書等にも通常とは違う扱いをする変数については書いておくと親切かなと思いますね。(ここはプロジェクト毎に記載の粒度が異なるので、ルールに従った形で可能な範囲で行うのが良いと思います)
こういうのは自動でチェック出来たら良いんですけどね・・・
もしかしたらインスペクターツール等でチェックできる仕組みがあるのかもしれ無いので、もし知ってる人がいたら教えてください。
ABAPについて知りたい方はこちらもどうぞ!