Pertemuan 10: Testing dan Debugging

Tugas Pertemuan 10

Nama: Farrel Aqilla Novianto

NRP: 5025241015

Kelas: Pemrograman Berorientasi Objek (A)

Source Code

Testing dan Debugging

Testing adalah salah satu aktivitas yang harus dilakukan sebagai bagian dari tahap pembangunan perangkat lunak. Tujuannya adalah untuk mencari sebanyak-banyaknya kesalahan, error maupun defect. Testing dilakukan dengan mengacu pada test plan dan test cases. Idealnya, testing dilakukan oleh tester, bukan oleh programmer, sehingga lebih obyektif.

Debugging adalah aktivitas yang dilakukan untuk mencari posisi kesalahan dan memperbaikinya apabila dari hasil testing diperoleh indikasi adanya error atau defect. Debugging biasanya dilakukan oleh programmer-nya. Debugging bisa sangat menghabiskan waktu. Untuk itu, perlu diterapkan cara dan strategi yang tepat. Kita bisa memilih satu dari tiga cara:

  • Brute force – biasanya kita tambahkan print atau write dimana-mana untuk melacak kesalahan
  • Backtracking – source code dianalisis untuk mencari kemungkinan penyebab kesalahan; bergerak dari suatu posisi hingga akhirnya ditemukan posisi kesalahannya
  • Cause elimination – menggunakan partisi biner terhadap bagian program untuk memperkecil kemungkinan posisi kesalahan
Untuk testing dan debugging, kita menggunakan program Online Shop Project dimana nantinya akan ada produk dan komentar terkait produk dan berikut list testing dan debugging:
  1. Buat objek SalesItem di object bench, misalnya: SalesItem item1 = new SalesItem('Laptop Asus', 15000000);
  2. Tambahkan komentar: item1.addComment('Fajar', 'Produk bagus!', 5);
  3. Tampilkan info: item1.showInfo();
  4. Uji batas rating (1–5) dan larangan komentar ganda dari author yang sama
  5. Gunakan method findMostHelpfulComment() untuk menemukan komentar paling membantu

Kode SalesItem.java

/**
 *
 * @author Farrel Aqilla Novianto
 */
import java.util.ArrayList;

public class SalesItem{
    private String name;
    private int price;
    private ArrayList<Comment> comments;

    public SalesItem(String name, int price){
        this.name = name;
        this.price = price;
        comments = new ArrayList<Comment>();
    }

    public boolean addComment(String author, String text, int rating){
        if(rating < 1 || rating > 5){
            return false;
        }
        for(Comment comment : comments){
            if(comment.getAuthor().equals(author)){
                return false;
            }
        }
        Comment newComment = new Comment(author, text, rating);
        comments.add(newComment);
        return true;
    }

    public boolean removeComment(Comment comment){
        return comments.remove(comment);
    }

    public int getNumberOfComments(){
        return comments.size();
    }

    public void showInfo(){
        System.out.println("=================================");
        System.out.println("Item: " + name);
        System.out.println("Price: " + price);
        System.out.println("Number of comments: " + getNumberOfComments());
        for(Comment comment : comments){
            comment.print();
            System.out.println();
        }
    }

    public Comment findMostHelpfulComment(){
        if(comments.isEmpty()){
            return null;
        }
        Comment best = comments.get(0);
        for(Comment current : comments){
            if(current.getVoteBalance() > best.getVoteBalance()){
                best = current;
            }
        }
        return best;
    }
}

Kode Comment.java

/**
 *
 * @author Farrel Aqilla Novianto
 */
public class Comment{
    private String author;
    private String text;
    private int rating;
    private int upvotes;
    private int downvotes;

    public Comment(String author, String text, int rating){
        this.author = author;
        this.text = text;
        this.rating = rating;
        upvotes = 0;
        downvotes = 0;
    }

    public String getAuthor(){
        return author;
    }

    public void upvote(){
        upvotes++;
    }

    public void downvote(){
        downvotes++;
    }

    public int getVoteBalance(){
        return upvotes - downvotes;
    }

    public void print(){
        System.out.println("Author: " + author);
        System.out.println("Rating: " + rating);
        System.out.println("Comment: " + text);
        System.out.println("Votes: " + getVoteBalance());
    }
}

Dokumentasi

Kelas

Menambahkan item

Menambahkan komen

Mengembalikan true karena sesuai

Isi semua komen

Mencoba rentang bintang (1-5)

Memberikan "false" karena diluar rentang

Mencoba memberikan komen dengan user yang sama

Memberikan "false" karena satu user membuat 2 komentar

findMostHelpfulComment() untuk menemukan komentar paling membantu

Kesimpulan

Unit testing di BlueJ memungkinkan mahasiswa untuk menguji method dan class secara interaktif tanpa menulis program utama. Dengan cara ini, bug dapat ditemukan lebih cepat dan kode menjadi lebih stabil.

Komentar

Postingan populer dari blog ini

Final Project: Tetris

Pertemuan 4: Membuat Clock Display