新人技術者のためのロジカル・シンキング入門(5) ―― ソース・コード規約の作り方

冴木 元

tag: 組み込み

技術解説 2008年8月26日

【1】宣言や論理値の統一に問題あり

 Dさんが平身低頭して直ちにリリースをやり直したのはいうまでもありません.

 うなだれて帰ってきたDさんは翌日,プロジェクトのメンバを集めてソース・コード・レビューを行うことにしました.そこで判明したのは,リリースしたライブラリのソース・コードはテーブルの実体宣言が機能ブロックごとにいろいろなファイルにまたがっていて,あるテーブルの実体がどこにあるかはコードを書いた者にしかわからないという事実でした(図2).さらに問題だったのは,散らばったテーブルのうち,いくつかは機能ブロック間で共通に使われているということでした.

zu02_01.gif
図2 バラバラで存在するテーブルは保守性が悪い
なぜなら,テーブルは外部参照していろいろなファイルで使うものであるため.どこになにがあるかわからないと,極めて保守性の悪いソース・コードになってしまう.

 ソース・コードをさらに細かく読み進めてみると,define文やプロトタイプ宣言のたぐいもあちこちにバラバラに存在していました.中にはプロトタイプ宣言なしで使われている関数もあるようでした.加えて問題だったのは,ある一つのdefine文は機能ブロックによって論理値が逆となっていたことです(図3)

zu03_01.gif
図3 論理値が機能ブロックによって逆という例
方針をまったく決めずに複数の人がコーディングしてしまうと,こういうことが起こりうる.防止するためには,ソース・コードの書きかたの規則に加え,必要な論理値は正負をあらかじめ決めておくというような対策が必要.

 外部変数も実体があちこちにありました.外部変数を使用することは設計段階で必要と判断したものですが,その管理に問題があることは否めないようです.構造体や変数型のtypedefも散在していることがわかりました.

● 「おまじない」にならないためのコーディング規約作り

 Dさんのような事態に陥った場合,読者のみなさんは,どういった解決策を考えるでしょうか.「そこまで自分はまぬけではない」と思う方もいるかもしれません.そういう方は,管理がボロボロのままライブラリを提供してしまう開発チームを運悪く引き当ててしまった顧客のQさんになったつもりで考えてみてください.

 まずだれでも考えるであろうことは,「再発防止のためには,ソース・コードになんらかの規約が必要なのではないか」ということでしょう.これについては,筆者も同じ意見です.しかし,コーディング規約のたぐいというものは,機械的に作って当てはめるだけですと次第に形骸化しかねません.そして最後には根拠の不明確な,単なる「おまじない」のようなものに陥る危険性があるのも事実です.たいせつなのは,ここで起こったような混乱を生じないためのしくみ作りとしてのコーディング規約作りだ,ということを念頭に置くことです(図4)

zu04_01.gif
図4 コーディング規約の検討
バラバラな記述が混乱を生んでいる場合,それぞれをどのように整理すれば混乱がおさまるかをまず検討する.この過程をスキップしていきなり規約を作ると,形骸化してしまうことは避けられない.

 そこでDさんといっしょに,上述の問題についてソース・コード規約を考えてみることにしましょう.手始めにDさんは,「定義箇所がバラバラ」なものを挙げてみました(図5)

zu05_01.gif
図5 バラバラに定義されると混乱のもとになるもの
例えば,テーブルがあちこちに存在してどこに何があるのかわからないような場合,冒頭の例で挙げたような定義ミスが起こりうる.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日