Tải bản đầy đủ (.pdf) (263 trang)

Giáo án - Bài giảng: BÀI GIẢNG CÔNG NGHỆ PHẦN MỀM

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.05 MB, 263 trang )

1
Công nghệ phần mềm
(0)
Nguyễn Thanh Bình
Khoa Công nghệ Thông tin
Trường ðại học Bách khoa
ðại học ðà Nẵng
2
Mục ñích

Hiểu và nắm ñược

Khái niệm công nghệ phần mềm

Các mô hình phát triển phần mềm

Các hoạt ñộng phát triển phần mềm

Các kỹ thuật và phương pháp cơ bản trong
phát triển phần mềm

Áp dụng công nghệ phần mềm trong phát
triển phần mềm
2
3
Nội dung

Chương 1: Giới thiệu Công nghệ phần mềm

Chương 2: Các mô hình phát triển phần mềm


Chương 3: Phân tích và ñặc tả yêu cầu

Chương 4: Các kỹ thuật ñặc tả

Chương 5: Thiết kế

Chương 6: Lập trình và ngôn ngữ lập trình

Chương 7: Kiểm thử

Chương 8: Quản trị dự án phần mềm
4
Tài liệu tham khảo

Ian Sommerville, Software Engineering, 7th edition, Pearson
Education, 2004.

M. Gaudel, B. Marre, F. Schlienger, G. Bernot, Précis de
génie logiciel, Masson, 2001.

Stephen R. Schach, Classical and Object-Oriented Software
Engineering, NXB IRWIN, 1996.

Ronald Leach, Introduction to Software Engineering, CRC
Press, 1999.

G. Booch, J. Rumbaugh, I. Jacobson, The Unified Modeling
Language User Guide, Addision-Wesley, 1999.

Craig Larman, Applying UML and Patterns: An Introduction

to Object-Oriented Analysis and Design and Iterative
Development, Third Edition, Addision-Wesley, 2004.

Glenford J. Myers, The art of software testing, Wiley, 2004.

Boris Beizer, Software Testing Techniques, Second Edition.
1
Giới thiệu
công nghệ phần mềm
(1)
Nguyễn Thanh Bình
Khoa Công nghệ Thông tin
Trường ðại học Bách khoa
ðại học ðà Nẵng
2
Nội dung

Lịch sử phát triển phần mềm và
khủng hoảng phần mềm ?

Công nghệ phần mềm
 Khái niệm
 Mục ñích
 Nguyên tắc

Chất lượng phần mềm

Phân loại phần mềm
2
3

Lịch sử phát triển phần mềm

1946, máy tính ñiện tử ra ñời

1950, máy tính ñược thương mại hóa

Phần mềm bắt ñầu ñược phát triển

Những năm 1960

những thất bại về phát triển phần mềm
• sản phẩm phần mềm phức tạp
• nhiều lỗi
• tổ chức sản xuất: giá thành, tiến ñộ,

Người ta nói ñến “Khủng hoảng phần mềm”
4
Lịch sử phát triển phần mềm

Từ thủ công ñến công nghệ

Chương trình nhỏ
• không chuyên nghiệp
• 1 người làm
• người sử dụng = người phát triển
• 1 sản phẩm = mã nguồn
• tiến trình phát triển ñơn giản

Dự án lớn
• chuyên nghiệp

• nhiều người làm
• khách hàng & nhà cung cấp
• nhiều sản phẩm
• tiến trình phát triển phức tạp

1968, hội thảo khoa học ñầu tiên về “Công nghệ phần mềm”
3
5
Khủng hoảng phần mềm

Về mặt sản phẩm
 chất lượng sản phẩm phần mềm
• không ñáp ứng yêu cầu thực tế
• khó sử dụng
• không tin cậy
• khó bảo trì
• khách hàng không hài lòng
6
Khủng hoảng phần mềm

Về mặt quản lý

Kế hoạch
• không ñánh giá ñúng giá thành
• không ñúng tiến ñộ
• chi phí phát triển / chi phí bảo trì

Về mặt pháp lý
• hợp ñồng không rỏ ràng, không chặt chẽ


Nhân lực
• ñào tạo
• giao tiếp

Thiếu tiêu chuẩn ñánh giá sản phẩm

Thiếu quy trình quản lý
4
7
Khủng hoảng phần mềm

ðiều tra của General Acounting Office
(1982) trên nhiều sự án với tổng vốn ñầu tư
$68.000.000

Không giao sản phẩm: 29%

Không ñược sử dụng: 47%

Bỏ cuộc: 19%

