Kiểm chứng biểu đồ loop

Một phần của tài liệu LUẬN VĂN: KIỂM CHỨNG CÀI ĐẶT BIỂU ĐỒ TƯƠNG TÁC VỚI UML 2.0 pdf (Trang 39 - 43)

1. 4 Cấu trúc khóa luận

4.2.2. Kiểm chứng biểu đồ loop

4.2.2.1. Đặc tả giao thức

Để minh chứng cho việc dùng Aspect sinh ra để kiểm chứng cho biều đồ dùng loop. Tôi lấy một ví dụ đơn giản. với biểu đồ trình tự được xây dựng như dưới đây.

33

Hình 4.2.2.1.Biểu đồ trình tự dùng loop đơn giản.

Phương thức m1() có thể được lặp lại nhiều lần.

4.2.2.2. Kiểm chứng giao thức

Aspect được sinh ra.

public Aspect Loop{

int loop2 = 0 ;

private boolean isError = false ;

private int numError = 0;

private ArrayList<String> Id = new ArrayList<String>();

ArrayList<String> listEnd = new ArrayList<String>(); ////////////////////

pointcut LoopChecked():call(@Implement * m2() )||call( @Implement * m1() )||

call(@Implement * m1())||call(@Implement * m2())||call(@Implement * m());

before() : LoopChecked(){

String nameThisAspect = this.getClass().toString();

nameThisAspect=nameThisAspect.substring(nameThisAspect.lastIndexOf(".") + 1, nameThisAspect.length());

String CallMethod = getNameMethod(thisJoin-pointStaticPart);

String AnnotationOfMethod= getAnnotationOfMethod( thisJoin-pointStaticPart ); if(isPart(nameThisAspect,AnnotationOfMethod) == false)

34 if(Id.isEmpty()) Id.add("0"); if(listEnd.isEmpty()){ listEnd.add("3"); } isError = true;

ArrayList<String> l = new ArrayList<String>(); ArrayList<String> target = new ArrayList<String>(); if( CallMethod.equals("* m2()")){ l.add("2"); target.add("3"); l.add("1"); target.add("3"); } else if( CallMethod.equals("* m1()")){ l.add("2"); target.add("2"); l.add("1"); target.add("2"); } else if( CallMethod.equals("* m()")){ l.add("0"); target.add("1"); } setIdIfTrue(l,target); if(isError == true){ numError ++;

System.out.println("goi sai o dong phuong thuc "+ CallMethod +" o dong thu : "+thisJoin-pointStaticPart.getSourceLocation().getLine());

Id.clear(); Id = target ; }

}

after():LoopChecked(){

/*Neu trang thai vua den la trang thai loop thi tang bien loop tuong ung them*/ if(Id.lastIndexOf("2")>=0)

35

for(int i = 0; i < listEnd.size(); i ++) if(Id.lastIndexOf(listEnd.get(i)) >=0){

System.out.println("vong loop thu 1bat dau bang phuong thuc* m1() duong goi "+loop2+ "lan");

if(numError > 0) System.out.println("so loi hien tai : " + numError); }

} }

Tiếp theo đây tôi sẽ đưa ra một số test để kiểm tra gia thức này.  Test1 :

o Đầu vào : m() -> m2() o Kết quả

Hình 4.2.2.2a : kết quả test1

o Nhận xét :

Đoạn gộp loop không được sử dụng, nó được gọi 0 lần, giao thức đặc tả đúng, không có lỗi. Kết quả đúng.

 Test2 o Đầu vào : m() -> m1() -> m1() -> m2() o Kết quả : Hình 4.2.2.2b: kết quả test2 o Nhận xét :

Trong test này, đoạn gộp loop được kích hoạt, nó được gọi 2 lần, giao thức miêu tả đúng, không có lỗi. Kết quả đúng.

 Test3

36 m1() -> m2() -> m1() -> m1() ->m2() o Kết quả :

Hình 4.2.2.2c: Kết quả test3

o Nhận xét :

Do phương thức đầu tên là m() không được gọi mà gọi ngay phương thức m1() là sai, và m1() được gọi sau m2() là sai, do đó có 2 lỗi. Vòng lặp được kích hoạt bằng phương thức m1() , phương thức này được gọi 3 lần. Như vậy kết quả là đúng.

Tương tự như đối với loop, tôi đã kiểm thử với alt, break, opt và cho kết quả kiểm tra đúng với đặc tả.

Một phần của tài liệu LUẬN VĂN: KIỂM CHỨNG CÀI ĐẶT BIỂU ĐỒ TƯƠNG TÁC VỚI UML 2.0 pdf (Trang 39 - 43)

Tải bản đầy đủ (PDF)

(56 trang)