ソフトウェアエンジニアリングシンポジウム 2013

プログラム文並び替えに基づくソースコードの可読性向上の試み
佐々木 唯1,a)

肥後 芳樹1,b)

楠本 真二1,c)

概要：ソフトウェア保守を行うにあたって, 最も時間的コストの高い作業はソースコードを読み理解することである. そのため, ソースコードの可読性を向上させることで, 保守作業全体のコストを削減できる. 本論
文では，ソースコードの可読性を向上させるためのプログラム文並び替え手法を提案する．既存研究として, ソースコードを読んで理解しようとする際, 変数が定義されてから参照されるまでの距離が離れていると理解するためのコストが増大することが報告されている. 従って, 文の並びはソースコードの可読性に影響を及ぼすと考えられる. そこで, 変数の定義と参照の間の距離に着目して, モジュール内の文を並び替える手法を提案する. 提案手法をオープンソースソフトウェアに適用し, 並び替えの行われたメソッドについて被験者からの評価を得たところ, 並び替えの行われたメソッドは可読性が向上するという結果が得られた.
キーワード：プログラム理解，ソースコード解析，リファクタリングAn Approach to Improving Readability of Source Code
Based on Reordering Program Statements
S ASAKI Y UI1,a)

H IGO YOSHIKI1,b)

K USUMOTO S HINJI1,c)

Abstract: Understanding program source code is the most time-consuming task in software maintenance. If readabil-

ity of source code gets better, we spend less time to understand it. That means we can conduct more efficent software
maintenance on source code whose readability is better. In this paper, we propose a technique to reorder program
statements without changing its execution behavior for improving readability of source code. Previous research efforts
reported that, if a program statement referencing a variable is far from a statement defining the variable, understanding
the function that they implement becomes more time-consuming task. Those results indicate that the order of program
statements has an impact on readability of source code. Consequently, we focus on distances between definitions andreferences of variables in source code, and propose a way to reorder them with tactics to shorten the distances. We
have conducted an experiment on Java open source software with 44 subjects, and confirmed that most of reordered
methods had better readability than their original ones.
Keywords: Program Comprehension, Source code analysis, Refactoring

1. はじめに近年，ソフトウェアの大規模化，複雑化に伴い，ソフトウェア保守に要する作業量が増大している．ソフトウェア
1a)b)c)大阪大学 大学院情報科学研究科
Graduate School of Information Science and Technology, Osaka Universitys-yui@ist.osaka-u.ac.jp
higo@ist.osaka-u.ac.jp
kusumoto@ist.osaka-u.ac.jp©2013 Information Processing Society of Japan

ライフサイクルにおいて，保守作業量が占める割合は非常に高い [3]．更に，保守の全行程の中で最も時間的コストの高い作業は，ソースコードを読み理解することであるといわれている [8], [11], [12].
そのため，ソースコードの可読性を向上させることは保守作業全体のコスト削減に繋がると考えられ，プログラム理解に関する研究がこれまでに多く行われている．Buse とWeimer は，テキストの理解のしやすさを可読性と定義し1ソフトウェアエンジニアリングシンポジウム 2013

た上で，ソースコードの可読性を測定するため，識別子，16 のメソッドにおいて，提案した並び替え手法により特定の記号，インデントや空行などのフォーマット，コメメソッドの可読性が向上したとの結果を得た．

ントといったソースコード上の様々な特徴との相関について調査を行った [4]．また，ソースコードの可読性を向上させるために開発者が守るべきコーディング規約をまとめ

2. 関連研究2.1 ソースコードの可読性に関する調査たものとして，Java Code Convensions などが存在する [5]．

Buse と Weimer はさまざまなメトリクスとソースコード

例えば，メソッドや変数は使用意図が分かるよう，長すぎ可読性との相関を調査した結果，識別子の数はソースコーず短すぎない命名を行うべきであると述べられている．まド可読性に最も影響を与えていることを示している [4]．また，適切な空行も可読性を向上させる重要な要因の 1 つでた，人はソースコードを理解しようとする際，ソースコーあると述べられており，Buse と Weimer の調査結果においドを読みながら頭の中で実行することがある．このようなても，空行はコメントよりも重要度が高いことが分かって作業をメンタルシミュレーションと呼ぶ [6]．Nakamura らいる．また，Wang らは，ソースコード中の文から意味のあは，人の記憶形式をキューでモデル化し，メンタルシミュるまとまりを識別し，その間に空行を挿入することでソーレーションのコストを計測した [13]．この結果，キューにスコードの可読性を向上させる手法を提案している [17].

ない変数を参照するとき，すなわち定義されてから参照さ

このように，ソースコードの可読性を向上させるための手法やツールは多く存在し，これらはリファクタリング操れるまでの間に多くの処理を含む変数を参照するとき，コストの増大に繋がるということが分かっている．

作として考えることができる．リファクタリングとは，プ

