25/05/2018, 08:27

Những lỗi (bug) phần mềm nghiêm trọng trong lịch sử

Hãy đánh giá thử xem các phần mềm đã thâm nhập vào cuộc sống của chúng ta như thế nào. Sau năm 1947, chiếc máy tính Mark II yêu cầu hàng tá những nhà lập trình phải bảo trì liên miên. Những người bình thường không bao giờ tưởng tượng được rằng một ngày ...

  • Hãy đánh giá thử xem các phần mềm đã thâm nhập vào cuộc sống của chúng ta như thế nào.
    • Sau năm 1947, chiếc máy tính Mark II yêu cầu hàng tá những nhà lập trình phải bảo trì liên miên. Những người bình thường không bao giờ tưởng tượng được rằng một ngày nào đó trong căn nhà của họ sẽ có một chiếc máy tính của chính họ.
    • Bây giờ, máy tính tràn ngập khắp nới, nó không chỉ đến với từng gia đình, mà còn đến với từng cá nhân. Những đĩa CD phần mềm miễn phí với các đoạn video game cho trẻ em, tặng kèm theo các hộp ngũ cốc còn nhiều hơn cả phần mềm trên các tàu con thoi.
  • Hãy thử so sánh sự phát triển của các máy nhắn tin và các buồng điện thoại, dịch vụ chuyển phát nhanh… với sự phát triển của máy tính và phần mềm máy tính. Dường như không gì có thể theo kịp sự bùng nổ của ngành công nghiệp đầy chất xám này. Bây giờ, chúng ta có thể không sử dụng không sử dụng các dịch vụ chuyển phát nhanh…, nhưng không thể bắt đầu một ngày mà không vào mạng và kiểm tra thư điện tử.
  • Phần mềm ở khắp mọi nơi. Tuy nhiên, nó được viết bởi nhiều người, vì vậy mà nó không hoàn hảo. Chúng ta hãy cùng đi tìm hiểu một số ví dụ dưới đây:

Vào cuối năm 1994, công ty Disney đã tung ra thị trường trò chơi đa phương tiện đầu tiên cho trẻ em, The Lion King Animated StoryBook. Mặc dù rất nhiều công ty khác đã quảng bá các chương trình cho trẻ em trong nhiều năm, đây là lần đầu tiên Disney mạo hiểm lao vào thị trường. Nó đã được xúc tiến và quảng cáo mạnh mẽ. Số lượng bán ra vô cùng đồ sộ. Nó được mệnh danh là “the game to buy” cho trẻ em trong kỳ nghỉ. Tuy nhiên, chuyện gì đã xảy đến? Đó là một sự thất bại khủng khiếp. Vào 26/12, ngay sau ngày Giáng Sinh, khách hàng của Disney đã liên tục gọi điện. Ngay lập tức, các kỹ thuật viên trợ giúp bằng điện thoại đã bị sa lầy với các cuộc gọi từ các bậc cha mẹ đang giận dữ và những đứa trẻ đang khóc, vì chúng không thể cho phần mềm làm việc. Nhiều câu chuyện đã xuất hiện trên các mặt báo và trên bản tin của TV.

…Disney đã thất bại khi không kiểm tra phần mềm rộng dãi trên nhiều mô hình máy tính khác nhau có sẵn trên thị trường. Phần mềm đã làm việc trên một vài hệ thống mà các các lập trình viên của Disney đã dùng để tạo ra trò game này, nhưng nó không phải là các hệ thống phổ biến nhất mà người dùng hay sử dụng.

Lỗi chia dấu phẩy động của bộ vi xử lý Intel Pentium (Intel Pentium Floating – Point Division Bug), 1994

Hãy mở phần mềm Calculator trong máy tính của bạn và thực hiện phép toán sau:

(4195835 / 3145727) * 3145727 – 4195835

Nếu kết quả là 0, máy tính của bạn hoạt động tốt. Nếu như bạn nhận được một kết quả khác, thì bạn đang sở hữu một Intel Pentium CPU với lỗi floating – point division (chia dấu phẩy động) – một lỗi phần mềm đã làm nóng chip của bạn mà vẫn được tái sản xuất liên tục.

