SES2009 併設ワークショップ「ソースコードの類似性」に 参加する方は,本アンケートへの回答を ポジションペーパーとしてご投稿ください. ポジションペーパーの作成にあたっては, ポジションの記入見本および 見本のLaTeXソースをご利用ください.
本アンケートでは,Java のソースコード片の組を順番に提示していきます (一部のソースコードにはJDK1.4,1.5,1.6のコード片を引用しています).
提示されるソースコードの組が, それぞれ,以下の各観点で述べられた行動を取るほど類似しているか, そうではないか,判断をyes/no で,表形式にて回答してください.
観点A | 2つのコード片は類似しているので, 1つのコードにまとめたほうがよい. |
観点B | 2つのコード片は類似しているので, 一方にバグがあれば,他方にも同様のバグがあるか調べたほうがよい. |
観点C | 2つのコード片は類似しているので, 一方のコードを再利用できそうな場所では,かわりに他方を使ってもよい. |
観点D | 2つのコード片は類似しているので, 類似しているという事実を記録して管理したほうがよい. |
観点X | 著者独自の観点(もしあれば). 著者の研究などに基づく独自の観点がある場合は, その解説をポジションペーパーに記述してください. 独自の観点が特にない場合は,無回答としておいてください. また,アンケートに提示されているようなソースコードでは 十分に説明ができないと思う場合,「付録」として, 代表例となるようなソースコードをポジションペーパーに添付し, どのような問題を扱いたいかを解説してください. |
以下のソースコード組 No.1〜11について, 前述の観点A,B,C,D,X から見て類似しているかどうかを検討し,yes/no でご回答ください.
2つのコード片における差異は,赤色で着色しています.
class YourClass { private int i; public YourClass() { i = 0; } public int getInt() { return i; } }
class MyClass { private int i; public MyClass() { i = 0; } public int getInt() { return i; } }
class StoreAppender { private int i = 0; PrintWriter pw = null; public void printAttributes(java.io.PrintWriter writer, int indent, boolean include, Object bean) throws Exception { i = indent; pw = writer; } protected void changeIndent(int indent) { i = indent; } }
class StoreAppender { private int i = 0; PrintWriter pw = null; public void printAttributes(java.io.PrintWriter writer, int indent, boolean include, Object bean) throws Exception { i = indent; pw = writer; } public void changeIndent(int indent) { i = indent; } }
interface HTMLDocument extends org.w3c.dom.Document { public String getTitle(); public void setTitle(String title); //その他下記インタフェースと全く同じ28メソッド public org.w3c.dom.Element getElementById(String elementId); }
interface HTMLDocument extends org.w3c.dom.Document { public String getTitle(); public void setTitle(String title); //その他上記インタフェースと全く同じ28メソッド //getElementById の定義なし }
import java.net.*; class Inet6AddressImpl implements InetAddressImpl { private InetAddress anyLocalAddress; private InetAddress loopbackAddress; public native String getLocalHostName() throws UnknownHostException; public native byte[][] lookupAllHostAddr(String hostname) throws UnknownHostException; public native String getHostByAddr(byte[] addr) throws UnknownHostException; public synchronized InetAddress anyLocalAddress() { if (anyLocalAddress == null) { if (InetAddress.preferIPv6Address) { anyLocalAddress = new Inet6Address(); anyLocalAddress.hostName = "::"; } else { anyLocalAddress = (new Inet4AddressImpl()).anyLocalAddress(); } } return anyLocalAddress; } //以下1メソッド(約10行)については省略 }
import java.net.*; class Inet4AddressImpl implements InetAddressImpl { private InetAddress anyLocalAddress; private InetAddress loopbackAddress; public native String getLocalHostName() throws UnknownHostException; public native byte[][] lookupAllHostAddr(String hostname) throws UnknownHostException; public native String getHostByAddr(byte[] addr) throws UnknownHostException; public synchronized InetAddress anyLocalAddress() { if (anyLocalAddress == null) { anyLocalAddress = new Inet4Address(); // {0x00,0x00,0x00,0x00} anyLocalAddress.hostName = "0.0.0.0"; } return anyLocalAddress; } //以下1メソッド(約10行)については省略,以降も同様の引数チェックの違いが見られる }
class ListObject { private java.util.List<Integer> ll = new java.util.ArrayList<Integer>(); public ListObject() { ll.add(1); ll.add(0); ll.add(0); } public int get(int index) { return ll.get(index); } }
class ListObject { private gnu.trove.TIntArrayList ll = new gnu.trove.TIntArrayList(); public ListObject() { ll.add(1); ll.add(0); ll.add(0); } public int get(int index) { return ll.get(index); } }
import java.util.Vector; import javax.accessibility.AccessibleState; interface AccessibleStateSet { public Vector states = null; }
import java.util.Vector; import javax.accessibility.AccessibleState; interface AccessibleStateSet { public Vector<AccessibleState> states = null; }
import java.io.PrintWriter; class StoreIndente { private int i = 0; PrintWriter pw = null; public void printAttributes(PrintWriter writer, int indent, boolean include, Object bean) throws Exception { i = indent; pw = writer; } }
import java.io.PrintWriter; class StoreIndente { private int i = 0; PrintWriter pw = null; public void printAttributes(PrintWriter writer, int indent, boolean include, Object bean) throws Exception { changeIndent(indent); pw = writer; } //処理を抽出 private void changeIndent(int indent) { i = indent; } }
public class SpecialList extends List { public void sort() { //クイックソートアルゴリズムの実装 } }
public class SpecialList extends List { public void sort() { //マージソートアルゴリズムの実装 } }
final class Byte extends Number implements Comparable { public static final byte MIN_VALUE = -128; public static final byte MAX_VALUE = 127; public static final Class TYPE = Class.getPrimitiveClass("byte"); public static String toString(byte b) { return Integer.toString((int)b, 10); } //以下16メソッド(約150行程度)については省略 //以降においても構造は同じであるが同様の引数の型・定数の違いが見られる }
final class Short extends Number implements Comparable { public static final short MIN_VALUE = -32768; public static final short MAX_VALUE = 32767; public static final Class TYPE = Class.getPrimitiveClass("short"); public static String toString(short s) { return Integer.toString((int)s, 10); } //以下16メソッド(約150行程度)については省略 //以降においても構造は同じであるが同様の引数の型・定数の違いが見られる }
public class StoreAppender { public void printAttributes(PrintWriter writer, int indent, boolean include, Object bean, StoreDescription desc) throws Exception { if (isPrintValue(bean, bean2, descriptors[i].getName(), desc)) printValue(writer, indent, descriptors[i].getName(), value); } //その他の処理(約350行)は同じであるため省略. }
public class StoreAppender { public void printAttributes(PrintWriter writer, int indent, boolean include, Object bean, StoreDescription desc) throws Exception { printAttribute(writer, indent, bean, desc, descriptors[i].getName(), bean2, value); } private void printAttribute(PrintWriter writer, int indent, Object bean, StoreDescription desc, String attributeName, Object bean2, Object value) { if (isPrintValue(bean, bean2, attributeName, desc)) printValue(writer, indent, attributeName, value); } //その他の処理(約350行)は同じであるため省略 }
public class YourClass { private int i; public YourClass() { i = 0; } public int getInt() { return i; } }
public class MyClass { private boolean i; public MyClass() { i = true; } public boolean getBoolean() { return i; } }
全11組で本アンケートは終了です. 類似しているかどうかのお考えを,ポジションペーパーとしてご投稿ください.