Biegel らは，Java ソースコード中のフィールド及びメ

ログラムの振る舞いを変えずに内部構造を変化させる技術

ソッドの並び順は可読性に影響を与える要因であると考である．ソースコードには将来的に問題を引き起こす可能え，その並び順にどのような基準があるか，16 のオープ性のある「不吉なにおい」が存在し，保守性を低下させるンソースソフトウェアを対象に調査を行った [2]．その結原因であるといわれている．そのような不吉なにおいに対果，最も広く用いられている基準は Java Code Convensions

する具体的な対処方法は，Fowler によってリファクタリンで定められている基準であるが，それに続く基準はさまざグパターンとしてまとめられている [7]．

まなものが存在することが分かっている．

本研究では，ソースコードの可読性を向上させるためのまた，ソースコードを理解するための時間のうち，1 つリファクタリング手法を新たに提案する．Buse と Weimerのドキュメントに対してスクロール操作などで移動を行うの調査結果では，ソースコード可読性に最も影響を与えて時間は約 7 分の 1 を占めるという報告がある [11]．

いる要因は識別子の数であった [4]．また，変数が定義されてから参照されるまでの間に多くの処理を含む場合，理解するためのコストが増大するという報告もある [13]．こ2.2 ソースコードの可読性の向上を目的としたリファクタリング手法のような状況を改善するためには，変数のスコープを狭めエディタ上での強調表現やフォーマットの整形など，ソーる，変数の代入文を参照される直前まで移動するといったスコード上の見た目を改善する技術を Pretty-Printing と呼文の並び替え操作が有効である．ソースコードの可読性をぶ [9]．Pretty-Printing は古くから用いられている技術で，向上させるためのリファクタリング手法として，空行の挿プログラミング言語に依存しない手法は Oppen によって最入やインデントの整形などが行われている [9], [17]．

初に提案された [14]．また，Pretty-Printing は基本的にプロ

本研究では，変数の定義と参照の間の距離に着目して，グラムの構文的な情報を元に行われているが，Wang らはモジュール内の文を並び替える手法を提案する．提案手法

構文情報の他にデータ依存も考慮した上でソースコードのをオープンソースソフトウェアに適用したところ，提案手意味的なまとまりを識別し，空行で分割することで可読性法によって並び替えの行われたモジュールは可読性が向上を向上させる手法を提案した [17]．

したという結果が得られた．

Atkinson と King は，行数や文の数などのメトリクスを本研究の主な貢献を以下に記す．

用いてリファクタリング候補を自動検出する手法を提案• プログラムの振る舞いを変えることなく，ソースコーした [1]．Relf は，ソースコードの可読性を高めるために，ドの可読性を向上させる手法を提案した．提案手法でソースコード上の情報から適切な識別子名を特定し，提示は，変数を内側のブロックに移動させてスコープを小する手法を提案した [15]．Tsantalis と Chatzigeorgiou は，さくする，およびブロック内での文の入れ替えによりプログラム中に存在する全ての変数について，データの依定義と参照の間の距離を短くする，の 2 つの戦略に基存関係を元に関連性のある文のまとまりを特定し，メソッづいてソースコード中の文の順番を入れ替える．

ド抽出リファクタリングの候補を提示する手法を提案し• 44 名の被験者に協力して頂き，提案手法の評価を行った [16]．

た．その結果，実験対象とした 20 のメソッドのうち，©2013 Information Processing Society of Japan2ࢯࣇࢺ࢙࢘࢔࢚ࣥࢪࢽ࢔ࣜࣥࢢࢩ࣏ࣥࢪ࣒࢘   !    
$   
 
$       "   #      !#
 (a) Ҡಈલ  #    !
   ! #"  
              
                    
                           
                    

ਤ 2 खॱ 2 ͷద༻ྫ(b) Ҡಈ‫ޙ‬

Fig. 2 An example of STEP2 applicationਤ 1 ϓϩάϥϜจͷҠಈྫ

Fig. 1 An example of reordering program statements• จ s1 ͸ม਺ v Λఆٛ͢Δɽ

3. ‫ڀݚ‬ಈ‫ػ‬ਤ 1(a) ͷιʔείʔυ͸ɼม਺ͷఆٛͱࢀর͕཭Ε͍ͯ• จ s2 ͸ม਺ v Λࢀর͢Δɽ• จ s1 ͔Βจ s2 ͷؒʹ͸ɼม਺ v ͷ࠶ఆٛͷͳ͍ 1 ͭҎ্ͷ࣮ߦύε͕ଘࡏ͢ΔɽΔྫΛ͍ࣔͯ͠Δɽྫ͑͹ɼਤ 1(a) ʹ͓͍ͯɼม਺ sgSetม਺ͷఆٛͱࢀরؒͷ‫཭ڑ‬͸ɼDU νΣΠϯΛ༻͍ͯࢉग़

