LAMPIRAN
Kuesioner Pengumpulan Data
Nama Perusahaan Anda : _______________________ Nama Project : _______________________
Langkah 1 : Ruang Lingkup Aplikasi 1.1. Tipe Proyek : _____________________ (baru /maintenance) 1.2. Ruang Lingkup Proyek : __________________________________________________________________ __________________________________________________________________ _______________________________
Langkah 2 : Pengukuran Fungsional Data 2.1. Daftarkan semua class yang ada dalam ruang lingkup aplikasi. __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________
89
90
2.2. Pengukuran Kompleksitas Class ID
DET
Class
RET
1 2 3 4 5 6 7 8
2.3. Daftarkan semua Legacy View yang ada dalam ruang lingkup aplikasi __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________________________________________________ __________________________
2.4. Pengukuran Kompleksitas Legacy View. ID Legacy View / Class
DET
1 2 3
RET
91
4 5 6 7 8
Langkah 3. Pengukuran Fungsional Transaksi 3.1. Identifikasi EI : (Daftarkan semua service untuk setiap class atau legacy view) ID
Class
Services
1 2 3 4 5
3.2. Pengukuran Kompleksitas Services Services (dari class 1 )
DET
FTR
92
Services (dari class 2 )
DET
FTR
Services (dari class 3 )
DET
FTR
3.3. Identifikasi EO dan EQ (Daftarkan semua konteks navigational) ID
1
Nama Konteks
(PIU atau IIU atau MDIU)
2 3 4 5
DET
FTR
93
Langkah 4. Pengukuran Faktor Multimedia dari Proyek Web No
1
Deskripsi
Metrics
TypeApp
Tipe web yang dikembangkan (e-commerce, ebusiness, social media, dll)
2
Languages
Bahasa yang digunakan untuk pengembangan web (PHP, JSP, Asp.net, dll)
3
Nlang
Jumlah bahasa yang digunakan (PHP, Javascript, css, dll)
4
ProcImpr
Jumlah tim development yang terlibat dalam proses pengembangan program
5
Metrics ?
Apakah tim development terlibat dalam pengukuran ukuran web ?
6
Devteam
Jumlah anggota yang terlibat dalam pengembangan proyek
7
Teamexp
Rata-rata pengalaman dari tim developer
8
Webpages
Jumlah halaman web
9
newWp
Jumlah halaman web baru
10
Wpcustom
Jumlah halaman web yang diberikan oleh pengguna
11
Wpout
Jumlah halaman web yang digunakan kembali dari library lain
12
Wpownco
Jumlah halaman web yang digunakan kembali yang diambil dari perusahaan sendiri
Jumlah
94
13
txtTyped
Jumlah halaman teks yang diketik
14
txtElec
Jumlah format halaman text
15
txtScan
Jumlah halaman teks yang di sc
16
imgNew
Jumlah gambar baru
17
Img3rdP
Jumlah gambar dari tempat lain
18
Imscan
Jumlah gambar yang di scan
19
Imglib
Jumlah gambar dari library
20
Imgownco
Jumlah gambar dari proyek sebelumnya
21
Animnew
Jumlah animasi baru
22
Animlib
Jumlah animasi dari library
23
Avnew
Jumlah file audio/video baru
24
Avlib
Jumlah file audio/video dari library
25
Totdiffpro
Jumlah produk yang ditawarkan
26
Heffdev
Waktu yang dianggap paling lama untuk mengembangkan suatu fitur atau fungsi
27
HeffAdpt
Waktu yang dianggap paling lama mengadopsi fitur atau fungsi yang sudah ada
28
Hfots
Jumlah fitur/fungsi rumit yang digunakan kembali tanpa adaptasi
29
Hfots
Jumlah fitur/fungsi rumit yang digunakan kembali dengan adaptasi
30
Tothhigh
Total jumlah fitur atau fungsi yang rumit
31
Fots
Jumlah fitur sederhana yang siap dipakai
95
32
Fotsa
Jumlah fitur sederhana yang diadopsi dari proyek lain
33
New
Jumlah fitur/fungsi sederhana yang baru
34
Totnhigh
Total jumlah fitur/fungsi sederhana
35
Toteffor
Jumlah waktu yang diperlukan untuk mengembangkan proyek (dalam satuan jam)
96
Bukti Submit Paper
97
Codingan untuk Aplikasi Prototype Fungsi untuk Menghitung Standar Deviasi public double getStandardDeviation(String name) { double std = 0, mean, n = 0, sum= 0, sum1 = 0; try { if(dataset1.first()) { n = 1; sum = dataset1.getInt(name); while(dataset1.next()) { sum += dataset1.getInt(name); n++; } } mean = sum / n; if(dataset1.first()) { sum1 = Math.pow(dataset1.getInt(name) - mean, 2); while(dataset1.next()) { sum1 += Math.pow(dataset1.getInt(name) - mean, 2); } } std = Math.sqrt(sum1/(n-1)); } catch (Exception e) { e.printStackTrace(); } return std; }
Fungsi untuk Menghitung Weight yang akan digunakan pada Weighted Euclidean Distance public double getWeight(double std) { double weight; if(std != 0) weight = 1/Math.pow(std, 2); else weight = 0; return weight; }
98
Fungsi yang digunakan untuk menghitung jarak antar proyek public void calcDistance() { int teamexpn, devteamn, webpagen, newwpn, wpcustomn, wpoutn, wpowncon, txtTypedn, txtElecn, txtScann; int imgNewn, imgrdPn, imgScann, imgLibn, imgOwnCon, AVNewn, AVLibn, AnimNewn, AnimLibn, oomfpn; String typeprojn, typeappn, docn; double dst; typeprojn = typeproj.getSelectedItem().toString(); typeappn = typeapp.getSelectedItem().toString(); docn = doc.getSelectedItem().toString(); try { teamexpn = Integer.parseInt(teamexp.getValue().toString()); devteamn = Integer.parseInt(devteam.getValue().toString()); webpagen = Integer.parseInt(webpage.getValue().toString()); newwpn = Integer.parseInt(newwp.getValue().toString()); wpcustomn = Integer.parseInt(wpcustom.getValue().toString()); wpoutn = Integer.parseInt(wpout.getValue().toString()); wpowncon = Integer.parseInt(wpownco.getValue().toString()); txtTypedn = Integer.parseInt(txtTyped.getValue().toString()); txtElecn = Integer.parseInt(txtElec.getValue().toString()); txtScann = Integer.parseInt(txtScan.getValue().toString()); imgNewn = Integer.parseInt(imgNew.getValue().toString()); imgrdPn = Integer.parseInt(imgrdP.getValue().toString()); imgScann = Integer.parseInt(imgScan.getValue().toString()); imgLibn = Integer.parseInt(imgLib.getValue().toString()); imgOwnCon = Integer.parseInt(imgOwnCo.getValue().toString()); AVNewn = Integer.parseInt(AVNew.getValue().toString()); AVLibn = Integer.parseInt(AVLib.getValue().toString()); AnimNewn = Integer.parseInt(AnimNew.getValue().toString()); AnimLibn = Integer.parseInt(AnimLib.getValue().toString()); oomfpn = Integer.parseInt(oomfp.getValue().toString()); if(teamexpn < 0 || devteamn < 0 || webpagen < 0 || newwpn < 0 || wpcustomn < 0 || wpoutn < 0 || wpowncon < 0 || txtTypedn < 0 || txtElecn < 0 || txtScann < 0 || imgNewn < 0 || imgrdPn < 0 || imgScann < 0 || imgLibn < 0 || imgOwnCon < 0 || AVNewn < 0 || AVLibn < 0 || AnimNewn < 0 || AnimLibn < 0) { JOptionPane.showMessageDialog(null, "Atribut yang diisi harus lebih besar sama dengan 0", "Peringatan", JOptionPane.ERROR); }else { dst = 0; distance.clear(); if(dataset.first()) {
99
Lanjutan Fungsi untuk Menghitung Jarak dst = Math.sqrt((typeprojn.equalsIgnoreCase(dataset.getString("typeproj"))?1:0)+(typeappn.equals IgnoreCase(dataset.getString("typeapp"))?1:0)+(docn.equalsIgnoreCase(dataset.getString("d ocproc"))?1:0)+getWeight(getStandardDeviation("teamexp"))*Math.pow(teamexpndataset.getInt("teamexp"), 2)+getWeight(getStandardDeviation("devteam"))*Math.pow(devteamndataset.getInt("devteam"), 2)+getWeight(getStandardDeviation("webpages"))*Math.pow(webpagendataset.getInt("webpages"), 2)+getWeight(getStandardDeviation("newwp"))*Math.pow(newwpndataset.getInt("newwp"), 2)+getWeight(getStandardDeviation("wpcustom"))*Math.pow(wpcustomndataset.getInt("wpcustom"), 2)+getWeight(getStandardDeviation("wpout"))*Math.pow(wpoutn-dataset.getInt("wpout"), 2)+getWeight(getStandardDeviation("wpownco"))*Math.pow(wpowncondataset.getInt("wpownco"), 2)+getWeight(getStandardDeviation("txtTyped"))*Math.pow(txtTypedndataset.getInt("txtTyped"), 2)+getWeight(getStandardDeviation("txtElec"))*Math.pow(txtElecndataset.getInt("txtElec"), 2)+getWeight(getStandardDeviation("txtScan"))*Math.pow(txtScanndataset.getInt("txtScan"), 2)+getWeight(getStandardDeviation("imgNew"))*Math.pow(imgNewndataset.getInt("imgNew"), 2)+getWeight(getStandardDeviation("imgrdP"))*Math.pow(imgrdPndataset.getInt("imgrdP"), 2)+getWeight(getStandardDeviation("imgScan"))*Math.pow(imgScanndataset.getInt("imgScan"), 2)+getWeight(getStandardDeviation("imgLib"))*Math.pow(imgLibndataset.getInt("imgLib"), 2)+getWeight(getStandardDeviation("imgOwnCo"))*Math.pow(imgOwnCondataset.getInt("imgOwnCo"), 2)+getWeight(getStandardDeviation("AVNew"))*Math.pow(AVNewndataset.getInt("AVNew"), 2)+getWeight(getStandardDeviation("AVLib"))*Math.pow(AVLibndataset.getInt("AVLib"), 2)+getWeight(getStandardDeviation("AnimNew"))*Math.pow(AnimNewndataset.getInt("animNew"), 2)+getWeight(getStandardDeviation("animLib"))*Math.pow(AnimLibndataset.getInt("animLib"), 2)+getWeight(getStandardDeviation("OOmFP"))*Math.pow(oomfpndataset.getInt("OOmFP"), 2)); distance.add(dst); while(dataset.next()) { //calculate distance //add to Vector distance }} sortByDistance(); } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(null, "Semua atribut harus diisi dengan angka.", "Peringatan", JOptionPane.ERROR_MESSAGE); }
100
Fungsi untuk Mengurutkan Data Jarak antar Proyek public void sortByDistance() { double temp; String temp1; int i, j; for(i = 0; i < namaProject.size(); i++) { for(j = namaProject.size()-1; j > i; j--) { if(distance.get(j) < distance.get(j-1)) { temp = distance.get(j); distance.set(j, distance.get(j-1)); distance.set(j-1, temp); temp = effort.get(j); effort.set(j, effort.get(j-1)); effort.set(j-1, temp); temp1 = namaProject.get(j); namaProject.set(j, namaProject.get(j-1)); namaProject.set(j-1, temp1); temp1 = projectID.get(j); projectID.set(j, projectID.get(j-1)); projectID.set(j-1, temp1); } } } }
101
Distribusi Data Penelitian Variabel
Min
Max Mean
Median
Std. Dev.
Effort
48
800
104.75
68
135.38
FP
32
358
203.83
198.5
80.75
Devteam
1
8
2.38
2
1.46
Teamexp
2
5
4.48
5
1.11
Webpages
2
255
17.48
10.5
38.87
newWP
2
2555
17.48
10.5
32.28
Wpcustom
0
2
0.05
0
0.32
Wpout
0
0
0
0
0
wpOwnCo
0
30
0.75
0
4.74
txtTyped
0
10
0.25
0
1.58
txtElec
0
5
0.13
0
0.79
txtScan
0
0
0
0
0
imgNew
0
31
5.18
5
4.57
Img3rdP
0
7
0.4
0
1.37
imgScan
0
0
0
0
0
imgLib
0
14
4.83
5
3.34
imgOwnCo
0
0
0
0
0
Animnew
0
0
0
0
0
animLib
0
15
4.2
3
3.57
AVNew
0
1
0.025
0
0.16
AVLib
0
0
0
0
0