(Post 20/01/2006) Cũng như mọi ngành sản xuất
khác, qui trình là một trong những yếu tố cực kỳ quan trọng đem lại sự
thành công cho các nhà sản xuất phần mềm, nó giúp cho mọi thành viên trong
dự án từ người cũ đến người mới, trong hay ngoài công ty đều có thể xử
lý đồng bộ công việc tương ứng vị trí của mình thông qua cách thức chung
của công ty, hay ít nhất ở cấp độ dự án.
Có thể nói qui trình phát triển/xây dựng phần mềm (Software
Development/Engineering Process - SEP) có tính chất quyết định để tạo
ra sản phẩm chất luợng tốt với chi phí thấp và năng suất cao, điều này
có ý nghĩa quan trọng đối với các công ty sản xuất hay gia công phần mềm
củng cố và phát triển cùng với nền công nghiệp phần mềm đầy cạnh tranh.
Bài viết phần nào giúp bạn quyết định lựa chọn mô hình
thích hợp khi xây dựng qui trình phát triển phần mềm chung cho cấp tổ
chức hay cấp dự án.
Qui trình là gì?
Qui trình có thể hiểu là phương pháp thực hiện hoặc sản
xuất ra sản phẩm. Tương tự như vậy, SEP chính là phương pháp phát triển
hay sản xuất ra sản phẩm phần mềm.
Thông thường một qui trình bao gồm những yếu tố cơ bản
sau:
- Thủ tục (Procedures)
- Hướng dẫn công việc (Activity Guidelines)
- Biểu mẫu (Forms/templates)
- Danh sách kiểm định (Checklists)
- Công cụ hỗ trợ (Tools)
Với các nhóm công việc chính:
- Đặc tả yêu cầu (Requirements Specification): chỉ ra những “đòi hỏi”
cho cả các yêu cầu chức năng và phi chức năng.
- Phát triển phần mềm (Development): tạo ra phần mềm thỏa mãn các
yêu cầu được chỉ ra trong “Đặc tả yêu cầu”.
- Kiểm thử phần mềm (Validation/Testing): để bảo đảm phần mềm sản
xuất ra đáp ứng những “đòi hỏi” được chỉ ra trong “Đặc tả yêu cầu”.
- Thay đổi phần mềm (Evolution): đáp ứng nhu cầu thay đổi của khách
hàng.
Tùy theo mô hình phát triển phần mềm, các nhóm công việc
được triển khai theo những cách khác nhau. Để sản xuất cùng một sản phẩm
phần mềm người ta có thể dùng các mô hình khác nhau. Tuy nhiên không phải
tất cả các mô hình đều thích hợp cho mọi ứng dụng.
Hình 1:
Mô hình Waterfall |
|
SEP, ISO, CMM/CMMI
Phần này sẽ không đi sâu vào tìm hiểu các mô hình phát
triển phần mềm mà chỉ cung cấp một cái nhìn tổng quát về chúng, cũng như
mối quan hệ giữa SEP với ISO và CMM/CMMI.
Vấn đề được đặt ra là làm thế nào cải tiến qui trình để
cải thiện chất lượng và năng suất? Câu trả lời chính là qui trình khung
(Process Framework - PF). PF sẽ chỉ ra những yêu cầu mà một qui trình
phải đáp ứng tùy theo mỗi mức độ. PF không chỉ ra bất kỳ một qui trình
cụ thể nào mà chỉ đưa ra những yêu cầu ở mỗi mức độ trưởng thành khác
nhau của qui trình phải đạt được. Đây chính là những hướng dẫn cho các
hoạt động cải tiến để nâng mức độ trưởng thành từ thấp lên cao.
Có nhiều PF, nhưng phổ biến nhất là ISO và CMM (Capability
Maturity Model) được các tổ chức thế giới công nhận. ISO nhắm chung đến
nhiều loại tổ chức cả sản xuất lẫn dịch vụ, trong khi CMM được dành riêng
cho các tổ chức phát triển phần mềm. Đối với phần mềm, ISO chỉ ra mức
độ chất lượng yêu cầu tối thiểu mà một SEP phải đạt (ISO certified) và
việc cải tiến qui trình được thực hiện thông qua qui trình kiểm định,
trong khi CMM bao gồm những thực tiễn tốt nhất (best practices) được tập
hợp rút tỉa từ rất nhiều tổ chức phát triển phần mềm khác nhau và chúng
được tổ chức thành 5 mức độ trưởng thành khác nhau (Level 1 - Initial,
Level 2 - Repeatable, Level 3 - Defined, Level 4 - Managed, Level 5 -
Optimizing).
Ngày nay, phần mềm không đứng riêng một mình mà thường
là một bộ phận trong hệ thống hoàn chỉnh. Do đó, CMMI (Capability Maturity
Model Integration) ra đời hướng đến các qui trình cho việc xây dựng cả
hệ thống, bao gồm cả việc tích hợp để xây dựng và bảo trì toàn bộ hệ thống.
Hình 2: V-model |
|
Các mô hình SEP
Mô hình SEP còn được gọi là chu trình hay vòng đời phần
mềm (SLC - Software Life Cycle). SLC là tập hợp các công việc và quan
hệ giữa chúng với nhau diễn ra trong quá trình phát triển phần mềm. Có
khá nhiều mô hình SLC khác nhau, trong đó một số được ứng dụng khá phổ
biến trên thế giới:
Các mô hình một phiên bản (Single-version models)
- Mô hình Waterfall (Waterfall model)
- Mô hình chữ V (V-model)
- Các mô hình nhiều phiên bản (Multi-version models)
- Mô hình mẫu (Prototype)
- Mô hình tiến hóa (Evolutionary)
- Mô hình lặp và tăng dần (Iterative and Incremental)
- Mô hình phát triển ứng dụng nhanh (RAD)
- Mô hình xoắn (Spiral)
Mô hình Waterfall
Mô hình này bao gồm các giai đoạn xử lý nối tiếp nhau như được mô tả trong
Hình 1.
Phân tích yêu cầu và tài liệu đặc tả (Requirements and Specifications):
là giai đoạn xác định những “đòi hỏi” (“What”) liên quan đến chức năng
và phi chức năng mà hệ thống phần mềm cần có. Giai đoạn này cần sự tham
gia tích cực của khách hàng và kết thúc bằng một tài liệu được gọi là
“Bản đặc tả yêu cầu phần mềm” hay SRS (software requirement specification),
trong đó bao gồm tập hợp các yêu cầu đã được duyệt (reviewed) và nghiệm
thu (approved) bởi những người có trách nhiệm đối với dự án (từ phía khách
hàng). SRS chính là nền tảng cho các hoạt động tiếp theo cho đến cuối
dự án.
Phân tích hệ thống và thiết kế (System Analysis and Design): là giai đoạn
định ra “làm thế nào” (“How”) để hệ thống phần mềm đáp ứng những “đòi
hỏi” (“What”) mà khách hàng yêu cầu trong SRS. Đây là chính là cầu nối
giữa “đòi hỏi” (“What”) và mã (Code) được hiện thực để đáp ứng yêu cầu
đó.
Hiện thực và kiểm thử từng thành phần (Coding and Unit Test): là giai
đoạn hiện thực “làm thế nào” (“How”) được chỉ ra trong giai đoạn “Phân
tích hệ thống và thiết kế”.
Kiểm thử (Test): giai đoạn này sẽ tiến hành kiểm thử mã (code) đã được
hiện thực, bao gồm kiểm thử tích hợp cho nhóm các thành phần và kiểm thử
toàn hệ thống (system test). Một khâu kiểm thử cuối cùng thường được thực
hiện là nghiệm thu (acceptance test), với sự tham gia của khách hàng trong
vai trò chính để xác định hệ thống phần mềm có đáp ứng yêu cầu của họ
hay không.
Cài đặt và bảo trì (Deployment and Maintenance): đây là giai đoạn cài
đặt, cấu hình và huấn luyện khách hàng. Giai đoạn này sửa chữa những lỗi
của phần mềm (nếu có) và phát triển những thay đổi mới được khách hàng
yêu cầu (như sửa đổi, thêm hay bớt chức năng/đặc điểm của hệ thống).
Thực tế cho thấy đến những giai đoạn sau mới có khả năng nhận ra sai sót
trong những giai đoạn trước và phải quay lại để sửa chữa. Đây chính là
kiểu waterfall dạng lặp (Iterative Waterfall) và được minh hoạ trong Hình
1.
Mô hình chữ V
Trong mô hình Waterfall, kiểm thử được thực hiện trong một giai đoạn riêng
biệt. Còn với mô hình chữ V, toàn bộ qui trình được chia thành hai nhóm
giai đoạn tương ứng nhau: phát triển và kiểm thử. Mỗi giai đoạn phát triển
sẽ kết hợp với một giai đoạn kiểm thử tương ứng như được minh họa trong
Hình 2.
Tinh thần chủ đạo của V-model là các hoạt động kiểm thử
phải được tiến hành song song (theo khả năng có thể) ngay từ đầu chu trình
cùng với các hoạt động phát triển. Ví dụ, các hoạt động cho việc lập kế
hoạch kiểm thử toàn hệ thống có thể được thực hiện song song với các hoạt
động phân tích và thiết kế hệ thống.
Hình 3: Mô hình Prototype |
|
Mô hình mẫu
Mô hình mẫu (prototype) được minh hoạ trong Hình 3. Trong
đó, qui trình được bắt đầu bằng việc thu thập yêu cầu với sự có mặt của
đại diện của cả phía phát triển lẫn khách hàng nhằm định ra mục tiêu tổng
thể của hệ thống phần mềm sau này, đồng thời ghi nhận tất cả những yêu
cầu có thể biết được và sơ luợc những nhóm yêu cầu nào cần phải được làm
rõ.
Sau đó, thực hiện thiết kế nhanh tập trung chuyển tải những
khía cạnh thông qua prototype để khách hàng có thể hình dung, đánh giá
giúp hoàn chỉnh yêu cầu cho toàn hệ thống phần mềm. Việc này không những
giúp tinh chỉnh yêu cầu, mà đồng thời giúp cho đội ngũ phát triển thông
hiểu hơn những gì cần được phát triển. Tiếp theo sau giai đoạn làm prototype
này có thể là một chu trình theo mô hình waterfall hay cũng có thể là
mô hình khác.
Chú ý, prototype thường được làm thật nhanh trong thời gian ngắn nên không
được xây dựng trên cùng môi trường và công cụ phát triển của giai đoạn
xây dựng phần mềm thực sự sau này. Prototype không đặt ra mục tiêu tái
sử dụng cho giai đoạn phát triển thực sự sau đó.
Hình 4: Mô hình tiến hóa |
|
Mô hình tiến hóa
Mô hình này thực sự cũng là một dạng dựa trên mô hình mẫu,
tuy nhiên có sự khác biệt:
- mô hình tiến hóa xây dựng nhiều phiên bản prototype liên tiếp nhau.
- những phiên bản prototype trước sẽ được xây dựng với mục tiêu có thể
tái sử dụng trong những phiên bản sau.
Hình 4 minh họa mô hình tiến hóa, cho thấy một số phần
của hệ thống phần mềm có thể đuợc xây dựng sớm ngay từ giai đoạn thực
hiện phân tích yêu cầu và thiết kế.
Mô hình lặp và tăng dần
Mô hình lặp và tăng dần có lúc được hiểu là một. Tuy nhiên, trong bài
viết này, ta có thể phân biệt ít nhiều sự khác biệt.
Trước tiên, hai mô hình này đều có điểm giống nhau là đều dựa trên tinh
thần của mô hình tiến hóa, và có thêm đặc điểm nhắm đến việc cung cấp
một phần hệ thống để khách hàng có thể đưa vào sử dụng trong môi trường
hoạt động sản xuất thực sự mà không cần chờ cho đến khi toàn bộ hệ thống
được hoàn thành (trong mô hình mẫu hay tiến hóa, các phiên bản mẫu hay
trung gian đều không nhắm đến đưa vào vận hành thực sự cho khách hàng,
trừ phiên bản cuối cùng). Để khách hàng có thể sử dụng, mỗi phiên bản
đều phải được thực hiện như một qui trình đầy đủ các công việc từ phân
tích yêu cầu với khả năng bổ sung hay thay đổi, thiết kế, hiện thực cho
đến kiểm nghiệm và có thể xem như một qui trình (chu trình) con. Các chu
trình con có thể sử dụng các mô hình khác nhau (thông thường là waterfall). Hình
5 minh họa hai mô hình này, trong đó mỗi chu trình con
là một waterfall nhỏ.
Mục tiêu của phiên bản đầu tiên là phát triển phần lõi và nhóm các chức
năng quan trọng. Sau mỗi phiên bản được đưa vào sử dụng, các kết quả đánh
giá sẽ được phản hồi và lập kế hoạch cho chu trình con của phiên bản tiếp
theo để thực hiện:
- Những thay đổi cho phiên bản trước đó nhằm đáp ứng nhu cầu khách hàng
tốt hơn
- Có thể thêm những chức năng hoặc đặc điểm bổ sung
Sự khác nhau giữa hai mô hình tăng dần và lặp có thể được hiểu đơn giản
như sau (so với sản phẩm được hoàn thành trong chu trình con trước):
- Mô hình tăng dần (Incremental): thêm chức năng vào sản phẩm (xem minh
hoạ Hình 6).
- Mô hình lặp (Iterative): thay đổi sản phẩm (xem minh họa Hình 6)
- Một SEP có thể kết hợp cả hai mô hình lặp lẫn tăng dần, chẳng hạn
RUP (Rational Unified Process).
Hình 6: 2 Mô hình phát triển |
|
Mô hình phát triển nhanh
Mô hình phát triển nhanh (RAD - Rapid Application Development) chính
là mô hình tăng dần với chu kỳ phát triển cực ngắn. Để đạt được mục tiêu
này, RAD dựa trên phương pháp phát triển trên cơ sở thành phần hóa hệ
thống cùng với việc tái sử dụng các thành phần thích hợp. RAD thích hợp
cho những hệ thống quản lý thông tin.
Mô hình xoắn
Mô hình này được xây dựng bởi Barry Boehm, đặt trọng tâm phân tích rủi
ro và xem xét kế hoạch để giải quyết chúng, thông qua nhiều chu kỳ con
nối tiếp được lặp liên tiếp dựa trên bản chất của mô hình lặp.
Trong mô hình này, việc phân tích và giải quyết những vấn đề có rủi ro
cao tập trung vào thiết kế từng khía cạnh cụ thể chứ không dựa vào việc
xử lý các vấn đề một cách chung chung.
Hình
7 minh họa mô hình này với các giai đoạn lặp theo chu kỳ xoay
vòng, trong đó mỗi chu kỳ bao gồm 4 giai đoạn con như sau:
- Xác định mục tiêu chất lượng cho sản phẩm được thực hiện, đồng thời
xác định sự lựa chọn mua, tái sử dụng hay tự thiết kế và hiện thực các
thành phần của hệ thống.
- Phân tích sự lựa chọn và các rủi ro có thể xảy ra. Việc này được thực
hiện bởi nhiều hoạt động khác nhau thông qua làm mẫu hay mô phỏng.
- Phát triển và kiểm định sản phẩm ở mức tiếp theo dựa trên kết quả
định hướng được chỉ ra trong giai đoạn con số 2 (phân tích rủi ro)
- Kiểm duyệt tất cả các kết quả của các giai đoạn con xảy ra trước đó
và lập kế hoạch cho chu kỳ lặp tiếp theo.
Cao Đại Ân
Global CyberSoft Vietnam
(theo PC World VN) |