Thiết kế phần mềm tồi có thể khiến cả tàu chiến va chạm
(imseongkang.wordpress.com)Ngày 21 tháng 8 năm 2017, tàu khu trục Aegis USS John S. McCain (DDG-56) của Hải quân Mỹ với lượng giãn nước khoảng 9.000 tấn đã va chạm với tàu chở dầu Alnic MC có tải trọng khoảng 30.000 tấn tại eo biển Malacca gần Singapore, khiến 10 thủy thủ thiệt mạng và 5 người bị thương. Vụ tai nạn xảy ra do quá trình chuyển giao quyền điều khiển trên tàu John S. McCain bị chậm khoảng 3 phút trong một tuyến hàng hải đông đúc. Ngay sau vụ việc, Phó Đô đốc Joseph P. Aucoin, Tư lệnh Hạm đội 7 của Hải quân Mỹ, đơn vị mà con tàu này trực thuộc, đã bị cách chức.
Báo cáo của NTSB Mỹ (Ủy ban An toàn Giao thông Quốc gia) điều tra vụ tai nạn đã chỉ ra nhiều nguyên nhân, trong đó có thiết kế không phù hợp của IBNS (Hệ thống điều hướng cầu tàu tích hợp) được lắp trên tàu John S. McCain từ một năm trước tai nạn. Trong quá trình hiện đại hóa chiến hạm, giao diện điều khiển lái tàu và hệ thống đẩy đã được chuyển sang phần mềm dựa trên màn hình cảm ứng. Tuy nhiên, UI tổng thể của giao diện này không phù hợp, làm độ phức tạp tăng mạnh, tạo ra môi trường mà con người dễ mắc sai sót và khó nhận ra ngay lập tức, từ đó góp phần gây ra tai nạn. Vì lý do này, Hải quân Mỹ đã quyết định loại bỏ giao diện điều khiển dựa trên màn hình cảm ứng và quay trở lại các thiết bị điều khiển cơ khí truyền thống.
Thoạt nhìn, có thể nghĩ đơn giản rằng sai lầm nằm ở việc áp dụng màn hình cảm ứng, nhưng trên thực tế, vấn đề cốt lõi là UI tệ làm tăng độ phức tạp. Liên quan đến điều này, cuốn sách [Meltdown: Why Our Systems Fail and What We Can Do About It](Chris Clearfield · Andras Tilcsik, 2019) giải thích qua nhiều ví dụ rằng việc độ phức tạp hoặc mức độ kết nối của hệ thống tăng cao nguy hiểm đến mức nào. Bài viết được liên kết giải thích chi tiết những điểm chưa tốt trong thiết kế giao diện người dùng của IBNS nói trên.
5 bình luận
Thất bại của UI/UX hiện đại tạo ra nghịch lý phải quay lại các giao diện lỗi thời.
Trong cuốn sách [Meltdown] được nhắc đến ở trên cũng có nêu các trường hợp thảm họa xảy ra do vấn đề liên quan đến UI/UX. Ví dụ, vụ [tai nạn rơi máy bay Air France 447 trên Đại Tây Dương] xảy ra năm 2009 là một tai nạn xảy ra vì cơ phó còn ít kinh nghiệm đã hoảng loạn khi gặp tình huống bất ngờ và liên tục kéo cần lái; trong các nguyên nhân góp phần gây tai nạn còn có việc viên phi công đã nhận ra khủng hoảng và trực tiếp nắm quyền điều khiển nhưng lại phát hiện quá muộn rằng cơ phó vẫn đang tiếp tục kéo cần lái. Đã có chuông cảnh báo vang lên cho biết cần lái của cơ trưởng và cơ phó đang nhập vào hai mệnh lệnh khác nhau, nhưng vì khi đó nhiều loại cảnh báo đã đồng thời kêu lên nên đến lúc họ nhận ra điều đó thì đã quá muộn.
Vụ tai nạn rơi máy bay Air France 447 trên Đại Tây Dương:
https://rhfvm1111.blog.me/220275551718
Dù không phải là ví dụ được nêu trong cuốn sách trên, vẫn có nhiều trường hợp tai nạn do giao diện thao tác sai hoặc phần mềm lỗi gây ra, chỉ riêng trong lĩnh vực hàng không như đã nhắc ở trên cũng có không ít. Chẳng hạn, trong [vụ tai nạn rơi chuyến bay China Airlines 140 tại sân bay Nagoya] năm 1994, một thao tác nhầm vào cần gạt mà phi công rất dễ chạm phải đã chồng lên tình trạng phần mềm lái tự động có lỗi nghiêm trọng nhưng không được cập nhật, từ đó dẫn đến thảm họa lớn. Ngay cả với dòng Boeing 737 MAX, loại máy bay từng trở thành tâm điểm sau khi [chuyến bay Lion Air 610 rơi] và [chuyến bay Ethiopian Airlines 302 rơi] xảy ra liên tiếp trong thời gian gần đây, nguyên nhân cốt lõi dẫn đến tai nạn cũng là do SPOF (điểm lỗi đơn lẻ) được tạo ra bởi phần mềm lái tự động. Boeing 737 MAX đã bổ sung vào phần mềm lái tự động một chức năng có thể điều khiển cánh đuôi ngang bất chấp ý định của phi công trong một số tình huống nhất định mà không giải thích đầy đủ; chức năng này chỉ sử dụng giá trị từ một trong hai cảm biến được lắp trên máy bay, nên khi cảm biến đó hỏng, hướng bay bị cưỡng ép cố định theo hướng dẫn tới rơi máy bay, và cuối cùng dẫn đến tai nạn. Hơn nữa, chức năng cảnh báo khi hai cảm biến chỉ ra các giá trị khác nhau vốn dĩ đã được tích hợp sẵn, nhưng Boeing lại chuyển nó thành tùy chọn trả phí, khiến các phi công không thể nhận được cảnh báo đúng mức.
Vụ tai nạn rơi chuyến bay China Airlines 140 tại sân bay Nagoya:
https://rhfvm1111.blog.me/220226606257
Khiếm khuyết của dòng Boeing 737 MAX:
https://namu.wiki/w/%EB%B3%B4%EC%9E%89%20737%20MAX/%EA%B2%B0%ED%95%A8
Một ví dụ tiêu biểu khác cho việc vấn đề ở giao diện người dùng kết hợp với lỗi con người là sự cố năm 1988, khi tuần dương hạm Aegis USS Vincennes (CG-49) của Hải quân Mỹ nhầm một máy bay chở khách dân sự của Iran là tiêm kích và bắn hạ nó. Thấy tình hình căng thẳng giữa Mỹ và Iran lại leo thang, tôi chợt nhớ đến vụ này.
Sự cố USS Vincennes bắn hạ chuyến bay Iran Air 655:
https://namu.wiki/w/…
Thật đáng tiếc là có quá nhiều trường hợp như vậy. Có lẽ trong những lĩnh vực gắn liền với sinh mạng con người, độ tin cậy và tính trực quan là điều quan trọng hơn bất cứ thứ gì.
Ngay cả khi cải thiện UI/UX, ở những lĩnh vực như thế này cũng nên đặt trọng tâm vào những yếu tố đó hơn là tính thẩm mỹ hay sự tiện dụng.
Gần đây đã xuất hiện một video tái hiện vụ tai nạn rơi máy bay của chuyến bay China Airlines 140 tại sân bay Nagoya. Video tái hiện cảnh chỉ chưa đầy 2 phút sau một sai sót, thảm họa lớn đã xảy ra khi nhiều yếu tố chồng chéo lên nhau, như giao diện điều khiển dễ gây nhầm lẫn, cơ chế an toàn có lỗi, sự chậm trễ của hãng hàng không trong việc khắc phục lỗi kịp thời, và việc các phi công không hiểu đúng về các chức năng tự động hóa.
https://www.youtube.com/watch?v=IN4Y7dWXY1s