ðược sử dụng sau khi ñã chỉnh sửa: 3%

Tốt: 2%
8
Khủng hoảng phần mềm
5
9
Công nghệ phần mềm
Khái niệm


Công nghệ phần mềm

nghiên cứu và phát triển các phương pháp,
kĩ thuật và công cụ nhằm xây dựng các
phần mềm một cách kinh tế, có ñộ tin cậy
cao và hoạt ñộng hiệu quả

thiết kế, xây dựng, và bảo trì các phần mềm
phc tp, bn vng và cht lưng
10
Công nghệ phần mềm
Mục ñích

Mục ñích

áp dụng thực tế
• các kiến thức khoa học,
• các nguyên tắc kinh tế,
• các nguyên tắc quản lí,
• các kỹ thuật và công cụ thích hợp

ñể sản xuất và bảo trì các phần mềm nhằm bảo ñảm
4 yêu cầu (FQCD):
• phần mềm tạo ra phải ñáp ứng ñược yêu cầu người sử
dụng
• phần mềm phải ñạt ñược các tiêu chuẩn về chất lượng
• giá thành phải nằm trong giới hạn ñặt ra
• tiến ñộ xây dựng phần mềm phải ñảm bảo
6

11
Công nghệ phần mềm
Nguyên tắc

Các nguyên tắc cơ bản

Chặt chẽ (rigor and formality)

Chia nhỏ (separation of concerns)

Mô-ñun hóa (modularity)

Trừu tượng (abstraction)

Phòng ngừa sự thay ñổi (anticipation of
change)

Tổng quát hóa (generality)

Giải quyết từng bước (incrementality)
12
Công nghệ phần mềm
Nguyên tắc

Chặt chẽ (rigor and formality)

sử dụng mô hình lý thuyết và toán học

áp dụng cho tất cả các bước, tất cả các sản
phẩm


Ví dụ
• “chọn z là giá trị lớn nhất của x và y”
• z = max(x, y)
7
13
Công nghệ phần mềm
Nguyên tắc

Chia nhỏ (separation of concerns)

Làm chủ ñộ phức tạp
• chỉ tập trung một lĩnh vực cùng một lúc

Chia vấn ñề thành các phần nhỏ hơn
• Giải quyết một phần nhỏ sẽ ñơn giản hơn
• “chia ñể trị” (divide and conquer)

Có thể chia nhỏ theo
• thời gian: lập kế hoạch
• khái niệm: giao diện / thuật toán
• xử lý: chia các xử lý con
14
Công nghệ phần mềm
Nguyên tắc

Mô-ñun hóa (modularity)

Chia nhỏ ñộ phức tạp
• dễ hiểu

• dễ quản lý các hệ thống phức tạp

Quan hệ mật thiết với nguyên tắc “chia nhỏ”

Các phương pháp mô-ñun hóa
• chiến lược từ trên xuống (top-down)
• chiến lược từ dưới lên (bottom-up)

Chất lượng của mô-ñun hóa
• liên kết lỏng lẻo (low coupling)
• kết cố cao (high cohesion)
8
15
Công nghệ phần mềm
Nguyên tắc

Trừu tượng (abstraction)

Loại bỏ những gì không quan trọng

Chỉ xem xét các yếu tố quan trọng

Sử dụng các mô hình
• mô hình cho người sử dụng
• mô hình cho ngưới phát triển

Ví dụ
• ngôn ngữ lập trình / cấu trúc phần cứng
• xây dựng tài liệu
• ñặc tả bới ñiều kiện trước và sau

16
Công nghệ phần mềm
Nguyên tắc

Phòng ngừa sự thay ñổi (anticipation of
change)

phần mềm là sản phẩm thường xuyên phải
thay ñổi

dự báo các yếu tố có thể thay ñổi
• ảnh hưởng có thể

các thay ñổi thường gặp
• trong ñặc tả yêu cầu
• trong ngữ cảnh sử dụng
• khả năng về công nghệ
9
17
Công nghệ phần mềm
Nguyên tắc

Tổng quát hóa (generality)

xem xét vấn ñề trong ngữ cảnh tổng quát

giải quyết vấn ñề lớn hơn

mục ñích
• tái sử dụng dễ dàng

• có thể sử dụng các công cụ có sẵn
• sử dụng design patterns
• chi phí có thể tăng cao
18
Công nghệ phần mềm
Nguyên tắc

Giải quyết từng bước (incrementality)

Nguyên tắc
• xác ñịnh một phần (tập con)
• phát triển
• ñánh giá
• bắt ñầu lại