Ngày 30/10/1994, Thomas R. Nicely thuộc trường cao đẳng Lynchburg (Virgnia) đã phát hiện một kết quả không mong muốn trong khi thực hiện phép chia (division) trên máy tính của ông. Ông đã công bố kết quả nghiên cứu của mình trên internet và ngay lập tức ông đã làm bùng lên ngọn lửa với một số lượng lớn những người cũng gặp vấn đề như ông. Và họ tìm thêm những tình huống máy tính đưa ra câu trả lời sai. May thay những trường hợp này là hiếm thấy và kết quả đưa ra câu trả lời sai chỉ trong những trường hợp phục vụ cho Toán học chuyên sâu, Khoa học, và các Tính toán kỹ thuật. Hầu hết mọi người sẽ không bao giờ bắt gặp chúng trong khi đang thực hiện các tính toán thông thường hoặc khi đang chạy các ứng dụng thương mại của họ.

Điều gì đã làm cho vấn đề đáng chú ý này không được Intel coi là bug, mặt khác cái cách mà Intel điều khiển tình hình:

  • Họ đã phát hiện ra các vấn đề trong khi thực thi các bài test của chính họ trước khi chip được tung ra thị trường. Các nhà quản lý của Intel đã quyết định rằng vấn đề này không đủ nghiêm trọng và ít khả năng xảy ra để cần thiết phải fixing (sửa) nó hoặc thậm chí là publicizing (công khai) nó.
  • Lỗi đã bị phát hiện, Intel cố gắng để giảm bớt tính chất nghiêm trọng của vấn đề đã bị nhận bằng cách công bố công khai (press release).
  • Khi bị gây áp lực, Intel đã ngỏ ý muốn thay thế miến phí những chip bị lỗi, nhưng chỉ với điều kiện là người sử dụng đó phải chứng minh được rằng anh ta đã bị ảnh hưởng do lỗi (bug).
  • Họ đã gặp phải sự phản đối kịch liệt. Các diễn đàn trên Internet đã tạo sức ép với sự giận dữ của những khách hàng khó tính, đòi Intel phải fix vấn đề này. Các bản tin thì vẽ lên hình ảnh về Intel giống như một công ty vô trách nhiệm với khách hàng. Cuối cùng, Intel đã phải xin lỗi bằng cách điều chỉnh bug và đã phải bỏ ra trên 400 triệu dollar để chi trả cho quá trình thay thế các chip bị lỗi.

Bây giờ, Intel luôn công khai các vấn đề trên Website của họ và cẩn trọng giám sát sự hồi đáp của các khách hàng trên các diễn đàn (newsgroups).

Chú ý: Vào ngày 28/08/2000, một thời gian ngắn trước khi phiên bản đầu tiên của cuốn sách này được sản xuất, Intel đã thông báo việc thu hồi tất cả các bộ vi xử lý Pentium III 1.13MHz, sau khi các con chip này được tung ra thị trường khoảng 1 tháng. Một vấn đề đã bị phát hiện. Vì vậy họ phải thực thi cho lời khẳng định chắc chắn rằng các ứng dụng sẽ luôn chạy ổn định. Họ phải lập kế hoạch để thu hồi những chiếc máy tính đã tới tay khách hàng và tính toán giá thành để thay thế cho những con chip bị lỗi. Giống như lời của huyền thoại bóng chày Yogi Berra đã nói: “This is like déjà vu all over again”.

Tàu vũ trụ của NASA đáp xuống địa cực của sao Hỏa (NASA Mars Polar Lander), 1999

Ngày 3/12/1999, Tàu vũ trụ của NASA đáp xuống địa cực của sao Hỏa đã biến mất khỏi vòng kiểm soát trong khi nó đang cố gắng đáp xuống bề mặt của sao Hỏa. Ban Báo Cáo sự cố đã điều tra sự cố và xác định rằng nguyên nhân có thể xảy ra nhất của sự cố này là việc cài đặt một bit dữ liệu đơn lẻ. Điều đáng chú ý nhất là tại sao sự cố này lại chưa từng được xảy ra trong các cuộc thí nghiệm nội bộ.

