プロジェクトの創設者www.checkmycode.orgへのインタビュー

今日のインタビューは、Andrei Vasilkovsky(Andrzej Wasylkowski)とのインタビューです。 2005年以来、彼はドイツのザールブリュッケン大学のソフトウェアエンジニアリング学部で博士号を取得しています。 彼の研究分野はソフトウェア開発であり、焦点はコード分析方法と自動化された問題発見システムへの適用性にシフトしています。



彼が参加しているプロジェクトの1つはcheckmycodeです。 これは、コードを「集合的な知恵」と比較できるサービスです。 Gentooディストリビューションからの2億行を超えるCコード。



続きを読むと、このプロジェクトについてのすべてと、Gentooがどのように使用されているかがわかります!





こんにちはアンドリュー、インタビューに感謝します!



こんにちは また、インタビューに感謝したいと思います。あなたの仮想ゲストであることは本当に喜びです。



1. www.checkmycode.orgにアクセスすると、コードを入力できるフォームが表示され、それに応じて「異常」のリストと、特定のコードが「異常」である理由の説明が表示されます。したがって、エラーが含まれている場合があります。 現在、「舞台裏」で何が起こっているのか教えてください。



要するに、Gentoo Linuxディストリビューション全体を調べて、コンポーネントインターフェースの典型的な使用方法、つまりLinuxコンポーネントの典型的な使用方法を探しました。 別の方法でインターフェイスを使用すると、これは異常として指定されます。



全体として写真を撮る場合、プロセスは3つの段階に分けることができます。 まず、送信したコードが解析され、そこからいわゆる「シリアル通信」が生成されます。 これらは、データ転送情報で注釈が付けられた関数呼び出しの2要素のシーケンスです。たとえば、「return value socket()-> first argument to listen()」などです。 これらは、コードが関数を使用して「オブジェクト」に対してアクションを実行する方法の抽象化です。



次に、コードに関連する可能性のあるGentoo Linuxディストリビューションのすべてのプロジェクトを探し、これらのプロジェクトがどのように同じ機能を使用するかを確認します。 詳細に入らずに、socket()を呼び出すと、socket()を呼び出すすべてのプロジェクトのコードが考慮され、socket()呼び出しを含むシリアル接続が検出されます。



最後に、コードが2番目の段階で見つかったパターンのいずれかに違反しているかどうかを確認します(チュートリアルでは、そのような違反のサンプルを見つけることができます)。 見つかった違反は、ウェブサイトのインターフェースを介して報告されます。



実際にはもっと多くのことが起こっていますが、一般的な状況は次のとおりです。



2.このプロジェクトはいつ始まったのですか?その理由は?



現在、コードのエラーをチェックするための洗練された方法がいくつかあります。 不足しているのは、比較のための仕様です。 そのため、これらの仕様を実際に動作するコードから取得したいと考えました。 プロジェクトは徐々に成長しており、正確な開始日を選択して示すのは十分に困難です。 私たちは、学生のナタリー・グルスカが学士号の一部として書いた軽量のパーサーから始めました。 パーサーは2009年7月に完成しましたが、元のアイデアは大量のコードを分析するというアイデアとは何の関係もありませんでした。 私のツールの1つであるJADETの言語に依存しないフロントエンドを作成したかっただけです。 パーサーは非常に高速であることが判明し、Andreas Zeller教授はすぐにそれを使用して大量のコードを分析するというアイデアを思いつきました。 Webサービスを作成する前の残りの数か月は、ほとんどの部分で働いていました。 そのようにして実際にそのように機能し、Linuxディストリビューション全体のサイズに合わせて拡張します。



3.他に誰がプロジェクトに関与していますか?



私が言ったように、このサイトで使用されているパーサーは、現在カナダのクイーンズ大学の学生であるナタリー・グルスカによって書かれています。 元のアイデアは私のボス、アンドレアス・ツェラー教授に属します。 Webインターフェイスとサイトプログラミングは、私の同僚であるKevin Streitの仕事です。KevinStreitは、私のように、ザールブリュッケン大学で博士論文に取り組んでいます。



4.プロジェクトへのGentooの参加は何ですか?



パターンの検索に使用されるすべてのソースコードは、Gentooディストリビューションから取得されます(つまり、フォームに挿入したスニペットは、Gentooディストリビューションのソースコードと比較されます)。



5.なぜ彼は選ばれたのですか?



彼は、配布キットに含まれるすべてのプロジェクトへのアクセスを提供してくれます。 これにより、パーサーを使用して、これらのプロジェクトで特定の機能がどのように使用されているかを判断する機会が得られます。



6. Gentooを使用する上で最も難しい瞬間は何ですか?



何もありません:) Gentooでの作業は本当に楽しかったです。 そしてこれまでのところ-プロジェクト全体の最も簡単な部分。



7.プロジェクトの一部として使いやすくするためにGentooで何を変更しますか?



これは私がアクセスしたいものですが、すべてのプロジェクトのソースツリーへのWebインターフェイスであるため、見つけることができませんでした(または、単にどこでそれを行うことができませんでした)。 ある種のパターン違反が検出されると、ユーザーは「正しい」ソースコードを見つける場所の3つの例を取得します。 現在、このためのWebインターフェイスを提供していますが、checkmycodeは存在しませんでしたが、ソースコードアーカイブを手動で解凍し、その中のコードを探す必要があり、退屈でした。



8. Gentooの何が好きですか?



Portageはかなり使いやすく、Gentooはローリングリリース戦略を使用しているという事実が気に入っています。 非ローリングリリースLinuxディストリビューションを使用したことがあり、不溶性のバージョンの競合に遭遇し、一部のパッケージの最新バージョンを使用しようとした人は、私が話していることを理解できます。



それに、明白な理由で、私はソースコードにアクセスできることが好きです:)実際、私たちのサイトが置かれているマシンはGentooを実行しています。



9.時間をかけてプロジェクトについてお話しいただきありがとうございます。 あなたが言ったことに何か他のものを追加しますか?



これらすべての質問をしてくれてありがとう、とても良かった! www.checkmycode.orgは、かなり大きなプログラム全体を分析し、それらの違反を見つけることができるツールへの小さなインターフェースであることを指摘したいと思います。 そのため、「誤報」と見なされるものをフィルタリングできるように最大限の努力を払い、これにより、検出された違反の数を大幅に減らします。 残念ながら、これの副作用は、関数の誤った使用に関連するいくつかの実際のエラーが検出されないことです。 したがって、Edsger W. Dijkstraを言い換えると、ツールはコード内に潜在的に問題のある場所がないことを示すだけで、存在しないことを示すことができます。




All Articles