連載
» 2017年08月28日 10時00分 UPDATE

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

「タダでソフト開発の生産性と品質を上げる方法」の第8回。今回は、ソフトウェアエンジニアを悩ませる常習的なバグ「メモリリーク」を簡単に検出できる「Valgrind」を紹介します。

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

1.はじめに

 ソフトウェアの開発業務には、単純作業の繰り返しが少なくありません。大量の単純作業はプログラマーが最も嫌がる仕事で、世界中のトップエンジニアも、「あぁ、面倒だ……」と1時間に10回溜息をつきながら作業をしています。「面倒」と感じる単純作業は、自動化すべき作業で、既に自動化してある可能性が大です。面倒と感じたら、インターネットでツールを探しましょう。

 ネットの世界は非常に広大で、単純作業ほどツールが出回っています※1)。これを使わないのは、最新鋭の現代の軍隊に、馬と竹やりで戦いを挑むようなものです※2)。本シリーズでは、多忙なエンジニアの作業を効率化できる無料ツールを紹介しています。ぜひ、新しい一歩を踏み出してください。

※1)全世界でプログラマーは何人いるでしょう? IDCの調査によれば、2014年度、職業としてプログラミングをしている人が1100万人、プログラミングを趣味にしている人が750万人で、合計で2000万人弱だそうです。これだけの人数がいれば、面倒なプログラミングの作業を自動化できるツールを作ってくれそうですね。ちなみに、「IT人材白書2015」によると、日本の2014年のIT技術者の数は84万人。同年の日本の労働者人口が約6600万人なので、ITエンジニアは全体の1.3%にすぎません。これだけ、世の中でコンピュータ化が進んでいることを考えると、非常に低い数字ですね。

※2)無料ツールを使わない理由は無限にありますが、その代表が「社内コンプライアンス」です。無料ツールの最大のメリットは、タダという点ですが、見知らぬ人が作ったツールは品質を保証していませんし、権利関係でも、「後で金を出せといわれるかも」と及び腰になります。よって、会社の方針として、現場での無料ツール導入を禁止しているのが現状です。一方、予算の関係で有償ツールを購入してもらえず、ツールによる生産性や品質の改善を期待できません。結局、「人力で生産性と品質を上げようとしている」のですが、もちろん、うまく行っていません。コンプライアンスは順守すべきですが、効果の高い無料ツールを排除しない方向に進むことを期待します。

2.常習犯的バグ

メモリリーク ※写真はイメージです

 「振り込め詐欺」が常習的に善良な市民を苦しめるように、ソフト開発にもエンジニアを悩ませる常習的なバグがあります。上位に長年君臨するのが、「メモリリーク」でしょう。メモリリークは、割り当てたメモリを解放し忘れた時に発生するバグです。このバグは、メモリを少しずつ食いつぶして処理時間が遅くなったり、「ガス欠」になってプログラムがフリーズします。

 メモリリークの原因の1つは、プログラミング言語に関係します。組み込み系の主流言語であるCやC++では、メモリの確保と解放をプログラマー自身が指示します。例えば、「mallocで128バイト確保し、freeで解放する」のような命令語ですね。メモリ管理をプログラマーができるメリットはありますが、メモリを解放し忘れたりします。

 メモリリークに関係する部分を目視確認する作業は、プログラマーの苦手な「大量の単純作業」で、見落とす危険性が大。そんな時は、ツールを使いましょう。

 今回紹介する「Valgrind」は、メモリ関連の単純ミスを検出できます。今回は、Valgrindでメモリリークを検出しましょう。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.