Ngồi làm xong assignment của Software Testing. Tiện tay … post lên luôn :”)

1. Tại sao không thể kiểm chứng phần mềm hoàn toàn ?
Việc kiểm chứng phần mềm hoàn toàn là điều không thể vì các lý do sau đây :
- Không thể kiểm tra hoàn toàn 100% giá trị đầu vào của chương trình vì để thực hiện công việc đó tốn rất nhiều thời gian hay không thể thực hiện được (miền giá trị là vô tận).

- Không thể kiểm tra được toàn bộ các trường hợp của chương trình. Tức là không thể tiên đoán và mô phỏng được tất cả cách người dùng sử dụng chương trình.

- Không thể kiểm tra được toàn bộ môi trường hoạt động của chương trình.

- Lỗi do giao diện chương trình hay yêu cầu sai.

- Không thể kiểm tra được sự đụng độ của chương trình với các chương trình khác 100% dẫn đến chương trình hoạt động không chính xác.

- Không thể kiểm tra được lỗi gây ra do phần cứng.

- Không thể kiểm tra được các lỗi sẽ xuất hiện trong tương lai do sự không tương thích hay do sai lệch trong tính toán.

- Không thể ngăn được người dùng cố tình gây lỗi cho chương trình , hoặc là việc người dùng xem đó là lỗi trong khi mình thì không.

Một vấn đề khác nảy sinh khi kiểm chứng phần mềm là có vá các lỗi phát hiện ra hay không. Khi đó ta cần đánh giá lỗi đó (về cường độ xuất hiện, độ nghiêm trọng, thời gian vá …) xem cần phải vá hay không. Vì khi ta vá sẽ có một xác suất là chúng ta sẽ làm phát sinh ra các lỗi mới  (cho nên sự cần thiết của Regression Testing) và cần phải kiểm chứng lại.Một lý do để ta không cần phải kiếm chứng phần mềm hoàn toàn là do áp lực thị trường hay timeline của dự án. Ta cần đưa ra một phiên bản vào thời điểm đó nếu cứ xa đà vào việc kiểm chứng và vá lỗi thì sẽ làm ta chậm tiến độ dự án, vì vậy có thể chấp nhận không kiểm chứng hoàn toàn và phát hành ra ngoài và để … khách hàng thực hiện tiếp công việc kiểm chứng này .
Tham khảo :
- Object Oriented Design : Testing (Charles Wallace)
- Impossibility of Complete Testing (Cem Kaner)


2. Liệt kê 10 trường hợp lỗi phần mềm nghiêm trọng trong lịch sử.

1. Vào tháng 12/2007. Theo các báo cáo tin tức thì có một lỗi nghiêm trọng trong phần thanh toán lương trong một hệ thống ERP của một hệ thống trường học thành phố. Nó được tin rằng hơn 1/3 nhân viên đã nhận được hóa đơn thanh toán sai vào nhiều thời điểm khi hệ thống này đi vào hoạt động vào tháng 1, kể quả là thanh toán quá mức lên đến 53 triệu USD, cũng như là thanh toán thiếu.

2. 28/6/1962: Tàu thăm dò vũ trụ Mariner
Con tàu này có sứ mệnh bay đến sao Kim nhưng đã bị phá hủy 293 giây sau khi phóng do bay chệch hướng so với dự kiến ban đầu. Những cuộc điều tra sau đó đã khám phá ra rằng một công thức được viết trên giấy bằng bút chì đã không được chuyển đổi sang mã điện toán, khiến hệ thống máy tính tính toán sai đường đi của tên lửa.

3. 1982: Đường ống dẫn gas của Xô Viết
Cơ quan tình báo Mỹ CIA bị cho là đã cố tình tạo ra một lỗi trong hệ thống máy tính Canada mà Liên Xô cũ mua về để kiểm soát đường ống dẫn khí sang Siberia. Chính quyền Xô Viết đã trang bị hệ thống này nhằm tìm hiểu và khai thác bí mật công nghệ của Mỹ. Theo một số nguồn tin, CIA đã phát hiện kế hoạch trên và quyết định cho nổ sớm một bộ phận nhằm làm lỗi hoạt động. Hậu quả là Nga phải hứng chịu một vụ nổ không liên quan đến hạt nhân lớn nhất trong lịch sử.

4. 1985 - 1987: Máy gia tốc Therac-25
Therac-25 là một hệ thống trị liệu cải tiến, có khả năng phóng hai loại bức xạ: tín hiệu điện tử năng lượng thấp (hạt beta) hoặc tia X. Những tia X này sinh ra khi ta bắn hạt electron tới một tấm bia kim loại đặt giữa súng điện tử và bệnh nhân. Các chuyên gia thiết kế thuộc hãng AECL (Canada) đã thay thế khóa an toàn cơ học trong Therac-20 bằng một phần mềm kiểm soát nhằm tăng độ tin cậy cho Therac-25. Sự cố xảy ra khi nguồn năng lượng cao được kích hoạt và bia kim loại chưa xoay vào đúng vị trí nhưng phần mềm không phát hiện ra. Dòng điện cực cao được bắn thẳng vào bệnh nhân, gây cảm giác shock điện, phát nhiệt và cháy bức xạ. Có ít nhất 5 người chết và nhiều người bị thương nặng. Therac-25 đã được xếp vào những vụ tai nạn kinh điển trong y tế và điện toán.

