Chương 1 Tổng quan về công nghệ phần mềm 1 TRƯỜNG ĐH CNTTTT KHOA CÔNG NGHỆ THÔNG TIN Giáo trình MÔN HỌC CÔNG NGHỆ PHẦN MỀM Năm 2012 2013 2 MỤC LỤC LỜI NÓI ĐẦU 5 Chương 1 TỔNG QUAN VỀ PHẦN MỀM VÀ KỸ N.
TỔNG QUAN VỀ PHẦN MỀM VÀ KỸ NGHỆ PHẦN MỀM
Tổng quan về phần mềm
Phần mềm không chỉ đơn thuần là các chương trình máy tính mà còn bao gồm tài liệu và thông tin cấu hình cần thiết để đảm bảo các chương trình hoạt động hiệu quả Một hệ thống phần mềm được cấu thành từ ba phần chính.
Các chương trình máy tính riêng lẻ : o Các file mã nguồn If a>b then file.com
Max:=a Else o Các file mã máy (file text) file.exe
Các cấu trúc dữ liệu: o Cấu trúc làm việc (bộ nhớ trong) o Cấu trúc lưu trữ (bộ nhớ ngoài)
Các tài liệu liên quan: o Tài liệu hướng dẫn sử dụng
(dành cho người dùng cuối) user’s o Tài liệu tham khảo kỹ thuật guide
(dành cho người bảo trì phần mềm) o Tài liệu phát triển
(dành cho nhà phát triển)
Technical reference Specification, design, test,
Ngoài ra cần một Website cho người dùng để download thông tin sản phẩm hiện thời
Khi xây dựng phần mềm, việc sinh ra các thành phần như cấu trúc dữ liệu, file mã nguồn và mã máy là cần thiết và có thể tự động hóa nhờ vào các kỹ thuật hiện đại Tuy nhiên, các thành phần không vận hành được vẫn chưa thể tự động hóa do độ phức tạp của chúng Việc viết tài liệu cho những thành phần này là công việc khó khăn, tốn nhiều thời gian và công sức Để tự động hóa quá trình phát sinh tài liệu, chúng ta cần hình thức hóa các tài liệu này một cách hiệu quả.
Một phần mềm mới có thể được phát triển thông qua việc tạo ra các chương trình mới, cấu hình lại các phần mềm hiện có hoặc tái sử dụng phần mềm đã tồn tại.
Các phần mềm máy tính ngày nay đóng vai trò quan trọng trong mọi lĩnh vực đời sống, kinh tế, xã hội của mọi quốc gia trên thế giới:
Các phần mềm là linh hồn của các hệ thống máy tính Chúng có vai trò nền tảng của mọi hoạt động xã hội
Dịch vụ, Hồn siêu, phách lạc, =>bất tỉnh
Mọi nền kinh tế đều phụ thuộc rất lớn vào phần mềm
Phần % thu, chi từ phần mềm chiếm đáng kể trong tổng GNP của mọi quốc gia:
2006 ấn độ xuất gần 30 tỉ USD phần mềm
Thế giới có >7 triệu kỹ sư CNTT tạo ra 600 t ỉ $/năm
Chi phí cho phần mềm năm 2000 lên tới: 770 t ỉ $
Phần mềm sai hỏng, kinh tế tổn thất lớn
Vệ tinh Ariane 5 hỏng do lỗi phần mềm (1996) thiệt hại500 triệu $
Website dùng 1 ngàyy mất hàng triệu $
[Pạnkaj Jalote CMM in practice, Addison-Wesley, tr.1,3,11]
Phần mềm tạo nên sự khác biệt giữa các tổ chức về phong cách và năng xuất lao động:
Ngày càng nhiều hệ thống được điều khiển và hỗ trợ bởi phần mềm, với tính tự động hóa ngày càng cao Chi phí cho phần mềm hiện nay ngày càng lớn so với chi phí phần cứng.
Ví dụ: Với hệ thống siêu thị
Chi phần mềm chiếm Chi phần cứng 10 triệu
40-> 50 triệu Ứng dụng phần mềm có mặt trên mọi lĩnh vực kinh tế, giáo dục, quân sự, trò chơi,
1.1.3 Những đặc trưng của phần mềm
Một phần mềm thường có những đặc trưng riêng so với những sản phẩm khác như sau:
Phần mềm không trở nên lỗi thời, nhưng có thể thoái hóa theo thời gian do sự thay đổi trong môi trường sử dụng Khi nhu cầu sử dụng phần mềm thay đổi, điều quan trọng là phải tiến hành cập nhật và nâng cấp để đáp ứng những yêu cầu mới.
Tỷ lệ hỏng hóc ngày càng gia tăng, khiến cho việc sử dụng phần mềm trở nên không khả thi Hơn nữa, việc nâng cấp phần mềm thường phát sinh nhiều lỗi mới, dẫn đến chi phí bảo trì và phát triển phần mềm ngày càng cao.
Lỗi đưa vào phần mềm khi sửa đổi
Thực tế Đường mức lý tưởng Đường cong thoái hóa của phần mềm Thời gian
Phần mềm không được lắp ráp từ những mẫu có sẵn: o Không có danh mục chi tiết cho trước o Sản phẩm đặt hàng theo từng yêu cầu riêng lẻ
Phân tích Đặt Lập trình
Khảo sát Đặt Phần mềm 1
Phần mềm có bản chất phức tạp và khó hiểu, với hệ thống logic chứa nhiều khái niệm và mối liên kết không thể nhìn thấy Để nắm bắt được bản chất của phần mềm, người dùng cần tư duy trừu tượng, vì phần mềm không phải là một vật thể vật lý mà chỉ có thể được biểu diễn qua các khía cạnh như dữ liệu, hành vi, cấu trúc và giao diện, mà không phản ánh toàn bộ hệ thống.
Thay đổi là bản chất của phần mềm, phản ánh sự biến động của thế giới thực Khi môi trường kinh doanh và nhu cầu con người thay đổi, phần mềm cần điều chỉnh để đáp ứng những yêu cầu mới Ngoài ra, phần mềm cũng phải thích ứng với sự thay đổi của môi trường vận hành, bao gồm hệ điều hành và phần cứng.
Phát triển phần mềm ngày càng đòi hỏi sự hợp tác nhóm do quy mô lớn và nhu cầu chuyển giao nhanh chóng đến người dùng Để đạt được hiệu quả, nhóm cần có đa dạng kỹ năng, nhưng năng suất không tỷ lệ thuận với số lượng thành viên; một người giỏi có thể mang lại hiệu quả cao hơn năm người trung bình.
Khi làm việc theo nhóm, chúng ta cần chú ý đến một số vấn đề quan trọng như: việc trao đổi thông tin lớn với hàng nghìn email mỗi ngày, khó khăn trong việc kiểm soát tính đồng bộ của sản phẩm, và việc tăng tốc độ phát triển phần mềm không hẳn chỉ bằng cách thêm nhân lực Hơn nữa, mỗi cá nhân đều có ảnh hưởng lớn đến kết quả chung của cả nhóm.
Một phần mềm có thể được phân loại theo 3 tiêu chí khác nhau:
1 Theo mức độ hoàn thiện
2 Theo chức 3 Theo năng thực hiện lĩnh vực ứng dụng
11 a Theo mức độ hoàn thiện
Phần mềm được phân loại theo mức độ hoàn thiện tăng dần từ chương trình đến sản phẩm và cuối cùng là sản phẩm hệ thống x3
Chương trình Chương trình hệ thống
Yếu tố Yếu tố Yếu tố
Sản phẩm Sản phẩm hệ thống
Tính phức tạp tăng nhanh (9 lần) từ chương trình -> sản phẩm -> hệ thống Trong đó:
Chương trình được thiết kế với mô hình một người viết và một người dùng, trong đó người viết cũng chính là người sử dụng Mục tiêu chính của chương trình là thu thập thông tin và xử lý tín hiệu số một lần Tuy nhiên, chương trình thường thiếu tài liệu hướng dẫn và không trải qua quy trình kiểm thử đầy đủ.
Sản phẩm phần mềm o Nhiều người viết, nhiều người dùng, o Độ phức tạp cao, đồng bộ, an toàn, an ninh
=> Kinh nghiệm viết chương trình nhỏ không thể áp dụng cho các sản phẩm lớn b Phân loại phần mềm theo chức năng
Phần mềm hệ thống o Điều hành hoạt động máy tính, thiết bị và chương trình (OS, ) o Trợ giúp các tiện ích (tổ chức tệp, nén, dọn đĩa, )
Phần mềm nghiệp vụ hỗ trợ cho nhiều hoạt động khác nhau và có sự đa dạng lớn Chúng thường được phân loại thành hai nhóm chính dựa trên phương thức phát triển: sản phẩm đặt hàng, thường được sản xuất theo yêu cầu cụ thể của khách hàng, và các hệ thống khác.
Có hai loại sản phẩm phần mềm chính: sản phẩm đơn chiếc và sản phẩm chung Sản phẩm đơn chiếc được sản xuất theo yêu cầu riêng biệt, dễ nhận dạng và đáp ứng nhu cầu cụ thể của từng khách hàng Trong khi đó, sản phẩm chung, hay còn gọi là sản phẩm đại trà, được phát triển để bán rộng rãi trên thị trường, thường đáp ứng các yêu cầu chung và phục vụ một số lượng lớn người dùng, như các phần mềm văn phòng.
Mỗi loại phần mềm có phương thức phát triển, chi phí và thời gian thực hiện khác nhau Tuy nhiên, ranh giới giữa phần mềm đại trà và phần mềm tùy biến ngày càng mờ nhạt, khi nhiều công ty phát triển phần mềm bắt đầu từ sản phẩm đại trà và điều chỉnh theo nhu cầu riêng của khách hàng.
Phần mềm công cụ, bao gồm các công cụ CASE, là những phần mềm hỗ trợ quá trình phát triển phần mềm, từ việc sử dụng ngôn ngữ lập trình để soạn thảo mã nguồn, dịch và gỡ lỗi, đến việc hỗ trợ cho nhiều giai đoạn phát triển như phân tích, thiết kế, quản lý dự án và kiểm thử Ví dụ điển hình là Developer2000, giúp tối ưu hóa quy trình phát triển phần mềm.
Powerdesigner, WINE, Mcrosoft Project Management, RequisitePro, c.Phân loại theo lĩnh vực ứng dụng
Kỹ nghệ phần mềm (Software Engineering)
Phần mềm đã xuất hiện từ khi có hệ máy tính và ngôn ngữ lập trình đầu tiên, nhằm tận dụng sức mạnh của phần cứng Công nghệ phần cứng đã phát triển nhanh chóng, với tính năng và tiềm năng ngày càng gia tăng Do đó, các ứng dụng phần mềm cũng cần phát triển tương ứng, dẫn đến việc phần mềm trở nên phức tạp và khó hiểu hơn.
Nhu cầu ứng dụng công nghệ thông tin thông qua các sản phẩm phần mềm đang gia tăng mạnh mẽ trong mọi lĩnh vực kinh tế và xã hội Từ đó, các phần mềm hỗ trợ trở thành yếu tố thiết yếu trong đời sống hàng ngày, dẫn đến sự phát triển của những sản phẩm phần mềm ngày càng lớn và phức tạp.
Nhiều sản phẩm phần mềm hiện nay không đáp ứng kịp thời các nhu cầu của người dùng, dẫn đến tỷ lệ thất bại cao trong quá trình sản xuất Hầu hết các sản phẩm phần mềm đều gặp phải tình trạng không đạt yêu cầu.
+ Không đáp ứng kịp các nhu cầu của người sử dụng + Vượt quá chi phí và thời hạn
+ Tiềm ẩn nhiều lỗi trong các sản phẳm phần mềm + Không đảm bảo chất lượng
Các dữ liệu quan sát được cho thấy:
- Cứ có 6 đề án được triển khai thì có 2 đề án bị thất bại
- Trung bình thời gian thực hiện thực tế bị kéo dài 50% (cá biệt lên tới 200 – 300%)
- Các đề án lớn dễ bị thất bại
- 3/4 các hệ thống lớn có lỗi khi thực thi
- Quá trình phân tích yêu cầu (5% công sức): để lại 55% lỗi, có 18% phát hiện được
- Quá trình thiết kế (25% công sức):để lại 30% lỗi, có 10% phát hiện được
Quá trình mã hóa, kiểm tra và bảo trì phần mềm thường để lại 15% lỗi, trong đó 72% lỗi được phát hiện Chi phí phát triển phần mềm chiếm tỷ lệ lớn trong tổng chi phí trung bình (GNP) của các hoạt động kinh tế khác, nhưng hiệu quả ứng dụng của phần mềm lại không cao Theo thống kê của Mỹ về các dự án phần mềm của Bộ Quốc phòng vào năm 1970, điều này càng cho thấy sự cần thiết phải cải thiện quy trình phát triển phần mềm để tăng hiệu quả và giảm thiểu lỗi.
Tại Hội nghị toàn cầu về khủng hoảng phần mềm năm 1968, các nguyên nhân gây ra khủng hoảng phần mềm đã được xác định, trong đó nguyên nhân chính là việc sản xuất phần mềm vẫn dựa vào phương pháp thủ công Phương pháp này không phù hợp cho việc phát triển các sản phẩm phần mềm lớn và phức tạp.
- Làm theo cảm tính: Dựa chủ yếu vào kinh nghiệm, không có phương pháp đủ tốt
- Phương tiện thô sơ: Chủ yếu là ngôn ngữ lập trình
Công nghệ phần mềm được phát triển để cải thiện quy trình sản xuất phần mềm, trở thành một ngành nghiên cứu thiết yếu trong lĩnh vực CNTT Để khắc phục các vấn đề trong phát triển phần mềm, cần áp dụng lý thuyết, kỹ thuật, phương pháp và công cụ hiệu quả nhằm điều khiển tiến trình phát triển hệ thống Công nghệ phần mềm nghiên cứu mọi khía cạnh liên quan đến việc sản xuất các sản phẩm phần mềm chuyên nghiệp, với mục tiêu sản xuất phần mềm độc lập, đúng hạn, phù hợp kinh phí và đáp ứng đầy đủ yêu cầu của người sử dụng.
1.2.2 Các định nghĩa về Kỹ nghệ phần mềm
Sau đây làm một số định nghĩa về kỹ nghệ/công nghệ phần mềm
Dự án phần mềm của US defence
Paid for but not received Delivered but not used Abandoned or reworked
Theo Bauer (1969) định nghĩa rằng kỹ thuật phần mềm (SE) là quá trình thiết lập và áp dụng các nguyên tắc công nghệ chính xác nhằm phát triển phần mềm một cách kinh tế, đồng thời đảm bảo tính tin cậy và hiệu suất làm việc hiệu quả trên các hệ thống máy tính.
Theo Sommerville [1997]: SE là nguyên lý kỹ nghệ liên quan đến tất cả các mặt lý thuyết, phương pháp và công cụ của phần mềm
Theo Pressman [1995]: SE là bộ môn tích hợp cả quy trình, các phương pháp và các công cụ để phát triển phần mềm máy tính
Kỹ nghệ phần mềm là một quá trình tích hợp các quy trình, phương pháp và công cụ nhằm phát triển phần mềm hiệu quả trong các giới hạn đã được xác định.
Công nghệ phần mềm được tổ chức theo mô hình ba tầng, trong đó mỗi tầng đều tập trung vào việc nâng cao chất lượng, tối ưu chi phí và rút ngắn thời gian phát triển phần mềm.
Công cụ Phương pháp Quy trình
1 Các thủ tục (procedures: Đề cập đến các quy trinh phát triển và quản lý phần mềm như:
Xác định trình tự các công việc cần thực hiện
Xác định các tài liệu, sản phẩm cần bàn giao và cách thức thực hiện
Xác định các mốc thời gian (millestones) và sản phẩm đưa ra (theo các chuẩn?) có
20 thể ở mức chung cho nhiều dự án hoặc cho một dự án cụ thể
Phương pháp đề cập đến cách làm cụ thể để xây dựng phần mềm Mỗi công đoạn phát triển phần mềm có một phương pháp riêng:
Phân tích: xác định và đặc tả yêu cầu;
Thiết kế: đặc tả kiến trúc, giao diện, dữ liệu và các chức năng;
Lập trình: Theo phương pháp có cấu trúc, hoặc hướng đối tượng,
Kiểm thử: Hộp đen, hộp trắng, áp lực, hồi quy, luồn sợi,
Quản lý dự án: PERT, GAINT, COMOCO,
Nội dung của một phương pháp bao gồm:
Các phần tử của mô hình: Mô tả khái niệm ;
Các ký pháp: Đặc tả phần tử;
Các quy tắc: Liên kết các phần tử;
Quy trình xây dựng: Trình tự tạo ra một mô hình;
Lời khuyên, cách dùng: Khi nào nên dùng, và dùng phương pháp như thế nào
Ví dụ: Xét mô hình (phương pháp) luồng dữ liệu
Khái niệm Ký pháp Quy tắc Quy trình
Tác nhân Tiến trình i là duy nhất
Các luồng vào 1 tiến trình phải # các luồng ra;
Không có các luồng dữ liệu sau: o Kho -> kho; o Kho -> tác nhân;
Vẽ luồng dữ liệu mức 0 từ mô hình nghiệp vụ;
Vẽ biểu đồ mức i: từ mỗi tiến trình mức i-1 chưa là cơ sở
Luồng dữ liệu Tên luồng dữ liệu
Tên tác nhân i Tên tiến trình
Ví dụ: Biểu đồ luồng dữ liệu mức 0 cho bài toán trông và gửi xe:
CASE là các phần mềm hỗ trợ tự động hoặc bán tự động cho các phương pháp phát triển phần mềm, cung cấp công cụ cho các giai đoạn khác nhau trong quy trình phát triển Những công cụ này bao gồm các ngôn ngữ lập trình, giúp tối ưu hóa hiệu quả và chất lượng sản phẩm phần mềm.
Hỗ trợ phân tích, thiết kế: Rwin, Modeler, Oracle Designer, Rational Rose,
Trợ giúp lập trình: C ompiler, debugger
Trợ giúp quản lý: project management
Kỹ nghệ phần mềm không chỉ bao gồm công nghệ và công cụ phần mềm mà còn tập trung vào việc phối hợp các phương pháp và quy trình nghiêm ngặt để tạo ra sản phẩm chất lượng Nhiệm vụ chính của kỹ nghệ phần mềm là kiểm soát độ phức tạp trong quá trình phát triển phần mềm.
1.2.3 Quá trình phát triển của Kỹ nghệ phần mềm
* Đề xướng, hình thành năm 1968
Các kết quả nghiên cứu nổi bật đạt được những năm 70s là phương pháp lập trình có cấu trúc:
Khái niệm về tính mô đun
Khái niệm về sơ đồ khối, lập trình top – down
Lập trình có cấu trúc (Dijkstra),
Phương pháp chia mô đun cho chương trình
Trừu tượng hóa dữ liệu (Liskov)
* Tăng trưởng (nửa đầu những năm 1980)
Giai đoạn này xuất hiện các phương pháp phát triển hệ thống:
Công nghệ CSDL (mô hình quan hệ)
Phân tích, thiết kế hướng cấu trúc (các biểu đồ luồng, ),
Các bộ công cụ phát triển như: Công cụ trợ giúp phân tích, thiết kế Bộ khởi tạo chương trình, kiểm thử các ngôn ngữ bậc cao
Bắt đầu quan tâm đến hoạt động quản lý Đề cập đến các độ đo phần mềm, quản lý theo thống kê
* Phát triển (từ giữa những năm 1980 đến nay)
Hoàn thiện công nghệ cấu trúc, ra đời công nghệ đối tượng:
Nhiều mô hình hướng cấu trúc được triển khai và chuẩn hóa,
Các CASE được bổ sung hoàn thiện, đạt mức tự động hóa cao
Ngôn ngữ thế hệ thứ 4 ra đời như LIPS, PROLOG,
Công nghệ hướng đối tượng bắt đầu phát triển như quy trình RUP, UML Kho dữ liệu, CSDL hướng đối tượng, đa phương tiện,
Các công cụ đầy đủ xuất hiện như ROSE, JIBUILDER,
Sử dụng lại chiếm vị trí quan trọng trong phát triển phần mềm Sử dụng lại thành phần, mẫu, Framework,
Công nghệ Web phát triển: Các Web services,
Phát triển các mô hình quản lý là yếu tố quan trọng trong việc nâng cao hiệu quả tổ chức, với các chuẩn hóa như CMM và ISO 9000-03 được công nhận rộng rãi Nhiều mô hình tổ chức phần mềm đã được đề xuất để cải thiện quy trình làm việc Bên cạnh đó, việc áp dụng các công cụ hỗ trợ quản lý dự án cũng giúp hoàn thiện hoạt động quản lý, từ đó nâng cao chất lượng sản phẩm và dịch vụ.
FQAs về Công nghệ phần mềm
Công nghệ là việc áp dụng công cụ và kỹ thuật để giải quyết vấn đề trong công việc Tất cả các công nghệ đều liên quan đến quy trình sản xuất sản phẩm, xác định ai thực hiện (Who), làm gì (What), khi nào (When) và như thế nào (How) để đạt được mục tiêu mong muốn.
1.3.2 Sự khác biệt giữa công nghệ phần mềm và khoa học máy tính là gì?
Khoa học máy tính nghiên cứu các lý thuyết và vấn đề cơ bản liên quan đến máy tính, trong khi công nghệ phần mềm tập trung vào thực tiễn phát triển và cung cấp phần mềm hữu ích.
Khi phần mềm phát triển mạnh mẽ, lý thuyết khoa học máy tính không còn đủ để đáp ứng nhu cầu của ngành công nghiệp phần mềm.
Khoa học MT Kỹ nghệ phần mềm
1.3.3 Phân biệt các lĩnh vực tính toán liên quan đến kỹ nghệ phần mềm
Các lĩnh vực tính toán liên quan đến Kỹ nghệ phần mềm được biểu diễn như hình [computing curricula 11/2004 -ACM, AIS, IEEE]
Tổ chức IS và các HTTT
Các công nghệ ứng dụng
Hạ tầng và các hệ thống
Lý thuyết, Ứng dụng, Đổi mới triển khai
Mỗi lĩnh vực tính toán được giới hạn bằng một vùng biên có mầu sắc như sau:
CS: Khoa học máy tính
IS: Hệ thống thông tin
IT: Công nghệ thông tin
SE: Kỹ nghệ phần mềm
Kỹ nghệ phần mềm đóng vai trò quan trọng và phức tạp trong lĩnh vực công nghệ, như được thể hiện rõ trong sơ đồ biểu diễn.
1.3.4 Kỹ nghệ hệ thống là gì?
Kỹ nghệ hệ thống là toàn bộ công việc phát triển hệ thống dựa trên máy tính (computer based system):
Phần cứng Kỹ nghệ Kỹ nghệ
Phần mềm hệ thống phần mềm
Kỹ nghệ hệ thống bao gồm các hoạt động:
Các đặc tính nổi trội của hệ thống dựa trên máy tính:
Thuộc tính chức năng: Điều khiển một hệ
Thuộc tính phi chức năng: độ tin cậy, an toàn
Mà chúng quyết định đến toàn bộ hệ thông, mà từng bộ phận riêng lẻ không thể có được
Kỹ nghệ hệ thống tập trung vào việc áp dụng các nguyên lý tích hợp để giảm thiểu chi phí tái thiết lập toàn bộ hệ thống Quy trình này được minh họa qua hình ảnh
Xác định Loại bỏ hệ yêu cầu thống thiết kế Các hệ hệ thống cứng Tiến hóa hệ thống
Phát triển Cài đặt hệ con hệ thống
1.3.6 Vòng đời phát triển của một hệ thống phần mềm
Vòng đời phát triển của hệ thống phần mềm bao gồm các giai đoạn từ khi được đặt hàng, phát triển, sử dụng cho đến khi loại bỏ Quá trình này được chia thành nhiều giai đoạn chính, phản ánh sự tiến triển và thay đổi của phần mềm qua thời gian.
Vận hành, bảo trì và lặp lại
Nội dung và thứ tự các giai đoạn trong quy trình phát triển sản phẩm và dự án có sự khác biệt tùy thuộc vào từng sản phẩm cụ thể Số lượng pha và bước trong quy trình này có thể được phân chia linh hoạt, dao động từ 3 đến 20 bước, tùy theo mô hình áp dụng.
Xác định yêu cầu Triển khai Kiểm thử
Các pha chính của vòng đời phát triển phần mềm
Các giai đoạn phát triển phần mềm chung nhất gồm:
3.Tiến hóa (vận hành, bảo trì)
1.3.7 Tiến trình phần mềm là gì?
Tiến trình phần mềm là chuỗi hoạt động có cấu trúc nhằm phát triển và tiến hóa phần mềm, bao gồm các câu hỏi quan trọng như: Làm gì, khi nào, ai thực hiện, cách thức thực hiện, công cụ nào sử dụng, địa điểm thực hiện, kết quả đạt được và tiêu chí đánh giá Đặc trưng của tiến trình phần mềm giúp định hình quy trình phát triển và đảm bảo chất lượng sản phẩm cuối cùng.
Gắn với mỗi dự án
Có cấu trúc xác định: công việc gì, trình tự, công cụ, phương pháp
Sản phẩm cuối cùng là phần mềm bàn giao
Các hoạt động chính của mọi tiến trình phần mềm:
Xác định yêu cầu: Xác định rõ các yêu cầu sản phẩm
Phát triển: Tạo ra sản phẩm
Thẩm định: Phần mềm có đáp ứng được các yêu cầu không
Tiến hóa phần mềm: Thay đổi phần mềm nhằm đáp ứng các yêu cầu thay đổi (người dùng, môi trường)
File.exe Vấn đề, Xác định Phát Thẩm Tiến
Mong đợi yêu cầu triển định hóa Phần mềm a Xác định yêu cầu (Requirements)
Khó khăn về hệ thống thực, mong đợi về hệ phần mềm Đặc tả yêu cầu phần mềm
Khách hàng Đội phát triển
28 b Phát triển (Development) Đặc tả yêu cầu file.exe
File.com Chức năng hệ thống,
Ràng buộc hệ thống Hệ thống pm Đội phát triển vận hành đúng Xác định yêu cầu c Thẩm định phần mềm (Validation)
Hệ thống pm Hệ thống phần vận hành đúng mềm đáp ứng yêu cầu
Phát triển Người dùng d Tiến hóa phần mềm (Evolution)
Môi trường thay đổi file.com
File.exe file.com File.com
Hệ thống phần phần mềm mềm đáp ứng được tiến yêu cầu Đội phát triển hóa
Các loại hệ thống khác nhau đòi hỏi quy trình phát triển riêng biệt Chẳng hạn, hệ thống thời gian thực cần hoàn thành đặc tả trước khi bắt đầu xây dựng, trong khi hệ thống thương mại điện tử cho phép thực hiện đồng thời cả hai giai đoạn Do đó, việc lựa chọn quy trình phát triển hệ thống phù hợp là rất quan trọng cho sự thành công của dự án phần mềm.
1.3.8 Mô hình quy trình phần mềm là gì?
Mô hình quy trình phát triển phần mềm là một các biểu diễn trừu tượng tiến trình phần mềm theo cách nhìn cụ thể
Giai đoạn 1 Giai đoạn 2 Giai đoạn 3
1.3.9 Chi phí của kỹ nghệ phần mềm là gì?
Chi phí kỹ nghệ phần mềm là các khoản chi liên quan đến toàn bộ sự phát triển phần mềm Chi phí phụ thuộc vào:
Loại hệ thống (là đơn giản hay phức tạp);
Yêu cầu đặt ra (nhiều, ít, cao, thấp);
Mức độ hoàn thiện (hiệu năng, độ tin cậy, an toàn, );
Năng lực của tổ chức (nhân lực, công cụ, công nghệ, kỹ năng có được, );
Loại tiến trình sử dụng
Chi phí của kỹ nghệ phần mềm được thống kê như sau:
Việc phân bổ chi phí hệ thống chịu ảnh hưởng từ mô hình phát triển được áp dụng Dưới đây là bảng so sánh chi phí của ba mô hình phát triển phổ biến nhất.
Với mô hình thác nước, chi phí của các pha đặc tả, thiết kế, cài đặt, tích hợp và kiểm thử được xác định một cách riêng rẽ
Mô hình xoắn ốc không cho phép phân biệt rõ ràng chi phí cho từng giai đoạn trong quy trình phát triển Chi phí đặc tả giảm do đây là đặc tả ở cấp độ cao Trong mỗi vòng lặp, các giai đoạn trong quy trình xây dựng hệ thống được thực hiện lại để đáp ứng các yêu cầu khác nhau Sau khi hoàn tất tất cả các vòng lặp, cần có chi phí kiểm thử toàn bộ hệ thống.
Với mô hình công nghệ phần mềm hướng thành phần, chi phí phụ thuộc nhiều vào việc tích hợp và kiểm thử hệ thống
Ngoài chi phí xây dựng ban đầu, một phần lớn ngân sách cần được dành cho việc nâng cấp và cải tiến phần mềm sau khi đưa vào sử dụng Chi phí cho việc cải tiến phần mềm sẽ khác nhau tùy thuộc vào từng loại phần mềm cụ thể.
Ngôn ngữ Dòng lệnh/chức năng
Kích cỡ phần mềm có ảnh hưởng lớn đến chi phí phát triển, thường được đo bằng số dòng lệnh của chương trình Kích cỡ này phụ thuộc vào bài toán cần giải quyết, kết quả thiết kế và ngôn ngữ lập trình được lựa chọn Trình độ của lập trình viên cũng đóng vai trò quan trọng trong việc xác định kích cỡ phần mềm Với cùng một bản thiết kế, việc sử dụng các ngôn ngữ lập trình khác nhau có thể dẫn đến chương trình có kích cỡ khác nhau.
Mỗi ngôn ngữ lập trình có một năng lực thể hiện nhất định Chọn ngôn ngữ lập trình tốt, phù hợp sẽ góp phần giảm kích cỡ chương trình
1.3.10 Phần mềm kỹ nghệ tốt là gì
Phần mềm kỹ nghệ tốt được xét theo quan điểm nhà phát triển cần có các thuộc tính sau:
Một số tiêu chí khác a Tính bảo trì được
“Phần mềm luôn có yêu cầu sửa đổi” Để sửa đổi (bảo trì) được, phần mềm cần:
Kiến trúc tốt là yếu tố quan trọng, với tính kết dính chặt chẽ và ghép nối lỏng lẻo, giúp dễ dàng trong việc bảo trì Điều này tạo thuận lợi cho việc đọc, sửa chữa và phát triển hệ thống, đồng thời đảm bảo rằng các sửa đổi chỉ ảnh hưởng cục bộ, không làm gián đoạn toàn bộ cấu trúc.
Cài đặt bằng ngôn ngữ cấp cao Điều này làm cho chương trình dễ đọc, dễ hiểu viết mã nhanh
Có tài liệu đầy đủ và tốt Điều này giúp nhà phát triển dễ theo dõi, dễ hiểu, có cơ sở sửa chữa,
Phần mềm có tuổi thọ cao không chỉ phục vụ nhiều người dùng hơn mà còn giúp giảm chi phí bảo trì, từ đó nâng cao hiệu quả hoạt động Đáng tin cậy là một yếu tố quan trọng, đảm bảo rằng phần mềm luôn hoạt động ổn định và đáp ứng nhu cầu của người sử dụng.
Phần mềm được gọi là đáng tin cậy nếu:
Nó có ít khiếm khuyết về: o Lỗi lập trình, o Lỗi phân tích, o Lỗi thiết kế sai, o Thiếu chức năng, o Hoạt động không hiệu quả
Các trách nhiệm đạo đức và nghề nghiệp ([6])
Kỹ sư công nghệ phần mềm không chỉ cần kỹ năng kỹ thuật mà còn phải tuân thủ các quy tắc đạo đức và trách nhiệm nghề nghiệp để trở thành chuyên gia trong lĩnh vực của họ Sự trung thực và tuân thủ các quy định là yếu tố quan trọng giúp họ phát triển sự nghiệp bền vững.
1.4.1 Các vấn đề về trách nhiệm nghề nghiệp
Các kỹ sư phần mềm cần:
Tôn trọng sự bí mật và cẩn mật của thông tin cá nhân từ người lao động và khách hàng là điều cần thiết, bất kể có hay không hợp đồng bảo mật được ký kết.
Năng lực: Không được xuyên tạc năng lực của mình, phải biết chấp nhận những công việc nào là vượt quá khả năng của mình
Các quyền sở hữu trí tuệ là rất quan trọng, vì vậy cần nắm vững các luật hiện hành về sở hữu trí tuệ, bao gồm bằng sáng chế và bản quyền Doanh nghiệp cần đảm bảo bảo vệ quyền sở hữu trí tuệ của cả khách hàng và nhân viên.
Kỹ sư phần mềm cần tôn trọng quyền riêng tư và tài sản của người khác, không được lạm dụng máy tính của người khác Việc sử dụng sai mục đích các kỹ năng nghề nghiệp có thể dẫn đến hậu quả nghiêm trọng và vi phạm đạo đức nghề nghiệp.
35 máy tính có thể bị giới hạn từ những hành động không đáng kể như chơi game trên máy tính của người dùng đến những hành động nghiêm trọng như phát tán virus trên máy tính của người khác.
1.4.2 Tập các chuẩn mực đạo đức
ACM và IEEE đã phát triển một bộ tiêu chuẩn đạo đức dành cho các kỹ sư công nghệ phần mềm, bao gồm 8 chuẩn mực được trình bày dưới hai dạng: ngắn gọn và chi tiết.
Bạn đọc có thể tham khảo tập chuẩn mực đạo đức này ở dạng dài và ngắn trong cuốn tài liệu
Nhân tố con người và sự phân hóa nghề nghiệp trong CNPM
1.5.1 Nhân tố con người trong ngành công nghệ 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-ta gọi là nhóm phát triển phần mềm Mỗi thành viên trong nhóm không được vị kỷ, thành quả lao động của nhóm được xen như là thành quả chung và phải tuyệt đối trung thành với nhóm
Mỗi thành viên trong nhóm phát triển phần mềm cần trang bị những kiến thức cần thiết phù hợp với vai trò của mình Đặc thù nghề nghiệp yêu cầu kỹ sư phần mềm sở hữu những kỹ năng cơ bản để đảm bảo hiệu quả trong công việc.
- Xác định, đánh giá, cài đặt, lựa chọn một phương pháp luận thích hợp và các công cụ CASE
- Biết cách sử dụng các mẫu phần mềm (prototyping)
- Biết cách lựa chọn ngôn ngữ, phần cứng, phần mềm
- Quản lý cấu hình, lập sơ đồ và kiểm soát việc phát triển của các tiến trình
- Lựa chọn ngôn ngữ máy tính và phát triển chương trình máy tính
Đánh giá và quyết định thời điểm loại bỏ hoặc nâng cấp ứng dụng là rất quan trọng trong quá trình phát triển phần mềm Việc này không chỉ giúp cải thiện hiệu suất mà còn đảm bảo ứng dụng luôn đáp ứng nhu cầu sử dụng Bên cạnh đó, việc bảo trì và thay thế phần mềm cần được thực hiện định kỳ để tối ưu hóa hoạt động phát triển.
Quá trình phát triển phần mềm bắt đầu từ quyết định xây dựng sản phẩm và kết thúc khi sản phẩm được bàn giao cho người dùng Hoạt động sử dụng liên quan đến việc xử lý và vận hành sản phẩm hàng ngày Trong khi đó, bảo trì là những thay đổi logic để sửa lỗi, cập nhật công việc hoặc cải thiện hiệu suất phần mềm Cuối cùng, hoạt động loại bỏ - thay thế là việc thay thế các ứng dụng cũ bằng những ứng dụng mới hơn.
Ngoài ra các kỹ sư CNPM phải nắm vững các trách nhiệm về đạo đức và nghề nghiệp
1.5.2 Phân loại nghề nghiệp trong CNPM
Yêu cầu phát triển Công nghệ Thông tin (CNTT) tại Việt Nam hiện nay đòi hỏi người lao động trong mọi ngành kinh tế phải sử dụng hiệu quả CNTT trong công việc Đồng thời, cần có 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 nguồn nhân lực CNTT là rất 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 ra 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 nhiều tiêu chí khác nhau, trong đó mức độ kinh nghiệm là một yếu tố quan trọng Các công việc có thể được chia thành nhiều cấp độ, từ những vị trí dành cho người mới bắt đầu đến những vị trí yêu cầu kinh nghiệm cao.
Nhân viên cán bộ ở mức độ sơ đẳng nhất được giám sát chặt chẽ và thực hiện các công việc đúng chuyên môn, đây là cấp độ tối thiểu trong hệ thống Thời gian cần thiết để hoàn thành các công việc này thường khoảng hai năm.
Cán bộ có trình độ trung cấp thường làm việc độc lập và đảm nhận trực tiếp một số hoạt động nhất định Những người ở mức độ này thường có từ 2 đến 4 năm kinh nghiệm, với thời gian làm việc trung bình dao động từ 2 đến 5 năm.
Cán bộ ở mức độ này cần có trình độ chuyên môn và kinh nghiệm kỹ thuật nhất định để đào tạo và huấn luyện người khác Những cán bộ này thường có từ 5 đến 7 năm kinh nghiệm trong lĩnh vực của mình.
3 năm để học các kỹ năng
Nhà lãnh đạo thường làm việc độc lập và đảm nhiệm mọi nhiệm vụ giám sát Họ được xem như những chuyên gia phụ trách các dự án, sở hữu kinh nghiệm và kỹ năng từ trình độ đại học Những nhà lãnh đạo này có khát khao quản lý và phát triển trong các vị trí của mình.
Chuyên gia kỹ thuật là những người sở hữu kinh nghiệm phong phú trong nhiều lĩnh vực như phát triển ứng dụng, mạng, cơ sở dữ liệu và hệ điều hành Họ thường làm việc trong các vị trí hệ thống thông tin với kinh nghiệm từ 10 năm trở lên và có khả năng duy trì sự nghiệp lâu dài ở cấp độ này.
Công việc quản lý độc lập thể hiện giá trị cá nhân của mỗi nhà quản lý, những người có thể không phải là chuyên gia kỹ thuật nhưng vẫn có kinh nghiệm và trách nhiệm trong quản lý Đối với các nhà quản lý kỹ thuật, các đặc điểm công việc bao gồm lập kế hoạch mục tiêu, giám sát, quản lý nhân sự và hoạt động giao tiếp trong quản lý dự án Bên cạnh đó, các loại hình công việc được phân loại bao gồm phát triển ứng dụng, hỗ trợ ứng dụng, chuyên ngành kỹ thuật và nhân viên, cùng với các vấn đề khác liên quan.
Lập trình viên chuyển đổi các đồ án kỹ thuật thành mã nguồn và thực hiện kiểm tra đơn vị Họ có thể đảm nhận vai trò phát triển ứng dụng hoặc bảo trì, luân phiên giữa hai trách nhiệm này.
Kỹ sư phần mềm đảm nhận nhiều vai trò, từ phân tích, thiết kế đến lập trình, đồng thời có thể lãnh đạo hoặc quản lý dự án Các kỹ sư có trình độ đại học tham gia vào việc lập kế hoạch và nghiên cứu khả thi Kỹ sư quản lý 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ư cấp cao tập trung vào lập kế hoạch, nghiên cứu khả thi, phân tích và thiết kế.
Kỹ sư tri thức (KE) là những chuyên gia có khả năng suy luận và xây dựng các mô hình ngữ nghĩa từ kiến thức của các chuyên gia, nhằm phát triển hệ thống chuyên gia và trí tuệ nhân tạo Họ tương tự như kỹ sư phần mềm nhưng được đào tạo chuyên sâu để 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 kỹ năng quan sát, phỏng vấn sâu sắc và khả năng trừu tượng hóa cao.
TIẾN TRÌNH PHẦN MỀM
Giới thiệu
Tiến trình phần mềm là quy trình tạo ra sản phẩm phần mềm, bắt đầu từ khái niệm cho đến khi sản phẩm được nghỉ hưu Trong quá trình này, sản phẩm trải qua nhiều giai đoạn, bao gồm phân tích yêu cầu, thiết kế, cài đặt, tích hợp, bảo trì sau phát hành và cuối cùng là nghỉ hưu Tiến trình phần mềm cũng bao gồm các công cụ và kỹ thuật cần thiết để phát triển và duy trì phần mềm hiệu quả.
Một sản phẩm phần mềm mới có thể được tạo ra thông qua việc mở rộng và điều chỉnh các hệ thống hiện có, cũng như cấu hình và tích hợp các thành phần phần mềm hoặc hệ thống đã có sẵn trên thị trường.
Các tiến trình phần mềm là phức tạp và cần dựa vào quyết định của con người, do đó, nỗ lực tự động hóa chúng chỉ đạt được thành công hạn chế Mặc dù các công cụ kỹ nghệ phần mềm hỗ trợ bởi máy tính (CASE) có thể giúp cải thiện một số hoạt động, nhưng khả năng tự động hóa hoàn toàn thiết kế sáng tạo vẫn chưa khả thi trong vài năm tới.
Một lý do hạn chế tính hiệu lực của các công cụ CASE là sự đa dạng của các tiến trình phần mềm, vì không có tiến trình lý tưởng nào Nhiều tổ chức đã phát triển cách tiếp cận riêng để phát triển phần mềm, nhằm khai thác khả năng của con người và đặc tính của hệ thống đang phát triển Đối với các hệ thống then chốt, tiến trình phát triển hướng cấu trúc là cần thiết, trong khi các hệ thống kinh doanh với yêu cầu thay đổi nhanh chóng có thể hiệu quả hơn với tiến trình nhanh và linh hoạt Mặc dù có nhiều tiến trình phần mềm, nhưng vẫn tồn tại một số hoạt động cơ bản chung cho tất cả các tiến trình này.
1 Phân tích và đăc tả yêu cầu phần mềm: Chức năng của phần mềm và các ràng buộc trên sự vận hành của nó phải được định nghĩa
2 Thiết kế và cài đặt phần mềm Phần mềm được sản xuất phải thỏa mãn bản đặc tả nó
3 Thẩm định phần mềm Phần mềm phải được thẩm định để đảm bảo rằng nó làm những gì mà khách hàng mong muốn
4 Bảo trì và cải tiến phần mềm Phần mềm phải được sửa chữa và tiến hóa để thỏa mãn các nhu cầu thay đổi của khách hàng
Chúng ta thảo luận các hoạt động trên một cách ngắn gọn trong chương này và thảo luận chúng chi tiết hơn trong các chương sau của môn học
Mặc dù không có tiến trình phần mềm hoàn hảo, vẫn có cơ hội cải tiến quy trình trong nhiều tổ chức Nhiều quy trình hiện tại có thể sử dụng các kỹ thuật lỗi thời hoặc không mang lại lợi ích tối ưu trong ngành công nghiệp phần mềm Thực tế cho thấy, nhiều tổ chức vẫn chưa nhận thức được những lợi ích của các phương pháp kỹ nghệ phần mềm trong phát triển sản phẩm của họ.
Chuẩn hóa tiến trình phần mềm giúp cải thiện hiệu quả bằng cách giảm sự đa dạng trong các tiến trình cắt chéo trong tổ chức Điều này không chỉ nâng cao giao tiếp mà còn giảm thời gian đào tạo, đồng thời tạo điều kiện cho các tiến trình tự động hoạt động hiệu quả hơn Hơn nữa, chuẩn hóa là bước quan trọng đầu tiên để áp dụng các phương pháp và kỹ thuật mới trong kỹ nghệ phần mềm, cũng như thực hành tốt hơn trong lĩnh vực này Chúng tôi sẽ thảo luận chi tiết hơn về vấn đề này trong các chương sau.
Các loại mô hình tiến trình phần mềm
Mô hình tiến trình phần mềm là một biểu diễn trừu tượng và trực quan, cung cấp thông tin thành phần về một tiến trình cụ thể Mỗi mô hình chỉ thể hiện một khía cạnh đặc biệt của tiến trình, do đó, trong phần này, chúng tôi sẽ giới thiệu một số mô hình tiến trình phổ biến, thường được gọi là biểu đồ tiến trình Chúng tôi sẽ phân tích các mô hình này từ góc độ kiến trúc, tập trung vào framework của tiến trình thay vì đi vào chi tiết các hoạt động cụ thể.
Các mô hình phổ biến không chỉ là những mô tả rõ ràng về tiến trình phần mềm, mà còn là các trừu tượng giúp giải thích các phương pháp phát triển phần mềm khác nhau Chúng có thể được coi là các framework tiến trình, có khả năng mở rộng và điều chỉnh để phù hợp với các tiến trình kỹ nghệ phần mềm cụ thể Trong chương này, chúng ta sẽ tập trung vào năm loại mô hình tiến trình phần mềm tiêu biểu.
Các mô hình phát triển tiến hóa,
Các mô hình phát triển hình thức,
Mô hình phát triển dựa trên sử dụng lại và các mô hình khác
Mỗi loại mô hình này bao gồm một số mô hình tiêu biểu
2.2.1 Mô hình thác nước (Waterfall model)
Mô hình thác nước, còn được gọi là mô hình kinh điển hay mô hình tuyến tính, là mô hình đầu tiên được công bố trong quy trình phát triển phần mềm Mô hình này chia quá trình xây dựng sản phẩm thành nhiều giai đoạn tách biệt, trong đó mỗi giai đoạn phải hoàn tất trước khi chuyển sang giai đoạn tiếp theo.
Trong mô hình thác nước, các hoạt động phát triển diễn ra theo trình tự tuần tự, yêu cầu hoàn thành từng giai đoạn trước khi chuyển sang giai đoạn tiếp theo.
1 Nghiên cứu lập kế hoạch dự án
Hoạt động này nhằm đánh giá tính khả thi của dự án phần mềm sắp triển khai Kết quả của hoạt động này là báo cáo khả thi, xác định xem dự án có khả thi hay không Nếu dự án được xác nhận khả thi, báo cáo sẽ được kèm theo kế hoạch phát triển dự án.
2 Phân tích yêu cầu và đặc tả
Các dịch vụ trong hệ thống, cùng với các ràng buộc và mục tiêu, được xác định thông qua việc thảo luận với người dùng Những thông tin này sau đó được định nghĩa chi tiết và trở thành tài liệu đặc tả yêu cầu của hệ thống.
3 Thiết kế hệ thống và phần mềm
Nghiên cứu, lập kế hoạch DA
Phân tích yêu cầu và đặc tả
Thiết kế hệ thống & phần mềm
Vận hành và bảo trì
Mã hóa và kiểm thử đơn vị
Tích hợp và kiểm thử hệ thống
Phân chia các yêu cầu cho hệ thống phần mềm và phần cứng là bước quan trọng trong quy trình phát triển Việc thiết lập kiến trúc tổng thể của hệ thống giúp đảm bảo tính đồng bộ và hiệu quả Thiết kế phần mềm bao gồm việc xác định và mô tả các hệ thống phần mềm trừu tượng cơ bản cùng với mối quan hệ giữa chúng, từ đó tạo nền tảng vững chắc cho sự phát triển và bảo trì hệ thống.
4 Cài đặt và kiểm thử đơn vị
Chuyển đổi thiết kế phần mềm thành một tập hợp các chương trình hoặc đơn vị chương trình là bước quan trọng trong phát triển phần mềm Kiểm thử đơn vị giúp phát hiện lỗi và xác nhận rằng các chương trình đã được cài đặt đúng theo đặc tả đã định.
5 Tích hợp và kiểm thử hệ thống
Các đơn vị chương trình hoặc các chương trình riêng lẻ được tích hợp và kiểm tra như một hệ thống hoàn chỉnh nhằm đảm bảo rằng tất cả các yêu cầu phần mềm đã được đáp ứng Sau khi quá trình kiểm thử hệ thống hoàn tất, sản phẩm sẽ được phát hành đến tay khách hàng.
6 Vận hành và bảo trì Đây là giai đoạn lâu nhất trong chu kỳ sống của phần mềm, hệ thống được đưa vào sử dụng trong thực tế Việc bảo trì gồm sửa chữa các lỗi được phát hiện, cải tiến bản cài đặt các đơn vị hệ thống, nâng cấp các dịch vụ hệ thống khi có các yêu cầu mới
Mỗi giai đoạn trong quy trình phát triển phần mềm sẽ tạo ra một hoặc nhiều tài liệu được phê duyệt, và giai đoạn tiếp theo chỉ bắt đầu khi giai đoạn trước hoàn tất Tuy nhiên, trong thực tế, các giai đoạn này thường chồng chéo lên nhau, khiến cho quá trình phát triển phần mềm không chỉ đơn thuần là một mô hình tuyến tính mà còn bao gồm nhiều lần lặp của các hoạt động phát triển.
Các đặc điểm của mô hình thác nước:
Trong quá trình thực hiện dự án lớn, việc tách biệt giữa các pha và tiến hành tuần tự gặp nhiều khó khăn Điều này không chỉ làm cho việc tuân thủ thứ tự trở nên khó khăn, mà còn dẫn đến việc phải quay lại các bước trước đó Hơn nữa, sự thay đổi thường xuyên trong yêu cầu của khách hàng cũng khiến cho việc đáp ứng trở nên phức tạp và tốn thời gian chờ đợi.
Chậm có phiên bản thực hiện được: o Đòi hỏi khách hàng phải kiên nhẫn o Sai sót phát hiện muộn có thể là thảm họa
Đặc tả kỹ, phân công chuyên trách, hướng tài liệu o Tài liệu quá nhiều, tốn sức người, thời gian dài
Mô hình thác nước là một trong những mô hình phát triển phần mềm đầu tiên và phổ biến, đặc biệt phù hợp cho các hệ thống có yêu cầu rõ ràng và ổn định Mô hình này thường được áp dụng cho các phần mềm lớn và phức tạp, giúp quá trình bảo trì diễn ra thuận lợi hơn.
1.1.2 Các mô hình phát triển tiến hóa
Lược đồ chung nhất của loại mô hình này được biểu diễn như hình vẽ
46 tl e s ri o Đặc tả Phiên bản khời đầu Đặc tả khái quát Phát triển Phiên bản trung gian
Thẩm định Phiên bản cuối cùng
Phát triển ban đầu: Làm việc với khách hàng, đặc tả khái quát hệ thống Thường bắt đầu với những hiểu biết chưa đầy đủ về hệ thống
Thực hiện phát triển băng cách làm mẫu: Mục tiêu của hoạt động này là để hiểu hệ thống Bản mẫu đầu tiên có thể còn sơ sài
Thẩm định phiên bản có được, lặp lại các bước cho đến khi có phiên bản cuối cùng a Mô hình làm bản mẫu (prototype model)
Khi thu thập yêu cầu từ khách hàng, thường gặp tình trạng họ đưa ra mục tiêu xây dựng hệ thống một cách chung chung mà không rõ ràng Trong trường hợp này, mô hình bản mẫu là lựa chọn tối ưu cho lập trình viên Mô hình này dựa trên việc tạo ra một mẫu thử ban đầu để người sử dụng xem xét, sau đó tinh chỉnh qua nhiều phiên bản cho đến khi đáp ứng đầy đủ yêu cầu Mô hình bản mẫu thường được áp dụng với hai mục đích chính: cải thiện sự giao tiếp giữa khách hàng và lập trình viên, và đảm bảo sản phẩm cuối cùng phù hợp với mong đợi của người dùng.
Phát triển thăm dò là quá trình hợp tác với khách hàng để khảo sát chi tiết các yêu cầu của họ và phát triển hệ thống cuối cùng Phương pháp này bắt đầu từ việc xác định rõ ràng các yêu cầu ban đầu và sau đó bổ sung những đặc điểm mới theo đề xuất của khách hàng Khi tất cả các yêu cầu của người sử dụng được đáp ứng, hệ thống cũng sẽ hoàn thiện.
Loại bỏ mẫu thử: mục tiêu của tiến trình là để tìm hiểu các yêu cầu của khách hành
Các hoạt động trong tiến trình phần mềm
2.2.1 Đặc tả yêu cầu phần mềm
Đặc tả phần mềm, hay kỹ nghệ yêu cầu, là quá trình xác định các dịch vụ mà khách hàng mong muốn cùng với các ràng buộc trong việc vận hành và xây dựng hệ thống Quá trình này bao gồm bốn pha chính, giúp đảm bảo rằng các yêu cầu của khách hàng được hiểu rõ và thực hiện một cách hiệu quả.
Nghiên cứu tính khả thi là quá trình quan trọng giúp xác định xem các yêu cầu của người sử dụng có phù hợp với công nghệ hiện tại hay không Từ góc độ kinh doanh, nghiên cứu này còn nhằm đánh giá khả năng mang lại lợi nhuận của hệ thống đề xuất Việc thực hiện nghiên cứu khả thi cần diễn ra nhanh chóng và tiết kiệm chi phí Kết quả từ nghiên cứu sẽ quyết định xem có nên tiếp tục phát triển hệ thống hay không.
Quy trình phân tích và rút ra yêu cầu hệ thống bao gồm việc sử dụng nhiều phương pháp như quan sát hệ thống hiện tại, phỏng vấn người sử dụng, thảo luận, phân tích nhiệm vụ và tài liệu từ hệ thống cũ Trong giai đoạn này, có thể cần xây dựng một hoặc nhiều mô hình hệ thống và các mẫu thử để đảm bảo tính chính xác và hiệu quả của các yêu cầu được đưa ra.
- Đặc tả yêu cầu : Pha này sẽ tư liệu hoá những thông tin thu thập được Có hai loại yêu cầu cần được xác định:
* Yêu cầu của người sử dụng: là những yêu cầu bằng ngôn ngữ tự nhiên Kiểu yêu cầu này được viết bởi người sử dụng
Yêu cầu hệ thống là tài liệu có cấu trúc, mô hình hóa và mô tả chi tiết về chức năng, dịch vụ và ràng buộc vận hành của hệ thống Chúng định nghĩa những gì cần xây dựng, trở thành hợp đồng giữa khách hàng và nhà thầu Các yêu cầu hệ thống được phân thành hai loại.
+ Các yêu cầu hệ thống chức năng: Là các dịch vụ mà hệ thống phải cung cấp
+ Các yêu cầu phi chức năng: Là các ràng buộc mà hệ thống phải tuân theo
+ Các yêu cầu miền ứng dụng
Đánh giá yêu cầu là bước quan trọng để xác minh tính chính xác, sự thống nhất và độ đầy đủ của các yêu cầu Trong quá trình này, nếu phát hiện bất kỳ lỗi nào, cần phải tiến hành chỉnh sửa kịp thời để đảm bảo chất lượng và hiệu quả của dự án.
2.2.2 Thiết kế phần mềm và cài đặt a Thiết kế phần mềm
Thiết kế phần mềm là quá trình xây dựng cấu trúc phần mềm dựa trên các tài liệu đặc tả Quá trình này bao gồm nhiều công việc quan trọng, từ việc xác định yêu cầu đến việc tạo ra các mô hình và giao diện người dùng.
Thiết kế kiến trúc bao gồm việc xác định và tài liệu hóa các hệ thống con cấu thành nên hệ thống xây dựng, cùng với mối quan hệ giữa chúng.
- Đặc tả trừu tượng: với mỗi hệ thống con, phải có một bản đặc tả về các dịch vụ của nó và những ràng buộc khi nó vận hành
- Thiết kế giao diện : với mỗi hệ thống con, các giao diện của nó với những hệ thống con khác phải được thiết kế và tư liệu hoá
- Thiết kế thành phần: các dịch vụ cung cấp cho các thành phần khác và các giao diện tương tác với chúng phải được thiết kế
Thiết kế cấu trúc dữ liệu là một yếu tố quan trọng trong việc cài đặt hệ thống, đòi hỏi sự chi tiết và cụ thể để đảm bảo hiệu quả và tính khả thi của hệ thống.
- Thiết kế thuật toán: Các thuật toán được sử dụng để cung cấp các dịch vụ phải được thiết kế chi tiết và chính xác
Bản thiết kế phần mềm mô tả cấu trúc của phần mềm, bao gồm dữ liệu, giao diện giữa các thành phần và các thuật toán sử dụng Quá trình thiết kế không dừng lại ở một phiên bản hoàn thiện mà phát triển lặp đi lặp lại qua nhiều phiên bản, từ đó gia tăng tính hình thức và chi tiết Thiết kế được cải tiến liên tục nhằm sửa đổi và hoàn thiện các phiên bản trước đó.
Tiến trình thiết kế bao gồm việc phát triển nhiều mô hình hệ thống với các mức độ trừu tượng khác nhau, trong đó việc phân tích thiết kế giúp phát hiện lỗi và thiếu sót từ các giai đoạn trước Những phản hồi này cho phép cải tiến các mô hình thiết kế đã được tạo ra Hình 2.7 minh họa mô hình của tiến trình thiết kế, cho thấy rằng các mô tả thiết kế có thể được phát triển theo cách tuần tự Tuy nhiên, trong thực tế, các hoạt động trong tiến trình thiết kế thường đan xen và việc phải làm lại thiết kế do phản hồi từ các giai đoạn khác là điều không thể tránh khỏi.
Bản đặc tả cho giai đoạn tiếp theo là đầu ra của mỗi giai đoạn thiết kế, có thể là một đặc tả hình thức hoặc trừu tượng để làm sáng tỏ các yêu cầu Khi tiến trình thiết kế diễn ra, các đặc tả này sẽ trở nên chi tiết hơn, dẫn đến kết quả cuối cùng là các đặc tả chính xác về các giải thuật và cấu trúc dữ liệu được cài đặt Mô hình chung của tiến trình thiết kế cho phép các thích nghi thực tế theo nhiều cách khác nhau.
1 Hai giai đoạn sau của thiết kế - thiết kế cấu trúc dữ liệu và giải thuật – có thể được trì hoãn đến tận tiến trình cài đặt
2 Nếu cách tiếp cận thăm dò để thiết kế được sử dụng, các giao diện hệ thống có thể được thiết kế sau khi các cấu trúc dữ liệu đã được đặc tả
3 Giai đoạn đặc tả trừu tượng có thể bị nhảy qua, mặc dù nó thường là phần bản chất của thiết kế các hệ thống then chốt Ở đâu các phương pháp phát triển nhanh được sử dụng (xem chương 17), các đầu ra của tiến trình thiết kế sẽ không là các tài liệu đặc tả riêng rẽ mà sẽ được biểu diễn trong mã của chương trình Sau khi kiến trúc hệ thống được thiết kế, các giai đoạn sau của thiết kế là tăng dần Mỗi lần tăng được biểu diễn bởi mã chương trình hơn là một mô hình thiết kế
Cách tiếp cận tương phản trong thiết kế hệ thống sử dụng các phương pháp có cấu trúc, tập trung vào việc tạo ra các mô hình đồ họa và tự động phát sinh mã từ những mô hình này Các phương pháp này được phát triển vào những năm 1970 nhằm hỗ trợ thiết kế hướng chức năng Trong những năm 1990, nhiều phương pháp thiết kế hướng đối tượng đã được đề xuất và sau đó được hợp nhất để hình thành ngôn ngữ mô hình hóa hợp nhất UML, cùng với các quy trình thiết kế tích hợp Hiện tại, chủ đề UML 2.0 đang được xem xét triển khai.
Phương pháp có cấu trúc bao gồm mô hình tiến trình thiết kế, ký hiệu biểu diễn thiết kế, định dạng báo cáo, luật và hướng dẫn thiết kế Những phương pháp này có khả năng hỗ trợ một hoặc nhiều mô hình của hệ thống.
1 Mô hình đối tượng chỉ ra các lớp đối tượng được sử dụng trong hệ thống và các phụ thuộc của chúng
2 Mô hình tuần tự chỉ ra các đối tượng trong hệ thống tương tác như thế nào khi hệ thống thực hiện
Công nghệ CASE
Các kỹ thuật CASE đã đóng góp quan trọng vào việc cải thiện quy trình phát triển phần mềm, bao gồm việc tối ưu hóa trình tự, tiến độ và chất lượng Chúng tự động hóa một số hoạt động mô hình hóa và hỗ trợ quản lý hiệu quả hơn Mặc dù có những cải tiến đáng kể, nhưng vẫn chưa xuất hiện những thay đổi mang tính đột phá trong quy trình phần mềm.
Kỹ nghệ phần mềm yêu cầu những suy nghĩ sáng tạo Những suy nghĩ này chưa sẵn sàng cho hoạt động tự động hóa
Kỹ nghệ phần mềm là một hoạt động nhóm Với các dự án lớn, thường chiếm rất nhiều thời gian dành cho các tương tác nhóm
Những hoạt động mà các kỹ thuật CASE chưa thể tự động hóa:
Sự suy nghĩ sáng tạo trong SE
Lựa chọn giải pháp công nghệ
Giao tiếp khi làm việc nhóm
Thực hiện việc quản lý dự án
Phân loại công cụ CASE theo các khía cạnh chức năng, tiến trình và tích hợp giúp hiểu rõ hơn về vai trò của chúng trong ngành công nghiệp phần mềm Việc này cho phép chúng ta khám phá các kỹ thuật CASE và sự hỗ trợ mà chúng mang lại cho các hoạt động phát triển phần mềm.
Khía cạnh chức năng: Các công cụ CASE được phân loại theo chức năng đặc tả chúng
Khía cạnh tiến trình: Phân loại theo các hoạt động tiến trình mà chúng hỗ trợ
Khía cạnh tích hợp: Phân loại theo sự tổ chức của chúng trong các đơn vị tích hợp bao gồm:
Các công cụ hỗ trợ thực hiện các nhiệm vụ đơn lẻ trong tiến trình, bao gồm công cụ kiểm tra sự phù hợp của thiết kế và bộ soạn thảo văn bản.
Các nhóm công cụ (Workbenches): Hỗ trợ một giai đoạn trong tiến trình như thiết kế, đặc tả, chúng thường chửa một cố công cụ được tích hợp lại
Các môi trường đóng vai trò quan trọng trong việc hỗ trợ toàn bộ hoặc một phần đáng kể của quy trình phát triển phần mềm Chúng thường bao gồm nhiều workbench được tích hợp, giúp tối ưu hóa hiệu suất và tăng cường khả năng làm việc nhóm trong quá trình phát triển.
Hình sau mô tả các kỹ thuật CASE được phân loại theo khía cạnh tích hợp:
Các vấn đề liên quan đến tiến trinh phần mềm
Xác định yêu cầu và thiết kế có vai trò quyết định đến chất lượng phần mềm, chiếm phần lớn công sức so với xây dựng
Khi chuyển tiếp giữa các pha phát triển phải thẩm định tốt để đảm bảo các lỗi không ảnh hưởng đến pha sau
Tài liệu được tạo ra trong từng giai đoạn không chỉ phục vụ cho giai đoạn tiếp theo mà còn góp phần đảm bảo chất lượng phần mềm và hỗ trợ trong quá trình bảo trì.
Cần chuẩn hóa mẫu biểu, cách thức ghi chép, tạo tài liệu nhằm đảm bảo chất lượng phần mềm.
Quan hệ giữa tiến trình và sản phẩm
Tiến trình và sản phẩm là hai khía cạnh quan trọng trong sự phát triển Một tiến trình hiệu quả sẽ đảm bảo các yêu cầu cần thiết cho sản phẩm Sản phẩm chất lượng cao là kết quả của sự kết hợp hài hòa giữa nhiều yếu tố khác nhau.
Đội ngũ chuyên môn tốt
Công cụ trợ giúp mạnh
Năng lực/độ thuần thục quản lý tiến trình của tổ chức cao (CMM)
Mô hình thuần thục khả năng (Capability Maturity Model) chỉ ra trong năm mức độ thuần thục cho hoạt động phát triển phần mềm:
(Chụp mô hình, mối quan hệ giữa tiến trình và sản phẩm – Tham khảo cuốn phát triên phần mềm thành công)
CÂU HỎI VÀ BÀI TẬP CHƯƠNG 2