最終ラむン効果の説明

マむクロクロヌンは、非垞に小さなサむズの耇補されたコヌドフラグメントであり、ほんの数呜什たたは行です。 この蚘事では、「最埌の行の効果」、぀たり、マむクロクロヌンの最埌の行たたは呜什が以前の行たたは呜什よりも゚ラヌを含む可胜性が高い珟象を怜蚎したす。 この目的のために、219のオヌプン゜ヌスプロゞェクトず、欠陥のあるマむクロクロヌンに関する263の譊告を調査し、コヌドにこのような゚ラヌを起こした実際のアプリケヌションの6人の著者にむンタビュヌしたした。 孊際的な研究では、このタむプの比范的些现な゚ラヌを匕き起こす心理的メカニズムも研究されおいたす。 調査ずさらなる技術分析の結果に基づいお、いわゆる「シヌケンス゚ラヌ」が最埌の行効果の存圚においお重芁な圹割を果たしおいるず仮定したす。 さらに、その起源を確立できたすべおのマむクロクロヌンは、異垞に倧きなコミットで発芋されたした。 この効果を知るこずは、プログラマヌにずっお2぀の有甚な結果をもたらしたす。



1ミクロクロヌンで間違いを犯す可胜性が特に高い状況を認識しやすくなりたす。



2自動マむクロクロヌン怜出噚/ PVS-Studioを䜿甚できるため、このタむプの゚ラヌの怜出が簡単になりたす。



キヌワヌド



マむクロクロヌン、コヌドクロヌン、コヌドクロヌン怜出、最終ラむン効果、心理孊、孊際的研究。



1はじめに



゜フトりェア開発者は、次のTrinityCoreプロゞェクトの䟋のように、わずかな倉曎を加えお、1行のコヌドを数回連続しお耇補する必芁がありたす。



䟋1



トリニティコア



officeArtブゞェクト







他のオブゞェクトの空間座暙は、座暙x、y、zに察応するフィヌルドに远加されたすが、同じタむプの3行のこのフラグメントの最埌の行にぱラヌが含たれたす。y座暙がz座暙に远加されたす。 実際、最埌の行は次のようになりたす。



officeArtブゞェクト







次の䟋は、人気のあるChromium Webブラりザヌから取埗したもので、1行内の同じ皮類の指瀺で問題の効果の発珟を瀺しおいたす。



䟋2



クロム



officeArtブゞェクト







ホストの空行を二重チェックする代わりに、port_strの2番目のチェックを行う必芁がありたす。



officeArtブゞェクト







䟋1の1行目から3行目は、䟋2の行3のif挔算子の条件ず同様に、互いに類䌌しおいたす。ほずんど同じ繰り返し行たたは呜什で構成されるこのような非垞に短いコヌドブロックは、マむクロクロヌンず呌ばれたす。 ゜フトりェア品質の問題の開発ずアドバむスに関する私たち自身の経隓から、マむクロクロヌンの最埌の行たたは呜什は以前の行たたは呜什よりも゚ラヌを含む可胜性がはるかに高いこずが盎感的にわかりたした。 この研究の目的は、私たちの感芚の真実を怜蚌するこずであり、この研究の枠組みで提起された2぀の質問を決定するのはこの目暙です。





プログラムを曞くずきにコヌドのブロックをコピヌするこずはほずんどのプログラミング蚀語で䜿甚されるため、ほずんどすべおの開発者は最終行の圱響を受ける可胜性がありたす。 同じタむプのいく぀かの連続した呜什の最埌がより゚ラヌが発生しやすいこずを蚌明できれば、䜜成者ずコヌドむンスペクタヌはどのセクションに特別な泚意を払うべきかを知るこずができ、゚ラヌの数を枛らしおプログラムの品質を向䞊させるのに圹立ちたす。



コピヌず貌り付けは、コヌドを䜜成する自然な方法の1぀であり、䟋1および2に䌌おいたす。行ごずのコピヌず貌り付けずコヌドセクションの「耇補」。 これらのメ゜ッドは、最も䞀般的なプログラミングのむディオムの1぀でありKim et al。2004、最小限の物理的および時間的コストで枈むため、安䟡です。 さらに、そのようなコヌドが実行可胜であるこずが知られおいたす。 コヌドの小さなセクションをコピヌするこずはしばしば悪い習慣ず芋なされたすがKapser and Godfrey 2008、これが䞊蚘の䟋のように、プログラムの望たしい動䜜を実装する唯䞀の方法である堎合がありたす。 マむクロクロヌンを怜出し、可胜であれば排陀するために、いく぀かのツヌルが開発されおいたすBellon et al。2007; Roy et al。2009。 これらのツヌルは方法のレベルたで印象的な結果を瀺しおいるにもかかわらず、誀怜出が倚すぎるため、実際のマむクロクロヌン認識にはあたり適しおいたせん。



人気の科孊ブログで最埌の行の効果に関する蚘事を公開した埌、他のフォヌラムで迅速か぀熱狂的に匕甚されたした。 倚くのプログラマヌが私たちの芳察に同意し、議論䞭の効果の背埌に心理的な理由があるこずを瀺唆したした。 ここから、この研究の枠組みにおける3番目の最埌の質問が来たす。





開発者の調査の結果、䟋の培底的な技術分析、心理孊者ずの協力に基づいお、心理的偎面、もしそうであれば、どの偎面が最終行の効果の発珟に圱響を䞎えるかを調べたす。 認知心理孊で長い間芳察されおきた珟象を研究しおきたので、圌らの助けを借りおコヌドのマむクロクロヌンの最埌の行の効果を説明するこずができるかどうかを芋぀けたす。



最埌の行の圱響に関する以前の調査Beller et al。2015に基づいお、次の远加を行いたした。





芳察結果から、䟋1および2で瀺したものず同様に、マむクロクロヌンの最埌の行たたは呜什は、以前の行たたは呜什のいずれよりも゚ラヌを含む可胜性がはるかに高いこずがわかりたす。 この珟象の存圚は、マむクロクロヌンの技術的な耇雑さによるものではなく、心理的な理由によるものず思われたす。これは、䞻にプログラマヌの短期蚘憶を過負荷にするこずに起因したす。 5぀のプロゞェクトに基づく予備調査により、゚ラヌのあるすべおのマむクロクロヌンは、暙準倖の勀務時間䞭に異垞に倧きなコミットで曞き蟌たれたこずが明らかになりたした。 これらの機胜を理解し、自動化されたPVS-Studio静的アナラむザヌを䜿甚するず、それらを自動的に怜出するこずにより、最埌のラむン効果に関連する些现な゚ラヌの数を枛らすこずができたす。



2研究蚈画



私たちの仕事は、C1ずC2の実蚌研究の2぀の郚分で構成されおいたす。 このセクションでは、研究を実斜する手順ずその目的に぀いお説明したす。



2.1研究蚈画C1ミクロクロヌンの最終列効果の有病率ず有病率



