Nhóm của tôi đang viết một trình biên dịch cho một ngôn ngữ dành riêng cho miền (DSL) sẽ được tích hợp vào IDE. Ngay bây giờ, chúng tôi đang tập trung vào giai đoạn phân tích của trình biên dịch. Chúng tôi không sử dụng bất kỳ trình tạo trình phân tích cú pháp hiện có nào (như ANTLR) vì chúng tôi cần hiệu suất thời gian thực và thông tin lỗi / cảnh báo / thông báo rất chi tiết. Chúng ta có
- các lớp, mỗi lớp đại diện cho một nút trong cây cú pháp cụ thể cho ngôn ngữ, cũng như
- các lớp đóng vai trò là chú thích cho mỗi nút (nghĩa là có lỗi và thông tin bổ sung), cũng như
- các lớp bên trong xây dựng và thao tác cây cú pháp cụ thể (ví dụ: lexer, trình phân tích cú pháp, bộ đệm cho chuỗi, khách truy cập cú pháp).
Chúng tôi đang cố gắng quyết định một chiến lược tổng thể để tổ chức các bài kiểm tra của chúng tôi. Công ty chúng tôi đang thúc đẩy phát triển dựa trên hành vi (BDD) và thiết kế theo hướng tên miền (DDD). Mặc dù chúng tôi đang xây dựng DSL cho miền của công ty chúng tôi, miền của trình biên dịch là ngôn ngữ lập trình.
Chúng tôi vẫn đang trong quá trình xây dựng trình biên dịch và đã có một số thử nghiệm. Chúng tôi đang hướng tới mục tiêu bảo hiểm 100%.
Hiện tại chúng tôi có các thử nghiệm trong đó chúng tôi nhập mã nguồn vào trình tạo cây cú pháp và sau đó chạy xác minh trên từng thuộc tính của mỗi nút của cây cú pháp kết quả để đảm bảo rằng thông tin dự kiến (số dòng, lỗi liên quan, con / mã thông báo gốc, chiều rộng của mã thông báo, loại mã thông báo, v.v.). Bây giờ, vì mỗi nút là lớp riêng của nó và các chú thích và lỗi nhất định được gắn vào một nút là các lớp riêng biệt, bài kiểm tra này kết thúc bằng cách tham chiếu nhiều lớp.
Hiện tại chúng tôi có các bài kiểm tra cho một số lớp nhất định như lexer trong đó chúng tôi có thể cô lập đầu vào (một chuỗi) và đầu ra (một danh sách các mã thông báo) từ các lớp khác (ví dụ: các lớp cho các nút của cây cú pháp). Những xét nghiệm này có nhiều chi tiết.
Bây giờ, các bài kiểm tra trong đoạn ngay trên có thể được đặt tương ứng với lớp được kiểm tra (ví dụ: lexer, bộ đệm chuỗi). Tuy nhiên, các thử nghiệm từ đoạn thứ hai ở trên thực sự kiểm tra toàn bộ giai đoạn phân tích của trình biên dịch; nghĩa là, mỗi thử nghiệm có thể có hơn 300 xác nhận cho cây cú pháp, được cung cấp mã nguồn đầu vào. Các xét nghiệm dành cho hành vi của giai đoạn phân tích.
Đây có phải là một chiến lược thử nghiệm thích hợp? Nếu không, chúng ta nên làm gì khác nhau? Chiến lược tổ chức nào chúng ta nên sử dụng cho các thử nghiệm của mình?