連載
» 2017年10月11日 10時00分 公開

山浦恒央の“くみこみ”な話(99):タダでソフト開発の生産性と品質を上げる方法(9):メモリリークを一瞬で見つける「Valgrind」(その2) (1/3)

「タダでソフト開発の生産性と品質を上げる方法」の第9回。前回紹介した「Valgrind」を用いた具体的なメモリリークの検出方法について解説します。

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]

1.はじめに

授業 ※写真はイメージです

 筆者は、大学で授業をしていて、ソフトウェアの開発現場との大きな違いを実感します。学校では、課題に取り組む場合、楽をすることは悪です。例えば、プログラミング演習で、友人のソースコードを丸写しして提出したり※1)、手書き指定のレポートをワープロで記述するなどです※2)。こんな生徒の生産性は、ゼロから自分で考えて真面目にコーディングしたり、何度も鉛筆でレポートを書いては消して修正する生徒の10倍も高く、エンジニアリング的には非常に優秀な生徒ですが、大学の現場ではこのタイプの「再利用」や「電子化」は罰則の対象になります。学生諸君にはオススメしません※3)

※1)ソースコードやレポートの丸写しは簡単に分かります。命令語の文法エラーやコメントの誤字脱字までそのまま写す学生は問題外ですが、インデンテーション、アルゴリズム、コメントを見ると一目瞭然です。コピーした痕跡が見えなくなるほど改変するには、オリジナルを作成した学生よりも高度な知識と経験が必要になります。

※2)先生の中には、生徒が楽することを嫌悪する方々も少なくありません。その象徴がPCや携帯電話機、スマートフォンの関連で、よくトラブルに発展します。例えば、先生が黒板に書いた課題を学生がノートに写さずスマートフォンのカメラで撮影すると怒る先生がいます。また、先生が「レポートを手書きすること」と指定すると、学生が静かにブーイングするなどです。私は、授業では30〜40枚のスライドを使い、希望者には配布します。私が学生に望む理想のスタイルは、スライドを印刷し、授業中、余白に口述したことを書き込むスタイルです。図や表をノートに書き写しながら、先生が話す内容も書くのは大変です。板書を書き写す「単純作業」を軽減し、私が話した内容を聞いてほしいと思い、ずっとこの方式を採用しています。一方、「黒板の内容をノートに書くのは『単純作業』ではなく、それによって覚えられる」との意見もあり、どちらがいいかよく分かりません。

※3)授業での「楽」の最たるものが「授業に出ていないのに出席点をもらう」不正出席でしょう。学校や先生によっては、教室の入り口に設置した磁気カードリーダで学生証を読ませたり、出席票を人数分だけ配ったり、毎回、出席票の色を変えたりして、出席不正を食い止めようとしています。学生側は、それを上回る手段を考えようと知恵を絞っています。この「知恵比べ」は時間と知能の無駄遣いのように思え、私は、履修者一覧表を学生に回して、出席者に丸を付けてもらうだけにしています。信頼する代わりに、不正がバレた場合は、不正に丸を書いた学生と、書くよう依頼した両方の単位を剥奪します。不正は必ず露見します。レポートの返却時に在席していないとか、「なぜだと思いますか?」と指名した学生がいないとか、さまざまなケースでバレます。「正直であること」は、ソフトウェアの品質制御の基本であり、エンジニアの最も重要な素養です。フォルクスワーゲン(Volkswagen)が燃費を良く見せるソフトウェアを入れた不正問題が発覚し、世界中のプログラマーが仰天しましたが、そんな不正は、「出席不正」の延長上にあると思います。

 開発現場で重要なことは、時間当たりの生産性を最大化することです。例えば、他社製品と似たソフトウェアを作成する場合、自分達でゼロから考えるより、著作権問題を解決して使える部分をコピーする方が楽ですし、品質も類似製品のレベルまで保証できます。予算、時間と人的リソースが限られた現代のソフト開発現場で、一度立ち止まって「どうしたら楽できるか」と考えることは非常に有意義ですが、忙しいエンジニアが対応策を考えるため立ち止まるヒマはないでしょう。「楽をして楽する方法」の1つが、自動化ツールを導入し、大量にある単純作業を減らすことです。これにより、エンジニアの作業を劇的に軽減できます。

 本シリーズでは、エンジニアが楽できる無料ツールを紹介しています。前回から、プログラムのメモリ関連のバグを検出するツール、「Valgrind」を取り上げました。このツールの利点は、面倒な作業をせずにメモリリークなどのバグを瞬時に検出できることです。デバッグ作業で有効です。今回は、Valgrindで、変数の初期化エラー、領域外の書き込みや参照エラーを検出する方法を解説します。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.