5぀の簡単に再珟可胜なステップで構成される研究C1では、マむクロクロヌンの最終列効果の有病率の統蚈分析を行いたした。 さらに、マむクロクロヌンの䜜成プロセスに光を圓おるために、コヌドの元のセクションずそのコピヌを識別するための远加䜜業を行いたした。



  1. すべおの蚺断を有効にしおPVS-Studioツヌルを䜿甚しお、研究オブゞェクトの静的解析を実行したす。 PVS-Studioはロシアの䌚瀟OOO Program Verification Systems LLCによっお開発された商甚の静的アナラむザヌであり、Cの特定のラむブラリ関数を䜿甚しお、コヌドのクロヌンブロックの怜出からプログラミングのアンチパタヌンたで、倚数の蚺断ルヌルが含たれおいたす。 PVS-Studioのオヌプンアクセス無料詊甚版。



  2. PVS-Studioレポヌトを調べお、マむクロクロヌンに関連しないメッセヌゞだけでなく、誀怜知も削陀したす。



  3. 欠陥のあるマむクロクロヌンごずに、コヌドの行の総数RQ 1たたは呜什RQ 2をカりントし、゚ラヌが衚瀺される行たたは呜什を瀺したす。 可胜であれば、元のコヌドセクションずそのコピヌを決定したすたずえば、䟋6では、オリゞナルは2行目で、コピヌは3行目です。



  4. 研究を開始するず、デフォルトでは、長さn行の欠陥マむクロクロヌンでは、各行の゚ラヌ確率は、怜蚎䞭のフラグメント内のその数に関係なく1 / nであるずいう仮定から進められたす仮説H0。 たずえば、2行のブロックの1行目ず2行目の゚ラヌ確率は同じ0.5です。 ただし、段階3で、線に沿った誀差の分垃が有意氎準の䞀様分垃ずは倧きく異なるこずを瀺すこずができる堎合 officeArtブゞェクト 、垰無仮説を棄华し、゚ラヌが䞍均䞀に分垃しおいるず仮定したす。 n行の長さごずに、ピア゜ンの䞀臎基準が䜿甚されたす officeArtブゞェクト 芳枬デヌタず垰無仮説分垃1 / n間の察応を確立するための自由床n-1



  5. ステップ4で掚定分垃ず実際の分垃の間に倧きな䞍䞀臎が芋぀かった堎合、それらの間のオッズ比を、最埌の行の効果の発珟の匷床の盎芳的な尺床ずしお蚈算したすBland and Altman2000。


2.2研究蚈画C2最終行の圱響の原因の分析



研究C1の最埌の行の効果の存圚を確立したので、今床は原因の特定を詊みる必芁がありたすRQ 3。 このために、我々は認知心理孊の分野での研究の結果に基づいお、認知心理孊の教授であるロルフ・ズワヌンが助けおくれた初期仮説を立おたした。 仮説を確認し、開発者の実践から蚌拠を収集するために、C1研究で芋぀かったマむクロクロヌンを䜜成したプログラマヌにむンタビュヌしたした。 圌らのコメントず所芋は、最終行の効果の存圚を説明する予備バヌゞョンを開発するのに圹立ちたす。 欠陥のあるマむクロクロヌンに関する著者が正確に確立されおいる人だけに回答者の茪を狭めるこずで、次のこずが可胜になりたす。1回答者が盎接関係しおいる特定の䟋に焊点を圓おるこず。 2議論されたマむクロクロヌンの䜜成を担圓したのはこれらの開発者であるこずが確実であるため、最も有甚な回答を埗るため。



図 図1は、調査の䞀般的な蚈画を瀺しおいたす。 䞻なタスクは、マむクロクロヌンの䜜成者ずの連絡を確立するこずです倚くの堎合、プロゞェクトの最新バヌゞョンには欠陥コヌドがありたせん。 蚈画には4぀の䞻芁な段階が含たれたす。



  1. マむクロクロヌンのプロゞェクトず䟋はランダムに遞択されたす。C2研究の䜜業は面倒なプロセスであり、䟋の著者ずの連絡を確立し、個々の調査を実斜する必芁があるためです。 「コヌルドコヌル」に察するレスポンダヌの暙準的な割合は30であるずいう事実に基づいお、認知心理孊の芳点から最終ラむン効果の存圚を説明する初期仮説を策定するのに十分な情報を䞎える3぀の成功した投祚を圓おにできたす。 各マむクロクロヌンを分析するずきは、このプロゞェクトで採甚されおいる開発ルヌルに粟通し、リポゞトリを調査する必芁がありたす。



  2. 次に、プロゞェクトの゜ヌスツリヌでマむクロクロヌンを芋぀けたす。 ゚ラヌの倚くは以前の芳枬結果の公開埌に修正され、珟圚のブランチには存圚しないため、この段階ではさたざたな怜玢戊略の適甚を䜙儀なくされおいたす。 たず、C1調査が実斜された日からリポゞトリを調査したす。 倱敗した堎合-たずえば、マむクロクロヌンに隣接するコヌドがリファクタリングされた堎合たたは倉曎の履歎が䞊曞きされた堎合-プロゞェクトのバグトラッカヌで怜玢を䜿甚しお、修正が行われたコミットを芋぀けたす。 この手順でも結果が埗られない堎合は、すべおのプロゞェクトコミットに察しおフルテキスト怜玢agツヌルを䜿甚を䜿甚したす。



  3. オリゞナルのマむクロクロヌンが発芋されたら、git blameツヌルを䜿甚しおその履歎をトレヌスし、行われた修正に関する情報を取埗し、このコヌドの䜜成者を確立したす。



  4. 最埌に、git blame -eコマンドを䜿甚しお開発者の電子メヌルアドレスを芋぀けたす。 回答者の割合を高めるために、むンタヌネットを怜玢しお回答者に関する远加情報を収集したす。これにより、メヌルアドレスの関連性を刀断できたす。 最も正盎な回答を埗るために、回答者に個人デヌタを開瀺しないこずを保蚌したす。 次に、各開発者に、䜜成者のマむクロクロヌンのテキスト、倉曎/修正の履歎、゚ラヌのコンテキスト、および調査の理由の説明ず付録を蚘茉した電子メヌルを送信したす。


officeArtブゞェクト







図 1-調査蚈画C2



2.3調査察象



他の研究者による研究の再珟を促進するために、私たちはよく知られたオヌプン゜ヌスプロゞェクトを奜みたした。 C1の調査で調査した219のプロゞェクトのうち、Audacityオヌディオ゚ディタヌ1䟋、Chromium9およびFirefox9Webブラりザヌ、libxml1XMLラむブラリヌ、MySQLデヌタベヌスなどの有名なプロゞェクトで誀ったマむクロクロヌンが芋぀かりたした1およびMongoDB1、C clang14蚀語コンパむラヌ、Quake III3およびUnreal 425FPSシュヌティング、Blender4コンピュヌタヌグラフィックス䜜成甚パッケヌゞ、3次元モデリングおよび芖芚化VTK甚プログラム 8、ネットワヌクプロトコルSamba4およびOpenSSL2、ビデオ゚ディタヌVirtualDub3、およびプログラミング蚀語PHP1。 C2を研究するために、Chromium、libjingle、Mesa 3D、およびLibreOfficeプロゞェクトから10個のマむクロクロヌンを遞択したした。



2.4研究再珟ノヌト



他の研究者の䜜業を容易にするために、すべおの初期デヌタず蚺断を含む特別なパッケヌゞを甚意したした。 これには、2぀のディレクトリにグルヌプ化されたすべおのフィルタリングされおいないPVS-Studioメッセヌゞが含たれたす。findings_old /には 、プログラム可芖性に関する囜際䌚議ICCBeller et al.2015の蚘事で䜿甚された叀いデヌタが含たれたすこの蚘事で䜿甚されるデヌタ。 さらに、パッケヌゞには、圓瀟が分析し、プロゞェクトごずに分類されたマむクロクロヌン analyze_data.csv 、デヌタ評䟡付きのスプレッドシヌト evaluation.ods 、および研究C1およびC2のリポゞトリヌの分析結果が含たれたす。 たた、この蚘事の結果ず図を再珟するRスクリプトを远加したした。 最埌に、パッケヌゞには、回答者ぞの質問を含むアンケヌトテンプレヌトが含たれおいたす。



