Wednesday 16 January 2013

Nhân sự kiện lỗi máy đánh bạc hiển thị 55,5 triệu đô la và bàn về chất lượng phần mềm

Gần đây có một sự kiện khá nóng trên truyền thông liên quan đến sự cố lỗi máy đánh bạc của công ty Đại Dương khi một khách hàng không tin vào mắt mình đã thắng 55,5 triệu đô la (http://vnexpress.net/gl/ban-doc-viet/phap-luat/2013/01/vu-thang-bac-55-5-trieu-usd-phap-luat-viet-co-lo-hong). Không cần biết Tòa án sẽ xử thua bên nào nhưng rõ ràng đây là một lỗi phần mềm nghiêm trọng. Qủa là một sự kiện hi hữu! Tôi có thắc mắc liệu đó có phải là lỗi phần cứng hay lỗi phần mềm. Cho dù phần cứng có như thế nào đi nữa thì phần mềm vẫn là đầu ra cuối cùng để hiển thị con số khủng. Rõ ràng lớp bảo vệ cuối cùng là phần mềm đã không thể ngăn chặn được hậu quả khủng khiếp đó. Tôi cho rằng các nhà sản xuất phần mềm phải chịu trách nhiệm về lỗi đó chứ không phải lỗi từ các nhà sản xuất phần cứng.

Nguyên nhân là gì? Phần mềm đã không có cơ chế bảo vệ dữ liệu một cách thông minh. Công tác đánh giá chất lượng dữ liệu trong phần mềm đó hoàn toàn có vấn đề. Đây là một phần của chuyên ngành học về dữ  liệu có tên là “Data Profiling”

Data Profiling hay "Khảo cố học dữ liệu":
Theo định nghĩa trên Wikipedia (http://en.wikipedia.org/wiki/Data_profiling) thì Data Profiling được định nghĩa như sau:
Data profiling is the process of examining the data available in an existing data source (e.g. a database or a file) and collecting statistics and information about that data. The purpose of these statistics may be to:
1. Find out whether existing data can easily be used for other purposes
2. Improve the ability to search the data by tagging it with keywords, descriptions, or assigning it to a category
3. Give metrics on data quality, including whether the data conforms to particular standards or patterns
4. Assess the risk involved in integrating data for new applications, including the challenges of joins
5. Assess whether metadata accurately describes the actual values in the source database
6. Understanding data challenges early in any data intensive project, so that late project surprises are avoided. Finding data problems late in the project can lead to delays and cost overruns.
7. Have an enterprise view of all data, for uses such as master data management where key data is needed, or data governance for improving data quality.

Theo định nghĩa trên http://searchdatamanagement.techtarget.com thì Data Profiling được định nghĩa như sau:

Data profiling, also called data archeology, is the statistical analysis and assessment of the quality of data values within a data set for consistency, uniqueness and logic.  

Profiling tools evaluate the actual content, structure and quality of the data by exploring relationships that exist between value collections both within and across data sets. For example, by examining the frequency distribution of different values for each column in a table, an analyst can gain insight into the type and use of each column. 

Quay lại bài toán máy đánh bạc. Nếu phần mềm có cơ chế đánh giá chất lượng dữ liệu cả đầu vào và đầu ra thì hậu quả đã có thể được giảm bớt. Phần mềm không thể tùy tiện hiển thị một con số lớn bao nhiêu cũng được. Nó cần phải có khả năng phát hiện lỗi ở khâu nào trong quá trình xử lý dữ liệu.

Trong ứng dụng thương mại cũng vậy, để đề phòng gian lận, các đơn hàng có số tiền khủng cần phải có cảnh báo từ xa ở các mức khác nhau tùy vào thiết lập đằng sau ứng dụng (back-end). Những đơn hàng như vậy cần phải được thông báo cho các lãnh đạo có thẩm quyền trước khi xuất hàng nhằm giảm thiểu gian lận từ phía khách hàng hay nhân viên, hoặc thậm chí có thể là lỗi gõ máy.

5 năm trước đây tôi đã từng tham gia thiết kế một hệ thống nhập đơn hàng với rất nhiều điểm nhập dữ liệu (input). Đặc điểm của hệ thống này là người dùng sẽ sử dụng thao tác nhập bằng tay và dùng Tab thường xuyên thay vì dùng chuột để tang tốc hiệu suất công việc. Khi đó có một người dùng gõ nhầm năm “2008” thành năm “2108” thành thử một loạt các báo cáo bị sai hàng loạt. Lỗi nghiêm trọng đó được gửi về cho nhóm phát triển của chúng tôi. Chúng tôi mất 1 ngày để dò nguyên nhân và phát hiện sự cố nghiêm trọng này. Sau khi thông báo nguyên nhân lỗi, chúng tôi cũng chủ động lên kế hoạch xây dựng một non-functional requirement nhằm cảnh báo những dữ liệu lạ đi vào hệ thống, thí dụ dữ liệu ngày tháng năm cách quá xa thời gian hiện tại, số tiền nhập quá lớn một cách bất thường… Tất cả các dấu hiệu bất thường đều được gán các mức cảnh báo từ xa một cách tương ứng nhằm giúp người nhập dữ liệu phát hiện sự cố sớm ngay trước khi dữ liệu được gửi lên.