5. 15/1/1990: Mạng AT&T ngừng hoạt động
Một lỗ hổng xuất hiện trong phiên bản mới của phần mềm kiểm soát thiết bị chuyển mạch (switch) từ xa AT&T”s #4ESS. Nó khiến hệ thống gặp vấn đề mỗi khi chúng nhận một thông điệp từ switch kế cận (thông điệp này được một switch gửi đi nếu nó vừa phục hồi sau một trục trặc nào đó).

Ngày 15/1/1990, một thiết bị chuyển mạch tại New York bị trục trặc và hoạt động trở lại, khiến cho switch lân cận gặp rắc rối, ảnh hưởng một loạt hệ thống khác theo hiệu ứng domino. 114 switch liên tiếp bị sập và khôi phục cứ sau mỗi 6 giây và khoảng 60 nghìn người không thể nhận dịch vụ từ xa trong suốt 9 giờ. Các kỹ sư của AT&T sau đó đã phải chuyển đổi sang phần mềm cũ.
6. 11/2000: Viện ung thư quốc gia, thành phố Panama
Phần mềm trị liệu của Công ty Multidata Systems International (Mỹ) cho phép bác sĩ đặt trên màn hình máy tính 4 tấm kim loại (block) để bảo vệ những tế bào khỏe mạnh của bệnh nhân khỏi chất phóng xạ. Chương trình chỉ hỗ trợ 4 tấm chắn trong khi các bác sĩ tại viện Panama lại muốn sử dụng 5 block.
Sau đó, họ phát hiện ra là có thể lừa phần mềm bằng các kéo tất cả 5 block thành một block đơn lớn với một lỗ hổng ở giữa. Tuy nhiên, điều mà họ không hiểu là phần mềm Multidata sẽ đưa ra những kết quả khác nhau phụ thuộc vào lỗ hổng được kéo theo chiều nào: kéo nó theo hướng này, lượng phóng xạ sẽ được tính toán chuẩn, kéo theo hướng khác, phần mềm sẽ nhân liều lượng lên gấp đôi.

Có ít nhất 8 bệnh nhân đã chết và 20 người khác gặp vấn đề lớn về sức khỏe. Những bác sĩ này đã bị kết án với tội danh ám sát

7. 4/6/1996 - Ariane 5 Flight 501
Mã hoạt động cho tên lửa Ariane 4 được sử dụng lại trong phiên bản tiếp theo Ariane 5. Tuy nhiên, rắc rối đã xảy ra khi mã này thực hiện quá trình chuyển đổi số chứa dấu phẩy động 64 bit sang ký hiệu số nguyên 16 bit. Động cơ trong Ariane 5 có tốc độ nhanh hơn đã khiến các số 64 bit trở lên lớn hơn so với Ariane 4, gây tình trạng quá tải và sập máy tính điều khiển. Hệ thống backup cũng gặp trục trặc ngay 0,05 giây sau đó và thiết bị xử lý cơ sở của tên lửa bị tiếp quá nhiều năng lượng. Ariane 5 đã phát nổ chỉ 40 giây sau khi phóng.

8. 2/1/2008 Máy định vị GPS dẫn ôtô lao vào đầu tàu hỏa
Một chuyên gia tư vấn về máy tính lái xe theo hướng chỉ của thiết bị định vị vệ tinh bỗng giật mình khi trước mặt là một đoàn tàu đang ầm ầm lao đến. nh này đã rẽ phải như “tư vấn” và ngay lập tức bánh của chiếc ôtô đi thuê bị kẹt phải đường tàu. May mắn là viên chuyên gia nhảy ra kịp trước khi tàu cán phải xe và lôi đi 33 mét với vận tốc 108 km/giờ.

9. 1993: Phép chia dấu phẩy động (floating point) Intel Pentium
Một lỗi silicon khiến chip Pentium nổi tiếng của hãng sản xuất thiết bị xử lý Mỹ gặp sai sót khi chia số floating-point trong một chuỗi cụ thể. Ví dụ, chia 4195835.0/3145727.0 sẽ ra 1.33374 thay vì 1.33382, sai số 0,0006%. Dù lỗi ảnh hưởng đến rất ít người sử dụng, nó trở thành một cơn ác mộng về PR (quan hệ cộng đồng) cho Intel. Đã có khoảng 3-5 triệu chip gặp khiếm khuyết lưu thông trên thị trường. Intel ban đầu chỉ cung cấp thiết bị xử lý mới cho những khách hàng chứng minh được rằng công việc của họ đòi hỏi độ chính xác cao. Tuy nhiên, công ty sau đó đã nhún nhường và chấp nhận thay thế chip cho bất cứ ai gửi phàn nàn. Tổng thiệt hại của Intel cho lỗi này là 475 triệu USD.

10. 1988 - 1996: Lỗi trong công cụ tạo số ngẫu nhiên của hệ thống xác thực Kerberos
Các tác giả của cơ chế bảo mật nổi tiếng này đã hơi cẩu thả khi xử lý thông tin cơ sở trong phần mềm tạo số ngẫu nhiên (random number generator). Hậu quả là suốt 8 năm người ta có thể xâm nhập một cách đơn giản vào bất kỳ máy tính nào sử dụng hệ thống xác thực Kerberos. Đến nay vẫn chưa có lời khẳng định rằng lỗi nói trên đã bị lợi dụng nhiều hay chưa.

Tham khảo :
- Báo VnExpress
- 10 lỗi phần mềm trầm trọng nhất trong nửa thế kỷ qua