3マむクロクロヌンの怜出方法



このセクションでは、重耇するコヌドフラグメントを怜出する埓来の方法を調べ、それらがマむクロクロヌンの怜玢に適さない理由を説明し、独自の静的分析蚺断を䜿甚しおこの問題を回避する方法を瀺したす。 さらに、マむクロクロヌンの元のセクションずコピヌがどのように決定され、コミットのサむズがどのように考慮されたかを瀺したす。



3.1最新のコヌドクロヌン怜出ツヌルが私たちのタスクに適さない理由



䟋1ず2が瀺すように、この蚘事のフレヌムワヌクで怜蚎されるコヌドフラグメントは、テキスト内で完党に䞀臎するか、「倉数、型、たたは関数の識別子のみが異なる同じ構文構造を持぀クロヌン」を含みたすKoschke 2007。 このため、これらは非垞に小さいサむズ通垞は5行/呜什未満のタむプ 1 たたは 2のクロヌンです。これらをマむクロクロヌンず呌びたす。



重耇コヌドを怜出する埓来の方法は、トヌクン、コヌド行、抜象構文ツリヌASDのノヌド、たたはグラフKoschke 2007を比范するこずです。 ただし、実際には、これらのアプロヌチのいずれかで、停陜性の割合を枛らすために、任意の枬定単䜍トヌクン、呜什、文字列、たたはASDノヌドで最小クロヌンサむズを決定する必芁がありたす。 原則ずしお、この倀は5-10単䜍の領域で取埗されBellon et al。2007; Juergens et al。2009、これは怜蚎䞭のマむクロクロヌンのサむズ2-5単䜍よりもはるかに倧きく、それらを怜玢するこずはできたせん。



そのため、䟋1では、行1〜3はマむクロクロヌンのクラスを衚したす。 3぀の行があるため、この䟋ではこのクラスを3回繰り返しお瀺したす。 同様に、各むンスタンスは倉数、割り圓お操䜜、割り圓おられたオブゞェクト、およびそのフィヌルドで構成されおいるため、長さは4ナニットです。



3.2欠陥のあるマむクロクロヌンの怜出に䜿甚される方法



実際には、埓来の怜玢方法ではマむクロクロヌンを確実に怜出できないため、独自のアプロヌチを䜿甚したした。 私たちのタスクは、マむクロクロヌンを怜出するこずではなく、゚ラヌを含むマむクロクロヌンのみを怜出するこずです。 この远加の制限を考えるず、通垞の文字ごずの䞀臎に基づいおマむクロクロヌンを怜出する匷力な蚺断のセット党䜓を開発するこずができたした。 これらの蚺断は、小さなフラグメントのコピヌに起因する可胜性が最も高いコヌドの欠陥セクションを芋぀けるこずができたす。 衚の䞭。 è¡š1に、この調査の䞀郚ずしおマむクロクロヌン゚ラヌを怜出した12個の蚺断すべおをリストしお説明したす。 最埌の列は、このタむプの譊告の総数に察する単䞀および耇数行クロヌンの数の比率を瀺しおいたす。 たずえば、V501の蚺断では、䞀郚の論理挔算子のオペランドが同䞀であるかどうかのみが刀断されたす。 答えが「はい」である堎合、最良の堎合、それは将来、最悪の堎合にはプログラムのサポヌトを耇雑にする可胜性のある䜙分なコヌドです-本圓の間違い。 他の蚺断法は、V501ほどマむクロクロヌンに関しお高床に専門化されおいたせん。 526個の譊告をそれぞれ調査し、実際のマむクロクロヌンの272ケヌスのみを調査察象ずしお遞択したした。 テヌブルから。 1たた、マむクロクロヌンの78が1぀の蚺断V501によっお怜出され、3の非垞に䜎い停陜性率であるこずがわかりたす。 他の蚺断は、マむクロクロヌンではないコヌドのセクションで動䜜する可胜性が高くなりたす。



è¡š1-PVS-Studioでの怜疫枈みの゚ラヌの皮類ず219のオヌプンプロゞェクト間の゚ラヌの分垃







è¡š1-PVS-Studioで怜出された゚ラヌの皮類ず219のオヌプンプロゞェクト間の゚ラヌの分垃



3.3誀ったマむクロクロヌンの起源の確立方法



質問RQ 3に答えお、最終行の効果の存圚の理由を適切に議論するために、マむクロクロヌンの各クラスで、コヌドの元のコピヌず、そこからコピヌされたず思われるコピヌも芋぀けたした。 このような経隓的分析では、コピヌ手順がその方向に進んだずいう100の確実性は埗られたせんが、少なくずも䞀郚の開発者がこの方法でコヌドを機械的に耇補するずいう十分な蚌拠がありたすRQ 3を参照。 ほずんどの堎合、マむクロクロヌンの2぀のコピヌのうちどちらがオリゞナルで、どちらがコピヌであるかをすぐに刀断できたす。 したがっお、䟋1では、゚ラヌを含む行3には行2からのコヌドのトレヌスが含たれおおり、これは行2元の行3コピヌぞの圱響を意味したす。 元の行ずコピヌの同様の自然なシヌケンスは、ほずんどのマむクロクロヌンで芳察されたす-たずえば、䟋1の倉数x、y、zのシヌケンス、たたは数倀のように、蟞曞匏順序であっおも



䟋3



Cmake



officeArtブゞェクト







䟋1および3のように、元のコピヌずコピヌの自然な配眮が明瀺的に衚珟されおいない堎合でも、䟋2のようにコンテキストによっお埩元できたす。2行目にport_strを配眮し、2行目にホストを配眮するのは順序に反したす。これらの倉数が事前に定矩されおいる堎合、最初の呜什ホストを意味したす= buzz :: STR_EMPTYがオリゞナルで、2番目がコピヌです。



考慮された䟋でコピヌの起源を確立するプロセスでは、2぀の問題が発生したす。぀たり、1コピヌされた領域のサむズは倉化する可胜性がありたす。 2重耇の長さが4を超えるマむクロクロヌンは、少ない䟋で衚されたす。 ただし、異なるサむズのマむクロクロヌンのデヌタを䞀般化できるように、各マむクロクロヌンiに぀いお蚈算したす officeArtブゞェクト それは私たちに遠隔性の皋床を䞎えたす officeArtブゞェクト 。



遠隔床1は、䟋4のように、盎前の行/呜什からコピヌするこずを瀺したす。倀0マむクロクロヌンの同じ行で゚ラヌが発生したした。 倀-1は、コピヌの逆順を瀺したす。2番目のナニットから最初のナニットぞ



䟋4



UnrealEngine4



officeArtブゞェクト









この䟋の1行目では、 cyの代わりにcx。IsRelativeを期埅するのが自然です。IsRelativeは、2行目のコピヌの可胜性を瀺しおいたす。 同様の名前の倉数を䜿甚するロゞック、および3行目ず4行目の順序は、コピヌが最初の行でreturn cx。IsRelativeで始たるこずを瀺しおいたす。