͸ 48 ߦ໨Ҏ߱ͷ if จ಺ͰͷΈࢀর͞Ε͍ͯΔʹ΋͔͔Θ͢Δɽ͋Δ DU νΣΠϯ c ͷ‫ ཭ڑ‬distance(c) ΛɼDU νΣΒͣɼ֎ଆͷϒϩοΫͰఆٛ͞Ε͍ͯΔɽҰൠతʹɼ͜ͷΠϯ c ʹΑͬͯ݁͹Εͨ 2 ͭͷจͷؒʹଘࡏ͢Δจͷ਺Α͏ʹ‫ॴہ‬తʹ༻͍ΒΕΔม਺͸είʔϓΛ‫ڱ‬ΊΔ͜ͱ͕ͱ͢Δɽ͜ͷͱ͖ɼ͋ΔϒϩοΫ b ʹ‫·ؚ‬ΕΔશͯͷ DU๬·͍͠ɽม਺ nonPcSet ʹ͍ͭͯ͸ɼఆٛͱࢀর͕ಉҰενΣΠϯͷ૯‫ ཭ڑ‬totaldistance(b) ͸ɼb ʹ‫·ؚ‬ΕΔશͯͷίʔϓͰߦΘΕ͍ͯΔͨΊείʔϓΛ‫ڱ‬ΊΔ͜ͱ͸Ͱ͖ͳDU νΣΠϯͷू߹ DUchain(b) Λ༻͍ͯҎԼͷࣜͰද͢ɽ͍͕ɼఆٛΛߦ͏จΛࢀরΛߦ͏จͷ௚લʹҠಈ͢Δ͜ͱ

ͳ͓ɼ“DU νΣΠϯ c ͕ϒϩοΫ b ʹ‫·ؚ‬ΕΔ” ͱ͸ɼc Λ͸ՄೳͰ͋Δɽ͜ΕΒ 2 ͭͷม਺ʹ͍ͭͯɼͦΕΒͷఆٛ

ߏ੒͢Δ 2 ͭͷจ͕‫ ʹڞ‬b ಺ʹଘࡏ͢Δ͜ͱΛද͢ɽΛߦ͏จΛҠಈ͢Δͱɼਤ 1(b) ͷΑ͏ʹͳΔɽ͜ͷҠಈΛߦ͏͜ͱʹΑͬͯɼ2 ͭͷม਺ͷఆٛͱࢀরͷؒͷ‫͕཭ڑ‬

totaldistance(b) =∑distance(c)(1)c∈DUchain(b)ॖ·ΓɼιʔείʔυͷՄಡੑ͕૿͢ͱஶऀΒ͸ߟ͑ͨɽຊ‫Ͱڀݚ‬͸ɼιʔείʔυͷՄಡੑΛ޲্ͤ͞ΔͨΊʹɼจͷฒͼସ͑Λߦ͏ख๏ΛఏҊ͢Δɽਤ 1 ͷྫʹ‫ͮج‬͍ͯɼҎԼͷ 2 ͭͷҠಈઓུΛ༻͍Δɽઓུ A ม਺ͷείʔϓΛ‫ڱ‬ΊΔͨΊɼ಺෦ϒϩοΫ΁จΛҠಈ͢Δɽ
ઓུ Bม਺ͷఆٛͱࢀরͷؒͷ‫཭ڑ‬Λ୹͘͢ΔͨΊɼ‫ڞ‬௨ͷϒϩοΫ಺ͰจΛҠಈ͢Δɽ

4. ఏҊख๏
4.1 ม਺ͷఆٛͱࢀরؒͷ‫཭ڑ‬ͷऔಘ

4.2 ख๏ͷ֓ཁຊख๏͸ɼιʔείʔυΛೖྗͱͯ͠ҎԼͷखॱͰจͷฒͼସ͑Λߦ͏ɽ
खॱ 1 ιʔείʔυ͔Βந৅ߏจ໦ʢASTʣΛߏங͢Δɽ
खॱ 2AST Λ‫ࠪ͠૸ॱޙ‬ɼ๚ΕͨϒϩοΫʹରͯ࣍͠ͷ2 ͭͷҠಈઓུΛద༻͢Δɽઓུ A಺෦ϒϩοΫ΁จΛҠಈ͢Δɽ

ઓུ B‫ڞ‬௨ͷϒϩοΫ಺ͰจΛҠಈ͢Δɽ

खॱ 3 ૸ࠪΛऴ͑ͨ AST ͔ΒιʔείʔυΛੜ੒͢Δɽ
खॱ 2 ʹ͓͍ͯɼ2 ͭͷҠಈઓུ͕ద༻͞ΕΔ༷ࢠΛਤຊख๏Ͱ͸ɼม਺ͷఆٛͱࢀরͷؔ܎Λ Def-Use νΣΠ

