パスワードを忘れた? アカウント作成
11146215 story
プログラミング

ビルド失敗の原因は? 54

ストーリー by headless
原因 部門より
Googleと香港科技大学、ネブラスカ大学が共同で、ソフトウェアのビルド失敗が発生する頻度や原因、修正の手間について調査・分析を行ったそうだ(論文: PDFITworldの記事本家/.)。

調査はGoogleの開発者18,000人が9か月間に実行したC++とJavaのビルド結果2,660万回分を対象に行われた。ビルド失敗率の中央値はC++が38.4%、Javaが28.5%となった。C++の開発者は多くがテキストエディターで作業するのに対し、Javaの開発者は多くがIDEで作業するため、IDEに組み込まれたチェック機能が役立っているとみられるとのこと。

ビルド失敗の原因はコンパイラーのエラーメッセージごとに集計。さらに「依存関係エラー」「型の不一致」「シンタックスエラー」「セマンティックエラー」「その他」の5つのカテゴリーにまとめている。最も多かったのは依存関係エラーで、C++が52.68%、Javaが64.71%となる。なお、Javaでは変数名のミスタイプでも出力される「cant.resolve」が依存関係エラーに含められている。「cant.resolve」はJavaのコンパイルエラーの中で最も多い43.25%を占めるが、原因の4分の3をミスタイプとして除外してもカテゴリーごとの順位は変動しないという。C++ではJavaと比べてシンタックスエラーが多い点が目立つ。ここでもIDEの使用率の違いが出ているようだ。

エラーの修正時間の中央値はC++が5分、Javaが12分となっている。修正時間としては、最初のビルド失敗からビルドが成功するまでの時間を使用しているが、開発者が途中で別の作業を始めてしまった場合や、帰宅してしまった場合などには意味のないものになってしまう。そのため、解決までに12時間以上かかったビルドは除外している。さらに、複数種のエラーをまとめて修正する場合は、エラーの種類ごとに修正時間を区別するのは難しいので、1種類のエラーのみが原因のビルドに絞り込んで集計したとのこと。