ここから、遠隔の床合いを取埗したす officeArtブゞェクト たたは officeArtブゞェクト 、耇補されたセクションの合蚈サむズに関係なく、1行たたは2぀の隣接する耇補の2぀の耇補がすぐ近くにあるこずを瀺したす。



3.4コミットサむズの考慮方法



欠陥のあるマむクロクロヌンを含む各コミットのサむズず残りのコミットのサむズの比率を蚈算しお衚瀺するには、たずリポゞトリ内の各コミットの倉動性を蚈算したす。 これを行うには、 git logツヌルを䜿甚したす 。これにより、リポゞトリ内のすべおのコミットマヌゞを陀くの順序付きグラフを䜜成し、各コミットで远加および削陀されたコヌドの行数を明らかにできたす。 これらの数倀の合蚈は、倉曎された行の合蚈数を瀺したす。 各コミットのボラティリティの量。 次に、欠陥のあるマむクロクロヌンを含むコミットの倉動性を、残りのコミットでのこのパラメヌタヌの分垃、特に䞭倮倀ず比范したす。 サンプル10個のサンプルは信頌できる統蚈分析には小さすぎたすが、このアプロヌチでは、コミットサむズの違いに぀いお合理的な結論を出すこずができたす。 誀った分垃を扱っおいるため、䞭倮倀を䜿甚したすたずえば、平均倀ではありたせん。 䞭倮倀は独立した実際の意味であり、他の同様の意味ず比范したす。



4件



このセクションでは、䟋を調べお統蚈的評䟡を実斜するこずにより、欠陥のあるマむクロクロヌンをより詳现に調査したす。



4.1結果の䞀般的な説明



衚の䞭。 2䞻な統蚈は、研究C2の結果に埓っお収集されたす。 2011幎半ばから2015幎7月たでの期間、219のオヌプンプロゞェクトでPVS-Studio蚺断のフルセットを䜿甚したした。 ゜フトりェア開発のコンサルティングを専門ずするAndrey Karpovは、特定の各プロゞェクトの怜蚌時に利甚可胜な最新バヌゞョンのPVS-Studioを䜿甚しお、これらすべおのプロゞェクトの分析を行いたした。 圌は、コヌドの朜圚的な欠陥を瀺す合蚈1,891の譊告を残しお、誀怜知を陀倖したした。 これらの譊告は162の蚺断によっおグルヌプ化されたした。 次に、各メッセヌゞを調べお、そのうちの272が12の蚺断によっお発行され、マむクロクロヌンに関連しおいるこずを発芋したした。 9぀のケヌスでメッセヌゞが耇補されたため、最終的に263個のマむクロクロヌンが残りたした。 プロゞェクトレベルでの統蚈分析は、遞択したプロゞェクトの半分で蚺断が欠陥クロヌンを認識できたこずを瀺しおいたす。 これらのケヌスのほずんどすべお92には、最埌の行の効果を持぀少なくずも1぀の䟋が含たれおいたす。



è¡š2-調査結果の統蚈







è¡š2-調査結果の統蚈



タブ。 3には、263個のマむクロクロヌンで怜出された゚ラヌの抂芁が含たれおいたす。 合蚈で、耇数行のクロヌンの74には最埌の行に゚ラヌが含たれ、90の単䞀行のクロヌンには最埌の呜什が含たれたす。



è¡š3-調査結果の芁玄







è¡š3-調査結果の芁玄



4.2結果の詳现分析



マむクロクロヌンの怜出に䜿甚した蚺断の原理をより完党に理解するために、以䞋では、マむクロクロヌンに関連する263のPVS-Studio譊告の最も明らかな䟋をいく぀か芋お、衚から最も䞀般的な゚ラヌを特定したす。 1。



4.2.1 V501-等しい郚分匏



衚からわかるように。 1、ほずんどのマむクロクロヌン譊告はV501蚺断によっお発行されたした。 以䞋は、Chromiumブラりザからのこのような゚ラヌの兞型的な䟋です。



䟋5



クロム



officeArtブゞェクト







これは1行のマむクロクロヌンで、2番目ず3番目の郚分匏は完党に同䞀ですが、同時に論理挔算子OR || で接続されおいるため、匏が冗長になりたす。 実際、姓 NAME_LAST を確認する必芁がありたした。これは、この3぀のナニットのブロックの最埌の行効果です。



4.2.2 V517-同䞀の条件匏



Diagnostics V517は、ifステヌトメントの2぀のブランチに察しお同じ条件を怜出したす。



実斜䟋6



linux-3.18.1



officeArtブゞェクト







行9の3番目のマむクロクロヌンの埌のelse ifステヌトメントの本䜓はデッドコヌドです。これは、実行のスレッドが到達しないためです。 スロット倀が0の堎合は、最初の条件ですでに凊理されたす。



4.2.3 V519-倉数に同じ倀を割り圓おる



(, , , , ), , . MTASA m_ucRed , m_ucBlue .



7



MTASA



officeArtオブゞェクト







V519 «» , , 8:



8



linux-3.18.10



officeArtオブゞェクト







f->fmt.vbi.samples_per_line , . , , 1 . , , (, , ) - . Release: , , .



4.2.4 V523 —



if- , , Haiku :



9



Haiku



officeArtオブゞェクト







, , else mpa_size - . , 3 , « », .



4.2.5 V524 —



. 10 5 PerPtrBottomUp.clear() . , officeArtオブゞェクト 。



10



Clang



officeArtオブゞェクト







4.2.6 V537 —



V537, , Quake III. PVS-Studio rectf.X :



11



Quake III



officeArtオブゞェクト







(.. ) y- rectf.X .



4.2.7 V656 —



V656 , . , . , , , , . , V656, LibreOffice.



12



LibreOffice



officeArtオブゞェクト







maSelection.Max() aSelection , .



4.2.8



12, . Chromium — 12 , (. . 4):



13



Chromium



officeArtオブゞェクト







2 data_[M02] , :



 4 -      ??  2







4 — ?? 2



4.3



. 4 158 , . 5 — 105 . . , 2 . , , .



 5 -







5 —



. 4 5 officeArt object p = 0,05, , . p-, , . 2-6 . 4 2-4 . 5。



RQ1 RQ2, p- 2, 3, 4, 5 6 2, 3 4 (p < 0,05). , / . . , , , . . 4 5.



: « /» « /» (. . 3). , , 1, , . . 4, 2, 4 5 ( ) . , 2, : 9,5 , . 72 , .



, , /, RQ 1 RQ 2.



4.4



, , , . RQ 3 :





, .



. 6 . , . , 263 245.



 6 -   ( )     ( )







6 — ( ) ( )



図 2 . , 165 245 (67%) . — 18 %, (9%) (3%). 4% . , , , . , : , . 117 /, , 33 (28%). 4,9 , , 20% , . 28% , , . , , .



officeArt object









図 2 — () ()



図 2 , officeArt object (. 3.3). , 84% (220 245), .. officeArt object



89% (195 220) officeArt object たたは officeArt object 。 , . , .. officeArt object (3 220). , , , 81% (66 81). , :



  1. . , .
  2. , . , .


4.5



C2 , . . , :



  1. (.. ).
  2. .
  3. , .
  4. .


. 7 , . Skype. , , , , . I1-I7 ID- . , , - . . I1, I2, I4, I6 I7 . , .



 7 -           6.10.2016







7 — 6.10.2016



, . , , , . 7b37fbb I1 , ( . 7 ), , ( 6b7fcb4 ).



I1 :



14



I1



officeArt object







, -, , !has_mic !has_audio . , , . , « - », , « , ». , - , , , !a && !a .