2 ʹࣔ͢ɽ2 ߦ໨ͷ if ϒϩοΫʹ๚Εͨͱ͖ɼif ϒϩοΫϯʢҎԼɼDU νΣΠϯʣ͔Βऔಘ͢Δ [10]ɽDU νΣΠϯ಺ʹҠಈ͢Δ͜ͱͰม਺ͷείʔϓΛ‫ڱ‬ΊΔ͜ͱͷͰ͖Δͱ͸ɼ͋Δม਺ͷఆٛͱࢀরͷؔ܎Λදͨ͠΋ͷͰ͋Δɽจ͕͋Ε͹ɼͦͷจΛ if ϒϩοΫ಺΁Ҡಈ͢Δɽଓ͍ͯɼ

2 ͭͷจ s1 , s2 ͕࣍ͷ৚݅Λશͯຬͨ͢ͱ͖ɼจ s1 ͔Βจ

if ϒϩοΫͷ totaldistance ͕࠷খʹͳΔΑ͏ɼϒϩοΫ಺s2 ΁ DU νΣΠϯ͕ଘࡏ͢ΔɽͷจΛฒͼସ͑ΔɽªInformationProcessingSocietyofJapan3

Vol.0৘ใॲཧֶձ࿦จࢽ

No.0

1–6 (??? 1959)ͷॱং੍໿͸ਤ 3(b) ͷ௨ΓͱͳΔɽ    ϓϩάϥϜͷৼΔ෣͍Λม͑ͳ͍ൣғͰจͷฒͼସ͑Λ        
     

ߦ͏ͨΊʹɼఏҊख๏Ͱ͸ɼϓϩάϥϜจ͕ຬͨ͞ͳ͚Ε͹ͳΒͳ͍ॱং੍໿ͱͯ͠Լ‫ه‬ͷ 3 ͭΛఆΊΔɽ

Def-Use ੍໿ ͋Δม਺ͷఆٛͱࢀরͷؔ܎ʹ͋Δ 2 ͭͷจ͸ɼ‫ࡏݱ‬ͷग़‫ॱݱ‬ংΛอͨͳ͚Ε͹ͳΒͳ͍ɽྫ͑

͹ਤ 3(a) ͷจ SF ͸ɼจ SD Ͱఆٛ͞Εͨม਺ y Λࢀর͓ͯ͠Γɼ͜ͷ 2 ͭͷจΛೖΕସ͑Δͱࢀর͢Δ͜ͱ
͕Ͱ͖ͳ͘ͳͬͯ͠·͏ɽ(a) ฒͼସ͑ର৅ͷจ  

Def-Def ੍໿ ಉҰม਺Λఆٛ͢Δจ͕ෳ਺ଘࡏ͢Δͱ͖ɼͦͷग़‫ॱݱ‬Λอͨͳ͚Ε͹ͳΒͳ͍ɽྫ͑͹ɼਤ 3(a)       (b) ਤ 3(a) ʹର͢Δॱং੍໿
ਤ3จͷॱং੍໿ͷྫ

