Một số bugs kinh điển trong thế giới khoa học máy tính mà bạn có thể chưa biết!!!

Trong kỷ nguyên số, các bugs máy tính có thể ảnh hưởng đến cuộc sống của chúng ta, nền kinh tế của một quốc gia hay thậm chí là ảnh hưởng xấu đến hoạt động của xã hội. Khi internet đang xâm chiếm tất cả các khía cạnh của cuộc sống, tầm quan trọng của việc xác định và ngăn ngừa các bugs về máy tính là vấn đề quan trọng.

Dưới đây, tôi có tổng hợp một cài bugs nổi tiếng trong thế giới khoa học máy tính mà bạn có thể biết hoặc chưa từng nghe qua.

THE “MOTH-ER” OF ALL BUGS

Vào ngày 9-9-1947, một chiếc máy tính Mark II ở trường Đại học Harvard đã không hoạt động. Sau khi kiểm tra, các kỹ sư đã phát hiện ra nguyên nhân - một con bướm đã mắc kẹt bên trong máy tính. Sự cố máy tính được ghi nhận vào nhật ký lúc 3 giờ 45 phút chiều, trong đó có đoạn: “con bug thực tế đầu tiên đã được tìm thấy.”

Ngày nay, thuật ngữ “bug” trong khoa học máy tính không còn được hiểu theo nghĩa đen mà nói đến một lỗ hổng hoặc lỗi trong một chương trình máy tính là nguyên nhân để nó không đưa ra kết quả mong muốn hoặc dẫn đến một tai nạn.

Siêu máy tính Deep Blue của IBM đã đánh bái đại kiện tướng cờ vua người Nga, Garry Kimovich Kasparov

Vào ngày 11 tháng 5 năm 1997, siêu máy tính Deep Blue của IBM đã đánh bái đại kiện tướng cờ vua người Nga, Garry Kimovich Kasparov vì một bug. Đây là một trong những người đàn ông được mong đợi nhất trong cuộc chiến với máy móc về mặt trí tuệ. Ông được ví là kỳ thủ mạnh nhất trong lịch sử với hệ số ELO 2851, được xếp hạng cao nhất trong khoảng 20 năm từ năm 1985 đến năm 2005 và là nhà vô địch cờ vua thế giới không thể đánh bại từ 1985 đến 1993 .

Trước đó vào năm 1996 siêu máy tính Deep Blue đã được thử sức với Kasparov. Chiếc máy tính đã thắng được ván đầu tiên, tuy nhiên sau đó Kasparov đã chiến thắng chung cuộc.

Lỗi đã phát sinh trong lần di chuyển thứ tư của game đầu tiên của họ chống lại Kasparov; không thể chọn di chuyển, chương trình đã được mặc định là một biện pháp cuối cùng không an toàn trong đó nó chọn một vở kịch hoàn toàn ngẫu nhiên. Động thái này rất tinh vi và phản trực giác đến nỗi Kasparov nghĩ đó là một bằng chứng về trí thông minh máy móc vượt trội. Anh ta đi vào thế thủ (backfoot) mà cuối cùng phải trả giá cho trận đấu.

Trận đấu năm 1997 đấy được truyền hình trực tiếp đến hàng triệu người. Theo như thỏa thuận, việc thắng Kasparov, nhóm sáng lập Deep blue đã nhận được 700.000 USD, còn Kasparov nhận được 400.000 USD. Riêng IBM đã tìm kiếm lợi nhuận thông qua quảng cáo đạt 50 triệu USD.

Vào thời điểm đó, Deep Blue đấu với Kasparov được ca ngợi là một khoảnh khắc quan trọng trong lịch sử khoa học máy tính - và như một thất bại nhục nhã đối với trí tuệ của con người.