I4 , , , , :



15



I4



officeArt object









, field.type == trans(«string») ||, , :



16



I4



officeArt object









, « , ». , , , -. (. 3.3), , , . , . I4 , , « ». I1, , .



I6 , « , [...] , ». , « ». , I6 -, . « ». , , « , ». I6 , , « , ». , «», . « . -. , [...], ».



I7 :



17



I7



officeArt object









圌の蚘憶によるず、圌は「コピヌペヌストを䜿わずにこの行を入力しただけ」で、「明らかに急いでコヌドを泚意深く読んでいたようだ」ずいう゚ラヌを逃したした。 回答者は、このコミットの䜜成の正確な日付を思い出すこずができたせんでしたが、圌は「ほずんど垞に倚くの仕事がありたす」ず述べたした。



アンケヌトの結果から、コミットのサむズは、欠陥のあるマむクロクロヌンが回答者が蚀及したさたざたな手段ず保護メカニズムによる怜出を回避する可胜性が高い芁因の1぀であるず結論付けるこずができたす。 この仮定が正しい堎合、そのようなマむクロクロヌンを運ぶコミットは異垞に倧きくなるはずです。 「異垞に倧きい」の定矩は盞察的な倀を瀺し、リポゞトリ内のコミットを比范する堎合にのみ意味がありたす。 このこずを念頭に眮いお、マむクロクロヌンに欠陥があるコミットのサむズを、各プロゞェクトのコミットのサむズの䞭倮倀ず比范したした。これを図に瀺したす。 3.埗られたデヌタは、すべおの堎合においお、欠陥のあるマむクロクロヌンを含むコミットのサむズが䞭倮倀よりも数桁倧きいこずを瀺しおいたす。



officeArtオブゞェクト









図 3-リポゞトリの履歎党䜓のコミットのサむズの䞭倮倀青い砎線および欠陥のあるマむクロクロヌンを含むコミットのサむズ察数スケヌルでの倉動の倧きさで衚されるオレンゞの砎線



4.6結果の有甚性



オヌプン゜ヌスプロゞェクトで倚くの朜圚的な゚ラヌを発芋したので、オヌプン゜ヌス開発者のコ​​ミュニティを支揎し、著者がそれらを修正するのに十分重芁な゚ラヌを芋぀けたかどうかをチェックしたかった。 これを行うために、プロゞェクトバグトラッカヌにコメントを投皿したした。 その結果、メッセヌゞの倚くが考慮され、プロゞェクトコヌドの品質が向䞊したした。 そのため、䟋2Chromiumプロゞェクトの怜蚌゚ラヌが修正されたした。 怜玢ク゚リpvs-studioバグ| この問題は、Firefox、libxml、MySQL、Clang、samba、および他の倚くのプロゞェクトでの倚数の線集に関するメッセヌゞを発行したす。これは、調査の結果によっお促進されたした。 たずえば、2016幎10月11日のcaff670 コミットで、 2005幎以降にSambaコヌドに存圚しおいた欠陥のあるマむクロクロヌンを修正した堎合です。



5調査結果の分析



このセクションでは、゚ラヌパタヌンに぀いお収集した情報ず、゚ラヌの根底にある心理的メカニズムに関するデヌタを組み合わせたす。 結論ずしお、結論の劥圓性を脅かす可胜性のある芁因を怜蚎したす。



5.1最終行の効果の技術的な耇雑さおよびその他の技術的理由



最終行の圱響の技術的な理由ずしお、他の行ず比范しお最終行の技術的な耇雑さが高く、その結果、゚ラヌの玠因が倧きくなる可胜性がありたす。 たずえば、コンパむラはチェック時に最埌の行をスキップするか、コヌドがIDEりィンドりに曞き蟌たれ、マむクロクロヌンの最埌の行が珟圚のコヌド゚ディタりィンドりの最埌の行でもあるずきにチェックに倱敗する堎合がありたす。 ただし、次の理由により、これらの考慮事項は正しくありたせん。



  1. 原則ずしお、最新のIDEは構文のチェックが遅れる傟向はありたせん。
  2. マむクロクロヌンの最埌の行たたは呜什は、構文に関しお正しいです。 コンパむラヌは、問題にプログラマヌの泚意を匕く譊告を発行できたせん。


䞀方、IDEに蚺断を含めるず、マむクロクロヌンを怜出するコンパむラヌを䜿甚するず、゚ラヌがコミットされる前に芋぀けやすくなりたす。



別の技術的な理由は、いく぀かの呜什のシヌケンスでは、最埌の呜什を他の呜什よりも䜜成するのが難しいずいう事実に関連しおいる可胜性がありたす。 ただし、䟋1、2、5、7、および11が瀺すように、逆のこずが圓おはたりたす。すべおの耇補は1぀のテンプレヌトに埓っお䜜成されるため、最初のテンプレヌトのみが最倧の難易床を持ちたす。 オリゞナル、それ以降はすべおコピヌのみです。



5.2心理的メカニズムず原因



最埌の行の効果の存圚は技術的な理由によるものであるずは疑わしいので、その根底にあるかもしれない心理的メカニズムを考慮すべきです。 盞談のために、認知心理孊の教授この蚘事の4番目の著者に目を向けお、圌に私たちの芳察結果を提瀺したした。 この段階では、より培底的な研究には心理実隓が必芁になるため、結論は予備的なものであり、欠陥のある重耇の原因の分析から再構築できないミスを犯すプロセスを盎接芳察するこずができたすセクション3.3を参照および回答者の回想参照。セクション4.5。



認知心理孊では、䞀連のアクションの゚ラヌは、日垞的な操䜜䞭に発生する゚ラヌです。 このタむプの゚ラヌは、専門家によっお広範に研究されおきたしたAnderson 1990。 このような間違いの兞型的な䟋は、牛乳を1回泚いでから砂糖を入れる代わりに、コヌヒヌに2回牛乳を加えた堎合です。 マむクロクロヌンの起源の分析結果が瀺すように、開発者はコヌドをコピヌする際にさたざたな機械的手法ずアルゎリズムの兵噚庫を䜿甚したす。 次のアルゎリズムのいずれか「[元のフラグメントを曞き蟌む]、[元のコピヌ]、[元のコピヌ]、...、[コピヌの線集]、[コピヌの線集]、...」投祚I4、I6を参照。 それずずもに、アルゎリズムが適甚されたす「[元のフラグメントを曞き蟌む]、[元のコピヌ、コピヌを線集]、[元のコピヌ、コピヌを線集]、...」極端な堎合、デヌタセットでは、このアルゎリズムは最倧34回繰り返されるようです。 マむクロクロヌンを䜜成するずき、さたざたな方法が䜿甚されるずいう事実にもかかわらず、それらはすべお、自動操䜜ず意識的操䜜の異なる比率を持぀䞀連のアクションになりたす。 したがっお、認知心理孊の芳点から芋るず、開発者がマむクロクロヌンで行った゚ラヌは、䞀連のアクションの兞型的な゚ラヌです。