Áp dụng cho
• phát triển một sản phẩm
• mô ñặc tả / một kiến trúc /
• mô hình phát triển
• mô hình lặp
10
19
Chất lượng phần mềm

Tính ñúng ñắn (correctness)

thực hiện ñúng các ñặc tả về chức năng
(functional specification)

Tính tin cậy (reliability)


ñáp ứng ñược những yêu cầu ñặt ra

Tính bền vững (robustness)

hoạt ñộng tốt trong những ñiều kiện sử dụng
khác nhau
20
Chất lượng phần mềm

Tính hiệu quả (efficiency)

sử dụng hiệu quả các nguồn tài nguyên (bộ
nhớ, CPU, )

Tính thân thiện (user friendlyness)

dễ sử dụng

Tính dễ kiểm tra (verifiability)

dễ kiểm tra chất lượng
11
21
Chất lượng phần mềm

Tính dễ bảo trì (maintainability)

dễ xác ñịnh và sửa lỗi


dễ tạo ra những phiên bản mới khi có sự mở
rộng

Tính tái sử dụng (reusability)

dễ tái sử dụng trong những phần mềm mới

Tính khả chuyển (portability)

dễ sử dụng trong các môi trường mới
22
Chất lượng phần mềm

Tính dễ hiểu (understandability)

dễ hiểu ñối với người sử dụng cũng như ñối
với người phát triển

Tính hợp tác (interoperability)

dễ hợp tác với các phần mềm khác

Sản xuất hiệu quả (productivity)

tiến trình sản xuất phần mềm phải hiệu quả
12
23
Chất lượng phần mềm

Khả năng giao sản phẩm ñúng hạn

(timeliness)

giao sản phẩm theo từng gói

Tính trong suốt (visibility)

ñối với người phát triển/người quản lý
• hiểu rỏ tiến ñộ phát triển
• hiểu rỏ ảnh hưởng của các quyết ñịnh

ñối với khách hàng
• hiểu rỏ tiến ñộ phát triển
• hiểu rỏ ảnh hưởng của các quyết ñịnh
24
Chất lượng phần mềm

Sự thỏa hiệp giữa các tiêu chuẩn chất
lượng
 tính thân thiện / tính bền vững
 tính khả chuyển / tính hiệu quả
13
25
Phân loại phần mềm

Các hệ thống thông tin (Information Systems)

quản lý thông tin

cơ sở dữ liệu + giao tác


Các hệ thống thời gian thực (Real-Time
System)

các hệ thống khi hoạt ñộng cần phải trả lời
các sự kiện với một thời gian ñược quy ñịnh
nghiêm ngặt
26
Phân loại phần mềm

Các hệ thống phân tán (Distributed Systems)

mạng máy tính

phân tán dữ liệu

phân tán xử lí

Các hệ thống nhúng (Emmbedded Systems)

giao tiếp với các hệ thống/mạch ñiện tử
1
Mô hình phát triển
(2)
Nguyễn Thanh Bình
Khoa Công nghệ Thông tin
Trường ðại học Bách khoa
ðại học ðà Nẵng
2
Nội dung


Các hoạt ñộng phát triển phần mềm

Các mô hình phát triển phần mềm
2
3
Các hoạt ñộng phát triển
phần mềm

Phân tích tính khả thi

Phân tích và ñặc tả yêu cầu

Thiết kế

Mã hóa

Kiểm thử

Bảo trì
4
Các hoạt ñộng phát triển
phần mềm

Phân tích tính khả thi

xác ñịnh vấn ñề cần giải quyết,

xem xét các giải pháp và kĩ thuật khác nhau
• thuận lợi
• bất lợi


ñánh giá về thời gian, giá thành, nguồn tài
nguyên cần thiết

Sản phẩm: tài liệu phân tích
3
5
Các hoạt ñộng phát triển
phần mềm

Phân tích và ñặc tả yêu cầu (1)

xác ñịnh nhu cầu của khách hàng/người sử
dụng
• xác ñịnh bài toán, chứ không phải là giải pháp

khó khăn
• khách hàng không biết rỏ cái họ cần
• khách hàng không trình bày rỏ cái họ muốn
• các thay ñổi

Sản phẩm: tài liệu ñặc tả yêu cầu
6
Các hoạt ñộng phát triển
phần mềm

Phân tích và ñặc tả yêu cầu (2)
 các bước
• khảo sát, tổng hợp yêu cầu
• phân tích yêu cầu

• ñặc tả yêu cầu
• hợp thức hóa yêu cầu
4
7
Các hoạt ñộng phát triển
phần mềm

