CHƯƠNG 1. TỔNG QUAN VỀ QUY TRÌNH PHÁT TRIỂN PHẦN MỀM Trong công nghệ phần mềm hiện nay có nhiều quy trình phát triển phần mềm khác nhau, mỗi quy trình phát triển đều có ưu điểm và nhược điểm riêng. Để phát triển phần mềm có thể áp dụng nhiều quy trình khác nhau, tuy nhiên không phải mọi quy trình đều thích hợp cho mọi dự án. Vì vậy, việc lựa chọn quy trình phát triển phần mềm thích hợp cho dự án sẽ quyết định sự thành công của dự án.
Trong chương này tôi sẽ trình bày tổng quan về quy trình phát triển phần mềm, tổng hợp lại một số quy trình phát triển phần mềm, các ưu điểm và nhược điểm của từng quy trình. Từ đó sẽ đề xuất áp dụng quy trình thích hợp cho dự án. Dưới đây là nội dung chi tiết của chương.1 Quy trình phát triển phần mềm Vòng đời phần mềm (Software life-cycle): là thời kỳ tính từ khi phần mềm được sinh (tạo) ra cho đến khi chết đi (từ lúc hình thành đáp ứng yêu cầu, vận hành, bảo dưỡng cho đến khi loại bỏ). Quy trình phần mềm được phân chia thành các pha chính gồm: phân tích, thiết kế, chế tạo, kiểm thử và bảo trì [3].
Quy trình phát triển phần mềm (Software development/Engineering Process - SEP) là phương pháp phát triển hay sản xuất ra sản phẩm phần mềm. Có thể nói quy trình phát triển phần mềm 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 [1, 3]. Thông thường một quy trình bao gồm những yếu tố cơ bản sau: Thủ tục (Procedures), danh sách kiểm định (Checklists), hướng dẫn công việc (Activity Guidelines), công cụ hỗ trợ (Tools) và biểu mẫu (Forms/templates) [1]. Có 4 công việc chính trong quy trình phát triển phần mềm gồm: - Đặ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 phần “đặc tả yêu cầu”. 6 z - 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.2 Các phương pháp phát triển phần mềm Trong thời gian gần đây, rất nhiều các phương pháp phát triển phần mềm được đề xuất. Nhiều phương pháp đã được lý thuyết hoá thành các phương pháp luận. Trong dự án công nghệ thông tin, một phương pháp luận có thể được hiểu như là một tập các hoạt động thực tiễn được hệ thống hoá.
Tuỳ theo phạm vi dự án, điều kiện thời gian và nhiều yếu tố khác mà có thể lựa chọn áp dụng các phương pháp khác nhau, hoặc kết hợp các phương pháp sao cho phù hợp. Các mô hình, phương pháp phát triển phần mềm có thể được phân chia thành hai lớp chính: các phương pháp truyền thống và các phương pháp phát triển nhanh. Các phương pháp truyền thống là các phương pháp thiên về kế hoạch, quá trình phát triển phần mềm phải tuân thủ quy trình một cách nghiêm ngặt. Trong quá trình phát triển phần mềm, rất nhiều tài liệu được tạo ra, được xét duyệt và đó là một yếu tố quan trọng trong quản lý rủi ro.
Với các phương pháp này, thì quá trình phát triển phần mềm giống như sản xuất các mặt hàng công nghiệp khác. Những người phát triển thực hiện công việc một cách nghiêm ngặt theo các chuẩn và quy trình, không yêu cầu sáng tạo nhiều. Những người quản lý chỉ quan tâm đến việc tăng năng lực sản xuất và đạt được một số mục tiêu như [3]: - Giảm thiểu lỗi và làm sao cho mọi công việc diễn ra trơn tru. - Cố gắng giữ ổn định (về tổ chức, về sản lượng.) - Chuẩn hoá mọi thao tác và bắt buộc người thực hiện phải tuân theo một cách nghiêm ngặt.
- Không cho phép sự sai sót. 7 z Các phương pháp này thường áp dụng cho các dự án lớn. Một số phương pháp tiêu biểu thuộc lớp này như: mô hình thác nước, mô hình chữ V, mô hình xoắn ốc, mô hình lặp và gia tăng. Các phương pháp phát triển nhanh được gọi với cái tên là Agile, theo nghĩa là nhanh nhẹn, khéo léo trong hành động, là các phương pháp dựa trên các quy trình phát triển nhanh.
Điều này đặc biệt cần thiết trong lĩnh vực Internet và truyền thông di động hiện đang phát triển rất nhanh chóng [12]. Các phương pháp phát triển nhanh ra đời cách đây không lâu. Nó được bắt đầu bởi tuyên ngôn về các phương pháp phát triển phần mềm Agile được đưa ra bởi một nhóm những người hoạt động trong lĩnh vực phần mềm vào năm 2001. Những người này đại diện cho các phương pháp như: Extreme Programming (XP), Scrum, Crystal và các phương pháp khác cùng thống nhất đưa ra một bản tuyên ngôn với những điểm chính sau [12]: Chúng ta dần phát hiện ra những cách phát triển phần mềm tốt hơn bằng cách thực hiện nó và giúp người khác thực hiện nó.
Qua công việc này, chúng ta thu được các giá trị: - Các cá nhân và sự tương tác với nhau quan trọng hơn các quy trình và các công cụ. - Làm phần mềm quan trọng hơn việc lập tài liệu. - Việc hợp tác với khách hàng quan trọng hơn việc ký kết hợp đồng. - Đáp ứng thay đổi quan trọng hơn việc theo một kế hoạch.
Ở đây không có sự mâu thuẫn giữa các phương pháp truyền thống và các phương pháp phát triển nhanh. Vấn đề là ở chỗ những điều mà các phương pháp phát triển nhanh và các phương pháp truyền thống chú trọng vào là khác nhau. Điểm chính của các phương phát phát triển nhanh là việc đáp ứng thay đổi trong khi các phương pháp truyền thống tập trung vào kế hoạch. Đối với dự án bảo tồn văn hóa phi vật thể nói chung và nội dung “Nghiên cứu, xây dựng phần mềm hỗ trợ giảng dạy theo mô hình ‘vai mẫu’ đối với kịch hát dân tộc” nói riêng, việc áp dụng một trong các phương pháp nhanh sẽ phù hợp hơn so với các phương pháp truyền thống.3 Một số quy trình phát triển phần mềm Mô hình thác nước (Waterfall Model) là mô hình hình phát triển phần mềm áp dụng theo tính tuần tự của các giai đoạn phát triển phần mềm.
Tức là giai đoạn sau chỉ được thực hiện tiếp khi giai đoạn trước đã kết thúc và không được quay lại giai đoạn trước để xử lí các thay đổi trong yêu cầu. Năm 1970, Royce đã đưa ra khái niệm “mô hình thác nước” có thể sẽ được cải tiến thành mô hình lặp với các pha theo thứ tự: Xác định các yêu cầu, thiết kế, xây dựng (triển khai, mã hóa, viết code), liên kết, kiểm thử và chỉnh sửa, cài đặt và bảo trì [1]. Nguyên tắc cơ bản của mô hình thác nước: - Dự án được chia thành các giai đoạn tuần tự, có thể được chấp nhận được một chút sự chồng chéo và quay lui trở lại giữa các giai đoạn - Nhấn mạnh vào kế hoạch, tiến độ, thời gian mục tiêu để hoàn thành dự án, ngân sách và thực hiện toàn bộ hệ thống cùng một lúc - Được kiểm soát chặt chẽ thông qua việc sử dụng tài liệu bằng văn bản, cũng như thông qua việc đánh giá chính thức và ký kết bởi người sử dụng vào cuối giai đoạn trước khi bắt đầu giai đoạn tiếp theo Hình 1.1 Mô hình thác nước Hiện nay, tồn tại một số mô hình thác nước biến thể như mô hình của Royce để phù hợp hơn với thực tế. Để giải quyết các vấn đề với mô hình thác nước nguyên mẫu, các mô hình thác nước đã được chỉnh sửa và giới thiệu, chẳng hạn như: “Mô hình thác nước với các pha chồng chéo, thác nước với các dự án nhỏ và thác nước với giảm rủi ro”.
9 z Mô hình này được sử dụng khi yêu cầu ổn định và không thay đổi thường xuyên, phù hợp với các ứng dụng nhỏ, không có yêu cầu khó hiểu hoặc không rõ ràng, môi trường ổn định, các công cụ và công nghệ được sử dụng là ổn định, nguồn lực được đào tạo sẵn sàng. Ưu điểm: đơn giản, dễ hiểu và sử dụng. Đối với các dự án nhỏ hơn, mô hình thác nước hoạt động tốt và mang lại kết quả phù hợp. Vì các giai đoạn của mô hình thác nước cứng nhắc và chính xác, một pha được thực hiện một lần, nó rất dễ dàng để bảo trì.
Các tiêu chí đầu vào và đầu ra được xác định rõ ràng, do đó dễ dàng đánh giá chất lượng. Nhược điểm: mô hình không thể chấp nhận thay đổi yêu cầu, sẽ trở nên rất khó khăn để quay trở lại giai đoạn. Đối với các dự án lớn và phức tạp, mô hình này không tốt vì yếu tố rủi ro cao hơn. Không thích hợp cho các dự án thường xuyên thay đổi yêu cầu.
Khi thử nghiệm được thực hiện ở giai đoạn sau, nó không cho phép xác định những thách thức và rủi ro trong giai đoạn trước nên chiến lược giảm thiểu rủi ro rất khó để chuẩn bị. Mô hình chữ V (V-Shaped Model) hay mô hình xác minh (verification) và mô hình xác nhận (validation) là một mở rộng của mô hình thác nước, thay vì di chuyển xuống theo tuần tự các bước thì quy trình sẽ đi theo hình chữ V. Sự khác biệt chính là việc lập kế hoạch kiểm tra sớm trong mô hình hình chữ V. Đây là mô hình có kỷ luật cao và giai đoạn tiếp theo chỉ bắt đầu sau khi giai đoạn trước hoàn thành [1, 3].
Xác minh (Verification): là một kỹ thuật phân tích tĩnh. Trong kiểm thử, kỹ thuật này được thực hiện mà không phải chạy code. Nó bao gồm một số hoạt động như xem lại (Review), kiểm tra (Inspection) và kiểm tra từ đầu tới cuối (Walkthrough). Xác nhận (Validation): là một kỹ thuật phân tích động, trong đó việc kiểm thử được thực hiện bằng cách thực hiện code.
Ví dụ bao gồm kỹ thuật kiểm tra chức năng (Function) và phi chức năng (Non-function). Trong mô hình chữ này các hoạt động phát triển và đảm bảo chất lượng được thực hiện đồng thời. Kiểm thử được bắt đầu ngay từ giai đoạn lấy yêu cầu. Các hoạt động xác minh và xác nhận đi liền với nhau được minh họa trong Hình 1.