詳现には違いがありたすが、すべおのシヌケンスモデルは、この皮の゚ラヌの䞻な原因は明らかに認知ノむズであるこずに同意しおいたすBotvinick and Plaut 2004; Cooper and Shallice 2006; Trafton et al.2011。 この堎合、ノむズずは、珟圚のタスクに関係のない衚珟を意味し、プログラマの泚意をそらしたす。 ノむズは、タスクのタむミングの制限などの倖郚芁因、たたは倧芏暡なコミットなどの内郚芁因によっお匕き起こされるストレスによっお生成される可胜性がありたす。 シヌケンス制埡モデルは、最埌の行の効果の根底にある可胜性のある心理的メカニズムに぀いお掚枬するこずを可胜にする有甚な理論的基瀎を提䟛したす。 この段階では、マむクロクロヌンの特定の䟋ずコヌド内でのそれらの䜍眮に関する情報しかありたせんが、それらの発生の詳现はわかりたせん。 それでも、セクション4.4に瀺すように、むンタビュヌした開発者の回答ずマむクロクロヌンの起源の分析結果により、マむクロクロヌンの衚瀺方法に぀いお合理的な結論を導き出すこずができたす。 コピヌず線集は、コヌドを曞くずきにプログラマヌによっお実行される䞻な操䜜です。 䟋1をもう䞀床芋おみたしょう。ここでの線集操䜜は、倉数名の線集ず倀の線集ずいう2぀の小さなステップで構成されおいたす。



䟋1



トリニティコア



officeArtオブゞェクト









゚ラヌは3行目にありたす。この行は2行目をコピヌするこずで䜜成されたようです。最初の眮換は成功したした倉数名はyからzに倉曎されたしたが、2番目のステップ倀の線集はスキップされ、゚ラヌになりたした。 理論的には、このコヌドは、行1を二重にコピヌし、結果の耇補を線集するこずで䜜成できたす。 ただし、3行目のxの代わりに倉数名yを䜿甚するず、2行目がコピヌされたず考える理由がわかりたす。 セクション4.4に瀺すように、2行より長いほずんどのマむクロクロヌンでは、通垞、前の行がコピヌされたす。 そのような堎合、アルゎリズムが䜿甚されたこずになりたす「[コピヌ、線集、線集]、[コピヌ、線集、線集]、...」



シヌケンス制埡モデルによるず、このタむプの゚ラヌは認知ノむズが原因で発生したす。これは、同じタむプの䞀連の操䜜の終わり近くで発生する可胜性が最も高いです。プログラマヌの泚意が、たずえば新しいコヌドの䜜成など、次のタスクに時期尚早に切り替わるためですポヌリングI6を参照。 既に述べたように、認知ノむズの原因を説明するわずかに異なるバヌゞョンがいく぀かありたす。 䟋ずしお、間違ったアクションプランを遞択しお、最埌の行の効果を説明するバヌゞョンCooper and Shallice 2006を提䟛したすたずえば、開発者は珟圚のフラグメントの完成に集䞭するのではなく、すでに次の行に移動しおいたす。



むンタビュヌしたプログラマヌの誰も、マむクロクロヌンの䜜成䞭に過床に高いレベルのストレスを蚎えたこずはありたせんでしたが、回答者I6ずI7の蚌蚀は他ずは異なりたす圌らは䞀般に高い䜜業負荷ずコヌドを曞くこずでより速く前進したいずいう欲求を指摘したした 衚に埓っお、欠陥マむクロクロヌンを含むコミットを䜜成するための珟地時間の分析 7は、必須の勀務時間䞭に䜜成されたのはそのうち2぀だけであり、残りのプログラマヌは勀務時間倖にコヌドを䜜成したしたが、勀務䞭に䜜成したこずを瀺しおいたす。 疲劎は脳のパフォヌマンスを䜎䞋させ、短期蚘憶に悪圱響を䞎えるこずが知られおいたすKane et al。2007。 おそらく疲劎ず速攻は、欠陥のあるマむクロクロヌンの出珟に重芁な圹割を果たしたす。



さらに、欠陥のあるマむクロクロヌンを含むすべおのコミットリファクタリングを含むのサむズが非垞に倧きく、リポゞトリのコミットの暙準サむズよりも桁違いに倧きいこずがわかりたした。 これは、コミットのサむズが認知的ノむズを匕き起こす重芁な芁因ではないにしおも、重芁であるずいう考えに私たちを導きたす。そのため、゚ラヌは気付かれたせん。 この結論は、短期蚘憶のオヌバヌロヌドに関するバヌゞョンず、最終コヌドを倧量に制埡するこずは非垞に難しいずいう回答者I1の発蚀ずよく䞀臎しおいたす。



䞖論調査の結果から、短呜の欠陥のあるマむクロクロヌンは゜フトりェア開発の分野で広たっおいる珟象であるこずがわかりたすが、それらは通垞、初期段階で、たたは少なくずも独立しお、たたは同僚の助けを借りお行われたコヌドをレビュヌするプロセスで怜出されたすBeller et al.2014 したがっお、残りの修正されおいないマむクロクロヌンで芳察された認知゚ラヌは、プログラミング゚ラヌだけでなく、レビュヌ゚ラヌHealy 1980でもあり、コヌドのレビュヌ䞭に開発者が最埌の行や他の行の欠陥に気付かないずいう事実に基づいおいたす。 実際、私たちの䞖論調査では、明らかに、コミットでキャッチされたマむクロクロヌンで、そのような゚ラヌが2回行われたこずを瀺しおいたす。1回は䜜者によるコヌドのレビュヌ時で、もう1回は同僚によるコヌドの削陀時です。 前の行よりも高い確率で最埌の行に゚ラヌが衚瀺されるのは、おそらく、シヌケンス゚ラヌであるためです。 人は、珟圚のタスクレビュヌを完了する時間を持たずに、次のタスクたずえば、コヌドの次の郚分を曞くに粟神的に切り替えたす。 別の説明では、次の同様の指瀺が連続しお行われおいるため、゚ラヌは目立たないこずを瀺唆しおいたす。 さらに、元のコピヌずコピヌの芖芚的な類䌌性により、個々の行を認識しにくくなる可胜性がありたす。 コヌドレビュヌの問題に関する研究は、フラグメントの類䌌性単語の繰り返しの頻床に珟れるにより、レビュヌ担圓者が校正に費やす時間が少なくなり、テキストの゚ラヌを認識する胜力に悪圱響を䞎えるこずを瀺しおいたすMoravcsik and Healy 1995。



最埌の行の効果の発珟のすべおの朜圚的な芁因は、認知ノむズのためにプログラマの泚意の量が枛少する状況で、この皮の間違いを犯す可胜性の増加に関連付けられおいたす。 その発生の考えられる原因は、䞻に倧芏暡なコミット、重いワヌクロヌド、ストレス、泚意散挫、疲劎に関連しおいる可胜性がありたすO'Malley and Gallas 1977。 逆に、私たちの芳察は、倖郚ノむズぞの応答を制埡する開発者の胜力Fukuda and Vogel 2009、すなわち タスクに集䞭できるかどうかは、シヌケンス゚ラヌのあるマむクロクロヌンの可胜性に倧きく圱響したす。



5.3研究結果の劥圓性を脅かす芁因



このセクションでは、結果の劥圓性に察する内郚および倖郚の脅嚁を怜蚎し、それらの圱響を最小限に抑える方法も瀺したす。



5.3.1内郚芁因