Phân tích và ñặc tả yêu cầu (3)
Tổng hợp và
phân tích yêu cầu
ðặc tả yêu cầu
Hợp thức hóa
yêu cầu
Mô hình hệ thống
Yêu cầu hệ thống
của người sử dụng
Tài liệu ñặc tả
yêu cầu
8
Các hoạt ñộng phát triển
phần mềm

Thiết kế (1)

chuyển từ tài liệu ñặc tả yêu cầu thành cấu trúc lô-gíc có
thể cài ñặt ñược

giải pháp cho vấn ñề ñã ñược ñặc tả

thiết kế kiến trúc

• các moñun và giao diện của các mô-ñun

thiết kế giao diện

thiết kế các mô-ñun
• cấu trúc dữ liệu
• thuật toán

Sản phẩm: tài liệu thiết kế
5
9
Các hoạt ñộng phát triển
phần mềm

Thiết kế (2)
Thiết kế
kiến trúc
ñặc tả
kiến trúc
Thiết kế
mô-ñun
Thiết kế
cấu trúc dữ liệu
Thiết kế
thuật toán
ñặc tả
mô-ñun
ñặc tả
cấu trúc dữ liệu
ñặc tả

thuật toán
Thiết kế
giao diện
ñặc tả
giao diện
10
Các hoạt ñộng phát triển
phần mềm

Thiết kế (3)
 các phương pháp thiết kế
• hướng chức năng
• hướng ñối tượng
6
11
Các hoạt ñộng phát triển
phần mềm

Mã hóa và gở rối

mã hóa
• cài ñặt các thiết kế bằng ngôn ngữ lập trình
• không ñơn thuần chỉ là lập trình
• viết tài liệu
• insertions/invariants
• chuẩn lập trình (coding standards)
• lập trình theo cặp (pair programming)
• công cụ
• quản lý phiên bản


gở rối
• phát hiện các lỗi trong quá trình lập trình

Sản phẩm: chương trình
12
Các hoạt ñộng phát triển
phần mềm

Kiểm thử (1)

phát hiện lỗi trong chương trình

lập kế hoạch thực hiện kiểm thử
• tạo các trường hợp kiểm thử
• tiêu chuẩn kiểm thử
• nguồn tài nguyên kiểm thử

mã nguồn ñược kiểm thử theo tài liệu thiết kế

Sản phẩm: báo cáo kiểm thử
7
13
Các hoạt ñộng phát triển
phần mềm

Kiểm thử (2)
 các hoạt ñộng kiểm thử
• kiểm thử ñơn vị
• kiểm thử tích hợp
• kiểm thử hệ thống

• kiểm thử chấp nhận
14
Các hoạt ñộng phát triển
phần mềm

Kiểm thử (3)
 các phương pháp kiểm thử
• kiểm thử tĩnh
• kiểm thử ñộng
• kiểm thử hộp ñen
• kiểm thử hộp trắng
8
15
Các hoạt ñộng phát triển
phần mềm

Bảo trì

bảo ñảm chương trình vận hành tốt

cài ñặt các thay ñổi

cài ñặt các yêu cầu mới

xử lý các lỗi khi vận hành

Sản phẩm: chương trình
16
Các mô hình phát triển phần
mềm


Sự tổ chức các hoạt ñộng phát triển phần mềm

Mô hình phát triển phần mềm hay tiến trình phát triển
phần mềm

Có nhiều mô hình phát triển phần mềm

mô hình thác nước

mô hình nguyên mẫu

mô hình V

mô hình tiến hóa

mô hình xoắn ốc

mô hình hợp nhất
9
17
Mô hình thác nước
(waterfall model)
Phân tích tính
khả thi
Phân tích và
ñặc tả yêu cầu
Thiết kế
Mã hóa và
kiểm thử

Cài ñặt và bảo
trì
18
Mô hình thác nước

Ưu ñiểm

dự án nhỏ

yêu cầu xác ñịnh

Nhược ñiểm

dự án lớn

thời gian

sửa lỗi

yêu cầu thay ñổi
10
19
Mô hình nguyên mẫu
(prototyping model)
Phân tích yêu cầu
Thiết kế nhanh
Xây dựng nguyên mẫu
ðánh giá
Thiết kế
20

Mô hình nguyên mẫu

Ưu ñiểm

phát hiện yêu cầu

hợp thức hóa yêu cầu

thiết kế giao diện
• giao diện trên giấy
• giao diện “thật”

hệ thống có rủi ro cao
• yêu cầu không chắc chắn
• giao diện chưa rỏ ràng
• chiến lược cài ñặt chưa rỏ ràng

×