0% menganggap dokumen ini bermanfaat (0 suara)
110 tayangan12 halaman

Laporan Akhir Praktikum Implementasi Perangkat Lunak

Laporan ini membahas hasil praktikum refactoring pada beberapa program Java sederhana. Program-program tersebut meliputi class Person, program pengecekan kondisi, dan validasi input pengguna. Refactoring bertujuan untuk meningkatkan desain kode yang ada.

Diunggah oleh

Erras Lm
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
110 tayangan12 halaman

Laporan Akhir Praktikum Implementasi Perangkat Lunak

Laporan ini membahas hasil praktikum refactoring pada beberapa program Java sederhana. Program-program tersebut meliputi class Person, program pengecekan kondisi, dan validasi input pengguna. Refactoring bertujuan untuk meningkatkan desain kode yang ada.

Diunggah oleh

Erras Lm
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 12

LAPORAN AKHIR

PRAKTIKUM IMPLEMENTASI PERANGKAT LUNAK

MODUL 9
“REFACTORING”

Disusun Oleh

ERRAS LINDIARDA MAHENTAR [3411191102]


DSE-C

PROGRAM STUDI / JURUSAN TEKNIK INFORMATIKA


FAKULTAS SAINS DAN INFORMATIKA
UNIVERSITAS JENDERAL ACHMAD YANI
TAHUN 2022
DAFTAR ISI

DAFTAR ISI..........................................................................................................................2
BAB I......................................................................................................................................3
PENDAHULUAN..................................................................................................................3
I.1 IMPLEMENTASI PROSES DESAIN OBJECT ORIENTED...........................3
I.2 LATIHAN...............................................................................................................3
BAB II.....................................................................................................................................4
HASIL PRAKTIKUM DAN TUGAS...................................................................................4
II.1 Hasil Praktikum.....................................................................................................4
1. Class Person................................................................................................................4
2. Kondisi.java................................................................................................................5
3. Validasi.java...............................................................................................................7
II.2 Tugas.....................................................................................................................10
1. Group.java................................................................................................................10
BAB III.................................................................................................................................12
KESIMPULAN....................................................................................................................12
BAB I

PENDAHULUAN
I.1 IMPLEMENTASI PROSES DESAIN OBJECT ORIENTED
Refactoring adalah teknik untuk meningkatkan desain basis kode yang ada.
Esensinya adalah menerapkan serangkaian perubahan-perubahan kecil pada code, namun
efek kumulatif dari masing-masing perubahan ini cukup signifikan. Dengan melakukannya
dalam langkah-langkah kecil dapat mengurangi risiko terjadi kesalahan.

Berdasarkan buku Refactoring:Improving the Design of Existing Code oleh Martin


Fowler Refactoring dapat dikelompokan menjadi beberapa jenis sebagai berikut (Fowler &
Beck, 2018):

1. Merekonstruksi method.
2. Memindahkan component antar objek (Class)
3. Pengelolaan Data
4. Menyederhanakan ekspresi Kondisi (Conditional Expression / IF)
5. Penyederhanaan pemanggilan method
6. Menangani Generalisasi
7. Big Refactorings

I.2 LATIHAN
Dalam Latihan praktikum ini Bahasa pemrograman yang digunakan adalah Java.
Texteditor, compiler, atau IDE yang digunakan bisa Notepad++, Notepad, Netbeans, dll.
BAB II

HASIL PRAKTIKUM DAN TUGAS


II.1 Hasil Praktikum
1. Class Person
a. Source Code
Sebelum di Refactoring:
public class Person1 {
public String name;

// Main Method
public static void main(String[] args)
{
Person1 person = new Person1();
person.name = "Bob Smith";
System.out.println(person.name);
}
}

Setelah di Refactoring:
public class Person{
public String name;
public String getName(){
return name;
}
public void setName(String newName){
name = newName;
}

public static void main(String[] args){


Person person = new Person();
person.setName ("M. Rafi Hanief");
System.out.println(person.getName());
}
}
b. Hasil Eksekusi
Sebelum di Refactoring:

Setelah di Refactoring:

c. Analisa
Untuk hasil sama, hanya saja pada Codingan di atas perbedaan
Sebelum/Setalah di Refactoring adalah lebih baik dari sebelum di Refactoring.

2. Kondisi.java
a. Source Code

public class Kondisi{


public static void main(String[] args){
int score = 701;
int income = 9000;
boolean authorized = true;

//Sebelum Refactoring
if(score > 700){
accept();
}else if((income >= 40000) && (income <= 100000) &&
authorized && (score > 500)){
accept();
}else{
reject();
}
//Setelah Refactoring
if((score <= 700) && (income < 40000) || (income > 100000)
|| !authorized || (score <= 500) && (income <= 100000)){
reject();
}else{
accept();
}
}

public static void accept(){


System.out.println("Accepted");
}
public static void reject(){
System.out.println("Rejected");
}
}

b. Hasil Eksekusi
Sebelum Refactoring:

Setelah Refactoring:

c. Analisa
Sama seperti program sebelumnya, Untuk hasil sama, hanya saja pada
Codingan di atas perbedaan Sebelum/Setalah di Refactoring adalah lebih baik
dari sebelum di Refactoring.
3. Validasi.java
a. Source Code
Sebelum Refactoring:
public class Validasi{
private boolean ValidateRequest(CustomerInquiryRequest request,
int
customerIDFieldLength, int productFieldLength){

if(request.CustomerProduct.ProductNumber != null &&


request.Customer.CustomerID != null){
if(request.CustomerProduct.ProductNumber !=
string.Empty && request.Customer.CustomerId != string.Empty){
throw new
BusinessException(HandledErrors.CustomerEmptyMessage );
}
}else if{

if( request.CustomerProduct.ProductNumber.Length >


productFieldLength ){
throw new
BusinessException(HandledErrors.ProductInvalidLengthMessage );
}
}
}else if( request.CustomerProduct.ProductNumber ==
null && request.Customer.CustomerID == null ){
// Both were null
throw new
BusinessException( HandledErrors.CustomerEmptyMessage );
}else
if( request.CustomerProduct.ProductNumber == null ){
// ProductNumber was null and CustomerID
was not null
if( request.Customer.CustomerID.Length >
customerIDFieldLength ){
throw new
BusinessException(HandledErrors.CustomerInvalidLengthMessage );
}
}else{
// ProductNumber not null and CustomerID
was null
// Check Product Length

if( request.CustomerProduct.ProductNumber.Length >


productFieldLength ) {
throw new
BusinessException(HandledErrors.ProductInvalidLengthMessage );
}
}
// Set objects below with formatted data
i.e PadLeft
if( request.Customer.CustomerID !=
null ){
request.Customer.CustomerID =
request.Customer.CustomerID.PadLeft(
customerIDFieldLength,
Convert.ToChar( "0",
CultureInfo.CurrentCulture ) );
}

if( request.CustomerProduct.ProductNumber != null ){

request.CustomerProduct.ProductNumber =

request.CustomerProduct.ProductNumber.PadLeft(
productFieldLength,
Convert.ToChar( "0",
CultureInfo.CurrentCulture ) );
}
return true;
}

Setelah Refactoring:

