(Post 18/10/2006) Công nghệ phần mềm (hay còn
gọi là kỹ nghệ phần mềm; tiếng Anh: software engineering) là sự vận dụng
thực tế của những kiến thức khoa học trong việc thiết kế, cấu tạo của
phần mềm cũng như những tài liệu liên quan trong việc phát triển, hoạt
động và bảo dưỡng của nó. Công nghệ phần mềm bao gồm những kiến thức và
ứng dụng của những nguyên tắc, phương pháp và công cụ cho kỹ thuật, quản
lý sự phát triển phần mềm.
Trích dẫn một câu nói của Edsger Dijkstra về công nghệ
phần mềm:
Khi máy tính chưa xuất hiện, thì việc lập trình
chưa có khó khăn gì cả. Khi mới xuất hiện một vài chiếc máy tính chức
năng kém thì việc lập trình bắt đầu gặp một vài khó khăn nho nhỏ. Giờ
đây khi chúng ta có những chiếc máy tính khổng lồ thì những khó khăn
ấy trở nên vô cùng lớn. Như vậy ngành công nghiệp điện tử không giải
quyết khó khăn nào cả mà họ chỉ tạo thêm ra những khó khăn mới. Khó
khăn mà họ tạo nên chính là việc sử dụng sản phẩm của họ.
Các sản phẩm phần mềm
Đối tượng chính của công nghệ phần mềm là sản xuất ra
các sản phẩm phần mềm.
Sản phẩm phần mềm là các phần mềm được
phân phối cho khách hàng cùng với các tài liệu mô tả phương thức cài đặt
và cách thức sử dụng chúng.
Phân loại
- Sản phẩm tổng quát: Đây là các phần mềm đứng riêng, được sản xuất
bởi một tổ chức phát triển và bán vào thị trường cho bất kỳ khách
hàng nào có khả năng tiêu thụ.
- Sản phẩm chuyên ngành: là phần mềm được hỗ trợ tài chính bởi khách
hàng trong chuyên nghành. Phần mềm được phát triển một cách đặc biệt
cho khách hàng qua các hợp đồng.
Cho đến thập niên 1980 hầu hết sản phẩm phần mềm đều
làm theo đơn đặt hàng riêng (đặc biệt hóa). Nhưng kể từ khi có PC tình
hình hoàn toàn thay đổi. Các phần mềm được phát triển và bán cho hàng
trăm ngàn khách hàng là chủ các PC và do đó giá bán các sản phẩm này cũng
rẻ hơn nhiều. Microsoft là nhà sản xuất phần mềm lớn nhất hiện nay.
Thuộc tính của sản phẩm phần mềm
Thuộc tính của một sản phẩm phần mềm là các đặc tính
xuất hiện từ sản phẩm một khi nó được cài đặt và được đưa ra dùng. Các
thuộc tính này không bao gồm các dịch vụ được cung cấp kèm theo sản phẩm
đó.
Thí dụ: mức hiệu quả, độ bền, khả năng bảo trì, khả năng
dùng ở nhiều nền là các thuộc tính.
Các thuộc tính biến đổi tùy theo phần mềm. Tuy nhiên
những thuộc tính tối quan trọng bao gồm:
- Khả năng bảo trì: Nó có khả năng thực hành những tiến triển để
thỏa mãn yêu cầu của khách hàng.
- Khả năng tin cậy: Khả năng tin cậy của phần mềm bao gồm một loạt
các đặc tính như là độ tin cậy, an toàn, và bảo mật. Phần mềm tin
cậy không thể tạo ra các thiệt hại vật chất hay kinh tế trong trường
hợp hư hỏng.
- Độ hữu hiệu: Phần mềm không thể phí phạm các nguồn tài nguyên như
là bộ nhớ và các chu kì vi xử lý.
- Khả năng sử dụng: Phần mềm nên có một giao diện tương đối dễ cho
người dùng và có đầy đủ các hồ sơ về phần mềm.
Các mô hình phát triển sản phẩm phần mềm
Quá trình phát triển phần mềm là tập hợp các thao tác
và các kết quả tương quan để sản xuất ra một sản phẩm phần mềm. Hầu hết
các thao tác này được tiến hành bởi các kỹ sư phần mềm. Các công cụ hỗ
trợ máy tính về kỹ thuật phần mềm có thể được dùng để giúp trong một số
thao tác.
Có 4 thao tác là nền tảng của hầu hết các quá trình phần
mềm là:
- Đặc tả phần mềm: Các chức năng của phần mềm và điều kiện để nó
hoạt động phải được định nghĩa.
- Sự phát triển phần mềm: Để phần mềm đạt được đặc tả thì phải có
quá trình phát triển này.
- Đánh giá phần mềm: Phần mềm phải được đánh giá để chắc chắn rằng
nó làm những gì mà khách hàng muốn.
- Sự tiến hóa của phần mềm: Phần mềm phải tiến hóa để thỏa mãn sự
thay đổi các yêu cầu của khách hàng.
Mô hình thác nước
Mô hình này làm cho ý nghĩa việc sản xuất phần được thấy
rõ hơn.
- Phân tích các yêu cầu và định nghĩa: hệ thống dịch vụ, khó khăn
và mục tiêu được hình thành bởi sự trợ ý của hệ thống người tiêu dùng.
Sau đó các yếu tố này được định nghĩa sao cho có thể hiểu được bởi
cả người phát triển và người tiêu dùng.
- Thiết kế phần mềm và hệ thống: Thiết kế hệ thống các quá trình,
các bộ phận và các yêu cầu về cả phần mềm lẫn phần cứng. Hoàn tất
hầu như tất cả kiến trúc của các hệ thống này. Thiết kế phần mềm tham
gia vào việc biểu thị các chức năng hệ thống phần mềm mà có thể được
chuyển dạng thành một hay nhiều chương trình khả thi.
- Thực hiện và thử nghiệm các đơn vị: Trong giai đoạn này, thiết kế
phần mềm phải được chứng thực như là một tập họp nhiều chương trình
hay nhiều đơn vị nhỏ. Thử nghiệm các đơn vị bao gồm xác minh rằng
mỗi đơn vị thỏa mãn đặc tả của nó.
- Tổng hợp và thử nghiệm toàn bộ: Các đơn vị chương trình riêng lẻ
hay các chương trình được tích hợp lại và thử nghiệm như là một hệ
thống hoàn tất và chứng tỏ được các yêu cầu của phần mềm được thỏa
mãn. Sau khi thử nghiệm phần mềm được cung ứng cho người tiêu dùng.
- Sản xuất và bảo trì: Thông thường (nhưng không bắt buộc) đây là
pha lâu nhất của chu kỳ sống (của sản phẩm). Phần mềm được cài đặt
và được dùng trong thực tế. Bảo trì bao gồm điều chỉnh các lỗi mà
chưa được phát hiện trong các giai đọan trước của chu kì sống; nâng
cấp sự thực hiện của hệ thống các đơn vị và nâng cao hệ thống dịch
vụ cho là các phát hiện vê yêu cầu mới.
Chỗ yếu của mô hình này là nó không linh hoạt. Các bộ
phận của đề án chia ra thành những phần riêng của các giai đoạn. Hệ thống
phân phối đôi khi không dùng được vì không thỏa mãn được yêu cầu của khách
hàng. Mặc dù vậy mô hình này phản ảnh thực tế công nghệ. Như là một hệ
quả đây vẫn là mô hình cơ sở cho đa số các hệ thống phát triển phần mềm
- phần cứng.
Mô hình phát triển tiến hoá của phần mềm
Phân loại sự phát triển tiến hóa
- Lập trình thăm dò: đối tượng của quá trình bằng cách làm việc với
khách hàng để thăm dò các yêu cầu và phân phối phần mềm dứt diểm.
Sự phát triển nên bắt đầu với những phần nào đã được hiểu rõ. Phần
mềm sẽ được thêm vào các chức năng mới khi mà nó được đề nghị cho
khách hàng (và nhận về các thông tin).
- Mẫu thăm dò: đối tượng của phát triển tiến hoá này là nhằm hiểu
các yêu cầu của khách hàng và do đó phát triển các định nghĩa yêu
cầu tốt hơn cho phần mềm. Các mẫu tập trung trên các thí nghiệm với
những phần đòi hỏi nào của khách hàng mà có thể gây sự khó hiểu hay
ngộ nhận.
Phân tích mô hình: Mô hình phát triển tiến hóa này hiệu
quả hơn mô hình thác nước. Tuy nhiên, nó vẫn còn các khuyết điểm:
- Quá trình thì không nhìn thấy rõ được: Các nhà quản lý cần phân
phối thường xuyên để đo lường sự tiến bộ. Nó không kinh tế trong việc
làm ra các hồ sơ cho phần mềm.
- Phần mềm thường dược cấu trúc nghèo nàn: Sự thay đổi liên tục dễ
làm đổ vỡ cấu trúc của phần mềm, tạo ra sự khó khăn và tốn phí.
- Thường đòi hỏi những kỹ năng đặc biệt: Hầu hết các hệ thống khả
dĩ theo cách này được tiến hành bởi các nhóm nhỏ có kỹ năng cao cũng
như các cá nhân phải năng động.
Mô hình này thích hợp với:
- Phát triển các loại phần mềm tương đối nhỏ
- Phát triển các loại phần mềm có đời sống tương đối ngắn
- Tiến hành trong các hệ thống lớn hơn ở những chỗ mà không thể biểu
thị được các đặc tả chi tiết trong lúc tiến hành. Thí dụ của trường
hợp này là các hệ thống thông minh nhân tạo (AI) và các giao diện
cho người dùng.
Mô hình xoắn ốc Boehm
Đây là mô hình phát triển từ mô hình thác nước cho thấy
mức độ tổng quát hơn của các pha sản xuất của một sản phẩm. Mô hình được
đề nghị bởi Boehm vào năm 1988. Mô hình này có thể chỉ ra các rủi ro có
thể hình thành trên căn bản của mô hình quá trình (sản xuất) tổng quát.
Mô hình Boehm có dạng xoắn ốc. Mỗi vòng lặp đại diện
cho một pha của quá trình phần mềm. Vòng trong cùng tập trung về tính
khả thi, vòng kế lo về định nghĩa các yêu cầu, kế đến là thiết kế, ...
Không có một pha nào được xem là cố định trong vòng xoắn.
Mỗi vòng có 4 phần tương ứng với một pha.
- Cài đặt đối tượng: Chỉ ra các đối tượng của pha trong đề án. Những
khó khăn hay cưỡng bức của quá trình và của sản phẩm được xác định
và được lên kế hoạch chi tiết. Xác định các yếu tố rủi ro của đề án.
Các phương án thay thế tùy theo các rủi ro này có thể được dự trù.
- Lượng định và giảm thiểu rủi ro. Tiến hành phân tích mỗi yếu tố
rủi ro đã xác định. Các bước đặt ra để giảm thiểu rủi ro.
- Phát triển và đánh giá: Sau khi đánh giá các yếu tố rủi ro, một
mô hình phát triển cho hệ thống được chọn.
- Lên kế hoạch: Đề án được xem xét và quyết định có nên hay không
tiếp tục pha mới trong vòng lặp.
(theo Wikipedia) |