Cách thức đánh cờ của con người và máy tính là hoàn toàn khác nhau. Con người lựa chọn nước cờ của mình sau khi đánh giá một số lượng tối thiểu những phương án mà anh ta cho là hợp lý nhất. Còn máy tính không có khả năng trực giác đó, nó lần lượt xét duyệt một cách máy móc tất cả mọi phương án có thể đi được trên bàn cờ, rồi bằng phương pháp loại trừ, chọn ra phương án nó cho là tốt nhất. Mà số lượng phương án thì vô cùng lớn.

Trước một thế cờ, ví dụ, với 30 nước có thể đi được hợp luật, con người lựa chọn theo kinh nghiệm và trực giác vài phương án anh ta cho là hợp lý nhất, tính toán diễn biến của nó sau 5-6 nước hoặc dài hơn tuỳ theo trình độ, rồi quyết định nước đi. Máy tính thì khác, nó lần lượt xét duyệt diễn biến có thể của cả 30 phương án, kể cả những nước "ngớ ngẩn" nhất, cho đến hết ván cờ. Ví dụ sau mỗi nước cờ có thể có 30 nước đáp lại của đối phương, thì máy phải tính số nước cờ sau một nước là 30x30=900. Nếu mỗi phương án được tính trước với độ dài chỉ 5 nước thôi, thì số nước cờ đã là 3010 = 590.490.000.000.000. Mà mỗi phương án tính đến khi phân định thắng thua của ván cờ thì có thể dài trung bình 20-40 nước(!). Vì vậy, đây sẽ là cuộc đụng độ giữa một bên là trực giác kỳ diệu của con người với bên kia là tốc độ tính toán siêu phàm của máy tính (xét duyệt hàng triệu nước cờ trong một giây).

Lỗi làm tròn và tên lửa Patriot - Một lỗi phần mềm dẫn đến giết chết 28 binh sĩ

Vào tháng Hai năm 1991 (Chiến tranh vùng Vịnh lần thứ nhất), một tên lửa Iraq đã bắn vào căn cứ Mỹ ở Dhahran, A-rập Xê-út, làm chết 28 lính Mỹ.

Hệ thống phòng thủ Patriot bao gồm một thiết bị phát hiện điện tử được gọi là cổng phạm vi (range gate). Nó tính toán diện tích trong không gian nơi cần tìm mục tiêu như Scud. Để tìm ra vị trí của tên lửa Patriot tiếp theo, nó sẽ tính toán vị trí của nó dựa trên vận tốc của Scud và lần cuối cùng radar phát hiện ra Scud.

Trong tên lửa Patriot, thời gian được lưu trong một thanh ghi điểm cố định (fixed point register) có độ dài 24 bit. Vì đồng hồ bên trong của hệ thống được đo một phần mười giây, 1/10 được biểu thị trong thanh ghi điểm cố định 24 bit là 0,0001100110011001100110011 (giá trị chính xác của đại diện 0,0001100110011001100110011 của 1/10 trong thanh ghi điểm cố định 24 209715/2097152). Như chúng ta có thể thấy rằng đây không phải là một đại diện chính xác của 1/10. Nó sẽ lấy số lượng bit vô hạn để thể hiện chính xác 1/10. Vì vậy, lỗi trong biểu diễn là (1 / 10-209715 / 2097152) là khoảng 9,5E-8 giây.

Điều tra cho thấy hệ thống chống tên lửa đạn đạo đã không hoạt động do một lỗi phần mềm máy tính: pin của tên lửa Patriot được sử dụng cho phát hiện và đánh chặn tên lửa của đối phương bị đã chạy sai sau 100 giờ. Sau mỗi giờ, đồng hồ bên trong đã bị sai một mi-li giây và đã ảnh hưởng lớn đến hệ thống khi trễ 0,33 giây sau 100 giờ.

Sự thay đổi được tính toán trong cổng phạm vi (range rate) do lỗi 0,342 giây được tính là 687m. Đối với hệ thống phòng thủ tên lửa Patriot, mục tiêu được coi là nằm ngoài tầm bắn nếu độ dịch chuyển lớn hơn 137m. Sự thay đổi lớn hơn 137m dẫn đến Scud không bị nhắm mục tiêu và do đó giết chết 28 người Mỹ trong doanh trại của Ả Rập Saudi.

