Thứ Năm, 1 tháng 11, 2012

QUY TRÌNH SẢN XUẤT PHẦN MỀM


Ngày 03/11/2009
Bảo cáo phân tích tóm tắt quy trình sản xuất phần mềm Agile software development process, WaterFall và XP

Lập trình linh hoạt hay phát triển phần mềm linh hoạt
(Agile software development hay Agile programming)
là một cơ chế thực hiện các dự án kỹ nghệ phần mềm, cơ chế này bao gồm và khuyến khích các thay đổi mang tính tiến hóa trong toàn bộ vòng đời của dự án.
Có nhiều phương pháp phát triển phần mềm linh hoạt. Đa số các phương pháp này cố gắng cực tiểu hóa rủi ro bằng cách phát triển phần mềm trong các khung thời gian ngắn, gọi là các bước lặp, mỗi bước lặp thường trong khoảng từ 1 đến 4 tuần. Mỗi bước lặp tự nó giống như một dự án phần mềm thu nhỏ, bao gồm tất cả các tác vụ cần thiết
để cho ra nâng cấp miFni của chức năng mới: lập kế hoạch, phân tích yêu cầu, thiết kế, viết mã, kiểm thử, và viết tài liệu. Tuy một bước lặp có thể không bổ sung đủ chức năng để đảm bảo sự ra đời của sản phẩm cuối cùng, nhưng một dự án phần mềm linh hoạt nhằm đến việc cho ra phần mềm mới khi kết thúc mỗi bước lặp. Trong nhiều trường
hợp, người ta đạt được mục tiêu này. Điều này đặc biệt đúng đối với phần mềm ứng dụng web. Cuối mỗi bước lặp, bất kể kết quả như thế nào, nhóm phát triển phần mềm cũng đánh giá lại các ưu tiên của dự án.
Các phương pháp phát triển phần mềm linh hoạt nhấn mạnh tầm quan trọng của giao tiếp thời gian thực, giao tiếp trực tiếp mặt đối mặt được đánh giá cao hơn giao tiếp qua các tài liệu viết. Hầu hết các đội phát triển linh hoạt được tập trung trong một môi trường có điều kiện thuận lợi cho việc giao tiếp, và các đội này bao gồm cả các lập trình viên và các "khách hàng" của họ (khách hàng là người định nghĩa sản phẩm; họ có thể là các quản lý sản phẩm, các nhà phân tích doanh nghiệp (business analyst), hoặc các khách hàng thực sự). Đội còn có thể bao gồm cả các chuyên gia test, thiết kế tương tác, những người viết tài liệu kỹ thuật, và các quản lý.
Các phương pháp phát triển phần mềm linh hoạt còn nhấn mạnh khả năng hoạt động của phần mềm như là phương thức chính yếu để đánh giá tiến độ. Cùng với việc đánh giá cao giao tiếp trực tiếp, các phương pháp tạo ra rất ít tài liệu khi so sánh với các phương pháp khác. Điều này dẫn đến phê phán rằng các phương pháp phát triển linh hoạt không có tính kỷ luật.

I. eXtreme Programming

Mô hình 1

Mô hình 2



1. Định nghĩa
- Phát triển sản phẩm một cách nhanh chóng: Với sự phát triển hiện nay của nền kinh tế dựa trên Công nghệ thông tin, doanh nghiệp nào đưa sản phẩm ra thị trường nhanh nhất sẽ chiếm được thị phần có lợi nhất. Phương pháp XP sẽ giúp cho các nhà phát triển phần mềm rút ngắn thời gian phát triển sản phẩm.
- Phát triển sản phẩm đúng theo yêu cầu của khách hàng: thực tế cho thấy rằng nhiều sản phẩm phần mềm tuy được phát triển một cách công phu nhưng lại không đáp ứng được nhu cầu của người sử dụng. Phương pháp XP đã đưa ra các cơ chế cho phép sản phẩm phát triển luôn phù hợp với yêu cầu của người sử dụng.

2. XP được thiết lập dựa trên bốn nguyên tắc sau:

12 cách làm việc của XP

Phương pháp XP đã đề ra 12 quy cách (practices) làm việc để thực hiện các nguyên tắc phát triển phần mềm đã nêu ở trên. Theo các chuyên gia trong CNPM, các quy cách làm việc đề ra bởi XP không có gì là mới. Thực chất, những quy cách này là những kinh nghiệm hay nhất thu được trong quá trình phát triển CNPM, đặc biệt là CNPM với công nghệ hướng đối tượng.

Lập kế hoạch (Planning process)
Với XP, khách hàng tham gia trực tiếp vào quá trình lập kế hoạch phát triển phần mềm. Vai trò của khách hàng và nhóm phát triển được định ra một cách rõ ràng.

Trách nhiệm của khách hàng:

* Phân loại các user story theo mức độ quan trọng từ quan điểm người sử dụng (dựa trên giá trị kinh doanh-business value). Từ đó sẽ định ra tính năng nào cần phải phát triển và phát triển theo thứ tự như thế nào.
* Định ra thời điểm và chu kỳ bàn giao sản phẩm

Trách nhiệm của nhóm phát triển:

* Ước lượng yêu cầu kỹ thuật (để phát triển) cho từng user story (ước lượng độ phức tạp).
* Ước lượng thời gian, nhân công cũng như giá thành để phát triển từng user story.
Với sự phân công trách nhiệm như vậy, bản kế hoạch sẽ luôn thỏa mãn được yêu cầu của khách hàng cũng như nhóm phát triển.

Bàn giao từng phần (Small releases)