Theo lý thuyết, kế hoạch đáp tàu như sau: khi tàu đang đáp xuống bề mặt, nó sẽ nó sẽ mở ra chiếc dù nhằm làm giảm tốc độ. Một vài giây sau khi mở dù, 3 chân của máy dò sẽ mở ra và chết ở vị trí đáp. Khi máy dò ở vị trí cách bề mặt sao hỏa 1.800m nó sẽ nhả dù và đốt nóng (thruster) để giảm khoảng cách còn lại so với bề mặt sao hỏa

Để tiết kiệm, NASA đã đơn giản bộ máy quyết định thời gian ngắt. Thay thế Rada đắt tiền trên tàu vũ trụ, họ đã cài đặt công tắc tiếp xúc (Contact switch) ở chân của máy dò. Nói một cách đơn giản, khi các chân của máy rò mở ra sẽ bật công tắc để động cơ đốt cháy cho đến khi các chân chạm đất.

Thật không may ban báo cáo sự cố đã phát hiện ra trong quá trình kiểm tra của họ rằng khi các chân được tách ra để chạm tới đất, một rung động của máy đã làm trượt công tắc đốt cháy và việc thiết đặt bit này đã gây tai họa. Đây là một vấn đề rất nghiêm trọng, máy tính đã tắt bộ phận đốt nóng và con tàu đã bị vỡ ra từng mảnh sau khi rơi từ độ cao 1.800m xuống bề mặt sao Hỏa.

Kết quả thật là thê thảm, nhưng lý do lại rất đơn giản. Con tàu thám hiểm đã được kiểm tra bởi rất nhiều đội. Một đội đã kiểm tra chức năng mở các chân của con tàu và một đội khác thì kiểm tra việc đáp tàu xuống mặt đất. Đội đầu tiên đã không biết rằng: một bit được thiết đặt cho việc mở các chân của con tàu không nằm trong vùng kiểm tra của họ. Đội thứ 2 thì luôn luôn thiết lập lại máy tính, xóa bit dữ liệu trước khi nó bắt đầu được kiểm tra. Cả 2 đội trên đều làm việc độc lập và hoàn thành nhiệm vụ của mình rất hoàn hảo. Nhưng lại không hoàn hảo khi kết hợp các nhiệm vụ với nhau.

Hệ thống phòng thủ tên lửa Patriot, 1991

Hệ thống phòng thủ tên lửa Patriot (người yêu nước) của Mỹ là một phiên bản scaled-back của chương trình khởi động chiến lược phòng thủ “Star Wars” được khởi động bởi tổng thống Ronald Reagan. Nó đặt nền móng cho chiến tranh Vùng Vịnh (Gulf war) như một hệ thống phòng thủ tên lửa Iraqi Scub. Mặc dù đã có rất nhiều câu chuyện quảng bá về sự thành công của hệ thống, tuy nhiên vẫn tồn tại lỗi khi chống lại một vài tên lửa. Một trong số đó đã giết chết 28 lính Mỹ ở Dhahran, Saudi Arabia. Quá trình phân tích đã cho thấy rằng, phần mềm đã bị lỗi nghiêm trọng. Một thời gian trễ rất nhỏ trong đồng hồ hệ thống đã được tích lũy lại sau 14h, và hệ thống theo dõi không còn chính xác nữa. Trong cuộc tấn công Dhahran, hệ thống đã điều hành trong hơn 100h.

Sự cố Y2K (năm 2000), khoảng 1974

