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組で本アンケートは終了です. 類似しているかどうかのお考えを,ポジションペーパーとしてご投稿ください.