public class Validasi1{


private void ValidateRequest(CustomerInquiryRequest request, int
customerFieldLength, int productFieldLength){
// 1. Check both parameters are not null and not empty
strings
CheckCustomerInquiryNotNullOrEmpty( request );
// 2. Check both parameters aren't populated
CheckCustomerInquiryNullOrEmpty( request );
// 3. Check CustomerID for field length and pad the
parameter
CheckCustomerIDValid( request, customerFieldLength );
// 4. Check ProductNumber for field length and pad the
parameter
CheckProductNumberValid( request, productFieldLength );
}

//Method baru untuk mengecek String input null atau string


kosong
private void
CheckCustomerInquiryNotNullOrEmpty(CustomerInquiryRequest
request){
// Check both parameters are not null or empty string
if( !
string.IsNullOrEmpty( request.CustomerProduct.ProductNumber ) && !
string.IsNullOrEmpty( request.Customer.CustomerID ) ){
// Both were populated
throw new
BusinessException(HandledErrors.InvalidBothParameterMessage );
}
}

//Method baru untuk menguji parameter


private void
CheckCustomerInquiryNullOrEmpty(CustomerInquiryRequest request ){
if( string.IsNullOrEmpty( request.Customer.CustomerID
) && string.IsNullOrEmpty( request.CustomerProduct.ProductNumber ) )
{
// Both are null or empty string
throw new BusinessException(
HandledErrors.CustomerEmptyMessage );
}
}
private void CheckCustomerIDValid( CustomerInquiryRequest
request, int customerIDFieldLength ){
if( string.IsNullOrEmpty( request.Customer.CustomerID
) )
{
// Check Customer ID length
if( request.Customer.CustomerID.Length >
customerIDFieldLength )
{
throw new
BusinessException(HandledErrors.CustomerInvalidLengthMessage );
}
// Pad the left of the customer
id
request.Customer.CustomerID =

request.Customer.CustomerID.PadLeft(
customerIDFieldLength,
Convert.ToChar( "0",
CultureInfo.CurrentCulture ) );
}
}
private void CheckProductNumberValid( CustomerInquiryRequest
request, int productFieldLength ){

if( string.IsNullOrEmpty( request.CustomerProduct.ProductNumber ) )


{
// Check Product Length
if( request.CustomerProduct.ProductNumber.Length >
productFieldLength ){
throw new
BusinessException(HandledErrors.ProductInvalidLengthMessage );
}
// Pad the left of the product number
request.CustomerProduct.ProductNumber =

request.CustomerProduct.ProductNumber.PadLeft(
productFieldLength,
Convert.ToChar( "0",
CultureInfo.CurrentCulture ) );
}
}
}

b. Analisa
Dari Code validasi di atas adalah melakukan beberapa Refactoring
agar terlihat lebih mudah, semakin Panjang metode semakin sulit untuk
menlihat apa yang akan di kerjakan. Pada code terakhir mati, seperti pada
variable, parameter, metode pada code validasi di awal sebelum direfactoring
tidak pernah digunakan. Pada program di atas tidak terdapat Class yang bisa
dijalan pada Class utama.

II.2 Tugas
1. Group.java
a. Source Code
Sebelum Refactoring:

public class Group {


public List getUsers() {
List users = new ArrayList();
if (!new File(persistencePath()).exists())
return users;
File[] files = new File(persistencePath()).listFiles();
for (File file : files)
if (file.isDirectory())
users.add(new User(file.getName(), this));
Collections.sort(users, new
User.UserComparatorByDescendingRegistration());
return users;
}

Setelah Refactoring:

public class Group1 {


public List getUsersSortedByMostRecentlyRegistered() {
List users = new ArrayList();
if (!userDirectoryExists())
return users;
addFoundUsersTo(users);
sortByMostRecentlyRegistered(users);

return users;
}
}

b. Analisa

Codingan di atas perbedaan Sebelum/Setalah di Refactoring adalah


lebih baik dari sebelum di Refactoring.

1. Berdasarkan hasil Refactoring tersebut, apa saja code smells yang ada
pada code awal ?
Jawab:
Terdapat dua code smells yang ada pada source code diatas, yaitu:

 Long Method: Syntax di atas terlalu Panjang dan sulit untuk melihat apa
yang dilakukannya.
 Code Duplikat: Terdapat code “persistence path” yang di ulang pada source
code di atas.
2. Jenis Refactoring apa saja yang dilakukan ?
Jawab:

 Merekontruksi Mehod
 Menyederhanakan Eksresi
BAB III

KESIMPULAN
Pada praktikum kali ini kita dapat mempelajari tentang Refactoring.
Refactoring adalah sebuah Teknik untuk meningkatkan desain basis kode yang ada.
Esensinya adalah menerapkan serangkaian perubahan-perubahan kecil pada coding.
Pada Tugas Praktikum ini terdapat dua code smells yang ada pada source
code, yaitu: Long Mehod dan Duplicate, sehingga perlu dilakukan refactoring yaitu
merekontruksi method yang ada dan menyederhanakan ekspresi.

Anda mungkin juga menyukai