この調査はGoogleの開発者のみが対象なので、一般に適用できるかどうかは不明だ。/.Jerはどう考えるだろうか。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • これでいいのか?
    何かを別環境にポーティングする作業なんかで、ビルドが通るようにするだけで何日もかかるなんてのはざらだが。

    • by Anonymous Coward

      平行して行った別の作業や、帰宅しての生活時間、このへんを排除して記録できるのが一番だったんでしょうが、それが出来なかったんでしょうね。
      それに比較的短時間で終わる作業についての知見ってことではアリでしょう。

    • by Anonymous Coward

      Javaの奴はこんなのばかりですね。
      ビルド環境作った人に何のライブラリ入れたか聞いても「分からない」「覚えてない」とか
      try-with-resource文あるのにJava6でコンパイルすることになってたりとか。

      • by Anonymous Coward

        Maven、Ivy、Gradleのどれでも良いけど、ライブラリ依存性解決ツール使わない人にビルド環境を作らせてはいけない。

        • by Anonymous Coward

          最近までネット禁止だったらしいし、コボラーな世界だからかツールは悪みたいなとこです。

          なんでここオーバーロード関数じゃないのって聞いたら、なにそれ?で切れられましたw

    • by Anonymous Coward

      エラー範囲の規模を把握するために、ビルドを試し打ちしたりすることがあるね。

  • by Anonymous Coward on 2014年06月28日 15時10分 (#2629341)

    コンパイラにエラーや警告を吐き出させながらコーディングするスタイルの場合、
    とっても頻繁にビルドするし、エラーもでるし、出させる。

    コンソールで作業している場合、パラメタを変えながら
    テスト→ビルド→テスト→ビルド→テスト→ビルド→テスト→ビルド→OK
    みたいなことを私はする。こういうときは、ビルド頻度はとても高く
    なるだろうけど、実はコンパイルしているのは一部だけだから、
    それぞれ1秒以内で終わっている。

    コンソールで作業していない場合、もう少し丁寧にテスト用のUIを用意しないといけ
    なくなるから、ビルドごとのコーディング実量が増えるし、そうなると一発でしあげようと
    するから、コンパイル回数は減る、

    重要なのはビルドの回数ではなく、プログラマがコーディングする時間と、ビルドしている時間と
    その合計、、

    そしてどっちがくたびれるかだ。ビルド時間が効率の良い休憩になっている場合もあるからね。

    • たしかに。最近はもうバックグラウンドで常にコンパイラやインタプリタが走っていて、エラーを逐次報告する環境もありますね。

      親コメント
  • ビルド(コンパイル)の失敗も否定されてたような。
  • by Anonymous Coward on 2014年06月29日 9時30分 (#2629689)

    家に帰ってから再び職場に行くまで12時間も空かないだろ?空かないよな?

  • by Anonymous Coward on 2014年06月28日 13時15分 (#2629274)

    論文をざっと見ると、対象がC++とJavaだけ?
    結果も、この二つに違いがあるような、ないような…微妙というしか…

  • by Anonymous Coward on 2014年06月28日 13時32分 (#2629283)

    make て入力するたびに、失敗確実ジャンってね

    • by Anonymous Coward

      コマンドラインが返す、足りないパッケージ名と、実際のパッケージ名が違う事が少々あって、数日ハマる事が多いっす。
      そういうのに限って make uninstall が用意されてなかったりで、自分で make ファイルに追加したり、散々みたいな。

    • by Anonymous Coward

      kate でエディットして make でビルド。ほこたて状態

  • by Anonymous Coward on 2014年06月28日 14時01分 (#2629297)

    Googleの開発者がIDE使わないのは生産効率の上でかなりの損失なのではないのかなあ

    • by miyuri (33181) on 2014年06月28日 14時33分 (#2629320) 日記

      undeclared_var_use, undeclared_var_use_suggest, no_member なんていう打ち間違えみたいなのでエラーの四割を占めているから、IDEを使えば一気に減らせるとは思う。

      親コメント
    • by Anonymous Coward

      それはギャグで言っているのか

    • by Anonymous Coward

      優れたウィザードにとっては
      出来合いのツールに縛られるほうが効率落ちそう

      • by Anonymous Coward

        「弘法は筆を選ばず」って考え方もあると思う。
        まぁ、箸にも棒にもかからないようなひどい筆は別にして、昨今の開発ツールはそれほどひどい筆であることは少ないですからね。
        どんなツールにでもあわせろとは言わないまでも、普通のツールなら何でも使いこなせるよ、という人のほうがスゴイと思う。

        # 私の周囲で言えば、道具を選びに選び、俺様カスタマイズに時間を掛けるヤツは、言うほど凄いコードは書かない(ことが多い)。
        # そして、カリカリチューンして自分好みを追求するが故に、環境の変化に弱い(客先や現場に行かせると時間が掛かる)。
        # ま、エリートだけで構成されるgoogleのようなところとは事情が違うのかもしれませんが。

    • by Anonymous Coward

      IDE使うとエラー時の解決にたどり着くまでの時間が増える

      エラー数×解決までの時間でどっちが長いかの比較がほしいところ

      • by Anonymous Coward on 2014年06月28日 15時51分 (#2629362)

        IDEを使っていると、単純ミスでのエラーがIDEによってビルド以前に指摘されるので、
        ビルド後のエラー修正については、C++の場合より複雑な問題の比率が高くなる。
        よって、修正に掛かる時間の中央値が高くなる。
        という結果だと思う。

        親コメント
    • by Anonymous Coward

      C++で使えるまともなIDEってあったっけ?
      念のため言っておくとGoogleの開発者はWindowsアプリの開発だけしていればいいわけではないからな。

  • by Anonymous Coward on 2014年06月28日 14時22分 (#2629313)

    GNU cgicc
    $ touch doc/html/index.html
    ↑ソースツリーのトップでこれを実行しないと make all が通らないというパターンがあった

  • by Anonymous Coward on 2014年06月28日 14時24分 (#2629317)

    #ビルド違い

  • by Anonymous Coward on 2014年06月29日 1時20分 (#2629622)

    不慮の事故で括弧が合わなくなったときのエラーメッセージの意味不明さが厄介。
    エラー行も適当だし、メッセージも的外れなのが多い。
    VSのIDEってなんか追跡遅かったりしばらく前のやつが表示され続けたりするから補完以外は信用できないし。

typodupeerror

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

読み込み中...