You are on page 1of 13

Tugas Review Kode Program

Tim Pengampu Mata Kuliah


Benyamin Langgu Sinaga
Stephanie Pamela Adithama

Dibuat untuk:
Pelengkap Mata Kuliah Pengujian Perangkat Lunak
Program Studi Teknik Informatika UAJY
2017

halaman 1
1. Checklist
1.1 Structure
Checklist
No Item Keterangan
4 Are there any blocks of repeated source code that can be Ya. Lihat keterangan No 4 di
combines to form a single module? bawah. ()
5 Is any module very complex and should be decomposed Ya. Lihat keterangan No 5 di
into two or more modules? bawah.

Keterangan No. 4
Are there any blocks of repeated source code that can be combines to form a single module?
Terdapat potongan code pada source yang dapat diulang-ulang / digabungkan. Walaupun
berada di prosedur yang berbeda yaitu pada pada prosedur insertFirst dan insertLast, potongan
code tersebut dapat dijadikan 1 fungsi baru, yaitu alokasi.

Keterangan No.5
Is any module very complex and should be decomposed into two or more modules?

Pada Fungsi insertAfter terlalu kompleks dan dapat dipisahkan menjadi 3 fungsi, yaitu Alokasi,
findNode, dan insertAfter.

halaman 2
1.2 Variables
Checklist
No Item Keterangan
1 Are all variables clearly defined with appropriate names? Ya. Semua variable yang
didefinisikan sudah sesuai.
()
2 Are there any redundant and unused variables? Ya. Lihat keterangan No 2 di
bawah.
3 Is there unnecessary usage of global variables? Melalui kodetersebut, tidak
ada variable global yang tidak
diperlukan
4 Are variable declarations properly commented? Tidak, pada pendeklarasian
variabel tidak ada komentar
yang diberikan
5 Are all variable names spelt correctly and consistently? Tidak, Lihat Keterangan No.3

halaman 3
Keterangan No.2
Are there any redundant and unused variables?

Terdapat variable ListTemp yang tidak pernah digunakan. Terdapat variable data dan angka yang
mempunyai fungsi yang sama yaitu menyimpan input user untuk dimasukkan ke List, gunakan
salah satu saja.

Keterangan No.3
Format penulisan variabel pada file main.c tidak konsisten, ada yang dituliskan dengan huruf
kecil semua dan ada yang menggunakan perpaduan huruf besar dan kecil, serta ada yang
menggunakan huruf besar pada tiap awalan kata

1.3 Comments
Checklist
No Item Keterangan
1 Is the source code well commented and documented Tidak, lihat keterangan No.1
properly?
2 Are all comments consistent with the source code? Tidak, lihat keterangan No.2

halaman 4
Keterangan No.1
Terdapat bagian code pada file source.c yang tidak rapi

Keterangan No.2
Terdapat Kesalahan komen pada fungsi deleteAfter dan deleteAt, fungsi yang dibuat adalah fungsi untuk
menghapus, tetapi komen yang diberikan adalah komen untuk melakukan penyisipan data kedalam list.

1.4 Loop and Branches


Checklist
No Item Keterangan
2 Does the source code make use of an infinite loop? Ya, lihat keterangan No.3
3 Tidak. Lihat keterangan No 2
Are loop exit conditions accurate? di bawah. () (mungkin)
Keterangan No.2
Terdapat suatu LOOP untuk menampilkan data dari dalam list tetapi posisi pointer list akan berada pada
node pertama dan tidak akan berpindah.

halaman 5
Keterangan No. 3
Pada prosedur delete All terdapat perulangan while((*L).First->next!=NULL) yang berarti program akan
terus melakukkan loop sampai nilai bernilai NULL, namun pada code selanjutnya yaitu memanggil
prosedur deleteFirst disini tidak semua data / node akan terhapus karena masih menyisakan data
dibelakang.

1.5 General
Checklist
No Item Keterangan
1 Tidak. Lihat keterangan No 1
Is every allocated memory de-allocated? di bawah.
2 Ya, source code telah
menggunakan exception
handling dimana exception
yang diterapkan adalah
dengan cara klasik/primitif
yaitu menggunakan kondisi
Does the source code make use of exception handling? (if-else)
3 Ya. Lihat keterangan No 3 di
Is there any identifier that conflicts with the keyword? bawah. ()

Keterangan No.3
Is there any identifier that conflicts with the keyword?
Ya, melalui kode di bawah variable tidak diperbolehkan dinamakan for, hal ini dikarenakan akan terjadi
kesalahan(error) saat perulangan for akan dilakukan.

halaman 6
header.h

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
#include<malloc.h>

typedef char string[50];

typedef struct tNode *address;


typedef struct tNode
{
int data;
address next;
}Node;

typedef struct
{
address First;
}List;

void inisialisasi(List *L);


int isEmpty(List L);

void insertFirst(List *L, int databaru);


void insertLast(List *L, int databaru);
void deleteFirst(List *L);
void deleteLast(List *L);
void showList(List L);

void deleteAll(List *L);


address findNode (List L, int x);

void insertAfter(List *L, int datasebelum, int databaru);


void deleteAt (List *L, int datahapus);
void deleteAfter(List *L, int datasebelum);

halaman 7
source.c

#include "header.h"

void inisialisasi(List *L)


//menginisialisasi List Kosong
{
(*L).First= NULL;
}