Fig. 3 An example of reordering constraintsͷจ SC , SE Ͱ͸ͱ΋ʹม਺ x ͕ఆٛ͞Ε͓ͯΓɼจ SF͸ɼ͜ͷͲͪΒ͔Ұํ͔Β஋Λࢀর͢Δ͜ͱʹͳΔɽ͜ͷ 2 ͭͷจΛೖΕସ͑Δͱɼจ SC ͕จ SE ʹΑΔม
਺ x ͷఆٛΛ্ॻ͖ͯ͠͠·͏ͨΊɼจ SF ͸จ SE Ͱఆٛ͞Εͨ஋Λࢀর͢Δ͜ͱ͕Ͱ͖ͳ͘ͳͬͯ͠·͏ɽEscape ੍໿ ϒϩοΫ֎΁ͷδϟϯϓ໋ྩΛ‫ؚ‬ΉจΛ·͍ͨͰจͷҠಈΛ͢Δ͜ͱ͸Ͱ͖ͳ͍ɽྫ͑͹ɼਤ 3(a)ͷจ SB ͸ return จΛ‫ؚ‬ΜͰ͍Δɽ͜ͷͱ͖ɼจ SB ΑΓલͷจ͸ඞ࣮ͣߦ͞ΕΔ͕ɼ‫ޙ‬ͷจ͸จ SB ͷ৚݅ʹΑͬͯ͸࣮ߦ͞ΕΔͱ͸‫ݶ‬Βͳ͍ɽΑͬͯɼจ SA4.3 ઓུ A ͷ࣮‫ํݱ‬๏ҎԼͷશͯͷ৚݅Λຬͨ͢ͱ͖ɼจ s ͸ϒϩοΫ b ಺΁ҠಈՄೳͰ͋Δͱ͢ΔɽΛจ SB ΑΓ΋‫ʹޙ‬Ҡಈ͢Δ͜ͱ͸Ͱ͖ͳ͍͠ɼจ SC ɼSD ɼSE ɼSF Λจ SB ͷલʹҠಈ͢Δ͜ͱ΋Ͱ͖ͳ͍ɽͳ͓ɼϒϩοΫ֎΁ͷδϟϯϓ໋ྩͱ͸ɼreturn จͷ• จ s ͸ม਺એ‫ݴ‬จͰ͋Δɽଞʹ continue จ, break จ΍ɼJava ‫ޠݴ‬ͷ৔߹ throw จ,• จ s ͸ϒϩοΫ b ͷ֎ଆʹଘࡏ͠ɼϒϩοΫ b ಺ͷจassert จ͕‫·ؚ‬ΕΔɽʹରͯ͠ DU νΣΠϯ͕ଘࡏ͢Δɽ• จ s ͸ϒϩοΫ b ͕࣮ߦ͞ΕΔલʹඞ࣮ͣߦ͞ΕΔจͰ͋Δɽ• จ s Ͱఆٛ͞Εͨશͯͷม਺͸ɼϒϩοΫ b ಺ͷจͰͷΈࢀর͞ΕΔɽ• จ s Ͱఆٛ͞Εͨશͯͷม਺͸ɼϒϩοΫ b ͕࣮ߦ͞ΕΔલʹ࠶ఆٛ͞ΕΔ͜ͱ͸ͳ͍ɽ্‫ه‬ͷ৚݅Λશͯຬͨ͢จ͕ଘࡏ͢Ε͹ɼ͜ͷจΛϒϩοΫ಺ͷઌ಄ཁૉͱͯ͠഑ஔ͢Δɽ͜ͷઓུ͸จͷε্‫ه‬ͷ੍໿Λ౿·্͑ͨͰɼϒϩοΫ b ಺ͷจʹର͢Δฒ΂ସ͑͸Լ‫ه‬ͷखॱͰߦΘΕΔɽखॱ 1 ॱং੍໿Λຬͨ͢શͯͷॱྻʢจͷฒͼʣΛੜ੒͢Δɽ
खॱ 2 खॱ 1 Ͱੜ੒ͨ͠ॱྻͷத͔Β totaldistance(b) ͕࠷খͰ͋Δ΋ͷΛநग़͢Δɽ
͔͠͠ɼtotaldistance(b) ͕࠷খͰ͋Δॱྻ͕ෳ਺ଘࡏ͢
Δ৔߹͕͋Δɽͦͷ৔߹͸͞ΒʹԼ‫ه‬ͷॲཧΛߦ͏ɽ
खॱ 3 நग़ͨ͠ॱྻͷதͰɼΦϦδφϧͷॱྻʢೖྗϝίʔϓΛ‫ڱ‬ΊΔ͜ͱͷΈΛ໨తͱ͍ͯ͠ΔͨΊɼ͜͜Ͱ͸ιουʹ͓͚Δจͷฒͼʣͱ࠷΋͍ۙ΋ͷΛ 1 ͚ͭͩจΛͲͷҐஔʹ഑ஔ͢΂͖͔ͱ͍͏͜ͱ͸ߟྀ͠ͳ͍ɽநग़͢Δɽຊ‫Ͱڀݚ‬͸ɼม਺ͷఆٛͱࢀরͷؒͷ‫ʹ཭ڑ‬ͷΈண໨͠

4.4 ઓུ B ͷ࣮‫ํݱ‬๏ͨจͷฒͼସ͑Λߦ͏ͨΊɼͦΕҎ֎ͷཁૉͰจͷॱং͕ண໨தͷϒϩοΫ಺ͷจΛฒͼସ͑ΔࡍɼఏҊख๏Ͱ͸ɼೖΕସΘΔ͜ͱ͸ద੾Ͱͳ͍ͱߟ͑ɼ͜ͷΑ͏ͳॲཧΛߦ“ϓϩάϥϜͷৼΔ෣͍Λม͑ͳ͍” ͱ͍͏੍໿Λຬͨ͢શ͏ɽ͜ͷॲཧͰ͸ɼΦϦδφϧͷॱྻͱ࠷΋͍ۙ΋ͷΛબͯͷจͷฒͼʢॱྻʣΛੜ੒͠ɼͦͷத͔Β totaldistanceͿͨΊʹɼSpearman ͷॱҐ૬ؔ܎਺Λར༻͢Δɽखॱ 2 Ͱ͕࠷খͷ΋ͷΛબ୒͢Δͱ͍͏ํ๏Λ༻͍Δɽ
ྫͱͯ͠ɼਤ 3(a) ͷϒϩοΫʹରͯ͠ઓུ B Λద༻͢Δ৔߹Λߟ͑Δɽ͜ͷͱ͖ɼฒͼସ͑ର৅ͱͳΔจ͸ɼจ SA͔Β SF Ͱ͋Δɽͨͩ͠ɼจ SB ΍ SE ͷΑ͏ʹɼฒͼସ͑ಘΒΕͨશͯͷީิͱΦϦδφϧͷॱྻͱͷؒͰ SpearmanͷॱҐ૬ؔ܎਺Λ‫ܭ‬ଌ͠ɼ࠷΋஋͕ߴ͍΋ͷΛग़ྗͱ͢Δɽ