Theo quy cách này, nhóm phát triển sẽ phát triển dần dần phần mềm, từ đơn giản đến phức tạp. Từng phần sẽ được chuyển giao cho khách hàng để có được ngay sự phản hồi của khách hàng. Từ đó sẽ có thể điều chỉnh ngay được sản phẩm cho phù hợp với yêu cầu của khách hàng. Khách hàng cũng có điều kiện để bổ sung hay thay đổi yêu cầu phần mềm.

Tham gia trực tiếp của khách hàng (On-site customer)

Với XP, khách hàng sẽ tham gia cách trực tiếp trong suốt quá trình phát triển phần mềm. Sự tham gia này sẽ giúp cho nhóm phát triển có điều kiện tham khảo trực tiếp ý kiến của khách hàng, trao đổi về hệ thống cần được phát triển, tránh được nhầm lẫn trong cách hiểu về hệ thống cần phát triển. Mục tiêu cuối cùng là sản phẩm làm ra phù hợp với yêu cầu của khách hàng.

Lập trình đôi (Pair programming)

Tất cả các phần chương trình do một hay nhiều nhóm hai người viết. Hai người này sẽ sử dụng chung một máy tính, cùng đồng thời viết chương trình. Quy cách này sẽ giúp cho có được giải pháp lập trình tốt hơn, chương trình sẽ có chất lượng và hiệu quả hơn.

Thiết kế đơn giản (Simple design)

XP khuyến khích tìm kiếm giải pháp đơn giản khi thiết kế phần mềm. Chỉ thiết kế phần mềm thoả mãn yêu cầu hiện tại của khách hàng, không nên tìm kiếm một giải pháp cho một hệ thống tương lai. Theo đó, chỉ cần một thiết kế làm sao cho chương trình chạy được và thỏa mãn yêu cầu của khách hàng.

Tổ chức lại chương trình (Refactoring)

Quan điểm của XP là chất lượng phần mềm được thể hiện bằng chất lượng của mã nguồn (code). Một chương trình được viết rõ ràng, đơn giản thì sẽ dễ bảo dưỡng và thay đổi. XP khuyến khích tổ chức (viết ) lại chương trình một cách đều đặn để nâng cao tính sáng sủa của chương trình, dễ bổ sung các chức năng mới, nâng cao hiệu suất của chương trình.

Kiểm thử (Testing)

XP yêu cầu rất cao trong khâu kiểm thử và kiểm định chương trình. Với mỗi phần của chương trình, lập trình viên phải viết chương trình kiểm thử cho phần đó trước khi thực sự bắt đầu khi viết chương trình (cho phần đó). Khách hàng sẽ chịu trách nhiệm thực hiện kiểm định sản phẩm.

Tích hợp liên tục (Continuous integration)

Việc tích hợp sẽ được tiến hành một cách liên tục. Khi một đoạn chương trình mới được phát triển, đã vượt qua phần kiểm thử, thì sẽ được tích hợp ngay vào hệ thống. Điều này sẽ giúp cho việc phát hiện và sửa lỗi thích hợp nhanh hơn và rẻ hơn. Trong một ngày có thể thực hiện nhiều lần tích hợp hệ thống.

Sở hữu tập thể (Collective ownership)

Tất cả mã nguồn đều thuộc quyền sở hữu của mọi thành viên trong nhóm phát triển. Theo đó, mã nguồn có thể được sửa đổi ngay khi cần. Với cách quản lý thông thường, mỗi phần mã nguồn thường do một người quản lý, nên khi cần sửa đổi thì phải cần sự thông qua chủ sở hữu, đôi khi điều này gây mất nhiều thời gian.

Chuẩn lập trình (Coding standards)

Để chương trình (mã nguồn) có thể hiểu được một cách dễ dàng, nhất là đối với các quy cách lập trình đôi và sở hữu tập thể, nhóm phát triển phải thống nhất cách viết chương trình. Cần phải có một quy định cụ thể, rõ ràng về cách viết (ví dụ, cách đặt tên biến, cách bổ sung chú thích, ..v.v.) để làm sao tất cả đều hiểu được.

Metaphor (Metaphor)

Nhóm phát triển XP dùng chung một hệ thống các thuật ngữ để biểu diễn hệ thống cần phát triển. Các thuật ngữ này sẽ được dùng trong khi trao đổi giữa các thành viên trong nhóm cũng như khi trao đổi với khách hàng.



II. Mô hình Waterfall
Mô hình 1




Mô hình2

1. Định nghĩa
Năm 1970, mô hình nổi tiếng và được áp dụng trong qui trình phát triển phần mềm tại phần lớn các công ty hiện nay ra đời: mô hình thác nuớc (Waterfall model). Mô hình này là kết quả của sự kết hợp các mô hình sản xuất từ các ngành kỹ thuật khác áp dụng cho công nghệ phần mềm. Mô hình Waterfall là một chuỗi qui trình phát triển như một luồng đều đặn từ trên xuống giống như một thác nước, bao gồm các giai đoạn: phân tích yêu cầu khách hàng, thiết kế, cài đặt, kiểm tra, tích hợp và bảo trì. Bạn sẽ thấy mô hình này giống hệt với qui trình xây một căn nhà: kiến trúc sư tìm hiểu yêu cầu của chủ nhà, thiết kế căn nhà, đưa cho đội ngũ thi công thực hiện, kiểm tra chất lượng và cuối cùng trao chìa khóa cho người sở hữu.

2. Waterfall được thiết lập dựa trên bốn nguyên tắc sau:

a. 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.

b. 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 đó.

c. 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ế”.

d. 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.

e. 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).

Không có nhận xét nào:

Đăng nhận xét