䞻な内郚芁因の1぀は、゚ラヌがどの行にあるかを正しく刀断するこずです。 したがっお、䟋2では、​​2぀の呜什のいずれもコピヌずしお取埗できたす。 ただし、コヌドの読み曞きは通垞、䞊から䞋、巊から右に行われたすSiegmund et al。2014。 したがっお、行ず呜什の゚ラヌの配眮が同じ順序に埓うこずを考えるのは自然であり、単に正しいでしょう䟋2では、​​2番目の呜什がそれを読み取るこずによっおのみ最初の呜什のコピヌであるこずが理解できるため、2番目の呜什を欠陥ずしおマヌクしたす。 さらに、倚くの堎合、この䟋のように、最も近いマむクロクロヌンコンテキスト䟋2では、 ホスト倉数が最初に宣蚀され、次にport_strが宣蚀されたすは、プログラムテキストの残りの自然な順序を蚭定したす最初にホストをチェックし、3行目のport_strをチェックしたす  。 研究者のバむアスの朜圚的な圱響を最小限に抑えるために、デヌタは最初の2人の著者間で独立した凊理のために配垃され、論争のあるケヌスが共同で議論されたした。 結果に぀いお合意に至らなかった堎合、华䞋されたした。 䜜業の過皋で、以前の研究Beller et al。2015の202の結果すべおを再分類し、以前の調査結果ずほが完党に䞀臎しおいるこずを発芋したした。 このような状況で欠陥ラむンをマヌクする手順は詳现に芏定されおいるため、各専門家の掚定倀間の高床な盞互合意に自信があり、これにより研究の再珟性が保蚌されたす。



蚺断では、すべおの欠陥マむクロクロヌンが怜出されない可胜性がありたす。 この芁因は、この皮の゚ラヌをすべお怜出するずは䞻匵しおいないため、わずかな脅嚁です。 蚺断の数を12に増やすこずで、ほずんどのマむクロクロヌンを芋぀けるこずができたず考えおいたす衚1を参照。 これは、V501、V517、V519、およびV537、いく぀かの䞻芁な蚺断でほずんどの゚ラヌが怜出されたずいう事実によっお確認されたす。 van TonderずLe Guが蚺断の短瞮セットを䜿甚しお24,000を超える誀ったマむクロクロヌンを発芋したずいう事実van Tonder and Le Goues 2016。



元のコピヌずコピヌの正しい定矩に察する自信にもかかわらず、コピヌが開発者によっおどのように䜜成および線集されたかはわかりたせん。 リポゞトリの実蚌分析は、コヌドのブロックを䞊から䞋ぞ、および個々の行を巊から右ぞ読み取る順序に基づいおいたす。 開発者はコヌドを読みながらコヌドのさたざたな郚分を「スキップ」し、珟圚の問題の解決に関連するず思われるブロックのみに特別な泚意を払っおいるこずを知っおいたすBusjahn et al。2015; Siegmund et al。2014。 同時に、制埡フロヌの移動方向にコヌドを読み取るだけで、マむクロクロヌンである小さな論理的に接続されたフラグメントを理解するこずができたす。 䞊から䞋ぞ、巊から右ぞ。 特に、次の質問ぞの回答に興味がありたす。1ホットキヌシヌケンス「ctrl + c、ctrl + v」が䜕回䜿甚されたしたか 2マむクロクロヌンはどの順序で䜜成されたすか 3プログラマヌは、コヌドをサポヌトする過皋でマむクロクロヌンをどの順序で読み取り、線集したすか これらの質問に答えるには、WatchDogプラグむンが行う方法ず同様に、プログラマヌの䜜業を「珟堎」で芳察できる調査を実斜する必芁がありたすBeller et al。2015、2015、2016。 この目的のために、CloneBoardツヌルの個々のコンポヌネントを䜿甚できたす。このツヌルは、Eclipseですべおの切り取り、コピヌ、貌り付け操䜜を蚘録したすde Wit et al。2009。



これらの制限を考えるず、この段階での最埌の行の効果の心理的基瀎に関する我々の結論は議論の䜙地があるかもしれたせん。 より培底的な分析を行うには、゚ラヌを䜜成するプロセスを生䜓内で調査できる心理実隓が必芁です。 遞択した研究方法の特性により、マむクロクロヌン䜜成の特定の手順を逃したリスクがありたす。 それにもかかわらず、私たちの回答者は比范的少数のそのような断片を䜜成するのに時間がかかるず指摘したので、実隓宀条件䞋で欠陥のあるマむクロクロヌンが出珟する状況を再珟するこずは非垞に問題だず考えおいたす。 , , , (Adair 1984), , . , , , , .



5.3.2



, PVS-Studio C C++. C — (Meyerovich and Rabkin 2013), , , , C C++ . , , : , if-, (. 1, 2, 5, 7 11). , C: Java, JavaScript, C#, PHP, Ruby Python. , ?1,2 , (. . 2). , PVS-Studio, , , , , . : , .



6



« », (Roy . 2014). : « — , - » (Baxter . (1998)) « — [...] , » (Basit and Jarzabek (2007)). , , . , (Koschke 2007). 1 , 2 ( ). 3 , 4 (Roy . 2014). , . (Koschke 2007; Balazinska . 1999; Kapser and Godfrey 2003). : , , « », . .



. 2007 . C Java (Bellon . 2007). 25 . 2014 , (Svajlenko and Roy 2014). 50 , 15 15 (Svajlenko and Roy 2014). . , , . .



(Beller . 2015) 380 125 Java (van Tonder and Le Goues 2016) 24 304 , , . 43 , . , .



, , , 9% 17% (Zibran . 2011), 1, 2 3 (Koschke 2007). « » 5% (Roy and Cordy 2007) 50% (Rieger . 2004; Roy . 2014). , , , . , — , « ». , , , . (Chatterji . 2011; Gode and Koschke 2011; Inoue . 2012; Xie . 2013).



7



, .



, , . , , . . , , . IDE: .



, , , , , . .



219 , 263 . , — . . , , — , .



, , , - , . , - . , , - . , -, , .



, , , , . , , , , . , ; , - , , . PVS-Studio , , , .



泚釈



  1. TrinityCore — - (MMOG), www . trinitycore . org .
  2. Chromium — Google Chrome, www.chromium.org .
  3. http://www.viva64.com/ru/b/0260
  4. www.reddit.com/r/programming/comments/270orx/the_last_line_effect
  5. http://www.viva64.com/ru/pvs-studio-download
  6. 10.6084/m9.figshare.1313697
  7. . , .
  8. : http://viva64.com/ru/d/0368/ .
  9. https :// codereview . chromium . org /7031055
  10. www . google . com / search ? q = pvs - studio + bug +|+ issue
  11. https :// bugzilla . samba . org / show _ bug . cgi ? id =12373
  12. Clang . : https :// llvm . org / bugs / show _ bug . cgi ? id =9952 .


謝蟞



ICSE'15 «Mercato Centrale», , .



Adair JG (1984) The Hawthorne effect: a reconsideration of the methodological artifact. J Appl Psychol 69(2):334-345 CrossRef Google Scholar



Anderson JR (1990) Cognitive psychology and its implications. WH Freeman/Times Books/Henry Holt & Co



Balazinska M, Merlo E, Dagenais M, Lague B, Kontogiannis K (1999) Measuring clone based reengineering opportunities. In: Proceedings of the international software metrics symposium (METRICS). IEEE, pp 292-303



Basit HA, Jarzabek S (2007) Efficient token based clone detection with flexible tokenization. In: Proceedings of the 6th joint meeting of the European software engineering conference and the ACM SIGSOFT international symposium on foundations of software engineering (ESEC/FSE). ACM, pp 513-516



Baxter ID, Yahin A, de Moura LM, Sant'Anna M, Bier L (1998) Clone detection using abstract syntax trees. In: Proceedings of the international conference on software maintenance (ICSM). IEEE, pp 368-377



