Lỗi ngữ nghĩa:khi chương trình không còn lỗi cú pháp, chương trình có thể chạy được nhưng lại cho kết quả của một số biến tại câu lệnh nào đó không chính xác.. Đồ thị luồng điều k
Trang 2NỘI DUNG
Phần 1 Mở đầu và một số khái niệm liên quan.
Phần 2 Rút gọn chương trình là gì?
Phần 3 Hệ thống hỗ trợ sửa lỗi chương trình sử
dụng thuật toán Rút gọn chương trình
Phần 4: Kết luận.
Trang 3Phần 1
Mở đầu và một số khái niệm liên quan.
Đặt vấn đề.
Lỗi chương trình là gì?
Luồng điều khiển, và luồng dữ liệu.
Đồ thị luồng điều khiển và đồ thị luồng dữ liệu Tập biến được định nghĩa,Tập biến được sử dụng Phụ thuộc điều khiển, Phụ thuộc dữ liệu.
Trang 41.1 Đặt vấn đề.
phần mềm là làm sao giảm chi phí sản xuất phần mềm.
Phải có một hệ thống trên đó có tích hợp nhiều công cụ khác nhau để xử lý chương trình sau lập trình như: kiểm thử, bảo trì…
Sửa lỗi (Debugging) là một quá trình lập trình viên tương tác với chương trình để tìm ra lỗi của chương trình sau khi lập trình
Trang 51.2 Lỗi chương trình là gì?
Lỗi chương trình là các biến cố của chương trình làm cho chương trình không thể thực thi được hoặc thực thi trả về kết quả không chính xác.
Lỗi cú pháp là lỗi mắc phải khi lập trình viên viết câu lệnh không đúng cú pháp của ngôn ngữ lập trình.
Lỗi ngữ nghĩa:khi chương trình không còn lỗi cú pháp,
chương trình có thể chạy được nhưng lại cho kết quả của một
số biến tại câu lệnh nào đó không chính xác.
Lỗi ngữ nghĩa khó phát hiện hơn lỗi cú pháp.
5
Trang 61.3 Luồng điều khiển, và luồng dữ liệu.
Luồng điều khiển là dãy các câu lệnh được thực thi liên tiếp.
Trang 7 Luồng dữ liệu là dãy các phép truyền, sử dụng và biến đổi
dữ liệu được thực hiện trong quá trình thực thi của chương trình máy tính.
7
Trang 81.4 Đồ thị luồng điều khiển, đồ thị luồng dữ liệu.
Đồ thị luồng điều khiển cho một chương trình P là một đồ thị trong đó mỗi nút được kết hợp với một câu lệnh của
chương trình P và các cung biểu diễn luồng điều khiển trong P.
Đối với đồ thị luồng dữ liệu thì các cung biểu diễn phụ
thuộc dữ liệu của các câu lệnh.
Cả hai đều là đồ thị có hướng.
Trang 91.5 Tập biến được định nghĩa, Tập biến được sử dụng.
Tập các biến được định nghĩa (Definition Set) tại câu lệnh n
Def(n): là tập các biến tại đó giá trị của nó bị thay đổi khi câu lệnh thực thi
Tập các biến được sử dụng (Reference Set) Ref(n) tại câu lệnh n
là tập các biến có mặt trong câu lệnh, tham gia vào việc tính toán làm thay đổi giá trị của các biến được định nghĩa
VD:
9
Trang 101.6 Phụ thuộc điều khiển, Phụ thuộc dữ liệu.
Phụ thuộc điều khiển (Control Dependence) là mối quan hệ giữa một câu lệnh điều khiển với một đỉnh trực tiếp thuộc vùng điều khiển của nó
Trang 11 Cung phụ thuộc dữ liệu từ đỉnh u đến đỉnh v nếu:
11
Trang 12Phần 2
Rút gọn chương trình là gì?
Lịch sử ra đời.
Khái niệm Rút gọn chương trình.
Các thuật toán Rút gọn chương trình.
Thuật toán sử dụng đồ thị Phụ thuộc chương trình.
2.1
2.2
2.3
Trang 132.1 Lịch sử ra đời.
Được Mark Weiser đưa ra đầu tiên năm 1979
Ý tưởng xuất phát từ quá trình quan sát việc tìm và sửa lỗi
chương trình của các lập trình viên như sau:
Chương trình P gồm n câu lệnh s1,s2…sn gọi D(i,x) là tập các câu lệnh thuộc P ảnh hưởng đến giá trị của biến x tại câu lệnh si
Giả sử, lập trình viên phát hiện thấy giá trị của biến x tại câu lệnh si, họ sẽ phải: duyệt trên tập D(i,x) và các tập D(j,x) (j≠i)
Ý tưởng: làm sao để có được các câu lệnh ảnh hưởng đến giá trị của biến x tại câu lệnh i một cách nhanh chóng và chính xác
13
Trang 142.2 Khỏi niệm Rỳt gọn chương trỡnh.
Chươngưtrìnhưrútưgọn(Sliced program)ưlàưmộtưchươngưtrìnhưthuưđư
ợcưtừưmộtưchươngưtrìnhưgốcưnàoưđóưbằngưcáchưloạiưbỏưđiưtừưchươngưtrìnhưgốcưmộtưhoặcưnhiềuưcâuưlệnhưtheoưmộtưtiêuưchuẩnưnàoưđóưmàưvẫnưđảmưbảoưchươngưtrìnhưđượcưrútưgọnưvẫnưthựcưthiưđược
ưViệcưtạoưraưchươngưtrìnhưđượcưrútưgọnưđượcưgọiưlàưrútưgọnưchư
ơngưtrìnhư(Programưslicing).
ưTiờu chuẩn được đề cập đú là cỏc cõu lệnh thuộc chương
Trang 15 VD: Rút gọn chương trình theo biến “result” tại câu lệnh thứ 14
15
Trang 162.3 Thuật toán sử dụng đồ thị luồng điều khiển.
Lấy đồ thị luồng điều khiển làm biểu diễn trung gian để tính
toán chương trình rút gọn
Tập liên quan (Relevant Set) cho biến v và câu lệnh s (<v,s>) tại câu lệnh n R(n) là tập các biến của chương trình có ảnh hưởng trực tiếp đến biến v tại câu lệnh s khi câu lệnh n thực thi
Xác định chương trình rút gọn qua:
Trang 17Chi tiết các bước tính tập liên quan tại mỗi nút:
Khởi tạo tất cả các tập liên quan bằng rỗng
Thêm v vào tập liên quan của nút n relevant(n).
Với m là nút cha của n, gán relevant(m) giá trị:
Thực hiện quay lui từ trên xuống dưới, lặp lại bước (3) cho đến khi nút cha của n là nút đầu tiên của đồ thị luồng điều khiển
17
Trang 18 Ví dụ: Các tập liên quan cho một rút gọn với chuẩn <8,a> Các tập liên quan được tính từ dòng thứ 8 1:
R(7)=(R(8)-DEF(7)) + (REF(7) if R(8)∩DEF(7) ≠{})
=({a}-{a}) + ({b, c} if {a} ∩{a} ≠{}) ={b; c}…
Trang 19Xác định chương trình rút gọn S từ các tập liên quan của chương trình P:
Tại mỗi câu lệnh m của chương trình, xét hai tập Def(m) và Relevan(m+1).
Nếu Def(m) ∩Relevan(m+1) ≠ rỗng thì câu lệnh đó thuộc chương trình rút gọn S.
Ví dụ như trong hình trên thì chương trình được rút gọn bao gồm các câu lệnh:7,6,2 và 1.
19
Trang 202.4 Phương pháp dùng Đồ thị phụ thuộc.
Các bước của phương pháp:
Xây dựng một Đồ thị phụ thuộc từ chương trình gốc.
Rút gọn Đồ thị phụ thuộc vừa xây dựng.
Biến đổi đồ thị phụ thuộc vừa được rút gọn về thành
chương trình rút gọn.
Các bước này là chung cho các thuật toán cho chương trình đơn thủ tục và đa thủ tục.
Trang 21PDG cho chương trình P (GP)là một đồ̀ thị có hướng
Các đỉnh của GP biểu diễn các câu lệnh gán và câu lệnh
điều khiển xuất hiện trong chương trình P
GP có đỉnh đặc biệt gọi là Entry Vertex (START).
Các cung của PDG biểu diễn phụ thuộc điều khiển (Control Dependence) hoặc phụ thuộc dữ liệu hay còn gọi là phụ thuộc luồng (Data Dependence)
Gốc của một cung phụ thuộc điều khiển luôn là một Entry Vertex hoặc một đỉnh điều khiển(Là một đỉnh tương ứng với câu lệnh điều khiển).
21
Trang 22GP chứa cung phụ thuộc điều khiển từ đỉnh u đến đỉnh v nếu:
phần đó không nằm trong bất kì vòng lặp hoặc vùng lệnh điều kiện nào cả.
của P nằm trực tiếp trong vòng lặp hoặc vùng câu lệnh điều kiện
Với đỉnh s của PDG G, rút gọn của G tại đỉnh s kí hiệu là
Slice(G,s) là một đồ thị chứa tập đỉnh và tập cung thỏa mãn:
Trang 23Phần 3
Hệ thống hỗ trợ sửa lỗi chương trình sử dụng thuật
toán Rút gọn chương trình.
Mô hình hệ thống ở mức đơn giản
Mô hình hệ thống ở mức chi tiết.
Trang 243.1 Mô hình hệ thống ở mức đơn giản.
Trang 253.2 Mô hình hệ thống ở mức chi tiết.
25
Trang 263.3 Cài đặt.
Xây dựng mô-đun chuẩn hóa chương trình
Cài đặt đối tượng đồ thị phụ thuộc chương trình
Xây dựng các phươn thức khởi tạo đồ thị
Xây dựng phương thức đồ thị hóa một chương trình
Xây dựng phương thức Rút gọn đồ thị phụ thuộc chương trình
Xây dựng phương thức chương trình hóa đồ thị thành chương trình
Trang 284.1 Kết quả thu được.
lời gọi hàm.
trình.
Trang 294.2 Hạn chế.
Việc xây dựng hệ thống hỗ trợ cho nhiều ngôn ngữ lập trình
khác nhau sẽ mất nhiều thời gian vì các ngôn ngữ khác nhau sẽ có
cú pháp câu lệnh khác nhau
Đối với các ngôn ngữ hướng đối tượng, cách tổ chức và cấu
trúc chương trình có một số điểm khác so với các ngôn ngữ
truyền thống nên sẽ khó cài đặt
Việc chuyển đổi cài đặt từ thuật toán Rút gọn tĩnh đến thuật
toán Rút gọn động cũng rất phức tạp vì phần khó nhất nằm không nằm ở phần cài đặt thuật toán Rút gọn tĩnh
29
Trang 304.3 Hướng phát triển.
Các hướng phát triển của hệ thống như sau:
đối tượng.
cho ra các chương trình rút gọn kích thước nhỏ hơn và có nhiều ứng dụng hơn.
Trang 31Thank you!
31