TỔNG QUAN VỀ CÔNG NGHỆ PHẦN MỀM
Một số khái niệm
Phần mềm (software) được hiểu đối chiếu với phần cứng (hardware) trong ngành điện tử; phần cứng là những thiết bị vật lý có thể chạm vào, trong khi phần mềm là những chương trình giúp các thiết bị này hoạt động hiệu quả.
Phần mềm trong Tin học có thể được hiểu bao gồm:
- Tập các lệnh máy tính nhằm thực hiện các chức năng xác định;
- Các cấu trúc dữ liệu cho phép chương trình thao tác với dữ liệu;
- Các tài liệu giúp cho người dùng có thể vận hành được phần mềm
Trong một hệ thống máy tính, phần mềm đóng vai trò quan trọng, được định nghĩa là tập hợp các chương trình dịch vụ giúp tối ưu hóa khả năng xử lý của phần cứng, như hệ điều hành (OS) Mở rộng hơn, phần mềm bao gồm tất cả các kỹ thuật ứng dụng nhằm thực hiện các dịch vụ chức năng cụ thể bằng cách sử dụng phần cứng.
Hình 1 1.Các thành phần của phần mềm
Nhóm các kỹ thuật, phương pháp luận
Bài viết này trình bày các khái niệm và quy trình cụ thể hóa một hệ thống, bao gồm các phương pháp tiếp cận giải quyết vấn đề, các trình tự thiết kế và phát triển được chuẩn hóa Nó cũng đề cập đến các phương pháp đặc tả yêu cầu, thiết kế hệ thống, thiết kế chương trình, kiểm thử, và toàn bộ quy trình quản lý phát triển phần mềm.
Nhóm các chương trình là giao diện giữa phần cứng và phần mềm, bao gồm các lệnh chỉ thị giúp máy tính thực hiện các thao tác xử lý dữ liệu theo trình tự nhất định.
Phần mềm cơ bản đóng vai trò quan trọng trong việc tạo ra môi trường thao tác thân thiện cho người dùng, từ đó nâng cao hiệu suất hoạt động của phần cứng Các hệ điều hành và chương trình hệ thống là những ví dụ điển hình cho loại phần mềm này.
Phần mềm ứng dụng: dùng để xử lý nghiệp vụ thích hợp nào đó (quản lý, kế toán, ), phần mềm đóng gói, phần mềm của người dùng,
Các tư liệu chất lượng cao là yếu tố quan trọng để phát triển, vận hành và bảo trì phần mềm hiệu quả Để đảm bảo độ tin cậy của phần mềm, cần tạo ra các tài liệu như đặc tả yêu cầu, mô tả thiết kế, điều kiện kiểm thử, thủ tục vận hành và hướng dẫn thao tác Những tư liệu này không chỉ hữu ích mà còn có giá trị cao trong quá trình sản xuất phần mềm.
Một số giáo trình về môn học này sử dụng các thuật ngữ khác nhau như Công nghệ phần mềm, Kỹ nghệ phần mềm và Công trình học phần mềm Do đó, cần xem xét một số vấn đề liên quan đến kiến thức chung về khoa học, công nghệ, kỹ nghệ và công nghiệp.
Công nghiệp là một phần quan trọng của nền kinh tế, chuyên sản xuất hàng hóa vật chất để đáp ứng nhu cầu tiêu dùng và phục vụ cho các hoạt động kinh doanh Đây là hoạt động sản xuất quy mô lớn, được thúc đẩy mạnh mẽ bởi các tiến bộ trong công nghệ, khoa học và kỹ thuật.
Từ "công nghiệp" thường được hiểu là hoạt động kinh tế quy mô lớn, trong đó sản phẩm, có thể là phi vật thể, trở thành hàng hóa Khi các hoạt động kinh tế chuyên sâu đạt đến một quy mô nhất định, chúng hình thành nên các ngành công nghiệp, như công nghiệp phần mềm máy tính, điện ảnh, giải trí, thời trang và báo chí.
Công nghệ là quá trình tạo ra và sử dụng các công cụ, máy móc, kỹ thuật và phương pháp để giải quyết vấn đề và cải tiến giải pháp hiện có Nó không chỉ bao gồm các thiết bị mà còn là hệ thống và quy trình tổ chức nhằm đạt được mục tiêu cụ thể Công nghệ có ảnh hưởng lớn đến khả năng thích nghi của con người và động vật với môi trường tự nhiên Thuật ngữ này có thể được áp dụng rộng rãi hoặc trong các lĩnh vực chuyên biệt như công nghệ xây dựng hay công nghệ thông tin.
Trong tiếng Việt, "khoa học", "kỹ thuật", và "công nghệ" thường được sử dụng tương tự nhau, nhưng thực tế chúng có những khác biệt rõ ràng Khoa học liên quan đến hoạt động hệ thống nhằm xây dựng và tổ chức kiến thức về vũ trụ thông qua các lời giải thích và dự đoán có thể kiểm tra Ngược lại, kỹ thuật là việc áp dụng kiến thức khoa học, kinh tế, xã hội, và thực tiễn để thiết kế, xây dựng và duy trì các cấu trúc.
Công nghệ (có nguồn gốc từ technologia, hay τεχνολογια, trong tiếng Hy
Lạp; techne có nghĩa là thủ công và logia có nghĩa là "châm ngôn", là thuật ngữ rộng chỉ các công cụ và mưu mẹo của con người Tùy vào ngữ cảnh, công nghệ có thể được hiểu theo nhiều cách khác nhau.
+ Công cụ hoặc máy móc giúp con người giải quyết các vấn đề;
+ Các kỹ thuật bao gồm các phương pháp, vật liệu, công cụ và các tiến trình để giải quyết một vấn đề;
+ Các sản phẩm được tạo ra phải hàng loạt và giống nhau
+ Sản phẩm có chất lượng cao và giá thành hạ
Kỹ nghệ là tập hợp các công nghệ được sắp xếp theo quy trình cụ thể, nơi con người áp dụng các phương pháp và công cụ để sản xuất ra những sản phẩm nhất định.
Kỹ nghệ là việc sử dụng phối hợp các công nghệ cần thiết để sản xuất ra các sản phẩm của một ngành nào đó
Công nghệ và kỹ nghệ là hai khái niệm khác nhau; công nghệ đề cập đến các kỹ thuật phát triển cho các vấn đề cụ thể, trong khi kỹ nghệ liên quan đến các quy trình nghiêm ngặt kết hợp công nghệ, phương pháp và công cụ để tạo ra sản phẩm chất lượng Theo định nghĩa của Uỷ ban Kinh tế và Xã hội khu vực Châu Á - Thái Bình Dương (ESCAP), công nghệ là kiến thức hệ thống về quy trình và kỹ thuật chế biến vật liệu và thông tin, bao gồm kiến thức, thiết bị, phương pháp và hệ thống được sử dụng để sản xuất hàng hóa và cung cấp dịch vụ.
Mặc dù khái niệm Kỹ nghệ phần mềm hiện nay được sử dụng cho môn học, trong giáo trình này, cụm từ Công nghệ phần mềm và Kỹ nghệ phần mềm được xem như có nghĩa tương tự nhau do yếu tố lịch sử và khách quan trong chương trình học của sinh viên Rất mong người đọc lưu ý điều này.
Theo IEEE [1993]: Kỹ nghệ phần mềm là:
(1) Việc áp dụng phương pháp tiếp cận có hệ thống, bài bản và được lượng hóa trong phát triển, vận hành và bảo trì phần mềm;
(2) Nghiên cứu các phương pháp tiếp cận được dùng trong (1)
Theo Pressman [2001]: Kỹ nghệ phần mềm là bộ môn tích hợp cả quy trình, các phương pháp, các công cụ để phát triển phần mềm máy tính
Theo Sommerville [2007]: Kỹ nghệ phần mềm là lĩnh vực liên quan đến lý thuyết, phương pháp và công cụ dùng cho phát triển phần mềm
Nhân tố con người và phân loại nghề nghiệp trong công nghệ phần mềm
2.1 Nhân tố con người trong ngành công nghiệp phần mềm Đối với một sản phẩn phần mềm, một người không thể hoàn thành mà là kết quả lao động của một nhóm người, gọi là nhóm phát triển phần mềm
Như vậy, một nhóm phát triển phần mềm như thế nào gọi là một nhóm hợp lý? Sau đây là một vài yếu tố cần xem xét:
- Nhóm có bao nhiêu thành viên,
- Nhóm được tổ chức như thế nào,
- Tình hình thực tế của mỗi thành viên trong nhóm,
- Môi trường, điều kiện mà nhóm đang làm việc,
Mỗi thành viên trong nhóm phải có một số kiến thức cần thiết tuỳ thuộc vào
Hiện nay, sự phát triển của Công nghệ Thông tin (CNTT) tại Việt Nam yêu cầu nguồn nhân lực có khả năng sử dụng hiệu quả CNTT trong mọi lĩnh vực kinh tế Điều này không chỉ cần những người lao động biết ứng dụng CNTT trong công việc, mà còn cần những chuyên gia trực tiếp tham gia vào sản xuất, kinh doanh và vận hành CNTT Do đó, việc đào tạo và phát triển đội ngũ nhân lực CNTT là vô cùng cần thiết.
Những người biết vận dụng sáng tạo CNTT vào nghiệp vụ chuyên môn
Những người tham gia quản lí và vận hành các hệ thống CNTT
Những người tham gia trực tiếp vào việc phát triển và xây dựng các sản phẩm CNTT
Việc phân loại nghề nghiệp trong các hệ thống thông tin có thể được thực hiện dựa trên các tiêu chí như mức độ kinh nghiệm và loại hình công việc.
Trong bài viết này, chúng ta sẽ khám phá các loại hình công việc, bao gồm phát triển ứng dụng, hỗ trợ ứng dụng, chuyên ngành kỹ thuật, nhân viên và các vấn đề liên quan khác Đặc biệt, phát triển ứng dụng là một lĩnh vực quan trọng, đóng vai trò then chốt trong việc tạo ra các giải pháp công nghệ hiệu quả.
Lập trình viên chuyển đổi các đồ án kỹ thuật thành mã nguồn và kiểm tra các đơn vị phần mềm Họ có thể đảm nhận cả vai trò phát triển ứng dụng và bảo trì Các chuyên gia lập trình có trình độ đại học thực hiện nhiều nhiệm vụ ngoài việc lập trình.
Kỹ sư phần mềm đảm nhiệm nhiều vai trò như nhà phân tích, nhà thiết kế và lập trình viên, thường tham gia vào các tổ chức có cấp độ cao để thực hiện lập kế hoạch và nghiên cứu khả thi Họ có khả năng thực hiện cả ba nhiệm vụ: phân tích, thiết kế và lập trình, đồng thời có thể lãnh đạo hoặc quản lý dự án Kỹ sư phần mềm sơ cấp thường dành nhiều thời gian cho lập trình, trong khi kỹ sư cao cấp tập trung vào lập kế hoạch, nghiên cứu khả thi, phân tích và thiết kế.
Phân tích viên hệ thống giữ vai trò quan trọng trong quá trình phân tích, đòi hỏi không chỉ kinh nghiệm mà còn các kỹ năng cần thiết Một phân tích viên giỏi cần có khả năng tư duy logic, giao tiếp hiệu quả và hiểu biết sâu sắc về công nghệ thông tin.
Khả năng hiểu các khái niệm trừu tượng cho phép tổ chức và phân tích logic, từ đó tổng hợp các giải pháp hiệu quả dựa trên từng dải phân chia.
- Khả năng rút ra các sự kiện thích đáng từ các nguồn xung khắc và lẫn lộn
- Khả năng hiểu được môi trường người dùng/khách hàng
- Khả năng áp dụng các phần tử hệ thống phần cứng và/hoặc phần mềm vào môi trường người sử dụng/khách hàng
- Khả năng giao tiếp tốt ở dạng viết và nói
- Khả năng trừu tượng hóa/tổng hợp vấn đề từ các sự kiện riêng lẻ
Kỹ sư tri thức là những chuyên gia xây dựng hệ thống trí tuệ nhân tạo bằng cách suy luận từ các mô hình ngữ nghĩa do chuyên gia cung cấp Họ tương tự như kỹ sư phần mềm nhưng có kỹ năng chuyên môn hóa để giải quyết các vấn đề liên quan đến trí tuệ nhân tạo Việc phát triển các mô hình và chương trình trí tuệ yêu cầu khả năng quan sát, kỹ năng phỏng vấn sâu sắc, và khả năng trừu tượng hóa vấn đề để tạo ra các lập luận và thông tin cần thiết, cũng như khả năng phát triển dự đoán về thông tin và tính chính xác với các chuyên gia.
Chuyên gia ứng dụng là những người có chuyên môn sâu về các vấn đề cụ thể, cho phép họ tư vấn cho các đội dự án về từng loại ứng dụng Chẳng hạn, một nhà phân tích cao cấp trong lĩnh vực chuyển tiền thời gian thực có khả năng phân chia thời gian giữa các dự án chuyển tiền nội địa và quốc tế, đồng thời nắm rõ các quy tắc và luật lệ mà ngân hàng cũng như các tổ chức chuyển tiền khác cần tuân thủ.
Quản trị dữ liệu là quá trình mà người quản lý dữ liệu quản lý thông tin như một nguồn thống nhất, giúp người sử dụng thực hiện chức năng của công ty Bộ phận này thiết lập và duy trì các chuẩn mực để đảm bảo tính nhất quán của dữ liệu.
Khi dữ liệu được xác định, người quản lý dữ liệu sẽ định dạng và xác định cấu trúc cơ sở dữ liệu cho ứng dụng Trong quá trình phát triển ứng dụng mới, họ hợp tác với bộ phận phát triển ứng dụng để xác định các số liệu tự động và với bộ phận quản trị cơ sở dữ liệu để đảm bảo các nhóm ứng dụng dễ dàng truy cập vào các cơ sở dữ liệu đã được tự động hóa.
Quản trị cơ sở dữ liệu (DBA - DataBase Administrator) là những chuyên gia quản lý môi trường dữ liệu vật lý trong tổ chức Họ thực hiện các nhiệm vụ như phân tích, thiết kế, xây dựng và bảo trì cơ sở dữ liệu cùng với phần mềm liên quan DBA cũng hợp tác với các nhà quản lý dữ liệu để xác định và nạp thông tin thực tế vào các cơ sở dữ liệu vật lý.
Một người quản lý cơ sở dữ liệu hợp tác với các nhóm phát triển ứng dụng để cung cấp truy cập tự động vào dữ liệu và xác định rõ ràng các cơ sở dữ liệu cần thiết cho thông tin được tự động hóa.
Kỹ sư trí tuệ nhân tạo đóng vai trò quan trọng trong việc tư vấn cho các đội dự án về cách xác định, thiết kế và tích hợp trí tuệ nhân tạo vào ứng dụng Họ hợp tác với các kỹ sư tri thức để dịch và kiểm tra các vấn đề liên quan đến dữ liệu và thông tin lập luận bằng ngôn ngữ của trí tuệ nhân tạo Đặc biệt, kỹ sư trí tuệ nhân tạo thường đạt được trình độ chuyên môn cao hơn so với các kỹ sư tri thức.
Sản phẩm phần mềm – đặc trưng và phân loại
Giới thiệu một số mô hình phát triển phần mềm thường được ứng dụng và những đặc điểm riêng của từng mô hình
• Hiểu rõ quy trình phát triển phần mềm
• Nắm được một số mô hình phát triển phần mềm
• Xác định những công việc phải làm trong quy trình phát triển phần mềm và cách thực hiện chúng
• Đặc điểm của mỗi mô hình phát triển phần mềm
1 Qui trình phát triển phần mềm
1.1 Vòng đời phát triển hệ thống (Systems Development Life Cycle – SDLC)
Hình 2.1 Vòng đời phát triển hệ thống
Mỗi vòng đời hệ thống có 4 giai đoạn, mỗi giai đoạn bao gồm một tập các
QUI TRÌNH PHÁT TRIỂN PHẦN MỀM
Qui trình phát triển phần mềm
1.1 Vòng đời phát triển hệ thống (Systems Development Life Cycle – SDLC)
Hình 2.1 Vòng đời phát triển hệ thống
Hệ thống có bốn giai đoạn trong vòng đời của nó, mỗi giai đoạn bao gồm các hoạt động phát triển lặp đi lặp lại Ở giai đoạn vạch kế hoạch, cần trả lời các câu hỏi về lý do xây dựng hệ thống, lợi ích mà nó mang lại và thời gian cần thiết để hoàn thành Giai đoạn phân tích yêu cầu xác định người dùng, chức năng của hệ thống và thời điểm, địa điểm sử dụng Cuối cùng, ở giai đoạn thiết kế, cần xác định cách thức xây dựng hệ thống.
Các hoạt động chính của từng giai đoạn là:
Trong giai đoạn vạch kế hoạch, việc khởi tạo dự án là rất quan trọng, bao gồm việc phát triển và tiếp nhận các yêu cầu hệ thống, từ đó tiến hành phân tích tính khả thi về kỹ thuật, kinh tế và tổ chức Tiếp theo, trong quản lý dự án, chúng ta cần xây dựng kế hoạch làm việc, tập hợp nhân sự cho dự án và thực hiện kiểm soát cũng như điều khiển tiến độ dự án.
Tóm lại giai đoạn này chúng ta cần trả lời câu hỏi: Tại sao chúng ta phải thực hiện dự án?
Bao gồm: a Phát triển một chiến lược phân tích
Nhằm mô hình hóa hệ thống hiện tại; xác lập hệ thống mới b Thu thập yêu cầu
Để phát triển một hệ thống lôgic hiệu quả, cần xây dựng một mô hình nghiệp vụ rõ ràng nhằm trình bày dữ liệu nghiệp vụ và các tiến trình xử lý liên quan Đồng thời, việc phát triển một hệ thống yêu cầu cũng là yếu tố quan trọng trong quá trình này.
Giai đoạn này nhằm trả lời câu hỏi: Cái gì hệ thống sẽ làm cho ta? Ở đâu và khi nào hệ thống sẽ được dùng?
Để xây dựng một hệ thống hiệu quả, cần phát triển một chiến lược thiết kế rõ ràng, bao gồm thiết kế kiến trúc và giao diện người dùng, phát triển cơ sở dữ liệu cùng với các đặc tả file Đồng thời, cần xác định rõ ràng thiết kế chương trình, bao gồm việc xác định các chương trình cần viết và chức năng cụ thể của từng chương trình.
Bao gồm: a Tiến hành xây dựng hệ thống:
+ Tạo dựng hệ thống (viết mã)
Kiểm tra thử nghiệm hệ thống là bước quan trọng trong quá trình triển khai Cần cài đặt hệ thống và xây dựng kế hoạch tập huấn cho người sử dụng để đảm bảo họ có thể vận hành hiệu quả Ngoài ra, việc xác lập kế hoạch hỗ trợ hệ thống, bao gồm bảo trì, cũng rất cần thiết để duy trì hoạt động ổn định và lâu dài.
Mỗi giai đoạn trong quy trình sản xuất bao gồm các bước cụ thể để tạo ra sản phẩm, mà sản phẩm của giai đoạn này sẽ trở thành đầu vào cho các giai đoạn tiếp theo Hệ thống phát triển thông qua quá trình tinh chỉnh liên tục.
1.2 Qui trình phát triển phần mềm
Qui trình là yếu tố quan trọng quyết định sự thành công của nhà sản xuất phần mềm, giúp tất cả thành viên trong dự án, từ người cũ đến người mới, đồng bộ hóa công việc theo cách thức chung của công ty hoặc dự án.
Qui trình phát triển phần mềm (Software Development Process - SEP) là yếu tố quyết định để tạo ra sản phẩm chất lượng cao với chi phí hợp lý và năng suất tối ưu Nó giúp đồng bộ hóa các hoạt động trong dự án, điều này rất quan trọng đối với các công ty sản xuất và gia công phần mềm trong bối cảnh cạnh tranh khốc liệt của ngành công nghiệp phần mềm.
Quy trình phát triển phần mềm là chuỗi các hoạt động có tổ chức, cần thiết để xây dựng một hệ thống phần mềm hiệu quả.
Quy trình phát triển phần mềm gồm 4 hoạt động cơ bản:
+ Đặc tả yêu cầu: 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: 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: để 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 là quá trình quan trọng nhằm đáp ứng nhu cầu của khách hàng, trong đó đặc tả đóng vai trò xác định các dịch vụ cần thiết và những ràng buộc trong phát triển hệ thống Quy trình này bao gồm nghiên cứu khả thi, phân tích yêu cầu, đặc tả yêu cầu và đánh giá yêu cầu, với mục tiêu chính là xác định rõ ràng các yêu cầu của khách hàng.
Hoạt động thiết kế và cài đặt là quá trình chuyển đổi các đặc tả hệ thống thành một hệ thống thực thi, với mục tiêu hiện thực hóa những đặc tả này thành các cấu trúc phần mềm Thiết kế bao gồm nhiều yếu tố quan trọng như đặc tả trừu tượng, thiết kế đối tượng dữ liệu, thiết kế hệ thống, thiết kế kiến trúc, thiết kế giao diện, thiết kế thành phần, thiết kế cấu trúc dữ liệu và thiết kế giải thuật Cài đặt là giai đoạn chuyển đổi các cấu trúc này thành chương trình thực thi.
Lập trình là quá trình chuyển đổi thiết kế thành mã nguồn, bao gồm việc gỡ lỗi và sửa lỗi, và thường diễn ra theo cách cá nhân hóa mà không có quy trình chung Người lập trình cần thực hiện kiểm thử để phát hiện và khắc phục lỗi, đồng thời phải lựa chọn ngôn ngữ lập trình phù hợp và có kinh nghiệm cùng phong cách lập trình tốt Để đảm bảo độ tin cậy, lập trình viên cần tránh lỗi, xử lý ngoại lệ và ném ngoại lệ khi cần thiết Đánh giá phần mềm, hay còn gọi là kiểm chứng và thẩm định, được sử dụng để xác định xem hệ thống có thực hiện đúng các đặc tả và đáp ứng yêu cầu của khách hàng hay không, điều này đòi hỏi phải tiến hành kiểm thử hệ thống.
Cải tiến phần mềm là cần thiết để duy trì và nâng cao hệ thống theo những yêu cầu biến đổi Phần mềm cần có tính linh hoạt để thích ứng với môi trường nghiệp vụ và kỹ thuật luôn thay đổi, do đó, sự tiến hóa là điều không thể tránh khỏi Sự phân định giữa phát triển và tiến hóa là tương đối, vì chúng có mối quan hệ chặt chẽ; phát triển liên quan đến việc tạo ra cái mới, trong khi tiến hóa dựa trên nền tảng của hệ thống hiện có.
1.3 Ba giai đoạn chính của quy trình phát triển phần mềm
Tiến trình phát triển kỹ nghệ phần mềm bao gồm ba giai đoạn chính: xác định, phát triển và bảo trì Những giai đoạn này xuất hiện trong mọi dự án phát triển phần mềm, không phụ thuộc vào miền ứng dụng, kích cỡ hay độ phức tạp của dự án.
Giai đoạn xác định là quá trình tập trung vào việc làm rõ "cái gì" cần được phát triển trong phần mềm Trong giai đoạn này, các nhà phát triển cần xác định thông tin cần xử lý, các chức năng và hiệu năng thiết yếu, giao diện cần thiết, các ràng buộc thiết kế hiện có, và các tiêu chuẩn hợp lệ để đảm bảo sự thành công của hệ thống.
Mô hình phát triển phần mềm
Mô hình phát triển phần mềm, hay còn gọi là mô hình tiến trình phát triển phần mềm, là sự trừu tượng hóa của quá trình phát triển từ một góc nhìn nhất định Mỗi mô hình sẽ cung cấp các góc nhìn khác nhau về tiến trình này.
+ Luồng công việc: trình tự các hoạt động của tiến trình phát triển
+ Luồng dữ liệu: luồng các dữ liệu di chuyển khi phát triển hệ thống phần mềm
Vai trò của tác nhân trong hệ thống phần mềm thể hiện qua hành vi của họ đối với sản phẩm Tùy thuộc vào mô hình phát triển phần mềm, các nhóm công việc sẽ được triển khai theo những phương thức khác nhau Điều này cho phép sản xuất ra cùng một sản phẩm phần mềm một cách hiệu quả.
Một số mô hình tiến trình phát triển phần mềm phổ biến:
Mô hình thác nước (Water Fall Model)
Mô hình phát triển tiến hóa (Evolutionary development Model)
Mô hình bản mẫu (Prototyping Model)
Mô hình xoắn ốc (Spiral Model)
Mô hình RAD (Rapid Application Development Model)
Mô hình tăng trưởng (Incremental Model)
Mô hình phát triển hệ thống hình thức (Formal Systems development Model)
Mô hình phát triển dựa trên sử dụng lại (Reuse-Based Development Model)
Mô hình dựa trên kỹ nghệ thứ hệ thứ 4 (4 GT - Fourth generation technique)
Mô hình RUP (Rational Unified Process Model)
Nhìn chung các mô hình tiến trình phát triển phần mềm đều có một khung làm việc như sau:
- Khung tiến trình (Process framework) gồm:
The framework activities encompass essential components such as work tasks, work products, milestones, deliverables, and quality assurance checkpoints Additionally, umbrella activities play a crucial role in supporting these processes, ensuring a comprehensive approach to project management.
Các hoạt động trong khung công việc bao gồm: truyền thông, lập kế hoạch, mô hình hóa, phân tích yêu cầu, thiết kế, xây dựng, sinh mã, kiểm thử và triển khai.
Hoạt động hỗ trợ trong quản lý dự án phần mềm bao gồm điều khiển và theo dõi tiến độ, quản lý rủi ro, đảm bảo chất lượng phần mềm, kiểm tra kỹ thuật hình thức, đo lường hiệu suất, quản lý cấu hình phần mềm, quản lý việc sử dụng lại mã nguồn, cùng với việc tạo và chuẩn bị các sản phẩm cộng tác.
Dưới đây là một số mô hình phát triển phần mềm tiêu biểu
2.1 Mô hình thác nước (Waterfall Model) Đôi lúc còn được gọi là mô hình cổ điển (classic model) hay mô hình tuyến tính (linear sequential model) Mô hình này xem quá trình xây dựng một sản phẩm phần mềm bao gồm nhiều 5 giai đoạn tách biệt gồm: phân tích yêu cầu, thiết kế, cài đặt và kiểm thử đơn thể, tích hợp tổng thể và kiểm thử, bảo trì và phát triển, sau khi hoàn tất một giai đoạn thì chuyển đến giai đoạn sau
Mô hình này được tóm tắt như sau:
Hình 2 3 Mô hình thác nước
Cài đặt và thử nghiệm đơn thể
Thử nghiệm và tích hợp tổng thể
Bảo trì và phát triển
Các pha trong quy trình sản xuất được xác định rõ ràng, bao gồm đầu vào và đầu ra Trình tự kỹ nghệ được thể hiện từ giai đoạn đầu cho đến sản phẩm cuối cùng, giúp dễ dàng theo dõi và bảo trì Phương pháp này rất phù hợp khi yêu cầu sản phẩm cần được hiểu rõ và chi tiết.
Mô hình phát triển phần mềm này chỉ hiệu quả khi yêu cầu rõ ràng và thay đổi được hạn chế Tuy nhiên, phát triển phần mềm thực chất là một quá trình lặp đi lặp lại, không phải là tuần tự Khách hàng thường không thể cung cấp tất cả yêu cầu một cách chính xác ngay từ đầu, dẫn đến khó khăn trong việc đáp ứng các thay đổi Khi phát hiện sai sót muộn, dự án có thể gặp thảm họa.
Khách hàng thường phải chờ đợi rất lâu để thấy được phiên bản đầu tiên thực hiện được của sản phẩm, đòi hỏi khách hàng phải kiên nhẫn
Tồn tại sự chờ đợi giữa các đội phát triển trong nhóm làm việc
2.2 Mô hình bản mẫu (Prototyping model)
Khách hàng thường gặp khó khăn trong việc diễn đạt mong đợi của mình, dẫn đến việc các nhà phát triển hiểu sai yêu cầu Điều này khiến khách hàng phát hiện ra sai sót khi sử dụng sản phẩm Do đó, cần tạo ra một môi trường thuận lợi để thu thập và hiểu rõ yêu cầu của khách hàng.
Mô hình bản mẫu (Prototype) là phương pháp phát triển sản phẩm thông qua việc tạo ra một mẫu thử ban đầu để người dùng xem xét và phản hồi Quá trình này bao gồm việc tinh chỉnh mẫu thử qua nhiều phiên bản cho đến khi đáp ứng được yêu cầu của khách hàng Mẫu thử ban đầu không chỉ giúp nhận diện chính xác nhu cầu của người sử dụng mà còn có thể trở thành sản phẩm cuối cùng hoặc bị loại bỏ nếu không phù hợp Điều này phản ánh tính chất dùng lại của phần mềm, khi mà các yêu cầu của người sử dụng được thỏa mãn, hệ thống cũng được hoàn thiện.
Cách tiếp cận làm bản mẫu cho kỹ nghệ phần mềm là cách tiếp cận tốt nhất khi:
- Mục tiêu tổng quát cho phần mềm đã xác định, nhưng chưa xác định được đầu vào và đầu ra
- Người phát triển không chắc chắn về tính hiệu quả của thuật toán, về khả năng thích nghi với hệ điều hành hay giao diện người máy cần có
Khi đã có bản mẫu, người phát triển có thể dùng các công cụ phần mềm trợ giúp để sinh ra chương trình làm việc
Làm bản mẫu là tạo ra một mô hình cho phần mềm cần xây dựng Mô hình có thể có 3 dạng:
1 Bản mẫu trên giấy hay trên máy tính mô tả giao diện người-máy làm người dùng hiểu được cách các tương tác xuất hiện
2 Bản mẫu cài đặt chỉ một tập con chức năng của phần mềm mong đợi
3 Bản mẫu là một chương trình có thể thực hiện một phần hay tất cả chức năng mong muốn nhưng ở mức sơ lược và cần cải tiến thêm các tính năng khác tùy theo khả năng phát triển
Theo mô hình bản mẫu, quy trình bắt đầu bằng việc người phát triển và khách hàng gặp gỡ để xác định mục tiêu tổng thể và các yêu cầu cần thiết cho phần mềm Sau đó, giai đoạn thiết kế nhanh diễn ra, tập trung vào việc tạo ra một bản mẫu thể hiện các khía cạnh dễ thấy của phần mềm cho người dùng Dựa trên bản mẫu này, người phát triển và người dùng cùng nhau đánh giá và điều chỉnh các yêu cầu cho phần mềm Quá trình này lặp lại cho đến khi bản mẫu đáp ứng đầy đủ yêu cầu của khách hàng, giúp người phát triển hiểu rõ hơn về nhu cầu cần thực hiện.
Một biến thể của mô hình thăm dò là mô hình trong đó các yêu cầu được cập nhật liên tục, và bản mẫu sản phẩm được phát triển liên tục cho đến khi hoàn thiện.
Có thể tóm lược 6 bước làm bản mẫu như sau:
+ Khởi đầu bằng pha thu thập yêu cầu;
+ Tiến hành thiết kế nhanh;
+ Đánh giá của khách hàng;
+ Nếu bản mẫu chưa thỏa mãn được yêu cầu thì chuyển sang bước thiết kế nhanh và lặp lại
Mô hình làm bản mẫu có một số vấn đề như:
- Do sự hoàn thiện dần (tiến hóa) của bản mẫu, phần mềm nhiều khi có tính cấu trúc không cao, dẫn đến khó kiểm soát, khó bảo trì
Khách hàng thường thất vọng trong quá trình phát triển phần mềm vì họ nhầm lẫn giữa bản mẫu và sản phẩm cuối cùng Khi nhìn thấy các khuôn mẫu đầu tiên, khách hàng thường hối thúc nhà phát triển hoàn thành sản phẩm mà không dành đủ thời gian để đánh giá kỹ lưỡng bản mẫu.
- Thiếu tầm nhìn của cả quy trình
- Hệ thống được cấu trúc một cách nghèo nàn Những chọn lựa không tốt có thể được tích hợp trong hệ thống
- Yêu cầu kỹ năng đặc biệt (sử dụng công cụ CASE)
Nên áp dụng mô hình này cho:
• Những hệ thống tương tác ở mức độ nhỏ hoặc vừa
• Trên một phần của những hệ thống lớn hay những hệ thống có thời gian chu kỳ tồn tại ngắn
2.3 Mô hình xoắn ốc (Spiral Model)
Mô hình Boehm, hay còn gọi là mô hình xoắn ốc Boehm, là sự kết hợp giữa mô hình thác nước (có tính trình tự tốt nhưng rủi ro cao) và mô hình mẫu (loại trừ rủi ro nhưng trình tự không rõ ràng), đồng thời bổ sung yếu tố phân tích rủi ro Mô hình này bao gồm bốn hoạt động chính.
Lập kế hoạch (Planning): Xác định mục tiêu, tương tác và ràng buộc;
Phân tích rủi ro (Risk analysis): Phân tích các lựa chọn và các chỉ định/giải quyết rủi ro;
Kỹ nghệ (Engineering): Phát triển sản phẩm;
Đánh giá của khách hàng (Customer evaluation): Đánh giá kết quả xây dựng từ phía khách hàng
Mô hình được tóm tắt như sau:
Hình 2 4 Mô hình xoắn ốc
Trợ giúp tự động hoá phát triển
CASE (Computer-Aided Software Engineering) là các phần mềm trợ giúp phát triển và tiến hoá hệ thống Các công cụ thường gặp là:
•+ Bộ soạn thảo đồ thị: để phát triển mô hình hệ thống
•+ Từ điển dữ liệu: để quản lý các thực thể thiết kế
•+ Bộ xây dựng giao diện: để thiết kế giao diện
•+ Bộ gỡ rối: trợ giúp tìm lỗi trong chương trình
•+ Bộ chuyển đổi tự động: tạo sinh các phiên bản mới từ thiết kế hoặc chương trình
CASE đóng vai trò quan trọng trong việc cải thiện quy trình phát triển phần mềm, bao gồm trình tự, tiến độ và chất lượng thông qua việc tự động hóa một số hoạt động mô hình hóa và quản lý Tuy nhiên, một số hoạt động như tư duy sáng tạo trong kỹ nghệ phần mềm, lựa chọn giải pháp công nghệ, giao tiếp trong làm việc nhóm và quản lý vẫn không thể được tự động hóa.
Phân loại CASE giúp hiểu và sử dụng chúng trong phát triển phần mềm Có thể phân loại CASE theo:
+ Hướng chức năng: Công cụ cho các chức năng cụ thể: soạn thảo, lập kế hoạch, làm mẫu,
+ Hướng tích hợp: Công cụ trợ giúp tổ chức việc tích hợp các đơn vị các mức trong hệ thống
+ Dựa trên loại hoạt động: Đặc tả, thiết kế, triển khai, thẩm định và xác minh
Các công cụ đơn (Tools): trợ giúp những nhiệm vụ riêng rẽ của tiến trình như: kiếm tra sự nhất quán, soạn thảo, tạo mô hình
Bàn thợ (Workbenches): trợ giúp 1 pha của tiến trình phát triển, như đặc tả, thiết kế,
Môi trường phát triển (Environments): trợ giúp toàn bộ hay một phần của toàn bộ tiến trình phần mềm (có thể bao gồm một số bàn thợ)
Quy trình phần mềm chung đã được giới thiệu Những công việc phải làm trong quy trình phần mềm và cách thực hiện chúng cũng được trình bày
Một số mô hình phát triển phần mềm Đặc điểm của mỗi mô hình phát triển phần mềm cũng đã được đề cập
Các vấn đề này giúp chúng ta có cái nhìn tổng quan về các kỹ thuật và công nghệ trong ngành học, đồng thời xác định mô hình phát triển phần mềm cho dự án cũng rất quan trọng trong việc tham gia và quản lý dự án phần mềm.
Câu hỏi và bài tập
1 Hãy mô tả các thành phần trong vòng đời phát triển hệ thống?
2 Vẽ bản đồ tư duy cho 3 giai đoạn chính của quá trình phát triển phần mềm
3 Có mấy loại mô hình tiến trình phát triển phần mềm thường được sử dụng? Gồm những loại nào?
4 Trình bày nội dung của các mô hình: thác nước, làm bản mẫu, xoắn ốc, tiến hoá, tăng trưởng, phát triển ứng dụng nhanh, hình thức hoá, đối tượng, sử dụng lại, mô hình mã nguồn mở, kỹ thuật thế hệ thứ 4 theo các ý sau:
+ Thích hợp với dự án phần mềm có đặc điểm gì?
5 Tiến hoá phần mềm là gì? Lý do?
6 Mô tả tiến trình tiến hoá hệ thống
7 Hãy nêu ý nghĩa của việc xác định mô hình phát triển phần mềm mà dự án sẽ triển khai sản phẩm.