Mục lục bài họcĐang ở d01-b2
Human Interaction, Testing and Deployment
Usability and accessibility. A system that works but is hard to use will be worked around, so usability is a functional requirement rather than a decoration. Standard usability principles: make system state visible, match the user's vocabulary rather than the developer's, keep interfaces consistent, prevent errors rather than only reporting them, allow undo, and minimise the load on memory by showing options instead of requiring recall. Accessibility is the design of systems usable by people with visual, hearing, motor or cognitive impairments: screen-reader compatibility, sufficient colour contrast and never using colour alone to carry meaning, keyboard operability, captions, and adjustable text size. Accessible design consistently improves usability for everyone, which is the argument to make when a question asks whether it is worth the cost.
Testing. Test data must be chosen deliberately in three categories. Normal data is within the accepted range and should be processed correctly. Boundary (extreme) data is at the edge of the accepted range and is where off-by-one errors live — if valid marks run from 0 to 100, the boundary cases are 0, 100, and also the values just outside. Abnormal (erroneous) data is outside the range or of the wrong type and must be rejected gracefully. Testing proceeds from unit tests of individual modules, through integration testing of modules working together, to user acceptance testing, which is the only stage that answers whether the system meets the original requirements. A crucial limitation: testing can show the presence of faults, never their absence.
Deployment. Four changeover methods trade cost against risk. Direct changeover switches over at once: cheapest and fastest, but with no fallback. Parallel running operates both systems together and compares outputs: safest and it detects data errors, but it doubles the workload. Phased introduces one module at a time. Pilot deploys the whole system to a small part of the organisation first, limiting damage and allowing lessons to be learned. Data migration is the most under-estimated risk: differences in format and character encoding, incompatible or duplicated codes, missing fields and local conventions all mean data must be cleaned and reconciled, not merely copied.
Documentation and training. User documentation may take the form of manuals, embedded help, online tutorials or live support; training may be self-instruction, formal classes or remote sessions, and the right choice depends on the number of users, how dispersed they are and how complex the task is. Both must be planned as part of the project rather than added at the end.
Tính khả dụng và khả năng tiếp cận. Một hệ thống chạy đúng nhưng khó dùng sẽ bị người dùng đi vòng qua, nên tính khả dụng là một yêu cầu chức năng chứ không phải phần trang trí. Các nguyên tắc chuẩn: làm cho trạng thái hệ thống hiện rõ, dùng từ vựng của người dùng chứ không của lập trình viên, giữ giao diện nhất quán, ngăn lỗi từ đầu chứ không chỉ báo lỗi, cho phép hoàn tác, và giảm gánh nặng trí nhớ bằng cách hiển thị lựa chọn thay vì bắt người dùng nhớ lại. Khả năng tiếp cận là việc thiết kế hệ thống dùng được cho người khiếm thị, khiếm thính, hạn chế vận động hoặc hạn chế nhận thức: tương thích với trình đọc màn hình, độ tương phản màu đủ và không bao giờ dùng riêng màu sắc để truyền tải ý nghĩa, thao tác được hoàn toàn bằng bàn phím, phụ đề, và cỡ chữ điều chỉnh được. Thiết kế có tính tiếp cận cải thiện tính khả dụng cho tất cả mọi người — đó là lập luận cần nêu khi đề hỏi liệu nó có đáng chi phí không.
Kiểm thử. Dữ liệu kiểm thử phải được chọn có chủ đích theo ba loại. Dữ liệu thường nằm trong khoảng hợp lệ và phải được xử lý đúng. Dữ liệu biên nằm ngay ở rìa khoảng hợp lệ và là nơi trú ngụ của các lỗi lệch một đơn vị — nếu điểm hợp lệ chạy từ 0 tới 100 thì các trường hợp biên là 0, 100, và cả những giá trị vừa vượt ra ngoài. Dữ liệu sai nằm ngoài khoảng hoặc sai kiểu và phải bị từ chối một cách có kiểm soát. Kiểm thử đi từ đơn vị cho từng mô-đun, qua tích hợp khi các mô-đun làm việc cùng nhau, tới nghiệm thu người dùng — giai đoạn duy nhất trả lời được câu hỏi hệ thống có đáp ứng yêu cầu ban đầu hay không. Một giới hạn then chốt: kiểm thử chứng minh được sự CÓ MẶT của lỗi, không bao giờ chứng minh được sự VẮNG MẶT của lỗi.
Triển khai. Bốn phương pháp chuyển đổi đánh đổi giữa chi phí và rủi ro. Chuyển thẳng chuyển sang cùng lúc: rẻ và nhanh nhất nhưng không có đường lui. Chạy song song vận hành cả hai hệ thống rồi đối chiếu kết quả: an toàn nhất và phát hiện được sai lệch dữ liệu, nhưng nhân đôi khối lượng công việc. Chuyển theo giai đoạn đưa từng phân hệ vào lần lượt. Chuyển thí điểm triển khai toàn bộ hệ thống nhưng chỉ cho một bộ phận nhỏ trước, giới hạn thiệt hại và cho phép rút kinh nghiệm. Chuyển đổi dữ liệu là rủi ro bị đánh giá thấp nhất: khác biệt về định dạng và bảng mã ký tự, mã trùng hoặc không tương thích, trường bỏ trống và các quy ước riêng của từng bộ phận đều có nghĩa là dữ liệu phải được làm sạch và đối soát chứ không chỉ được sao chép.
Tài liệu và đào tạo. Tài liệu người dùng có thể ở dạng sổ tay, trợ giúp tích hợp, hướng dẫn trực tuyến hoặc hỗ trợ trực tiếp; đào tạo có thể là tự học, lớp học chính thức hoặc buổi học từ xa, và lựa chọn đúng phụ thuộc số lượng người dùng, mức độ phân tán về địa lý và độ phức tạp của công việc. Cả hai đều phải được hoạch định như một phần của dự án chứ không phải bổ sung vào cuối.
Một hàm nhận vào điểm số nguyên và trả về xếp loại: từ 0 tới 39 là Trượt, từ 40 tới 69 là Đạt, từ 70 tới 100 là Giỏi. Điểm ngoài khoảng 0 tới 100 phải bị từ chối. Hãy liệt kê bộ dữ liệu kiểm thử và giải thích vì sao mỗi giá trị được chọn.
Nguyên tắc chọn: mỗi ranh giới sinh ra BA giá trị cần thử — ngay dưới, đúng tại, và ngay trên. Trong bài này có bốn ranh giới: 0, 40, 70 và 100.
Dữ liệu thường — một giá trị nằm giữa mỗi khoảng. Chọn 20 phải cho Trượt, 55 phải cho Đạt, 85 phải cho Giỏi. Ba giá trị này chứng minh logic chính hoạt động, nhưng chúng gần như không bao giờ phát hiện được lỗi.
Dữ liệu biên — đây mới là phần tìm ra lỗi. Tại ranh giới 0: thử 0 phải là Trượt, và thử âm 1 phải bị từ chối. Tại ranh giới 40: thử 39 phải là Trượt, thử 40 phải là Đạt. Tại ranh giới 70: thử 69 phải là Đạt, thử 70 phải là Giỏi. Tại ranh giới 100: thử 100 phải là Giỏi, thử 101 phải bị từ chối. Cặp 39 và 40 cùng cặp 69 và 70 là hai cặp quan trọng nhất, vì lỗi lệch một đơn vị — dùng dấu bé hơn thay vì bé hơn hoặc bằng — chỉ lộ ra ở đúng hai cặp này và không lộ ra ở bất kỳ giá trị nào khác.
Dữ liệu sai — phải phủ nhiều kiểu sai khác nhau, không chỉ số ngoài khoảng. Số âm lớn như âm 20 và số lớn như 150 để thử chặn khoảng. Chuỗi ký tự như "bảy mươi" để thử kiểm tra kiểu. Số thực như 70,5 để buộc chương trình quyết định rõ ràng: làm tròn, cắt phần thập phân, hay từ chối — và điều quan trọng là quyết định đó phải nhất quán với đặc tả. Giá trị rỗng hoặc bỏ trống để thử trường hợp không nhập gì.
Kết luận về phương pháp. Một bộ kiểm thử tốt không phải là bộ nhiều giá trị nhất mà là bộ trong đó mỗi giá trị được chọn vì một lý do. Nếu không giải thích được vì sao một giá trị nằm trong bộ, giá trị đó không đóng góp gì. Và nhớ giới hạn nền tảng: bộ kiểm thử này chỉ chứng minh được rằng chưa tìm thấy lỗi, chứ không chứng minh được hàm đúng.
Hãy chọn phương pháp chuyển đổi cho từng trường hợp và biện minh: (a) hệ thống tính lương của một công ty 2 000 nhân viên; (b) hệ thống bán hàng của một chuỗi 80 cửa hàng; (c) hệ thống quản lý mượn sách của một thư viện trường học 600 học sinh.
(a) Hệ thống tính lương — chạy song song. Đặc điểm quyết định là chi phí của một sai sót cực kỳ cao và không thể giấu: trả lương sai gây hậu quả pháp lý, mất lòng tin và phải khắc phục thủ công cho từng người. Chạy song song cho phép chạy cả hai hệ thống trong hai tới ba kỳ lương rồi đối chiếu từng bảng lương; mọi chênh lệch phải được giải thích trước khi tắt hệ thống cũ. Chi phí là nhân đôi công nhập liệu trong vài kỳ, nhưng đó là cái giá hợp lý. Ngoài ra tính lương chạy theo chu kỳ tháng nên việc đối chiếu có điểm mốc tự nhiên.
(b) Chuỗi 80 cửa hàng — chuyển thí điểm. Đặc điểm quyết định là tổ chức gồm nhiều đơn vị giống nhau, nên hoàn toàn có thể triển khai đầy đủ ở một nhóm nhỏ rồi mở rộng. Chọn khoảng năm cửa hàng đại diện đủ khác nhau — một cửa hàng lớn, một nhỏ, một ở vùng có đường truyền kém — chạy trong vài tuần, sửa những vấn đề lộ ra, rồi triển khai theo đợt. Ưu điểm là thiệt hại nếu hỏng chỉ giới hạn ở năm cửa hàng, và đội triển khai học được rất nhiều trước khi nhân rộng. Chạy song song ở đây không hợp lý vì nhập đơn hàng hai lần tại quầy là bất khả thi trong giờ bán.
(c) Thư viện trường — chuyển thẳng, vào kỳ nghỉ. Đặc điểm quyết định là hậu quả của sai sót thấp và có cửa sổ thời gian ngừng hoạt động. Nếu hệ thống mới trục trặc, thư viện có thể ghi mượn trả bằng giấy vài ngày mà không gây thiệt hại đáng kể. Chuyển thẳng vào kỳ nghỉ cho phép chuyển dữ liệu và kiểm tra khi không có giao dịch phát sinh, và nó rẻ nhất — điều đáng kể với ngân sách của một trường học. Điều kiện đi kèm là phải sao lưu đầy đủ dữ liệu cũ và có phương án quay lại.
Nguyên tắc rút ra để trả lời mọi câu hỏi dạng này. Đừng học thuộc bốn phương pháp rồi chọn bừa. Hãy hỏi ba câu: hậu quả của một sai sót nghiêm trọng tới đâu, có thể vận hành hai hệ thống cùng lúc không, và tổ chức có gồm nhiều đơn vị giống nhau để làm thí điểm không. Ba câu hỏi này gần như luôn chỉ thẳng tới một phương pháp duy nhất.
Bẫy 2 — nhầm dữ liệu biên với dữ liệu sai. Dữ liệu biên nằm ngay ở RÌA khoảng hợp lệ và PHẢI được chấp nhận hoặc từ chối đúng theo đặc tả; dữ liệu sai nằm ngoài khoảng hoặc sai kiểu và phải bị từ chối. Với mỗi ranh giới hãy thử ba giá trị: ngay dưới, đúng tại, ngay trên.
Bẫy 3 — coi chuyển đổi dữ liệu là thao tác sao chép. Định dạng khác nhau, bảng mã ký tự khác nhau, mã trùng, trường bỏ trống và quy ước riêng của từng bộ phận đều phải được làm sạch và đối soát; bỏ qua khâu này khiến hệ thống mới khởi động với dữ liệu sai và mọi con số sau đó đều sai theo.
Đọc xong rồi — làm thử ngay
Bài tập của chương System Fundamentals gồm 14 câu trắc nghiệm và 5 đề tự luận. Đáp án hiện ngay khi chọn, miễn phí.