Vào đầu những năm 1970, một lập trình viên, tên anh ta là Dave, đang làm việc cho hệ thống trả tiền của công ty anh ta. Máy tính mà anh ta sử dụng có bộ nhớ lưu trữ rất nhỏ, buộc anh ta phải giữ gìn những byte cuối cùng mà anh ta có. Dave đã rất tự hào rằng anh ta có thể đóng gói các chương trình của mình một cách chặt chẽ (tightly) hơn so với một vài đồng nghiệp của anh ta. Một phương thức mà anh ta đã sử dụng là chuyển định dạng ngày tháng từ 4 chữ số, ví dụ 1973 thành định dạng 2 chữ số, ví dụ 73. Bởi vì, hệ thống trả tiền (Payroll) của anh ta phụ thuộc rất nặng vào xử lý ngày tháng, nhờ thế Dave có thể giữ lại những không gian nhớ có giá trị. Trong một thời gian ngắn, anh ta đã xem xét những vấn đề có thể xuất hiện khi đến thời điểm năm 2000 và hệ thống của anh ta đã bắt đầu thực hiện các công việc tính toán với các năm được đại diện bằng 00, 01… Anh ta cũng nhận thấy rằng, sẽ có một vài vấn đề xảy đến, nhưng anh ta đã nghĩ rằng chương trình của anh ta sẽ được thay thế hoặc cập nhật trong vòng 25 năm, và nhiệm vụ hiện tại của anh ta là quan trọng hơn là kế hoạch trong tương lai xa như vậy. Và thời hạn đó cũng đã đến. Năm 1995, chương trình của Dave vẫn được sử dụng, Dave đã nghỉ hưu. Và không một ai biết làm thế nào để vào được hệ thống kiểm tra xem nếu đến năm 2000 thì chuyện gì sẽ xảy ra. Chỉ một mình Dave biết cách để fix nó.

Người ta đã ước tính rằng, phải mất đến vài trăm tỷ dollar để có thể cập nhật và fix những lỗi tiềm tàng vào năm 2000, cho các chương trình máy tính trên toàn thế giới có sử dụng hệ thống của Dave.

Mối hiểm nguy của Virus, năm 2004

01/04/1994, một thông điệp đã được gửi tới một vài nhóm người sử dụng internet và sau đó nó được truyền bá như một email có chứa một loại virus ẩn trong các bức ảnh có định dạng JPEG trên internet. Người ta đã cảnh báo rằng chỉ cần thao tác mở và xem những bức tranh bị nhiễm sẽ dẫn đến việc cài đặt virus trên PC của bạn. Sự thay đổi của những lời cảnh báo nói rõ rằng virus có thể làm hỏng màn hình máy tính của bạn và rằng những chiếc màn hình Sony Trinitron là “đặc biệt nhạy cảm”.

Nhiều người đã chú ý tới những lời cảnh báo và làm sạch những file ảnh JPEG trong hệ thống của họ. Thậm chí, một số người quản trị hệ thống còn tìm hiểu sâu bên trong những khối ảnh JPEG được nhận từ email trên hệ thống của họ.

Cuối cùng, mọi người cũng đã nhận thấy rằng, thông điệp ban đầu được gửi đi vào ngày cá tháng 4 (“April Fools Day”) và sự thật là không có chuyện gì cả, nhưng câu chuyện đùa này đã đi quá xa. Các chuyên gia đã rung hồi chuông cảnh báo rằng: không có một cách khả thi nào để một bức ảnh JPEG có khả năng làm máy tính của bạn bị nhiễm virus. Sau tất cả, người ta khẳng định rằng một bức tranh cũng chỉ là dữ liệu, nó không thể thực thi mã chương trình.

Mười năm sau, vào mùa thu năm 2004, một virus proof-of-concept đã được tạo ra, nó chứng minh rằng một bức ảnh JPEG có thể được tải về cùng với 1 virus. Nó sẽ gây ảnh hưởng tới hệ thống được sử dụng để xem nó. Những mẩu tin (software patches) được tạo ra một cách nhanh chóng và được thông báo rộng khắp để ngăn chặn virus lan tràn. Tuy nhiên, chỉ là vấn đề thời gian cho đến khi họ khống chế được vấn đề này trên internet bằng cách làm sạch các bức ảnh trên đường truyền.

0