5. ධՁ࣮‫ݧ‬ର৅ͷจࣗ਎͕ϒϩοΫͰ͋Δ৔߹΋ଘࡏ͢Δɽ͜ΕΒͷఏҊख๏Λ࣮૷͠ɼධՁ࣮‫ݧ‬Λߦͬͨɽຊ࣮‫ݧ‬ͷ໨త͸ɼจ͔Βੜ੒͞ΕΔɼϓϩάϥϜͷৼΔ෣͍Λม͑ͳ͍ͨΊఏҊख๏Λ༻͍ͨจͷฒͼସ͑ʹΑͬͯɼιʔείʔυͷc 1959 Information Processing Society of Japan4৘ใॲཧֶձ࿦จࢽ

Vol.0

No.0

1–6 (??? 1959)Մಡੑ͕޲্͢Δ͔ΛධՁ͢Δ͜ͱͰ͋Δɽ࣮‫ݧ‬ର৅ͱ͠  

ͯɼJava Ͱ‫ه‬ड़͞ΕͨΦʔϓϯιʔειϑτ΢ΣΞͰ͋Δ

TVBrowser Λ༻͍ͨɽ
5.1 ४උ 

TVBrowser ʹ‫·ؚ‬ΕΔશϝιουʹରͯ͠ɼఏҊख๏Λ

ద༻ͨ͠ɽTVBrowser ʹ͸໿ 3700 ͷϝιου͕‫·ؚ‬Εͯਤ4͓Γɼͦͷ͏ͪͷ 215 ͷϝιουͰจͷฒͼସ͕͑ߦΘΕͨɽఏҊख๏ͷධՁΛߦ͏ͨΊɼ20 ͷϝιουΛநग़͠ɼΦϦδφϧͷιʔείʔυͱɼఏҊख๏Λద༻ͨ͠‫ޙ‬ͷ ιʔείʔυͱͰɼͲͪΒ͕ཧղ͠΍͍͔͢ඃ‫ʹऀݧ‬౴͑        ͯ΋Β͏ΞϯέʔτΛ࣮ࢪͨ͠ɽΞϯέʔτͷ४උ͸Լ‫ه‬ͷΑ͏ʹߦͬͨɽखॱ 120 ͷର৅ϝιουͷΦϦδφϧιʔείʔυͱฒͼସ͑‫ޙ‬ͷιʔείʔυ͔Βɼίϝϯτ͓ΑͼۭനΛऔΓআ͘ɽ·ͨɼΠϯσϯτ΍վߦҐஔͳͲͷϑΥʔϚοτΛ౷Ұ͢Δɽ֤ର৅ϝιουʹର͢Δճ౴ͷ಺༁

Fig. 4 Questionnaire results for target methods   "   !     "  !"    !  !    !
      !  (a) ΦϦδφϧ

खॱ 2 ֤ϝιουʹ͖ͭɼΦϦδφϧͱฒͼସ͑݁ՌΛϥϯμϜʹ A, B ͱ۠ผ͠ɼಡΈ΍͢͞ʹ͍ͭͯҎԼͷ߲໨͔ΒબΜͰ΋Β͏ɽ• A ͷํ͕ಡΈ΍͍͢ɽ• B ͷํ͕ಡΈ΍͍͢ɽ• ಡΈ΍͢͞ʹҧ͍͸ͳ͍ɽ "    ! !   "   !    !
     "  !      !
  ্‫ه‬ͷΞϯέʔτΛ web ্Ͱެ։͠*1 ɼඃ‫ऀݧ‬Λืͬͨɽ(b) ఏҊख๏ద༻‫ޙ‬ͦͷ݁Ռɼ44 ໊ͷඃ‫ࢀʹݧ࣮͕ऀݧ‬Ճͨ͠ɽΞϯέʔτͰ

ਤ 5 ΦϦδφϧͷํ͕ಡΈ΍͍͢ͱ൑அ͞Εͨϝιου͸ඃ‫ऀݧ‬ͷ Java ࢖༻‫࣭͍ͯͭʹݧܦ‬໰Λߦ͓ͬͯΓɼͦͷ

Fig. 5 A method that its original had a better readability than the reordered one݁ՌΛද 1 ͓Αͼද 2 ʹࣔ͢ɽସ͑Λߦ͏͜ͱ͕Ͱ͖ͨͱ͍͑Δɽ