int isEmpty(List L)
//mereturnkan true jika list kosong
{
if(L.First == NULL)
return 1;
else
return 0;
}
void insertFirst(List *L, int databaru)
//melakukan penyisipan di depan list
{
address P;
P = (Node*) malloc(sizeof(Node));
P->data = databaru;
P->next = NULL;

P->next = (*L).First;
(*L).First = P;

printf("Inserted ");
}
void insertLast(List *L, int databaru)
//melakukan penyisipan di belakang list
{
address last;

if(isEmpty(*L))
insertFirst(&(*L), databaru);
else
{
address P;
P = (Node*) malloc(sizeof(Node));
P->data = databaru;
P->next = NULL;

last = (*L).First;
while(last->next != NULL)
{
last = last->next;
}
last->next = P;
printf("Inserted ");
}
}
void deleteFirst(List *L)
//melakukan penghapusan node paling depan
{

halaman 8
address del;
if(isEmpty(*L))
printf("List Kosong...");
else
{
del = (*L).First;
(*L).First = (*L).First->next;
free(del);
printf("Deleted ");
}
}
void deleteLast(List *L)
//melakukan penghapusan node paling belakang
{
address bantu, hapus;
if(isEmpty(*L))
printf("List Kosong...");
else
{
if((*L).First->next == NULL)
{
deleteFirst(&(*L));
}
else
{
bantu = (*L).First;
while(bantu->next->next !=NULL)
{
bantu = bantu->next;
}
hapus = bantu->next;
bantu->next = NULL;

printf("Deleted ");
}
}
}
void showList(List L)
//menampilkan data semua node
{
if(isEmpty(L))
printf("List Kosong...");
else
{
while(L.First!=NULL)
{
printf("%d ",L.First->data);
}
}
}

void deleteAll(List *L)


//menghapus semua node
{
while((*L).First->next!=NULL)
{
deleteFirst(&(*L));

halaman 9
}
printf("List Berhasil Dikosongkan...");
}

address findNode (List L, int x)


//mencari alamat sebuah data tertentu pada list
{
address for =L.First;

while (for!=NULL && for->data!=x)


{
for=for->next;
}
return for;
}

void insertAfter(List *L, int datasebelum, int databaru)


//melakukan penyisipan di tengah list, setelah data tertentu
{
address cari;

if(isEmpty(*L))
insertFirst(&(*L)), databaru);
else
{
address bantu = (*L).First;
while (bantu!=NULL && bantu->data!=x)
{
bantu=bantu->next;
}

if(cari==NULL)
printf("Data Sebelum tidak ditemukan...");
else
{
address P;
P = (Node*) malloc(sizeof(Node));
P->data = databaru;
P->next = NULL;

P->next=cari->next;
cari->next=P;
printf("Inserted ");
}
}
}

void deleteAt (List *L, int datahapus)


//melakukan penyisipan di tengah list
{
address hapus, cari;

hapus = findNode((*L),datahapus);

if(hapus==NULL)
printf("Data tidak ditemukan...");
else

halaman 10
{
if (hapus==(*L).First)
deleteFirst(&(*L));
else
{
cari = (*L).First;
while(cari->next!=hapus)
{
cari = cari->next;
}
cari->next=hapus->next;
free(hapus);

printf("Deleted ");
}
}
}

void deleteAfter(List *L, int datasebelum)


//melakukan penyisipan di tengah list
{
address hapus, cari;

cari = findNode((*L),datasebelum);

if(cari==NULL)
printf("Data Sebelum tidak ditemukan...");
else
{
if(cari->next==NULL)
printf("Data Sebelum terletak di akhir List...");
else
{
hapus = cari->next;
cari->next = cari->next->next;
free(hapus);

printf("Deleted ");
}
}
}

main.c

#include "header.h"

int main(int argc, char *argv[])


{
int data, angka, datasebelum;
int pil=-1;
List myList, ListTemp;
address cari;
inisialisasi(&myList);

do
{

halaman 11
system("cls");
printf("---=== Menu ===---\n");
printf(" 1. Insert First\n");
printf(" 2. Insert Last\n");
printf(" 3. Delete First\n");
printf(" 4. Delete Last\n");
printf(" 5. Show List\n");
printf(" 6. Delete All\n");
printf(" 7. Cari Data\n");
printf(" 8. Insert After\n");
printf(" 9. Delete At\n");
printf(" 10. Delete After\n");
printf(" 0. Exit\n");
printf("Masukkan pilihan : ");scanf("%d",&pil);

switch(pil)
{
case 1 :
{
printf("Masukkan data : ");scanf("%d",&data);
insertFirst(&myList,data);
getch();
break;
}
case 2 :
{
printf("Masukkan data : ");scanf("%d",&angka);
insertLast(&myList,angka);
getch();
break;
}
case 3 :
{
deleteFirst(&myList);
getch();
break;
}
case 4 :
{
deleteLast(&myList);
getch();
break;
}
case 5 :
{
showList(myList);
getch();
break;
}
case 6 :
{
deleteAll(&myList);
getch();
break;
}
case 7 :
{

halaman 12
printf("Cari data : ");scanf("%d",&data);
cari = findNode2(myList, data);
if (cari == NULL)
printf("Data tidak ditemukan...");
else
printf ("Data %d ditemukan pada alamat %x",cari->data,cari);
getch();
break;
}
case 8 :
{
printf("Masukkan data : ");scanf("%d",&data);
printf("Sisipkan setelah data : ");scanf("%d",&datasebelum);
insertAfter(&myList,datasebelum,data);
getch();
break;
}
case 9 :
{
printf("Masukkan data yang akan dihapus : ");scanf("%d",&data);
deleteAt(&myList,data);
getch();
break;
}
case 10 :
{
printf("Hapus setelah data : ");scanf("%d",&datasebelum);
deleteAfter(&myList,datasebelum);
getch();
break;
}
}
}while(pil!=0);

system("pause");
return 0;
}

halaman 13

You might also like