Đối với chúng ta, 0,33 giây là rất nhỏ nhưng với các hệ thống ra-đa để theo dõi tên lửa Scud khi bay với tốc độ 1,5 km/giây thì sẽ là 600 mét. Trong trường hợp này, ra-đa đã nhận diện được tên lửa trên bầu trời nhưng đã không lần theo dấu vết do lỗi này và tên lửa đánh chặn đã không được phóng lên.

THE Y2K BUG

Trong thế kỷ trước, các nhà phát triển phần mềm không bao giờ nghĩ rằng phần mềm và sáng tạo của họ có thể tồn tại đến thiên niên kỷ mới. Từ đây, nhiều người đã cho rằng viết “19” trước biến “năm” là không cần thiết và làm lãng phí bộ nhớ. Hầu hết đều quyết định chỉ lưu trữ biến “năm” bằng hai chữ số.

Tất cả vẫn diễn ra tốt đẹp cho đến khi chúng ta sắp bước sang thế kỷ 21, khi ngày 31 tháng 12 năm 1999 càng đến gần hơn, chúng ta đã lo lắng về một thực tế là vào ngày đầu tiên của năm mới, các hệ thống máy tính sẽ cập nhật thành năm 1900 thay vì năm 2000 và là nguyên nhân của các thảm họa lớn và thậm chí có thể kết thúc của nhân loại.

Tuy nhiên, chúng ta vẫn ở đây để kể về một câu chuyện: các tên lửa hạt nhân đã không được phóng ra, các máy bay đã không rơi từ bầu trời và các nhà băng vẫn không mất các thông tin tiết kiệm của khách hàng.

Nhưng lỗi Y2K là có thật. Hàng tỷ USD đã được chi ra để nâng cấp các hệ thống máy tính trên toàn cầu. Bên cạnh đó, một số sự cố nhỏ cũng đã được ghi nhận: ở Tây Ban Nha, một trang web về thời tiết đã chuyển sang ngày 1-1-1900 và ở Úc, một số máy bán vé xe buýt đã không hoạt động.

Nhầm lẫn Feet và mét đã phá hủy tàu thăm dò khí hậu Sao Hỏa

Tàu thăm dò khí hậu Sao Hỏa được phóng lên vào năm 1998 với mục tiêu nghiên cứu khí hậu Sao Hỏa nhưng nó chưa bao giờ hoàn thành sứ mệnh của mình.

Sau khi di chuyển trong không gian được vài tháng, tàu Mars Climate Orbiter đã bị phá hủy bởi một lỗi dẫn đường: những người điều khiển ở mặt đất đã sử dụng hệ đo lường Anh (sử dụng feet) trong khi các phần mềm tính toán lại sử dụng hệ mét. Những tính toán sai này đã ảnh hưởng đến đường đi của con tàu. Cuối cùng, tàu tàu Mars Climate Orbiter đã bị phá hủy do ma sát với bầu khí quyển Sao Hỏa khi sai số lên đến 100 km.

Quá nhiều chữ số cho ARIANE 5

Khi lập trình, các nhà lập trình đã phải định nghĩa các biến của chương trình sẽ sử dụng, đồng thời xác định kích thước các biến sẽ chiếm khi lưu trữ trong bộ nhớ máy tính. Dung lượng máy tính yêu cầu cho các biến được tính bằng bit.

Một biến 16 bit có thể có giá trị từ −32,768 đến 32,767. Mặt khác, một biến 64 bit có thể có giá trị −9.223.372.036.854.775.808 đến 9.223.372.036.854.775.807 (mà hầu như vô số tùy chọn).

Vào ngày 4 tháng Sáu năm 1996, chỉ sau 30 giây được phóng lên, tên lửa Ariane 5 đã nổ tung như pháo hoa. Sự cố được mô phỏng lại với một điều kiện tượng tự cho thấy phần mềm máy tính (được chuyển từ tên lửa Ariane 4 sang) đã chuyển dữ liệu sử dụng biến kiểu số động 64-bit sang biến sử dụng số 16-bít để biểu diễn phương nằm ngang.

