Bốn đặc tính mà phần mềm tốt cần có
1. Tổng quan
A. Định nghĩa
Phần mềm tốt là phần mềm không chỉ đáp ứng yêu cầu chức năng của người dùng mà còn có một cách cân bằng bốn đặc tính chất lượng: khả năng bảo trì (Maintainability), tính tin cậy (Dependability), tính hiệu quả (Efficiency), tính khả dụng (Usability) (I. Sommerville).
Điểm cốt lõi ở đây là "đã cài đặt được chức năng yêu cầu" và nhận định "đây là phần mềm tốt" thuộc hai chiều khác nhau. Chức năng chỉ là điều kiện tối thiểu tại thời điểm nghiệm thu, còn giá trị thực sự của phần mềm được quyết định trong quá trình vận hành, thay đổi, mở rộng kéo dài nhiều năm sau khi bàn giao. Vì vậy, Sommerville đưa ra các chất lượng phi chức năng không thể quy về đặc tả chức năng — tức là tiếp nhận thay đổi tốt đến đâu (khả năng bảo trì), có thể tin tưởng giao phó đến đâu (tính tin cậy), tiết kiệm tài nguyên đến đâu (tính hiệu quả), dễ dùng đến đâu (tính khả dụng) — làm các trục của phần mềm tốt.
B. Bối cảnh ra đời và sự cần thiết
Phần lớn chi phí phần mềm phát sinh không phải ở phát triển mà ở bảo trì. Thông thường hơn 60% tổng chi phí vòng đời được dùng sau khi bàn giao cho sửa lỗi, cải tiến chức năng, chuyển đổi môi trường, và yêu cầu thì thay đổi không ngừng. Nếu chỉ chạy theo tốc độ phát triển ban đầu mà hy sinh cấu trúc, nợ kỹ thuật (Technical Debt) sẽ tích tụ, khiến chi phí của mỗi lần thay đổi sau đó tăng theo cấp số nhân. Ngoài ra, ở những lĩnh vực như tài chính, y tế, nơi sự cố dẫn thẳng đến tổn thất và nguy hiểm tính mạng, khi niềm tin sụp đổ thì bản thân sản phẩm trở nên vô nghĩa. Bốn đặc tính chính của phần mềm tốt là khái niệm nâng các chất lượng không nhìn thấy nhưng chi phối chi phí thành đối tượng quản lý tường minh, nhằm quản lý giá trị và rủi ro dài hạn như vậy.
2. Bốn đặc tính chính
flowchart TB
G[SW tốt] --> M[Khả năng bảo trì]
G --> D[Tính tin cậy·độ tin cậy]
G --> E[Tính hiệu quả]
G --> U[Tính khả dụng]
A. Khả năng bảo trì (Maintainability) là mức độ dễ dàng sửa đổi và tiến hóa phần mềm theo yêu cầu và môi trường thay đổi. Phần mềm không bị mài mòn vật lý, nhưng khi thế giới thay đổi thì nó "cũ đi". Khi quy định thay đổi, chính sách giá thay đổi thì mã cũng phải thay đổi theo; lúc đó, sửa một phần cụ thể mà các phần khác không bị hỏng dây chuyền thì mới được gọi là có khả năng bảo trì cao. Cấu trúc mô-đun với độ ghép nối (coupling) thấp và độ gắn kết (cohesion) cao là nền tảng của nó.
B. Tính tin cậy (Dependability) là đặc tính bao quát việc người dùng có thể tin tưởng giao phó cho phần mềm hay không, gồm độ tin cậy (hoạt động bình thường liên tục), tính sẵn sàng (dùng được khi cần), tính an toàn (không gây hại ngay cả khi sự cố) và tính bảo mật (phòng thủ trước tấn công). Ví dụ, ngân hàng trực tuyến không được phép chuyển khoản sai dù chỉ thỉnh thoảng một lần (độ tin cậy), không được phép không dùng được vì đang bảo trì (tính sẵn sàng), và không được để lộ thông tin tài khoản (tính bảo mật). Tính tin cậy như vậy là tổng hòa của nhiều thuộc tính con, và mắt xích yếu nhất quyết định niềm tin tổng thể.
C. Tính hiệu quả (Efficiency) là mức độ không lãng phí tài nguyên như CPU, bộ nhớ, không gian lưu trữ, mạng, thời gian phản hồi. Tuy nhiên, tính hiệu quả không phải điều tốt tuyệt đối mà là khái niệm tương đối so với mục tiêu. Nếu đạt cùng thời gian phản hồi bằng gấp đôi số máy chủ thì chi phí đám mây tăng gấp đôi, vì vậy tính hiệu quả gắn trực tiếp với chi phí vận hành và hiệu năng mà người dùng cảm nhận. Ví dụ, đổi thuật toán sắp xếp O(n²) sang O(n log n) thì với một triệu bản ghi, thời gian xử lý giảm hàng trăm lần.
D. Tính khả dụng (Usability) là mức độ người dùng mục tiêu dễ học và có thể sử dụng thuận tiện mà không mắc lỗi. Ở đây "người dùng mục tiêu" rất quan trọng: thiết bị đầu cuối cho nhà giao dịch chuyên nghiệp và ứng dụng công cộng dành cho người cao tuổi có tiêu chuẩn về tính khả dụng tốt hoàn toàn khác nhau. Chức năng dù xuất sắc đến đâu, nếu người dùng không đạt được tác vụ mong muốn thì chức năng đó coi như không tồn tại.
| Đặc tính | Mô tả | Triệu chứng khi thất bại |
|---|---|---|
| Khả năng bảo trì | Dễ sửa đổi và tiến hóa theo thay đổi | Thay đổi nhỏ cũng lan rộng, lỗi hồi quy |
| Tính tin cậy | Độ tin cậy, sẵn sàng, an toàn, bảo mật | Sự cố, rò rỉ dữ liệu, hoạt động sai |
| Tính hiệu quả | Không lãng phí tài nguyên | Phản hồi chậm, chi phí hạ tầng quá mức |
| Tính khả dụng | Dễ học và thuận tiện | Khó học, thao tác nhầm, người dùng rời bỏ |
3. Liên kết với tiêu chuẩn chất lượng (ISO/IEC 25010)
Bốn đặc tính của Sommerville là khái niệm học thuật nên khó đo trực tiếp. Tiêu chuẩn hóa chúng thành dạng có thể đo định lượng, ký hợp đồng và giám sát chính là mô hình chất lượng sản phẩm ISO/IEC 25010, cụ thể hóa bốn đặc tính bằng 8 đặc tính chất lượng và các đặc tính con. Nói cách khác, 25010 đóng vai trò cây cầu quy đổi mục tiêu định tính "phần mềm tốt" thành các chỉ số.
| Đặc tính chất lượng 25010 | Đặc tính chính tương ứng |
|---|---|
| Khả năng bảo trì (tính mô-đun, khả năng tái sử dụng, khả năng phân tích, khả năng sửa đổi, khả năng kiểm thử) | Khả năng bảo trì |
| Độ tin cậy, tính bảo mật, tính an toàn | Tính tin cậy |
| Hiệu quả hiệu năng (hành vi thời gian, sử dụng tài nguyên, dung lượng) | Tính hiệu quả |
| Tính khả dụng (khả năng học, khả năng vận hành, khả năng tiếp cận...) | Tính khả dụng |
| Tính phù hợp chức năng, tính tương thích, tính khả chuyển | Góc nhìn mở rộng |
4. Biện pháp bảo đảm
Mỗi đặc tính không thể gắn vào chỉ bằng kiểm tra ở cuối quá trình phát triển mà phải được nội hóa trong mọi giai đoạn thiết kế, cài đặt, kiểm chứng. Khả năng bảo trì được bảo đảm bằng mô-đun hóa với ghép nối thấp, gắn kết cao, giao diện rõ ràng, tài liệu hóa và phân tích tĩnh. Tính tin cậy được bảo đảm bằng kiểm thử đầy đủ, thiết kế chịu lỗi (Fault Tolerance), lập trình an toàn và dự phòng kép. Tính hiệu quả được bảo đảm bằng lựa chọn cấu trúc dữ liệu và thuật toán, tối ưu hóa kiến trúc, profiling và kiểm thử hiệu năng. Tính khả dụng được bảo đảm bằng nguyên tắc thiết kế UX, hướng dẫn khả năng tiếp cận (WCAG) và kiểm thử với người dùng thực.
| Đặc tính | Biện pháp bảo đảm |
|---|---|
| Khả năng bảo trì | Mô-đun hóa, ghép nối thấp/gắn kết cao, quy ước mã, tài liệu hóa, phân tích tĩnh |
| Tính tin cậy | Tự động hóa kiểm thử, chịu lỗi, dự phòng kép, lập trình an toàn |
| Tính hiệu quả | Tối ưu thuật toán và kiến trúc, profiling, kiểm thử hiệu năng |
| Tính khả dụng | Thiết kế UX, khả năng tiếp cận (WCAG), kiểm thử người dùng |
5. Các lưu ý và hàm ý
Bốn đặc tính không độc lập mà thường xung đột (đánh đổi) lẫn nhau. Tối ưu hóa ở mức thấp để đạt hiệu quả cực đoan khiến mã khó hiểu và giảm khả năng bảo trì, còn quy trình bảo mật mạnh có thể làm tổn hại tính khả dụng. Cốt lõi dưới góc nhìn Kỹ sư chuyên nghiệp (Professional Engineer) không phải là tối đa hóa một đặc tính nào đó, mà là xác định thứ tự ưu tiên theo tính chất của hệ thống và thiết kế điểm cân bằng. Chẳng hạn, hệ thống an toàn trọng yếu đặt tính tin cậy lên trước, dịch vụ đại chúng đặt tính khả dụng lên trước, dịch vụ lưu lượng lớn đặt tính hiệu quả lên trước. Ngoài ra, chất lượng không phải là thứ bổ sung ở giai đoạn cuối mà phải được nội hóa từ giai đoạn thiết kế (Quality by Design) thì chi phí mới tối thiểu, và phải được đo lường, theo dõi định lượng bằng các chỉ số ISO/IEC 25010 để quản lý liên tục.
Tóm tắt một câu: Phần mềm tốt phải có một cách cân bằng khả năng bảo trì, tính tin cậy, tính hiệu quả, tính khả dụng; do các đặc tính này đánh đổi lẫn nhau, chúng cần được nội hóa từ giai đoạn thiết kế theo thứ tự ưu tiên phù hợp với tính chất hệ thống và được quản lý định lượng bằng ISO/IEC 25010.