DI ĐỘNG VÀ PHƯƠNG PHÁP PHÁT TRIỂN LINH HOẠT
2.3. Kỹ thuật phân tích mã nguồn tìm lỗi tiềm ẩn cho các phương thức của lớp Java
2.3.2. Biểu đồ cấu trúc điều khiển
Dựa trên những nghiên cứu của Robert Gold [40] về biểu đồ cấu trúc điều khiển của các chương trình để định nghĩa biểu đồ cấu trúc điều khiển cho mỗi phương thức trong một lớp thể hiện qua ví dụ dưới đây.
Giả sử có một phương thức sumAbsolute với mã nguồn như trong Hình 2.5 (Các số đầu mỗi dịng thể hiện dòng mã nguồn tương ứng trong tệp mã nguồn của lớp chứa nó).
Hình 2.5. Mã nguồn phương thức sumAbsolute
Khi đó, áp dụng định nghĩa biểu đồ cấu trúc điều khiển theo [40], chúng ta có biểu đồ cấu trúc điều khiển của phương thức sumAbsolute như Hình 2.6. Chúng ta thêm vào những cạnh của hai nút một nhãn để thể hiện trong trường hợp nào thì luồng điều khiển đi qua đó. Ví dụ từ nút “while” nếu kết quả thực thi câu lệnh ở nút “while” bằng “true” thì luồng điều khiển tiếp tục đi qua node “sum += a[count]”, ngược lại nếu kết
quả ở nút “while” bằng “false” thì luồng điều khiển đi qua nút “sum +=
abs(a[count])”
Trên mỗi nút của biểu đồ cấu trúc điều khiển đã chứa mã nguồn câu lệnh tương ứng của phương thức. Việc thực hiện thông dịch mã nguồn từng câu lệnh này bắt đầu từ nút START để tìm kết quả sau khi thơng dịch. Kết quả đó sẽ có giá trị bằng một trong số các nhãn được gán cho các cạnh giữa nút vừa được thơng dịch với các nút con của nó (tập các nút con của nút đó chính là postset của nó). Khi đó có thể chọn nút con tiếp theo để tiếp tục thơng dịch tìm kết quả. Q trình tiếp diễn cho đến khi bắt gặp nút EXIT . Q trình này có thể xem như việc thông dịch mã nguồn của phương thức để bắt lấy vết của luồng điều khiển thực tế diễn ra bên trong và nếu quá
trình thơng dịch gặp lỗi thì người lập trình sẽ tìm ra chính xác câu lệnh đã phát sinh ra lỗi.
Hình 2.6. Biểu đồ luồng điều khiển của phương thức sumAbsolute
Để có thể thực hiện được q trình thơng dịch này kỹ sư lập trình cũng cần biết trước loại câu lệnh, dòng thứ tự mã nguồn mà từng nốt trong biểu đồ cấu trúc điều khiển biểu diễn là gì. Ví dụ, có thể mơ hình hóa lại biểu đồ cấu trúc điều khiển của phương thức sumAbsolute trong Hình 2.6 (mã nguồn ở Hình 2.5) như Hình 2.7.
Trong biểu đồ ở Hình 2.7, số ở mỗi nút thể hiện dịng mã nguồn trong tệp mã nguồn Java mà nút đó biểu diễn, các hình chữ nhật biểu diễn câu lệnh tuần tự, các hình thoi biểu diễn câu lệnh chứa biểu thức điều kiện (if, while, do-while và for), hình ngũ giác biểu diễn câu lệnh return. Ngồi ra, kỹ sư phát triển cũng có thể sử dụng một hình nào đó để biểu diễn câu lệnh switch.