ControlFlagとは?
ControlFlagは巷で話題になっており名前だけは聞いたことがあるが、どういうツールなのか分からないという方も多いかと思われます。ControlFlagとはどういったツールでどういう仕組で動いているのか詳しく説明しましょう。
ControlFlagは自動デバッグツール
ControlFlagはIntelが開発したプログラミングのソースコードを自動でデバッグするツールです。2021年10月25日に公開されました。ControlFlagの特徴は機械学習によってソースコードの異常パターンを自動検知していることです。
ControlFlagはオープンソースとして無料公開されており、GitHubからインストールすることができます。ControlFlagは単純なタイプミスはもちろんのこと、NULLチェック漏れなどプログラマがミスしがちな箇所を検出することが可能です。
【参考】:GitHub - IntelLabs/control-flag
そもそも機械学習とは何か?
機械学習はコンピュータが大量のデータから自動で学習し、データのパターンやルールを検出するというものです。よく人工知能と機械学習は混同されますが人工知能の1分野に機械学習があります。
また、機械学習には大きく「教師あり学習」「教師なし学習」「強化学習」の3つの学習方法があります。教師あり学習は正解のデータを予め機械に教える方法であり、機械は正解データと入力データを比較して判定を行います。教師なし学習は正解のデータを教えずに学習させる方法であり、何が正解か人間にも判断できないものの検出に有効です。
強化学習は出力結果に点数を付けていき、点数が高くなるように最適化しながら学習していく方法です。ControlFlagはこの中で教師なし学習に該当します。
ControlFlagの仕組み
ControlFlagは大きく「パターンマイニング」と「異常パターンのスキャン」という2つのステップで動作しています。パターンマイニングはコンピュータが機械学習トレーニングを行う段階のことであり、コンピュータにデータセットとなるソースコードを読み込ませ、パターンを認識させていきます。
異常パターンのスキャンは新規のソースコードを読み込む段階のことであり、認識したパターンを元にソースコードに含まれる異常な表現にフラグを付けていきます。ControlFlagはこのような仕組みで動作しています。
ちなみに、ControlFlagは現状LinuxとMacで動かすことが可能です。パターンマイニングが終わっているデータセットが予め3種類用意されており、無料で活用することができます。データセットはそれぞれ動作に必要なメモリが異なるため、コンピュータのスペックに合わせて使い分けることが可能です。
ControlFlagが従来のデバッグツールと異なる点
ControlFlagのような自動デバックツールは以前からありましたが、今までのデバッグツールには機械学習が導入されていませんでした。そのかわり、2つの手法のうちいずれかを用いて検出を行っていました。
1つ目が変異を用いた手法であり、ソースコードの問題箇所を書き直し、正常に動くまでテストを繰り返すという手法です。
2つ目が意味解析に基づいた手法であり、ソースコードの問題箇所を特定したらバグの箇所が本来満たすべき制約を考え、その制約が満たされるように書き直すというものです。
ControlFlagはこれらのやり方を用いておらず、ソースコードのパターンを予めデータとして持っておき、それに従って自動デバックを行っていきます。
ControlFlagを使うメリット
ここまでControlFlagの機能について解説してきました。続いて、ControlFlagを導入することの3つのメリットについて解説します。開発者側・経営者側双方のメリットをまとめたので、導入を検討している方は参考にしてください。
開発担当者の負担が減る
ControlFlagを使うことで開発担当者の負担が減るメリットがまず挙げられます。プログラマーは開発期間の間ずっとソースコードを書いている訳ではなく、ソースコードのデバッグにも多くの時間を費やしています。
Intelの指摘によると開発時間の50%をデバッグに使っているとのことです。ソースコードは1文字でも間違っていたら正しく動かないため、デバックは地道かつストレスのかかる作業と言えます。ControlFlagを導入しソースコードのバグを自動検出すれば、デバックにかかる時間が大きく減るでしょう。
特に日本では開発スピードの早さが求められる反面エンジニアの数が不足しており、長時間労働が発生するケースもあります。デバック作業が効率化され開発担当者の負担が減るというのは、大きなメリットと言えるでしょう。
ソフトウェアのバグによる被害を防ぐ
ControlFlagによってバグを検出できれば、重大なバグによる被害を未然に防げる可能性があります。特に金融系などはバグによって障害が発生した場合、多大な賠償金が発生するケースもあります。
ソフトウェアは一度作って終わりではなく、ユーザーの要望に従って改良する必要があり、改良する度にバグを生む危険性があります。そのため、ControlFlagのようなデバッグツールが一般化されれば、特にお金が絡むシステムを開発する現場は助かるはずです。
企業にとっても予算の削減に繋がる
ControlFlagを導入することによって、予算の削減に繋がるという企業側のメリットもあります。Intelによれば、IT業界は2020年のソフトウェア開発費用のうち、約半分の2兆ドルをソースコードのデバッグ関連に費やしたとのことです。これだけの費用が削減できれば、企業は新たな事業にチャレンジできる余裕が生まれる可能性もあるでしょう。
ControlFlagの使い方
最後に、ControlFlagの使い方について解説します。インストールからソースコードの検査方法までの手順をまとめているので、ControlFlagを試したいという方は参考にしてください。
GitHubからControlFlagをインストールする
ControlFlagはGitにあるためまずはGitをインストールする必要があります。Gitは分散型のバージョン管理システムであり、1つのソースコードを複数人で修正するのに役立つもので、多くのエンジニアが使っています。Gitをまだ使ったことがない方は、yumコマンドなどを使ってGitをインストールしましょう。
その後、以下のコマンドによってGitHubからControlFlagをインストールします。
git clone https://github.com/IntelLabs/control-flag.git
データセットを取得
次に、ControlFlagのデータセットを取得します。ControlFlagのGitHubには「Small」「Medium」「Large」の3種類のデータセットが用意されており、それぞれパターンマイニングが既に完了されています。使っているコンピュータのメモリ容量に合ったデータセットを選択し、ダウンロードしてサーバなどに設置しましょう。とりあえずControlFlagの機能を試したいという方は「Small」でも問題ありません。
ソースコードを検査する
次に、ControlFlagでソースコードの検査を行います。以下のコマンドを入力することでソースコードの自動検査が開始されます。
scripts/scan_for_anomalies.sh -d <検査したいソースコードがあるディレクトリ> -t <training_data>.ts -o <検査ログファイルを保存する出力ディレクトリ>
ログファイルを確認する
ソースコードの検査が完了すると、指定した出力ディレクトリにログファイルがあり結果が書かれています。「Expression is Okay」と書かれているならソースコードに問題はないということになります。
ControlFlagを導入すれば開発作業が効率化される
本記事ではControlFlagについて解説しました。ControlFlagの機能やメリット、使い方などがおわかり頂けたかと思います。ControlFlagを導入することでデバッグにかかる時間が減り、開発作業そのものに集中することが可能です。
こういったデバッグツールは従来からありましたが、ControlFlagはintelが開発したということもあり注目を集めています。デバッグツールが今後更に進化していけばより開発作業が効率化され、エンジニアは創造的な仕事に力を入れられるようになるかもしれません。ControlFlagに興味がある方は、まずは試しに1番小さいデータセットでどの程度の精度を誇るのか実験してみましょう。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから