検索
連載

バグ検出ドリル(14)タイポグリセミア現象もびっくり、恐るべきは思い込み山浦恒央の“くみこみ”な話(114)(3/3 ページ)

バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第14回の問題は、前回に続いて「煮詰まったバグ」です。煮詰まっているがゆえに、バグの原因が分からなくなる事態に対処してください!

Share
Tweet
LINE
Hatena
前のページへ |       

4.今回の解答

 今回のバグは、「sizeof関数で配列のサイズを取得している」です。

 本問題は、変数str1に代入した文字列の文字数を、sizeof関数から取得し、表示しています。A君のミスは、sizeofは、配列のサイズを取得する関数であり、文字数を取得する関数ではないと気づいていないことです。

 修正方法は、sizeofの部分をstrlen関数に置き換えると、ヌル文字の1つ手前までの数を取得できます※3)。よって、A君はsizeofとstrlenを勘違いして使用している可能性があります。

 読者の方から見れば、「そんなの当たり前」と思われたはずです。A君から見ると、文字数取得ならsizeofと頭に刷り込まれてしまっている可能性があります。問題の複雑さは異なるでしょうが、後々気付くと恥ずかしくなるようなミスでも、煮詰まると分からなくなることが度々あります。特に、「思い込み」は、難解なバグにつながります。

※3)strlenは、文字列の長さを取得する標準関数です。#include<string.h>でインクルードすると使用できます

5.自己採点シート

 今回の自己採点シートを以下に示します。

問題 内容 配点(点)
文字数表示プログラム 問題文を一通り読んだ 50
sizeofとstrlenを取り違えていることが原因だと推察できた 50
リスト3 自己採点シート

6.終わりに

 プログラミングは、非常に創造的で楽しい作業ですが、想定通りにいかない時は非常に苦しい時間です。特に、思い込みがあったり、煮詰まったりすると視野が狭まり、当たり前のことが見えなくなります。

 今回は、文字数表示プログラムを題材としました。皆さんならば、今回のような話で困ることはないでしょうが、「煮詰まった」と自覚した時は誰かと相談し、「第三者の目」で見てもらって、早めに問題を解決しましょう。

【 筆者紹介 】
山浦 恒央(やまうら つねお)

東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)


1977年、日立ソフトウェアエンジニアリングに入社、2006年より、東海大学情報理工学部ソフトウェア開発工学科助教授、2007年より、同大学大学院組込み技術研究科准教授、2016年より非常勤講師。

主な著書・訳書は、「Advances in Computers」 (Academic Press社、共著)、「ピープルウエア 第2版」「ソフトウェアテスト技法」「実践的プログラムテスト入門」「デスマーチ 第2版」「ソフトウエア開発プロフェッショナル」(以上、日経BP社、共訳)、「ソフトウエア開発 55の真実と10のウソ」「初めて学ぶソフトウエアメトリクス」(以上、日経BP社、翻訳)。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る