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

ソースコードを分析してその著者を特定するシステムが開発される 53

ストーリー by hylom
コード品質判定システムなんかも作れるかも? 部門より
insiderman 曰く、

Drexel Universityとthe University of Maryland、the University of Goettingen、Princetoの研究者らが、ソースコードを分析し、その記述スタイルからその著者を検出する「code stylometry」なるシステムを開発したそうだ(Slashdot)。

実験では著者が明らかになっているソースコードを自然言語処理や機械学習といった技術を使って分析・学習するシステムを開発。250人の著者、1人の著者当たり平均630行のコードを学習させたところ、95%の成功率で「匿名のコード」の著者を見つけられたという。

また、学習に使用したソースコードの著者数を30人に減らし、また1人あたりのソースコード量を1900行に増やしたところ、成功率は97%に向上したそうだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2015年01月30日 14時51分 (#2752910)

    火消し専門の仕事を担当していた時に色々なC言語コードを見たけど、その人が「どんな本で勉強したか」「どんな性格か」は何となくわかったっけなあ。

    それが「こういう人は、こういう書き方するよね」ってコード解析する上で重要なファクターだった。

    • by Kuritsukasa (41955) on 2015年01月30日 17時08分 (#2752991)
      後の「ソースコード占い」である。
      親コメント
    • by Anonymous Coward

      if文を7段もネストしてるんですね。

    • by Anonymous Coward

      性格や参考書はともかく、
      「この辺のコードはxxxさんが組んだっぽい。あの人はyyyyのミスをしがち。ほらやっぱり!」
      つーて人を推定して未発覚の潜在バグ引きずり出すのはけっこう経験したなw
      # 逆にあの人が組んだパートなら信用できそう、って詳細に踏み込まないで
      # ざっとチェックして済ませた部分もそう外れなかった。

      • by Anonymous Coward

        「誰もが何かしらのバグを仕込んでいるものだ」と仮定したら
        その粗探し手法そのものが結論を内包してたのかもしれませんね。
        見つかりそうな人ばかりを念入りに探す、観測選択効果。

  • by IKEDA Kenji (4659) on 2015年01月30日 15時07分 (#2752919)
    Stephen R. Bourne が書いた C のソースなら俺でもわかる。
  • by Anonymous Coward on 2015年01月30日 15時38分 (#2752946)

    「コメントに俺の名前入ってるけどこんなコード書いてない」
    「こっちは社名が違う」
    「この日付に僕はこの会社に入社してないんですけど」

    • by Anonymous Coward on 2015年01月30日 20時17分 (#2753112)

      自分が書いた数行のコードがあって、その数日後……
      全く知らない人物から「◯◯さんのアレ、少し書き足して××で登録しました」とかメールが来たことがあった
      確認してみたら、コメントに自分の名前が入っているけど、使うべきでない部分(詳細は書けない)が書き足されていて……

      訴えようと思ったが、オリジナルのコードをオープンで公開することで不正改造の方を下げさせることに成功した。
      3年くらい前だったかな、今では懐かしい思い出。

      親コメント
    • by Anonymous Coward

      「この会社の仕事したことないんですけど」
      「その言語で書いてないんですけど」
      なんでそのまま持って行くのかねぇ。。

    • by Anonymous Coward

      「コメントにあいつの名前入ってないけどこんなコード書いてる」
      「こっちは社名が正しい」
      「この日付にあなたはこの会社に入社してないんですけど」

  • by Anonymous Coward on 2015年01月30日 17時03分 (#2752987)

    特定して業界追放して欲しい

    • 糞コードを書く人にはコピペしまくる人も少なくないから、
      分析したらどこかの有名なオープンソース開発者の名前が
      ずらずらと列挙されるという結果になるかも。

      親コメント
    • by Anonymous Coward

      ブラック企業を社会から追放するのが先じゃないかな

    • by Anonymous Coward

      単純に、レビューしないのが悪い。

      • by Anonymous Coward

        残念だが、それで超劣化させられることが多い。
        レビュアーやるなら言語知識くらい持てよと。
        英語読めないのに英文添削するようなことがまかり通っている。

        • by Anonymous Coward

          別のツリーに杓子定規がなんとかと書いた人か、

          あれ、郡司さんの採点だと9:5くらいでレビューアー有利だが。
          次にコードを別の誰かが変更したときに問題が起きる可能性を下げる、という点では理に適っている。

          • by Anonymous Coward

            残念。別人だよーw
            杓子定規は「次にコードを別の誰かが変更」する必要性や異常値入力の可能性を
            正しく評価できず一律に適用しておく、てのが問題。つーかうざい。
            レビューで劣化させられるのはレビュアーの質が悪いケース。
            ヒープソートが理解できないのでバブルソートに描き直させられたみたいな話でそ。

    • by Anonymous Coward

      そして誰もいなくなった。

  • by Anonymous Coward on 2015年01月30日 14時37分 (#2752901)

    「三日たてば自分も他人」というしな。。。

  • by Anonymous Coward on 2015年01月30日 14時39分 (#2752902)

    コーディング標準が設定され、守られていればそんなことは起こらないはずだ。

    • by Anonymous Coward on 2015年01月31日 7時55分 (#2753281)

      「見たまえ。

      メソッド名にm000001、m000002、m000003という名前を付けてるだろう?
      これはQ社で80年台から96年まで使われていた規約なんだよ。」
      「ということはこれを書いたのはQ社のプログラマーだと?」

      「いや、ここのコメントに注目したまえ。
      『変数i00001に3を入れる』『変数o000002にc000001型のオブジェクトをnewする』。
      このようなコメントはR社で現在も使われている規約だ。

      そしてこの部分。
      『追加1976年○月X日』『追加1982年○月X日』『削除1984年○月X日』『追加1985年○月X日』『追加1996年○月X日』
      『バグ修正1996年○月X日』『追加2001年○月X日』『BUG FIX 2005年○月X日』...
      一見すると1970年台から2000年台になるまで使い続けられている、S社のコードのようにも見える。

      しかしこれは犯人の偽装だ。というのもS社では2004年に規約が変更され、その際にコード修正した
      場合はバグ管理番号とVSSのコミットIDとコード修正の内容をそこに記載することが義務づけられたんだ。
      だからこんなに完結にコード変更履歴が書けるわけがないんだよ。」(以下省略)

      #じょ、冗談れすよ。こんな糞な規約を使ってる会社があるわけ無いじゃないですか(棒

      親コメント
    • by Anonymous Coward

      一糸乱れず全員が同じようにコードを書くのが最も良いプログラミングなのだ

      • by Anonymous Coward on 2015年01月30日 15時04分 (#2752917)

        一糸乱れず全員が同じようにコードを書くのが最も良いプログラミングなのだ

        マネージャー「ようし、心の用意はいいか。まず「i」に右手薬指を載せろ、そして右手人差し指は「n」だ。
                  左手人差し指は「t」だ。「int」を1秒で打ち込むぞ。準備できたか。

                 ・・・・そこ!mainはvoidじゃない! ああ、お前も、includeを書くのは後からだ!
                 誰がemacsを使っていいといった!」

        親コメント
        • by Anonymous Coward

          > マネージャー「ようし、心の用意はいいか。まず「i」に右手薬指を載せろ
          アッシは右手中指を乗せていました。
          間違っていたのか。不安になってきた。

      • by Anonymous Coward

        プログラム終了時のfreeなんか不要と言い出す奴が出てきて暴れるに一票

    • by Anonymous Coward

      あまり杓子定規なのも困り者。
      例えば静的解析ツールで特定のワーニングは0件にせよ、とか
      単体テストで全分岐の組み合わせ必ず通せ、だの。
      ツールや標準は決まりきった使い道や特定範囲の入力しかない
      (今後増える見込みもない)モジュール内の特定用途の下位関数と、
      他モジュールや人間とのI/F絡んでかなり異常値入力を警戒すべき
      関数の意味の違いを理解してくれない。
      やれelse節やswitchのdefaultがないだの引数NULLチェックしろだの
      金輪際使用されない予定の死んだコードを大量にソースに投入することで
      かえって見通しが悪くなったりバグ混入の機会が増えたり速度が遅くなったり
      バイナリサイズが膨れ上がったり...

      • by Anonymous Coward on 2015年01月31日 12時40分 (#2753399)

        ×杓子定規
        ○金科玉条

        しかし、あんたが書いた内容ならレビュアーの言ってることの方が正しい。
        すくなくとも、職業プログラマーが企業システムを作るなら当然のことばかりだが。

        個別にいちいち指摘はしなけど、
        switchにdefaultがない、と言われたら、
        throw new Exception('これが出たオレはプログラマーやめる’);
        とでも書いておけ。
        (すぐやめることになると思うし、とっとと辞めた方がいい)

        親コメント
  • by Anonymous Coward on 2015年01月30日 14時59分 (#2752915)

    入手できたサンプルコードに合わせて
    スタイルが変わってしまう私には「資格」もとい「死角」が無かった。

    • by Anonymous Coward

      変数名から足が付くケースも‥

    • by Anonymous Coward

      はーい僕もでーす

    • by Anonymous Coward

      コピペがばれないように変数名やスタイルは徹底的に修正するのが真のコピペプログラマーだ。君もまだまだだな。

      • by Anonymous Coward

        俺はこっちだなぁ。
        いや、別に、コピペがばれないようにしてるわけじゃなくて、何でも自分のスタイルに書き直さないと落ち着かないだけだけど。
        書き直しつつ、ロジックを検証したりとか最適化したりとかね。

        # そして著者が俺だとバレるわけだ。
        # ちなみに、コピペしたときは堂々と「ここは○○からのコピペ」とコメントに書きます(笑)。

  • by Anonymous Coward on 2015年01月30日 15時11分 (#2752923)

    コードスタイルものまねとか流行ったりして・・・

    • by Anonymous Coward

      ゆうちゃんのコードはコピペが大量に含まれてて、参照元のサイトが割り出せてるのもあったね。

    • by Anonymous Coward

      家で一人で書いてるコードも、割とバラバラなんだけど。
      いや、1プロジェクト内は一緒だけど別のプロジェクトを見ると違ったりする。
      モノマネしてるわけではなく。

  • by Anonymous Coward on 2015年01月30日 15時14分 (#2752926)

    コードマスターJが書いたコードも見分けられるのだろうか?

  • by Anonymous Coward on 2015年01月30日 15時29分 (#2752940)

    code hylometry...

  • by Anonymous Coward on 2015年01月30日 16時14分 (#2752964)

    AC が誰の書き込みだったり、おもらしがなくても、2chの書き込みが誰なのか分かったりするんですね。
    匿名が無意味になる世界は、果たしてユートピアなのか、それともディストピアなのか。

  • by Anonymous Coward on 2015年01月30日 18時28分 (#2753055)

    業務システムの古いコードは、行毎に著者が異なる場合があるが判定できるのか?

    #一方SEはVCSを使った。

    • by Anonymous Coward

      記事を読むかぎりでは著者数を増やすほど精度が下がるようですし、
      名も無き末端コーダをズバリ特定できるような代物ではないのでしょう。

    • by Anonymous Coward

      追加した部分を明示されるならそれなりの確率で当てるのでは。
      単にベイジアンフィルターだから。

  • さて、誰が「作った」ものと判断するだろうか。

    • by Anonymous Coward

      色つきで部分表示するんじゃね?知らんけど。
      判定すべき著者数を事前に登録しておくシステムらしいから
      関わったメンテナのコードをちゃんと学習させておけば
      ブロック単位で案外正確に判別されるかも。

  • by Anonymous Coward on 2015年01月31日 9時49分 (#2753313)

    面白い着眼点で実行してみたというのはいいと思ったけれど
    これ何か応用を目標として研究してみたとかなのかな
    もしかしたらコードは著作物であるという考えを検証してみるとかの政治的主張だったりするのかしらん

    • 研究者の意図は知らないけれど、たとえば大学の課題なんかで提出したコードや、
      就職活動で自分で書いたというコードを提出してくる応募者がいた時なんかに、

      提出されたコードをこのツールに食わせて、「この人が自分で書いた」という結論が出れば本物。
      「特徴が異なるので別人によるもの」或いは「複数の特徴が混在していて、誰が書いたか不明」という結論が出れば偽物。

      という使い方は出来るかもしれない。

      #筆跡鑑定程度の信頼性かな。
      #「ここにあるコード」と、「以前Aさんが書いたとされるコード」の特徴が一致するかしないか。

      #いずれは偽造の専門家も生まれて、ジェバンニが一晩でやってくれるようになるかもしれないけどさ。

      親コメント
typodupeerror

開いた括弧は必ず閉じる -- あるプログラマー

読み込み中...