666 Python REPOSの5 %がコンマタイプミス( v 8 , sentry , tensorflow , Pytorch )を持っていました.


私たちは、666のPythonのオープンソースのgithubリポジトリの5 %が、Typosに起因する以下の3つのコンマ関連のバグを持っていることを発見しました.

あまりに多くのコンマ
Typo accidentally adding a comma to end of a value , それをタプルに変える

Pythonパーサーが関係している限り、括弧は空でないタプルのオプションです.ドキュメントによると、実際には、カッコではなくタプルを作るコンマです.空のタプルの場合を除き、括弧はオプションです.
value = (1)  # evaluates to int
value = 1,  # evaluates to tuple with one element
value = (1,)  # evaluates to tuple with one element
value = 1, 2  # evaluates to tuple with two elements
値が1でコンマを誤って接尾辞することによって、コードが後でタプルに評価された変数の整数演算を実行しようとするとき、TypeErrorを得ることを期待します.

あまりにも少ないカンマ
Accidentally missed comma from string in list/tuple/set , 不要な文字列連結の結果です.

型の結果として生じる暗黙の文字列連結は、アプリケーションの動作を変更できます.例を挙げましょう.
def is_positive(word):
    words = (
        'yes',
        'correct',
        'affirmative'
        'agreed',
    )
    return word in words

is_positive('agreed') is True  # evaluates to False
is_positive('agreed') 評価するFalse というのは、「肯定的」という意味では、「肯定的」という意味で、「肯定的」という結果になってしまった.
Accidentally missed comma from 1 element tuple , それを作るstr Aの代わりにtuple .

Pythonパーサーが関係している限り、括弧は空でないタプルのオプションです.ドキュメントによると、実際には、カッコではなくタプルを作るコンマです.空のタプルの場合を除き、括弧はオプションです.

バグ検出
我々は、ラインによってリポジトリラインを通過しませんでした.代わりに、我々は我々を通して倉庫を走らせましたsuite of static analysis checks AWSラムダでは、90秒の合計を取る.
主な困難は偽陽性を減少させた.構文的には、リスト内の欠落しているコンマと、目的で行われる暗黙の文字列連結の違いはありません.実際、私たちが最初に「コンマ」をチェックしているチェッカーが最初に書いたとき、私たちは、問題の95 %が実際に偽陽性であることを発見しました.
  • ユーザエージェント文字列
  • ファイルパス
  • URL
  • CSVファイルの内容
  • 非常に長いメッセージ
  • HTML
  • shaハッシュ
  • SQL
  • JSON
  • 666のcodebaseをチェックした後に、それらのタイプのデータのための偽のストリング連結の偽陽性と追加手当の重要なドライバーを理解しました.暗黙のストリング連結をするこれらの正当な理由のために手当を与えたあと、偽陽性率は無視できない非迷惑レベルに下がりました.この時点で我々はコードレビュープロセスを滑った本当のバグを持っていた24リポジトリのリストを残していた.

    どのように一般的ですか?
    全体的に我々は666のリポジトリのうちの24件でこれらのバグを検出しました.我々は問題を提起し、チケットやPRSの管理の非常に忙しい日のコースを修正するのに役立った.ここでは、最も興味深いものです
  • Sentry
  • Tensorflow
  • Pydata's xarray
  • Google's V8
  • PyTorch
  • PyTorch again
  • Pytorch the third
  • rapidpro
  • django-colorfield
  • django-helpdesk
  • リポジトリの5 %はこれら3つのバグの1つであり、それらの大部分は多くの貢献者と非常に強力なコードレビュープロセスを持つ「大きい」よく知られてよく使用されたプロジェクトであった.これは、コードレビューのような手動プロセスでは、100 %のバグの100 %を検出し、100 %の人間が100 %のコードレビューでは、時間の100 %を完全に実行する必要が強調表示されます.認知的不協和を参照してください?コードを書くとき、我々は人間の誤りを予想するが、その後、コードをチェックするとき、人間のエラーを期待しないので、我々はコード批評をします.人間がうまくできるいくつかのことがあります、そして、ボットがよりよくすることができる若干のものがあります.間違った場所のコンマに気付くことはそれらのものの1つです.例えば、

    あなたはその問題を見ることができますか.Line 572 has implicit string concatenation !
    コンマがないので、そうです'"()<>[]:,;@\\"!#$%&\'-/=?^_{}| ~.a"@example.org', '" "@example.org',私は人間に見逃されて驚いた!

    衝撃
    不足しているコンマのいくつかは少しも影響を与えません、しかし、いくつかはむしろ衝撃的です.を取るSentry 一つは例です.
    リストの行方不明コンマに注意してください.

    「解放」と「発見」の間のコンマがあります.そして、2つが暗黙的に「releasesdiscovery」を形成するために連結された結果になります.
    インパクトは“/releasesdiscovery”を要求していないテストを要求しているので、テストの“/release”と“Discover”の代わりに404ページをテストします.それは、我々が知っているすべてのことを意味します.このテストに頼っている組織スイッチャーを維持し、彼らが製品を壊していないという確信を与えるために品質ゲートとしてそれを使用しているいくつかの貧しいデモがそこにあります、しかし、テストは本当に働いていません.それは夜睡眠を傷つけることができるもののこれらの種類です!それはあなたがトラブルにあなたを取得知っていないものではない.それは、あなたが確かにそれでないということを知っているものです.

    コードベースの保護
    を追加することができますCode Review Doctor GitHubのようにこれらのような問題の修正プログラムは右側にあなたのPRの提案されています.