5.2 ݁Ռ
࣮‫݁ݧ‬ՌΛਤ 4 ʹࣔ͢ɽάϥϑͷॎ๮͸֤ϝιουΛද͠ɼ44 ໊ͷඃ‫͕ऀݧ‬બΜͩճ౴ͷ಺༁Λද͍ࣔͯ͠Δɽ·ͨɼ֤಺༁ͷ߹‫ܭ‬஋Λάϥϑͷӈଆʹ‫͍ͯ͠ࡌه‬ΔɽάϥϑΑΓɼʮҧ͍͕ͳ͍ʯͱ͍͏ճ౴Λআ͚͹ɼ20 ‫ݸ‬த 16 ‫ݸ‬ͷϝιουͰఏҊख๏ద༻݁ՌͷϝιουΛʮಡΈ΍͍͢ʯͱ൑அͨ͠ඃ‫͕਺ऀݧ‬ଟ͍ͱ͍͏݁Ռ͕ಘΒΕͨɽ·ͨɼWilcoxon ͷූ߸ॱҐ࿨‫ݕ‬ఆΑΓɼఏҊख๏ΛબΜͩਓ਺ͱΦϦδφϧΛબΜͩਓ਺ʹ͸ɼ༏Ґਫ४ 1%Ͱ͕ࠩ͋Δʢ p஋͸ 0.002 Ͱ͋ͬͨʣ͜ͱΛ֬ೝͨ͠ɽҎ্ͷ݁Ռ͔ΒɼఏҊख๏ʹΑͬͯϝιουͷՄಡੑΛ޲্ͤ͞Δจͷฒͼ

5.3 ߟ࡯
ਤ 4 ΑΓɼ4 ͭͷϝιουʹ͍ͭͯ͸ΦϦδφϧͷϝιουΛʮಡΈ΍͍͢ʯͱ൑அͨ͠ඃ‫͕ऀݧ‬ଟ͍͜ͱ͕෼͔ͬ
ͨɽ͜ͷ 4 ͭͷϝιουʹ͍ͭͯௐࠪͨ͠ͱ͜ΖɼҎԼͷಛ௃͕‫ݟ‬ΒΕͨɽ• ྨࣅͨ͠ม਺໊ͷએ‫͕ݴ‬࿈ଓͯ͠ߦΘΕ͍ͯΔɽ• ಉҰͷΦϒδΣΫτʹରͯ͠ɼಉ໊ͷϝιου‫ͼݺ‬ग़͕͠࿈ଓͯ͠ߦΘΕ͍ͯΔɽྫ͑͹ɼਤ 5 ͸ΦϦδφϧͷํ͕ಡΈ΍͍͢ͱ൑அͨ͠ਓ਺ͷ࠷΋ଟ͔ͬͨϝιουͰ͋Δɽਤதͷ໼ҹ͸ DUνΣΠϯΛද͠ɼͦͷϥϕϧ͸ DU νΣΠϯͷ‫཭ڑ‬Λද͠

ද1Java Λ༻͍ͨϓϩάϥϛϯάͷ‫ݧܦ‬

Table 1 Programming experiments with Java language*1಺༁ਓ਺

·ͬͨ͘࢖ͬͨ͜ͱ͕ͳ͍

1໊

1,000 ߦະຬ7໊

1,000∼10,000 ߦఔ౓23 ໊10,000 ߦҎ্

13 ໊

http://t.co/3gDf5N7

c 1959 Information Processing Society of Japan

ද2Java ͷ࢖༻‫ػ‬ձʢෳ਺ճ౴͋Γʣ

Table 2 Opportunities using Java language಺༁ਓ਺त‫ۀ‬ʢֶੜ࣌୅ʣ31 ໊‫ڀݚ‬ʢֶੜ࣌୅ʣ28 ໊झຯ

18 ໊࢓ࣄ

12 ໊5

ソフトウェアエンジニアリングシンポジウム 2013ている．提案手法の適用によって，このメソッドの先頭で24650011)，および文部科学省科学研究費補助金若手研究

定義されていた 2 つの文が，参照される直前へ移動すると(A)(課題番号：24680002) の助成を得て行われた．

いう文の並び替えが行われた．しかし，被験者の多くはオリジナルの方が読みやすいと評価している．オリジナルの参考文献

メソッドには，メソッドの先頭で定義されている 2 つの変[1]数名が類似している，および，変数 mContent が指すオブジェクトに対して連続してメソッド呼び出しが行われてい[2]る，という特徴がある．一方，提案手法適用後のメソッド
では，このような類似する文の並びが保たれていない．
提案手法による文の並び替えを行うことで，これらの類[3]似した文の構造が保たれていない例がいくつか見られた．
このことから，類似した文の並びはソースコードの可読性[4]に貢献するものである可能性がある．

6. 妥当性について留意すべき点
5 節の実験では，215 のメソッドに対して文の並び替えが行われた．しかし，この 215 のメソッド全てが，オリジナルのメソッドとの間において振る舞いを保持していたわ

[5]

[6]
[7]

