Chính xác là ra mã máy, và tuỳ hệ điều hành mà cấu trúc của file nhị
phân này ra sao
Việc đo tốc độ thực thi của file nhị phân có tool đấy, hơn nữa việc
chuyển từ mã con người có thể đọc sang mã máy của mỗi ngôn ngữ dùng
thuật toán khác nhau - thế nên mới gọi C,Pascal là trình biên dịch :).
Nếu so sánh tốc độ giữa ngôn ngữ Asembler với các ngôn ngữ bậc cao th́
ta thấy rằng khi viết bằng Asembler th́ mă lệnh sẽ chặt chẽ với công
việc yêu cầu của chương tŕnh và sẽ không có các lệnh “dư thừa” như
với ngôn ngữ bậc cao do đó tốc độ thực thi của chương tŕnh sẽ nhanh
hơn hơn.
Đúng là thế nhưng nêu bạn lập trình hướng đối tượng = hợp ngữ thì hơi
mệt (quá mệt chứ), tuy C++ cũng đưa code của bạn xuống hợp ngữ thôi
nhưng người ta có thuật toán hẳn hoi. Cái giá phải trả là chẳng có gì
dư cả, mà làm sao bạn biết nó dư nhỉ ;)
Cuối cùng , dùng mã kiểu con người đọc được thì dễ bảo trỉ và sữa chữa
hơn chứ
Cuộc điều tra sau đó đã nhanh chóng xác định được nguyên nhân. Máy hoa
tiêu đã cố tăng công suất động cơ để hiệu chỉnh quĩ đạo. Thực ra quĩ
đạo đúng mà nó tưởng là sai vì máy định vị bằng quán tính đã tính sai
vị trí của tên lửa do một biến ghi gia tốc bị tràn.
Ở một phần mềm bình thường, tràn số được phát hiện và loan truyền nhờ
range check. Ngoại lệ loan truyền tới một điểm thích hợp trong chương
trình thì được xử lý và dập tắt.
Nhưng phần mềm điều khiển tên lửa được thiết kế theo một tiêu chuẩn
cao. Mọi tính chất của phần mềm đều phải được chứng minh bằng toán
học. Trong tài liệu thiết kế có một định lý, rằng mọi ngoại lệ, kể cả
ngoại lệ tràn, đều không thể xảy ra. Vậy dĩ nhiên mọi check, kể cả
range check, đều là thừa và người ta đã tắt chúng đi.
Chứng minh định lý đó không chứa một lỗi nào. Vấn đề là người ta đã
dựa trên giả thiết sai. Phần mềm đó được thiết kế cho phần cứng trong
thế hệ tên lửa Ariane 4 và đã chạy rất êm. Chuyển lên thế hệ Ariane 5
với gia tốc lớn hơn gấp nhiều lần, một người nào đó đã bệ nguyên xi
phần mềm cũ sang mà "quên" mất rằng giả thiết về các thông số phần
cứng mới đã khác. Việc verification họ đã làm hoàn hảo, nhưng ai đó đã
"quên" còn một việc nữa gọi là validation.
Vụ Ariane 5 để lại vết nhục muôn đời cho ESA.
Thấy gì qua đó?
Mọi bài giảng về High-Integrity Software Engineering đều nói: không
những phải làm việc đúng (do things right), mà còn phải làm đúng việc
(do right things).
Riêng QL còn có một cảm nhận nữa: Bất chấp rigor và formality, tắt
check là tự sát.