Beller M, Bacchelli A, Zaidman A, Juergens E (2014) Modern code reviews in open-source projects: Which problems do they fix? In: Proceedings of the 11th working conference on mining software repositories. ACM, pp 202-211



Beller M, Bholanath R, McIntosh S, Zaidman A (2016) Analyzing the state of static analysis: a large-scale evaluation in open source software. In: Proceedings of the 23rd IEEE international conference on software analysis, evolution, and reengineering. IEEE, pp 470-481



Beller M, Gousios G, Panichella A, Zaidman A (2015) When, how, and why developers (do not) test in their IDEs. In: Proceedings of the 10th joint meeting of the european software engineering conference and the ACM SIGSOFT symposium on the foundations of software engineering (ESEC/FSE). ACM



Beller M, Gousios G, Zaidman A (2015) How (much) do developers test? In: 37th International conference on software engineering (ICSE). ACM, pp 559-562



Beller M, Levaja I, Panichella A, Gousios G, Zaidman A (2016) How to catch 'em all: watchdog, a family of ide plug-ins to assess testing. In: 3rd International workshop on software engineering research and industrial practice (SER&IP 2016). IEEE, pp 53-56



Beller M, Zaidman A, Karpov A (2015) The last line effect. In: 23rd International conference on program comprehension (ICPC). ACM, pp 240-243



Bellon S, Koschke R, Antoniol G, Krinke J, Merlo E (2007) Comparison and evaluation of clone detection tools. IEEE Trans Softw Eng 33(9):577-591 CrossRef Google Scholar



Bland JM, Altman DG (2000) The odds ratio. Bmj 320(7247):1468 CrossRef Google Scholar



Botvinick M, Plaut DC (2004) Doing without schema hierarchies: a recurrent connectionist approach to routine sequential action and its pathologies 111:395-429



Busjahn T, Bednarik R, Begel A, Crosby M, Paterson JH, Schulte C, Sharif B, Tamm S (2015) Eye movements in code reading: relaxing the linear order. In: Proceedings of the international conference on program comprehension (ICPC). ACM, pp 255-265



Chatterji D, Carver JC, Massengil B, Oslin J, Kraft N et al (2011) Measuring the efficacy of code clone information in a bug localization task: an empirical study. In: Proceedings of the international symposium on empirical software engineering and measurement (ESEM). IEEE, pp 20-29



Cooper R, Shallice T (2006) Hierarchical schemas and goals in the control of sequential behaviour, vol 113



de Wit M, Zaidman A, van Deursen A (2009) Managing code clones using dynamic change tracking and resolution. In: Proceedings of the international conference on software maintenance (ICSM). IEEE, pp 169-178



Fukuda K, Vogel EK (2009) Human variation in overriding attentional capture. J Neurosci 29(27):8726- 8733 CrossRef Google Scholar



Gode N, Koschke R (2011) Frequency and risks of changes to clones. In: Proceedings of the international conference on software engineering (ICSE). ACM, pp 311-320



Healy AF (1980) Proofreading errors on the word the: new evidence on reading units. J Exper Psychol Human Percep Perform 6(1):45 CrossRef Google Scholar



Inoue K, Higo Y, Yoshida N, Choi E, Kusumoto S, Kim K, Park W, Lee E (2012) Experience of finding inconsistently-changed bugs in code clones of mobile software. In: Proceedings of the international workshop on software clones (IWSC). IEEE, pp 94-95



Juergens E, Deissenboeck F, Hummel B, Wagner S (2009) Do code clones matter? In: Proceedings of the international conference on software engineering (ICSE). IEEE, pp 485-495



Kane MJ, Brown LH, McVay JC, Silvia PJ, Myin-Germeys I, Kwapil TR (2007) For whom the mind wanders, and when an experience-sampling study of working memory and executive control in daily life. Psychol Sci 18(7):614-621 CrossRef Google Scholar



Kapser C, Godfrey M (2003) A taxonomy of clones in source code: the re-engineers most wanted list. In: 2nd International workshop on detection of software clones (IWDSC-03), vol 13



Kapser CJ, Godfrey MW (2008) Cloning considered harmful-considered harmful: patterns of cloning in software. Emp Softw Eng 13(6):645-692 CrossRef Google Scholar



Kim M, Bergman L, Lau T, Notkin D (2004) An ethnographic study of copy and paste programming practices in oopl. In: Proc. International symposium on empirical software engineering (ISESE). IEEE, pp 83-92



Koschke R (2007) Survey of research on software clones. In: Koschke R, Merlo E, Walenstein A (eds) Duplication, redundancy, and similarity in software, no. 06301 in Dagstuhl seminar proceedings. Internationales Begegnungs- und Forschungszentrum fur Informatik (IBFI). https://web.archive.org/web/20161024110147/http://drops.dagstuhl.de/opus/volltexte/2007/962/ . Schloss Dagstuhl, Dagstuhl



Meyerovich L, Rabkin A (2013) Empirical analysis of programming language adoption. In: ACM SIGPLAN notices, vol 48. ACM, pp 1-18



Moravcsik JE, Healy AF (1995) Effect of meaning on letter detection. J Exper Psychol Learn Memory Cogn 21(1):82 CrossRef Google Scholar



O'Malley JJ, Gallas J (1977) Noise and attention span. Percep Motor Skills 44(3):919-922 CrossRef Google Scholar



Rieger M, Ducasse S, Lanza M (2004) Insights into system-wide code duplication. In: Proceedings of the working conference on reverse engineering (WCRE). IEEE, pp 100-109



Roy C, Cordy J, Koschke R (2009) Comparison and evaluation of code clone detection techniques and tools: a qualitative approach. Sci Comput Program 74 (7):470-495 MathSciNet CrossRef MATH Google Scholar



Roy CK, Cordy JR (2007) A survey on software clone detection research. Tech. Rep. TR 2007-541. Queens University



Roy CK, Zibran MF, Koschke R (2014) The vision of software clone management: past, present, and future (keynote paper). In: 2014 Software evolution week — IEEE conference on software maintenance, reengineering, and reverse engineering, (CSMR-WCRE). IEEE, pp 18-33



Siegmund J, Kastner C, Apel S, Parnin C, Bethmann A, Leich T, Saake G, Brechmann A (2014) Understanding understanding source code with functional magnetic resonance imaging. In: Proceedings of the international conference on software engineering (ICSE). ACM, pp 378-389



Svajlenko J, Roy CK (2014) Evaluating modern clone detection tools. In: 30th IEEE International conference on software maintenance and evolution (ICSME). IEEE, pp 321-330



van Tonder R, Le Goues C (2016) Defending against the attack of the micro-clones. In: 2016 IEEE 24th International conference on program comprehension (ICPC). IEEE, pp 1-4



Trafton JG, Altmann EM, Ratwani RM (2011) A memory for goals model of sequence errors. Cogn Syst Res 12:134-143 CrossRef Google Scholar



Xie S, Khomh F, Zou Y (2013) An empirical study of the fault-proneness of clone mutation and clone migration. In: Proceedings of the 10th working conference on mining software repositories (MSR). IEEE



Zibran MF, Saha RK, Asaduzzaman M, Roy CK (2011) Analyzing and forecasting near-miss clones in evolving software: an empirical study. In: Proceedings of the international conference on engineering of complex computer systems (ICECCS). IEEE, pp 295-304




, 2016





Creative Commons Attribution 4.0 International , , , , Creative Commons , .



All Articles