Những biến này đã sử dụng một kích thước khác trong bộ nhớ là nguyên nhân hàng loạt lỗi ảnh hưởng đến tất cả máy tính trong tên lửa làm tê liệt hệ thống và kích hoạt hệ thống tự phá hủy, tiêu tốn 370 triệu USD chỉ do một lỗi phần mềm.

Lỗi màn hình xanh "chết chóc"

Có lẽ ai trong chúng ta cũng đã từng gặp lỗi màn hình xanh này rồi :v Lỗi màn hình xanh Blue Screen (hay còn được biết đến với tên gọi là lỗi màn hình xanh chết chóc - Blue Screen Of Death hoặc BSOD, hoặc lỗi “STOP error") là một trong những lỗi khó khắc phục nhất trên hệ điều hành Windows. Lí do là bởi vì lỗi BSOD thường xảy ra đột ngột, khi hệ thống bị treo và không có nguyên nhân rõ ràng (chẳng hạn như sau khi phần cứng hoặc phần mềm thau đổi hoặc khi bạn cố gắng mở một ứng dụng cụ thể nào đó).

Nguyên nhân gây lỗi BSOD thường là do sự cố phần cứng: bộ nhớ RAM bị lỗi, HDD hoặc VGA, nguồn cung cấp điện bị lỗi (PSU), hoặc thiết bị quá nóng. Trong một số trường hợp còn lại, nguyên nhân gây lỗi màn hình xanh có thể là do driver thiết bị bị lỗi hoặc bị sai hoặc do các phần mềm độc hại xâm nhập trái phép và tấn công hệ thống.

Gangnam Style

Khi Gangnam Style phá vỡ mọi kỉ lục của YouTube!

Quay lại khi YouTube được phát triển lần đầu tiên, không ai nghĩ rằng một video sẽ vượt qua hai tỷ lượt xem, hay cụ thể hơn là 2.147.483.647 lượt xem, là giá trị tối đa cho số nguyên có chữ ký 32 bit, được sử dụng để thể hiện số lượt xem tại thời điểm đó.

Trước đây khi lập trình, các kỹ sư của Google sẽ cân nhắc chọn một trong hai phương pháp để lưu trữ các dữ liệu dạng số: Số nguyên 32-bit hay số nguyên 64-bit. Số nguyên 32-bit chiếm ít bộ nhớ hơn nhưng chỉ có thể sử dụng để lưu trữ các con số từ −2.147.483.648 đến 2.147.483.647. Số nguyên 64-bit ngốn bộ nhớ hơn nhưng có thể lưu trữ các con số từ −9.223.372.036.854.775.808 đến 9.223.372.036.854.775.807. Do YouTube sử dụng số nguyên 32-bit, nên lượt view của Gangnam Style đã vượt quá giới hạn và không thể đếm tiếp được nữa. Gangnam Style cũng là video đầu tiên trên thế giới phá vỡ giới hạn của số nguyên này.

Đội phát triển YouTube cho biết họ chưa bao giờ nghĩ tới trường hợp một video có thể đạt lượt xem kỷ lục như vậy. Tuy nhiên giờ đây thì Gangnam Style đã làm được điều đó, và sắp tới đây YouTube sẽ phải nâng cấp, chuyển qua dùng số nguyên 64-bit để đáp ứng nhu cầu. Nhờ vậy mà trong tương lai chúng ta sẽ không bao giờ phải lo một video nào đó được xem quá nhiều tới mức làm hỏng cả bộ đếm view của nhà cung cấp dịch vụ nữa.

Tham khảo

https://www.bbvaopenmind.com/en/technology/innovation/the-5-most-infamous-software-bugs-in-history

https://www.quora.com/What-are-some-famous-bugs-in-the-computer-science-world