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.
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________________________________________________
__________________________
2.2. Pengukuran Kompleksitas Class
ID
Class
DET 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 RET
1
2
3
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 2 )
DET
FTR
Services (dari class 3 )
DET
FTR
3.3. Identifikasi EO dan EQ (Daftarkan semua konteks navigational)
ID Nama
Konteks DET
FTR
1
(PIU atau IIU atau MDIU)
2
3
4
5
Langkah 4. Pengukuran Faktor Multimedia dari Proyek Web
No
Metrics
Deskripsi
Jumlah
1
TypeApp
Tipe web yang dikembangkan (commerce,
e-business, 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
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
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
Codingan untuk Aplikasi Prototype
Fungsi untuk Menghitung Standar Deviasi
Fungsi untuk Menghitung Weight yang akan digunakan pada Weighted
Euclidean Distance
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; }
public double getWeight(double std) { double weight; if(std != 0) weight = 1/Math.pow(std, 2); else weight = 0; return weight; }
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()) {
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(teamexpn-dataset.getInt("teamexp"), 2)+getWeight(getStandardDeviation("devteam"))*Math.pow(devteamn-dataset.getInt("devteam"), 2)+getWeight(getStandardDeviation("webpages"))*Math.pow(webpagen-dataset.getInt("webpages"), 2)+getWeight(getStandardDeviation("newwp"))*Math.pow(newwpn-dataset.getInt("newwp"), 2)+getWeight(getStandardDeviation("wpcustom"))*Math.pow(wpcustomn-dataset.getInt("wpcustom"), 2)+getWeight(getStandardDeviation("wpout"))*Math.pow(wpoutn-dataset.getInt("wpout"), 2)+getWeight(getStandardDeviation("wpownco"))*Math.pow(wpowncon-dataset.getInt("wpownco"), 2)+getWeight(getStandardDeviation("txtTyped"))*Math.pow(txtTypedn-dataset.getInt("txtTyped"), 2)+getWeight(getStandardDeviation("txtElec"))*Math.pow(txtElecn-dataset.getInt("txtElec"), 2)+getWeight(getStandardDeviation("txtScan"))*Math.pow(txtScann-dataset.getInt("txtScan"), 2)+getWeight(getStandardDeviation("imgNew"))*Math.pow(imgNewn-dataset.getInt("imgNew"), 2)+getWeight(getStandardDeviation("imgrdP"))*Math.pow(imgrdPn-dataset.getInt("imgrdP"), 2)+getWeight(getStandardDeviation("imgScan"))*Math.pow(imgScann-dataset.getInt("imgScan"), 2)+getWeight(getStandardDeviation("imgLib"))*Math.pow(imgLibn-dataset.getInt("imgLib"), 2)+getWeight(getStandardDeviation("imgOwnCo"))*Math.pow(imgOwnCon-dataset.getInt("imgOwnCo"), 2)+getWeight(getStandardDeviation("AVNew"))*Math.pow(AVNewn-dataset.getInt("AVNew"), 2)+getWeight(getStandardDeviation("AVLib"))*Math.pow(AVLibn-dataset.getInt("AVLib"), 2)+getWeight(getStandardDeviation("AnimNew"))*Math.pow(AnimNewn-dataset.getInt("animNew"), 2)+getWeight(getStandardDeviation("animLib"))*Math.pow(AnimLibn-dataset.getInt("animLib"), 2)+getWeight(getStandardDeviation("OOmFP"))*Math.pow(oomfpn-dataset.getInt("OOmFP"), 2)); distance.add(dst); while(dataset.next()) { //calculate distance//add to Vector distance }}
sortByDistance(); }
} catch (Exception e) { e.printStackTrace();
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); } } } }