けではない．TVBrowser はそのソースコード中において，JDK 等の外部ライブラリに含まれるメソッドを呼び出して[8]いる．そのようなメソッド呼び出しにおいて，オブジェク[9]トの状態が変化しているかは不明である．今回の実験では，外部のメソッド呼び出しがあった場合には，そのメソッドではオブジェクトの状態が変化しないという前提をおいた[10]上で文の並び替えを行った．
しかし，この前提は必ずしも成り立つわけではない．よっ[11]て，提案手法により並び替えた 215 のメソッドからランダムに 1 つを抽出し，並び替えによって振る舞いが変化していないかどうかを著者らが手作業により確認した．振る舞[12]

いが変わっていないと判断した場合には，そのメソッドを実験対象に加えた．このようにして，ランダムに 1 つ抽出し，そのソースコードを調査するという作業を，実験対象[13]が 20 になるまで繰り返した．

7. おわりに本研究では，変数の定義と参照の間の距離に着目して，[14]

ソースコード中の文を並び替える手法を提案した．オープ[15]

ンソースソフトウェアに対して手法を適用し，並び替えが行われた 20 のメソッドを対象に，44 名の被験者が比較を行った．その結果，提案手法を適用することで 16 のメソッ

[16]

ドの可読性が向上したことが確認できた．更に，可読性に影響を与える文の並び方には，変数の定義と参照の間の距離だけではなく，類似した文の並びも影響を与える可能性があるという結果が得られた．

[17]

Atkinson, D. C. and King, T.: Lightweight Detection of Program Refactorings, Proceedings of the 12th Asia-Pacific Software Engineering Conference, pp. 663–670 (2005).
Biegel, B., Beck, F., Hornig, W. and Diehl, S.: The Orderof Things: How Developers Sort Fields and Methods, Proceedings of the 28th International Conference on Software
Maintenance, pp. 88–97 (2012).
Boehm, B. and Basili, V. R.: Software Defect Reduction Top
10 List, Computer, Vol. 34, No. 1, pp. 135–137 (2001).
Buse, R. P. L. and Weimer, W. R.: Learning a Metric for
Code Readability, IEEE Trans. Softw. Eng., Vol. 36, No. 4,pp. 546–558 (2010).
Code Conventions for the Java Programming Language:
http://www.oracle.com/technetwork/java/codeconv-138413.html.
Dunsmore, A. and Roper, M.: A Comparative Evaluation of
Program Comprehension Measures (2000).
Fowler, M.: Refactoring: improving the design of existing code, Addison-Wesley Longman Publishing Co., Inc.,
Boston, MA, USA (1999).
Goldberg, A.: Programmer as Reader, IEEE Softw., Vol. 4,No. 5, pp. 62–70 (1987).
Jackson, S., Devanbu, P. and Ma, K.-L.: Stable, flexible,
peephole pretty-printing, Sci. Comput. Program., Vol. 72,No. 1-2, pp. 40–51 (2008).
Khedker, U., Sanyal, A. and Karkare, B.: Data Flow Analysis: Theory and Practice, CRC Press, Inc., Boca Raton, FL,USA, 1st edition (2009).
Ko, A. J., Myers, B. A., Coblenz, M. J. and Aung, H. H.:An Exploratory Study of How Developers Seek, Relate, andCollect Relevant Information during Software Maintenance
Tasks, IEEE Trans. Softw. Eng., Vol. 32, No. 12, pp. 971–987(2006).
Murphy, G. C., Kersten, M., Robillard, M. P. and Čubranić,D.: The emergent structure of development tasks, Proceedings of the 19th European conference on Object-Oriented
Programming, pp. 33–48 (2005).
Nakamura, M., Monden, A., Itoh, T., Matsumoto, K.-i., Kanzaki, Y. and Satoh, H.: Queue-Based Cost Evaluation of Mental Simulation Process in Program Comprehension, Proceedings of the 9th International Symposium on Software Metrics,
pp. 351–360 (2003).
Oppen, D. C.: Prettyprinting, ACM Trans. Program. Lang.
Syst., Vol. 2, No. 4, pp. 465–483 (1980).
Relf, P. A.: Tool assisted identifier naming for improved software readability: an empirical study, Int’l Symp. on Empirical
Software Engineering, pp. 53–62 (2005).
Tsantalis, N. and Chatzigeorgiou, A.: Identification of Extract Method Refactoring Opportunities, Proceedings of the2009 European Conference on Software Maintenance andReengineering, pp. 119–128 (2009).
Wang, X., Pollock, L. and Vijay-Shanker, K.: AutomaticSegmentation of Method Code into Meaningful Blocks toImprove Readability, Proceedings of the 2011 18th Working
Conference on Reverse Engineering, pp. 35–44 (2011).

謝辞
本研究は，日本学術振興会科学研究費補助金基盤研
究 (S)(課題番号：25220003)，挑戦的萌芽研究 (課題番号：©2013 Information Processing Society of Japan6