Ứng dụng lập trình linh hoạt trong quy trình cộng tác phần mềm
- 106 trang
- file .pdf
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
------------------------------------------------------
LUẬN VĂN THẠC SỸ KHOA HỌC
ỨNG DỤNG LẬP TRÌNH LINH HOẠT TRONG
QUY TRÌNH CỘNG TÁC PHẦN MỀM
NGÀNH: CÔNG NGHỆ THÔNG TIN
MÃ SỐ:
AN VĂN MINH
Người hướng dẫn khoa học: TS. HUỲNH QUYẾT THẮNG
HÀ NỘI - 2006
LỜI CAM ĐOAN
Em xin cam đoan luận văn tốt nghiệp này là kết quả nghiên cứu của
bản thân, dưới sự hướng dẫn của thầy giáo, TS.Huỳnh Quyết Thắng. Nếu có
gì sai phạm em xin hoàn toàn chịu trách nhiệm.
Người làm cam đoan
An Văn Minh
2
MỤC LỤC
DANH SÁCH BẢNG ....................................................................................... 5
DANH SÁCH CÁC HÌNH VẼ ......................................................................... 5
LỜI CẢM ƠN ................................................................................................... 6
LỜI NÓI ĐẦU .................................................................................................. 7
Chương 1. TỔNG QUAN VỀ LẬP TRÌNH “LINH HOẠT” VÀ “QUY
TRÌNH CỘNG TÁC PHẦN MỀM”............................................................... 10
1.1. PHƯƠNG PHÁP LẬP TRÌNH LINH HOẠT...................................... 10
1.1.1. Lập trình “linh hoạt” là gì?............................................................. 10
1.1.2. Tại sao sử dụng XP?....................................................................... 11
1.1.3. Lịch sử phát triển của XP............................................................... 11
1.1.4. Các mục tiêu của XP ...................................................................... 12
1.1.5. Các giá trị của XP........................................................................... 13
1.1.6. Các quy tắc của XP ........................................................................ 15
1.1.7. Các hoạt động theo XP................................................................... 16
1.2. QUY TRÌNH CỘNG TÁC PHẦN MỀM ............................................ 19
1.2.1. Giới thiệu quá trình cộng tác phần mềm ........................................ 20
1.2.2. Các yếu tố liên quan đến CSP ........................................................ 23
1.2.3. Các yếu tố cơ bản ........................................................................... 27
1.2.4. Định nghĩa quá trình cộng tác phần mềm ...................................... 29
1.3. KẾT HỢP XP TRONG CSP ĐỂ PHÁT TRIỂN PHẦN MỀM ........... 38
Chương 2. CÁC “THÔNG LỆ” TRONG XP ................................................. 40
2.1. TỔNG QUAN VỀ CÁC THÔNG LỆ TRONG XP ............................. 40
2.2. CÁC THÔNG LỆ TRONG XP ............................................................ 41
2.2.1. Tiêu chuẩn mã hoá ......................................................................... 41
2.2.2. Sở hữu chung mã lệnh.................................................................... 41
2.2.3. Sự kết hợp thường xuyên ............................................................... 41
3
2.2.4. Cải tiến thiết kế .............................................................................. 42
2.2.5. Thiết kế đơn giản............................................................................ 42
2.2.6. Các bước hoàn thiện nhỏ................................................................ 42
2.2.7. Tốc độ làm việc vừa phải ............................................................... 43
2.2.8. Hệ thống trong suốt ........................................................................ 43
2.2.9. Lập trình theo cặp........................................................................... 43
2.2.10. Lập kế hoạch dự án ...................................................................... 44
2.2.11. Phát triển hướng vào việc kiểm tra .............................................. 49
2.2.12. Làm việc theo nhóm..................................................................... 49
2.3. CẢI TIẾN MÃ LỆNH .......................................................................... 50
2.3.1. Giới thiệu về “cải tiến mã lệnh”..................................................... 50
2.3.2. Làm tài liệu cải tiến mã lệnh .......................................................... 51
2.3.3. Các đoạn mã lệnh tồi...................................................................... 52
2.3.4. Các kỹ thuật cơ bản sử dụng để cải tiến mã lệnh........................... 53
2.3.5. Cải tiến mã lệnh trong quá trình phát triển phần mềm .................. 54
2.3.6. Lợi ích của cải tiến mã lệnh ........................................................... 55
2.3.7. Các vấn đề cần lưu ý khi cải tiến mã lệnh...................................... 57
2. 4. KẾT LUẬN ......................................................................................... 58
Chương 3. ỨNG DỤNG LẬP TRÌNH LINH HOẠT TRONG QUY TRÌNH
CỘNG TÁC PHẦN MỀM .............................................................................. 59
3.1. Ý TƯỞNG LẬP TRÌNH LINH HOẠT TRONG QUY TRÌNH CỘNG
TÁC PHẦN MỀM ....................................................................................... 59
3.2. QUY TRÌNH PHÁT TRIỂN PHẦN MỀM ỨNG DỤNG XP TRONG
CSP .............................................................................................................. 59
3.2.1. Mức 0: Điểm xuất phát................................................................... 59
3.2.2. Mức 1: Quản lý chất lượng cộng tác.............................................. 63
3.3. ĐÁNH GIÁ SO SÁNH......................................................................... 72
4
3.3.1. So sánh với quy trình cộng tác phần mềm ..................................... 72
3.3.2. So sánh với phương pháp lập trình linh hoạt ................................. 72
3.4. KẾT LUẬN........................................................................................... 72
Chương 4. THỬ NGHIỆM QUY TRÌNH TRONG ĐÀO TẠO VÀ TRONG
PHÁT TRIỂN PHẦN MỀM ........................................................................... 73
4.1. THỬ NGHIỆM LẬP TRÌNH LINH HOẠT TRONG GIẢNG DẠY
MÔN HỌC “LẬP TRÌNH TRÊN WINDOWS”......................................... 73
4.1.1. Giới thiệu nội dung và mục đích môn học..................................... 73
4.1.2. Phương pháp giảng dạy truyền thống ............................................ 74
4.1.3. Áp dụng phương pháp XP vào việc giảng dạy môn học “Lập trình
trên windows”........................................................................................... 76
4.2. THỬ NGHIỆM QUY TRÌNH ĐỂ PHÁT TRIỂN ỨNG DỤNG
“QUẢN LÝ NHÂN SỰ” CHO CÔNG TY HỒNG HÀ ............................. 81
4.2.1. Giới thiệu hệ thống......................................................................... 81
4.2.2. Phương pháp phát triển hệ thống ................................................... 82
4.2.3. Xây dựng hệ thống ......................................................................... 83
4.2.4. Đánh giá hiệu quả việc ứng dụng “Lập trình linh hoạt” trong “Quy
trình cộng tác phần mềm” ........................................................................ 92
4.3. KẾT LUẬN........................................................................................... 93
TỔNG KẾT ..................................................................................................... 95
PHỤ LỤC........................................................................................................ 98
TÀI LIỆU THAM KHẢO............................................................................. 103
5
DANH SÁCH BẢNG
Tên bảng Trang
Bảng 3.1: So sánh quy trình ứng dụng XP trong CSP với CSP 70
Bảng 3.2: So sánh quy trình ứng dụng XP trong CSP với XP 70
Bảng 4.1: So sánh tỷ lệ sinh viên hoàn thành bài tập trong thời
78
gian quy định trong một buổi học
Bảng 4.2: So sánh kết quả học tập phần lý thuyết cơ bản 78
Bảng 4.3: So sánh kết quả thực hiện bài tập lớn 78
Bảng 4.4: Tóm tắt kết quả thực hiện và kết quả các ứng dụng 90
Bảng 4.5. So sánh thời gian thực hiện 91
Bảng 4.6 So sánh chất lượng chương trình 91
DANH SÁCH CÁC HÌNH VẼ
Tên hình vẽ Trang
Hình 1.1: Mô hình mức tăng trưởng của CSP 26
Hình 1.2: Thẻ CRC 31
Hình 3.1. Mô tả các bước trong quy trình ứng dụng XP trong
69
CSP
6
LỜI CẢM ƠN
Em xin gửi lời cảm ơn sâu sắc tới thầy giáo, TS.Huỳnh Quyết Thắng, đã
hướng dẫn, chỉ bảo và giúp đỡ em hết sức tận tình, để em hoàn thành tốt luận
văn này. Em xin gửi lời cảm ơn chân thành đến các thầy cô giáo trong khoa
Công nghệ thông tin, trường Đại học Bách khoa Hà Nội đã giảng dạy, tạo
điều kiện và giúp đỡ em trong suốt quá trình học tập tại trường.
Chân thành cảm ơn các anh, chị và các bạn học viên lớp CNTT-2004,
đã động viên và giúp đỡ em rất nhiều trong thời gian học tập và làm luận văn
tốt nghiệp, để em có được kết quả tốt.
Em xin chân thành cảm ơn!
7
LỜI NÓI ĐẦU
Xử lý thông tin là một nhu cầu tất yếu của con người, hoạt động này diễn
ra hằng ngày, hằng giờ và trong tất cả các lĩnh vực của đời sống xã hội. Với
sự ra đời của máy tính điện tử, một chiếc máy, xử lý thông tin một cách tự
động và nhanh chóng. Nó đã giúp con người tiết kiệm được rất nhiều thời
gian và công sức trong việc xử lý thông tin. Nhưng ta cũng biết rằng, để máy
tính thực hiện xử lý thông tin, người sử dụng phải đưa vào đó một chương
trình để điều khiển, và được gọi là phần mềm.
Với sự phát triển mạnh mẽ của nền công nghiệp nói chung, và công nghệ
máy tính nói riêng, ngày càng có nhiều tổ chức sử dụng máy tính vào việc xử
lý thông tin, nhằm giảm bớt nhân lực, và sự nhàm chán trong công việc.
Nhưng ta cũng biết rằng, khối lượng thông tin ngày càng lớn, các thao tác xử
lý ngày càng phức tạp. Do vậy, việc xây dựng phần mềm máy tính cũng trở
nên rất khó khăn và đòi hỏi phải tuân theo một quy trình làm việc thích hợp.
Công nghệ phần mềm ra đời, đã đưa ra các quy trình, giúp cho việc xây dựng
phần mềm được thuận lợi, chẳng hạn, quy trình phần mềm dựa trên các cá
nhân (PSP).
Tuy nhiên, với hiểu biết ngày càng sâu sắc hơn về công nghệ thông tin.
Con người, mà cụ thể là các khách hàng phần mềm, không dừng lại ở nhu cầu
cần có một phần mềm máy tính, mà họ còn muốn có nó một cách nhanh
chóng. Hơn nữa, phần mềm phải có kích thước vừa phải, các thao tác xử lý
nhanh, chính xác, đáp ứng yêu cầu của bài toán, đồng thời phải dễ sửa đổi và
nâng cấp. Ngoài ra, họ còn muốn dõi theo quá trình xây dựng phần mềm, để
chắc chắn rằng, phần mềm của họ được xây dựng đúng tiến độ, và đạt được
hiệu quả mong muốn.
Việc xây dựng một phần mềm theo PSP là khá xa rời khách hàng. Tổ
chức phần mềm nhận yêu cầu xây dựng phần mềm, sau một thời gian, giao
8
phần mềm cho khách hàng. Khách hàng chẳng biết gì về quá trình xây dựng
phần mềm và họ không thể tin chắc rằng, phần mềm có thể được xây dựng
thành công hay không?. Hơn nữa, việc sử dụng PSP, một tổ chức xây dựng
phần mềm giao các nhiệm vụ cần thực hiện cho từng cá nhân. Vì vậy, phần
mềm thường có nhiều lỗi, các thao tác xử lý chậm, thiều chính xác…
Để khắc phục các nhược điểm nói trên, cần có một quy trình làm phần
mềm mới, và phương pháp XP ra đời. Với mục tiêu là giao nhanh phần mềm
đến tay khách hàng, đồng thời khách hàng có thể dõi theo quá trình xây dựng
phần mềm, và tin tưởng vào khả năng phần mềm sẽ được hoàn thiện và có
hiệu quả tốt.
Với mong muốn được đóng góp một phần nhỏ bé vào xu thế phát triển
ngành công nghệ thông tin, đặc biệt trong giáo dục-đào tạo, cũng như trong
việc xây dựng phần mềm ứng dụng, đáp ứng yêu cầu xử lý thông tin ngày
càng cao của con người. Luận văn tốt nghiệp đã nghiên cứu đề tài: “ỨNG
DỤNG LẬP TRÌNH LINH HOẠT TRONG QUY TRÌNH CỘNG TÁC
PHẦN MỀM”. NVLV mong rằng nó sẽ góp phần vào việc nâng cao chất
lượng đào tạo sinh viên ngành công nghệ thông tin, và giúp các tổ chức phần
mềm biết thêm về một quy trình xây dựng phần mềm, khắc phục những
nhược điểm của các quy trình cũ. Đáp ứng được những đòi hỏi ngày càng
khắt khe của những khách hàng phần mềm.
Luận văn gồm 4 chương:
- Chương 1:Tổng quan về “Lập trình linh hoạt” và “Quy trình cộng tác
phần mềm”, nghiên cứu các khái niệm trong phương pháp XP và quy trình
CSP.
- Chương 2: Các “thông lệ” trong Lập trình linh hoạt, nghiên cứu các
“thông lệ” trong XP, đây là các quy tắc và các bước thực hiện mà người lập
trình cần tuân thủ khi xây dựng phần mềm dựa trên XP.
9
- Chương 3: Ứng dụng “Lập trình linh hoạt” trong “Quy trình cộng tác
phần mềm”, đề xuất một quy trình ứng dụng “Lập trình linh hoạt” trong “Quy
trình cộng tác phần mềm”, và các bước cần thực hiện để xây dựng phần mềm
theo quy trình này.
- Chương 4: Ứng dụng “Lập trình linh hoạt” trong đào tạo và phát triển
phần mềm, trình bày các thử nghiệm áp dụng phương pháp XP vào giảng dạy
một môn học lập trình, ứng dụng “Lập trình linh hoạt” trong “Quy trình cộng
tác phần mềm” để phát triển phần mềm “Quản lý nhân sự”.
Với khoảng thời gian nghiên cứu đề tài không nhiều và trình độ kiến
thức về công nghệ phần mềm còn hạn chế, nên luận văn không thể tránh khỏi
những sai sót. Em rất mong được sự đánh giá và góp ý bổ sung của các thầy
giáo, cô giáo và các bạn để luận văn được hoàn thiện hơn.
Hà nội, ngày tháng năm 2006
Học viên thực hiện
An Văn Minh
10
Chương 1. TỔNG QUAN VỀ LẬP TRÌNH “LINH HOẠT” VÀ
“QUY TRÌNH CỘNG TÁC PHẦN MỀM”
1.1. PHƯƠNG PHÁP LẬP TRÌNH LINH HOẠT
1.1.1. Lập trình “linh hoạt” là gì?
Lập trình “linh hoạt” (XP) là một tập các giá trị, các quy tắc và các bước
thực hiện, để phát triển nhanh một phần mềm chất lượng cao. Đây là một
phương pháp phát triển phần mềm rất linh hoạt, nó phù hợp để phát triển các
ứng dụng có kích thước vừa phải [5]. Một điểm đặc biệt của XP là trong quá
trình phát triển phần mềm, khách hàng tham gia cùng với nhà phát triển. Nhờ
đó, nhà phát triển nắm bắt được các thay đổi, các yêu cầu mới, làm giảm chi
phí để sửa đổi hệ thống.
XP đạt được thành công bởi nó làm cho khách hàng thoả mãn về tâm lý.
Các tổ chức phần mềm sử dụng XP, để phát triển nhanh một phần mềm và
giao cho khách hàng khi họ yêu cầu. XP giúp các nhà phát triển đáp ứng được
việc thay đổi các yêu cầu của khách hàng, thậm chí là đến cuối chu kỳ phát
triển hệ thống.
XP cải tiến một dự án phần mềm bằng 4 phương pháp chính [1]: trao đổi
thông tin, tính đơn giản, phản hồi thông tin, và sẵn sàng đón nhận thay đổi
yêu cầu. Các lập trình viên XP trao đổi thông tin với khách hàng và với các
lập trình viên trong cùng nhóm. Họ tạo ra thiết kế ở mức đơn giản và rõ ràng.
Họ nhận thông tin phản hồi bằng cách kiểm tra phần mềm của họ vào thời
gian đầu tiên của mỗi ngày làm việc. Họ giao phần mềm cho khách hàng
trong thời gian ngắn và thực hiện các thay đổi nếu được đề nghị. Như vậy, các
lập trình viên XP có thể đáp ứng được việc thay đổi các yêu cầu từ phía khách
hàng và những thay đổi về công nghệ.
11
XP khác với các phương pháp khác. Nó gồm nhiều thành phần nhỏ, các
thành phần riêng biệt không tạo ra được kịch bản, nhưng khi kết hợp chúng
lại với nhau ta có thể nhìn thấy một “bức tranh hoàn thiện”. Đây là một đặc
điểm khác với các phương pháp phát triển phần mềm truyền thống và dẫn đến
một thay đổi trong cách lập trình [1].
1.1.2. Tại sao sử dụng XP?
Như đã biết, hầu hết các phương pháp phát triển phần mềm truyền thống
đều bao gồm các bước: Nắm bắt các yêu cầu, phân tích, thiết kế, viết mã lệnh,
kiểm thử và bảo trì.
Cách tiếp cận này có thuận lợi đó là xác định được sản phẩm cuối cùng
trước khi tiến trình xây dựng phần mềm được thực hiện. Tuy nhiên, điều này
không phù hợp với các dự án phần mềm hiện đại với các yêu cầu luôn luôn
thay đổi. Khách hàng sẽ luôn đưa ra nhiều yêu cầu mới và cần những thông
tin phản hồi liên tục để điều chỉnh lại các lựa chọn của họ. Người lập trình cần
phải có một phương pháp thực hiện nào đó, để luôn sẵn sàng đón nhận những
thay đổi từ người dùng để họ có thể tiếp nhận được các thông tin phản hồi.
Nếu bạn làm việc trong một môi trường mà ở đó hệ thống cần phải đáp ứng
được các yêu cầu luôn thay đổi và khách hàng sẽ có lợi nếu việc bàn giao
phần mềm sớm hơn và thường xuyên thì nên xem xét việc sử dụng XP để
phát triển hệ thống. Các nhóm lập trình sử dụng XP nhận thấy rằng, họ sẽ bàn
giao các sản phẩm phần mềm chất lượng cao với số lượng rất lớn và nhanh
hơn trước đây rất nhiều [1].
1.1.3. Lịch sử phát triển của XP
XP được tạo ra bởi Kent Beck, Ward Cunningham và Ron Jeffries khi họ
làm việc cho dự án phát triển hệ thống Chrysler Comprehensive
Compensation (C3) [34]. Kent Beck trở thành chủ dự án C3 vào tháng 3 năm
1996 và bắt đầu lựa chọn một phương pháp phát triển để sử dụng vào việc
12
phát triển dự án. Kent Beck viết một cuốn sách về phương pháp đã sử dụng và
vào tháng 10 năm 1999, cuốn sách Extreme Programming Explained [34]
được xuất bản. Chrysler huỷ bỏ dự án C3 vào năm 2000, nhưng phương pháp
thực hiện dự án được ghi nhận trong lĩnh vực công nghệ phần mềm. Đến năm
2006, một số dự án phát triển phần mềm vẫn tiếp tục sử dụng XP.
* Nguồn gốc của XP
Việc phát triển phần mềm trong những năm 1990 có hai ảnh hưởng
chính: thứ nhất, lập trình hướng đối tượng (OOP) thay thế lập trình thủ tục khi
OOP được sự quan tâm ủng hộ của ngành công nghiệp; thứ hai là sự xuất hiện
của Internet và các công ty .COM nhấn mạnh thời gian đưa sản phẩm ra thị
trường và sự lớn mạnh của công ty là các yếu tố cạnh tranh thương mại. Các
yêu cầu thay đổi nhanh chóng làm ngắn lại vòng đời sản phẩm và thường
không phù hợp với các phương pháp phát triển phần mềm truyền thống.
Dự án C3 được thực hiện nhằm xác định cách thức tốt nhất để sử dụng
công nghệ đối tượng. Dựa trên việc nghiên cứu các hệ thống thanh toán tại
Chrysler, sử dụng ngôn ngữ Smalltalk. Dự án của Kent Beck được thực hiện
cùng với một lập trình viên giỏi về Smalltalk, để điều khiển quá trình thực
hiện của hệ thống và ông phát hiện ra nhiều vấn đề nảy sinh trong quá trình
phát triển. Từ đó, đề xuất và thực hiện một số thay đổi trong các cách thực
hiện của mình, cùng với một cộng tác viên là Ward Cunningham.
1.1.4. Các mục tiêu của XP
XP là một phương pháp phát triển phần mềm, giúp các tổ chức phần
mềm đạt được các mục tiêu [1]:
- Làm thoả mãn nhu cầu của người dùng.
- Đáp ứng những thay đổi mang tính xã hội.
- Đưa ra cách thức cải tiến phần mềm.
- Xác định kiểu phát triển phần mềm.
13
- Xác định các bước cần thực hiện để phát triển phần mềm.
Ưu điểm chính của XP là làm giảm chi phí cho việc thay đổi các yêu
cầu. Trong các phương pháp truyền thống, các yêu cầu của hệ thống được xác
định ngay từ khi bắt đầu phát triển dự án và thường được cố định từ thời điểm
đó, làm cho việc bảo trì hệ thống rất khó khăn và chí phí lớn.
Việc sử dụng XP có thể giảm được chi phí cho việc thay đổi là nhờ vào
các giá trị, các quy tắc và các bước thực hiện. Bằng cách áp dụng XP, một dự
án phát triển hệ thống sẽ mềm dẻo hơn trong việc sửa đổi hoặc bổ sung yêu
cầu [34].
1.1.5. Các giá trị của XP
XP gồm có 5 giá trị:
- Trao đổi thông tin.
- Tính đơn giản.
- Phản hồi thông tin.
- Phát triển phần mềm theo quan điểm của người dùng.
- Sự quan tâm (respect).
Để phát triển một hệ thống phần mềm, các lập trình viên phải hiểu được
những yêu cầu của hệ thống. Trong các phương pháp truyền thống, việc này
được thực hiện bằng cách làm tài liệu. Tuy nhiên, XP lại sử dụng các giá trị
của nó để phổ biến một cách nhanh chóng các kiến thức đến các thành viên
trong một nhóm phát triển. Mục đích là tạo cho tất cả những người phát triển
một quan điểm chung về hệ thống, để nó phù hợp với quan điểm của những
người sử dụng hệ thống. XP ủng hộ việc tạo ra các thiết kế đơn giản, thông
suốt, sự cộng tác của người sử dụng với lập trình viên, việc trao đổi thông tin
bằng lời, và việc phản hồi thông tin.
XP khuyến khích bắt đầu với giải pháp đơn giản nhất để cho mọi lập
trình viên đều hiểu được bài toán. Sự khác nhau giữa quan điểm này với các
14
phương pháp truyền thống là tập trung vào việc thiết kế và viết mã lệnh cho
các yêu cầu hôm nay thay vì làm việc đó cho ngay mai, tuần sau hoặc tháng
sau. Những người đề xuất XP chấp nhận điều không thuận lợi là có thể việc
cố gắng thay đổi hệ thống là thừa; có những hệ thống không cần sự thay đổi
sau khi đã xây dựng. Từ đó không cần phải tính đến chi phí cho việc sửa đổi
hệ thống. Nếu tính đến giá trị trao đổi thông tin, thì sự đơn giản trong thiết kế
và mã lệnh sẽ cải thiện được “chất lượng” của việc trao đổi. Một thiết kế đơn
giản cùng với mã lệnh rất đơn giản, làm cho các lập trình viên trong nhóm dễ
hiểu hơn.
Trong XP, thông tin phản hồi có liên quan đến nhiều vấn đề khác nhau
của việc phát triển hệ thống:
- Thông tin phản hồi từ hệ thống: bằng cách viết các bộ kiểm tra, hoặc
chạy các bộ kiểm tra để kiểm tra việc kết hợp theo định kỳ, các lập trình viên
có được các thông tin phản hồi trực tiếp từ trạng thái của hệ thống, sau khi
thực hiện các thay đổi.
- Thông tin phản hồi từ người dùng: Các bộ kiểm thử chức năng được
viết bởi người dùng và những người thực hiện kiểm thử. Họ sẽ nhận được các
thông tin cụ thể về trạng thái hiện tại của hệ thống. Việc kiểm thử này chỉ cần
chuẩn bị một lần cho cả hai hay ba tuần, vì vậy, người dùng có thể dễ dàng
hướng theo việc phát triển.
- Thông tin phản hồi từ nhóm: khi người dùng đưa ra các yêu cầu mới,
nhóm phát triển tiếp nhận yêu cầu và đưa ra một đánh giá trực tiếp về thời
gian cần thiết để thực hiện yêu cầu.
Thông tin phản hồi có liên quan mật thiết với việc trao đổi thông tin và
tính đơn giản. Các lỗi trong hệ thống có thể dễ dàng được phát hiện bằng cách
viết một bộ kiểm tra, để tìm ra đoạn mã lệnh có lỗi. Thông tin phản hồi trực
tiếp từ hệ thống cho phép các lập trình viên biết, để ghi nhận lỗi của đoạn mã
15
lệnh đó. Người dùng cũng có thể kiểm tra hệ thống định kỳ theo các yêu cầu
chức năng. Kent Beck nói: “Sự lạc quan là một nguy cơ gây ra lỗi trong lập
trình và thông tin phản hồi giúp xử lý việc này”.
“Sự quan tâm” có thể biểu thị theo nhiều cách. Thứ nhất, trong XP, các
thành viên trong nhóm nên quan tâm lẫn nhau, bởi các lập trình viên không
nên uỷ thác các thay đổi dẫn đển làm hỏng việc biên dịch, các bộ kiểm tra
đang tồn tại bị hỏng, hoặc làm trễ việc của người cùng nhóm. Thứ hai, các
thành viên quan tâm đến công việc của họ bằng cách luôn phấn đấu vì chất
lượng cao và tìm ra các thiết kế tốt nhất cho giải pháp ngay khi cải tiến mã
lệnh.
1.1.6. Các quy tắc của XP
Các quy tắc của XP định dạng cơ sở của XP được dựa trên các giá trị vừa
được mô tả và dự kiến để thúc đẩy việc đưa ra các quyết định trong dự án
phát triển hệ thống. Các quy tắc được dự kiến là cụ thể hơn so với các giá trị
và dễ dàng biên dịch hơn để đưa ra hướng dẫn trong tình huống đặc biệt.
1.1.6.1. Phản hồi thông tin
Sự phản hồi thông tin có tác dụng nhất nếu nó được thực hiện một cách
nhanh chóng. Thời gian giữa một kích hoạt và thông tin phản hồi nhận được
là vấn đề then chốt để nghiên cứu và thực hiện các thay đổi. Trong XP, ngoại
trừ các phương pháp phát triển hệ thống cũ, việc tiếp xúc với người dùng chỉ
trong những khoảng thời gian ngắn. Người dùng hiểu biết rõ ràng về hệ thống
đang được phát triển và có thể đưa ra thông tin phản hồi cũng như hướng theo
sự phát triển nếu cần thiết.
Các bộ kiểm tra (Unit tests) cũng làm cho sự phản hồi thông tin được
thực hiện nhanh hơn. Khi viết mã lệnh, bộ kiểm tra cung cấp thông tin phản
hồi trực tiếp để sao cho hệ thống tác động trở lại các thay đổi. Nếu trong
trường hợp khẩn cấp, các thay đổi ảnh hưởng đến một phần hệ thống mà
16
không nằm trong phạm vị của lập trình viên đã tạo ra thành phần đó, lập trình
viên đó không cần chú ý đến điều này. Khả năng xuất hiện lỗi này là rất lớn
khi hệ thống đang trong thời gian xây dựng.
1.1.6.2. Tính đơn giản
Tính đơn giản là việc xem xét mọi vấn đề nếu như giải pháp của nó là
“hết sức đơn giản”. Các phương pháp phát triển hệ thống cũ nói đến việc lập
kế hoạch cho tương lai và mã hoá cho khả năng sử dụng lại. XP không thực
hiện theo ý tưởng này.
Những người ủng hộ XP nói rằng, việc tạo ra tất cả các thay đổi lớn
trong một lần là không thể thực hiện được. XP áp dụng các thay đổi mang
tính cải tiến: chằng hạn, cứ sau 3 tuần một hệ thống có thể có những bước
hoàn thiện nhỏ. Bằng cách tạo ra nhiều bước hoàn thiện nhỏ, người sử dụng
thể tác động nhiểu hơn đối với quá trình phát triển và đối với hệ thống đang
được phát triển.
1.1.6.3. Đón nhận sự thay đổi
Quy tắc đón nhận sự thay đổi là không chống lại các thay đổi và phải
nắm bắt được chúng. Trong trường hợp cần thiết, nếu có yêu cầu thay đổi nào
đó đến từ phía người dùng, các lập trình viên sẵn sàng đón nhận yêu cầu đó
đồng thời lập kế hoạch cho các yêu cầu sắp tới.
1.1.7. Các hoạt động theo XP
XP mô tả 4 hoạt động chủ yếu được thực hiện trong quá trình phát triển
phần mềm [34] gồm: Viết mã lệnh, kiểm thử, nhận định các tác nhân hệ thống
và thiết kế.
1.1.7.1. Viết mã lệnh
Những người ủng hộ XP cho rằng, sản phẩm thực sự quan trọng của quá
trình phát triển hệ thống là mã lệnh. Không có mã lệnh bạn chẳng có gì hết.
17
Việc viết mã lệnh có thể là việc vẽ các sơ đồ từ đó sẽ phát sinh mã lệnh,
việc viết kịch bản cho hệ thống dựa trên web hoặc viết lệnh cho chương trình
cần thiết phải được biên dịch.
Việc viết mã lệnh cũng có thể được dùng để chỉ ra giải pháp phù hợp
nhất cho bài toán. Trong trường hợp này, XP tán thành việc đối mặt với nhiều
lựa chọn cho một vấn đề lập trình, một lựa chọn đơn giản cho việc viết mã
lệnh cho tất cả các giải pháp và xác định với các bộ kiểm tra tự động cho giải
pháp phù hợp nhất.
Việc viết mã lệnh cũng giúp trao đổi những suy nghĩ về các vấn đề lập
trình. Một lập trình viên thực hiện một bài toán lập trình phức tạp và thấy rằng
khó có thể giải thích giải pháp đó cho các lập trình viên khác, có thể viết mã
lệnh cho nó và sử dụng mã lệnh để giải thích ý định của mình. Các lập trình
viên khác có thể giải thích vấn đề này bằng cách viết mã lệnh theo suy nghĩ
của họ.
1.1.7.2. Kiểm thử
Một lập trình viên không thể chắc chắn về bất kỳ điều gì trừ khi anh ta
đã kiểm tra nó. Việc kiểm thử không phải là để nhận biết được vấn đề mà là
yêu cầu về tính chính xác của người dùng. Trong phát triển phần mềm, XP
cho rằng điều này có nghĩa là một người không thể chắc chắn rằng một chức
năng sẽ hoạt động trừ khi anh ta đã kiểm tra nó. Từ đó, đặt ra câu hỏi là cần
phải xác định điều gì mà anh ta chưa chắc chắn về nó.
- Các lập trình viên có thể không chắc chắn về mã lệnh mà họ đã viết so
với mã lệnh mà họ nên viết. Để kiểm tra điều này, XP sử dụng các bộ kiểm
tra (Unit Tests). Có các bộ kiểm tra, thực hiện việc kiểm tra mã lệnh một cách
tự động. Các lập trình viên sẽ cố gắng viết mã lệnh, nhưng họ có thể nghĩ rằng
các bộ kiểm tra có thể làm hỏng mã lệnh mà họ đang viết; tuy nhiên, nếu tất
18
cả các bộ kiểm tra đều thực hiện thành công thì việc viết mã lệnh là hoàn
thiện.
- Các lập trình viên có thể không chắc chắn về điều mà họ đã làm so với
điều mà đáng ra họ nên làm. Để kiểm tra việc này, XP sử dụng các bộ kiểm
tra chuyên biệt (acceptance tests) dựa trên các yêu cầu được đưa ra bởi khách
hàng trong giai đoạn tìm hiểu việc lập kế hoạch theo từng bước (release
planning).
1.1.7.3. Nhận định các tác nhân của hệ thống
Các lập trình viên không cần biết bất kỳ điều gì về mặt nghiệp vụ của hệ
thống trong quá trình phát triển. Nhưng chức năng của hệ thống lại được xác
định từ nghiệp vụ của hệ thống. Để các lập trình viên tìm ra được những gì
nên thuộc về chức năng của hệ thống, họ cần phải tìm hiểu nghiệp vụ của hệ
thống.
Các lập trình viên phải tìm hiểu trong phạm vi rộng: họ phải tìm hiểu
những gì mà người dùng yêu cầu. Họ phải cố hiểu vấn đề nghiệp vụ của hệ
thống, và gửi thông tin phản hồi cho người dùng về vấn đề của anh ta, để cải
thiện sự hiểu biết của anh ta về bài toán.
Việc trao đổi giữa khách hàng và lập trình viên được trình bày trong
phần “Planning game”.
1.1.7.4. Thiết kế
Từ quan điểm về tính đơn giản, một người có thể nói rằng việc phát triển
hệ thống không cần thêm điều gì ngoài việc viết mã lệnh, kiểm tra và tìm hiểu
các yếu tố tác động đến hệ thống. Nếu các hoạt động này được thực hiện tốt,
kết quả sẽ luôn là một hệ thống làm việc được. Trong thực tế, hệ thống này sẽ
không làm việc. Một người có thể thực hiện công việc theo một cách nào đó
mà không cần thiết kế, nhưng cuối cùng sẽ bị mắc kẹt. hệ thống sẽ trở nên quá
phức tạp, và những ràng buộc trong hệ thống sẽ ngày càng rõ ràng.
19
Có thể tránh điều này bằng cách tạo ra một cấu trúc thiết kế được tổ chức
một cách logic bên trong hệ thống. Một thiết kế tốt sẽ tránh được nhiều phục
thuộc trong hệ thống; điều này có nghĩa là việc thay đổi một phần hệ thống
không ảnh hưởng đến những phần khác của hệ thống.
1.2. QUY TRÌNH CỘNG TÁC PHẦN MỀM
Trong công nghiệp người ta đã chứng minh rằng hai lập trình viên làm
việc bên cạnh nhau, trên cùng một máy tính, cùng thiết kế thuật toán, cùng
viết mã lệnh, hay cùng kiểm tra chương trình, về căn bản, hiệu quả hơn so với
hai người làm việc độc lập[35]. Điều này cho thấy rằng, các lập trình viên sẽ
làm việc tốt hơn khi cùng thực hiện một quá trình đã được xác định, người
này xem xét lại công việc của người kia. Từ việc đưa hai ý tưởng đến cùng
giải quyết một công việc, người ta tạo ra quy trình cộng tác phần mềm (CSP).
CSP là một quy trình phát triển phần mềm được xác định, có tính chất lặp lại,
với hai lập trình viên cộng tác làm việc. CSP là sự mở rộng của quá trình phần
mềm độc lập (PSP) và nó dựa trên nền tảng của PSP.
Để chứng minh hiệu quả của CSP, một thí nghiệm được tiến hành năm
1999, với gần 40 sinh viên cuối khoá, ngành khoa học máy tính tại đại học
Utah. Tất cả các sinh viên đều được học CSP và PSP [35]. Có 3 nhóm, mỗi
nhóm hai sinh viên cùng làm việc trên một máy tính để phát triển các nhiệm
vụ lập trình được giao. Các sinh viên khác làm việc độc lập và cũng thực hiện
những nhiệm vụ tương tự. Nghiên cứu đã đóng góp vào việc tạo ra một quá
trình làm phần mềm xác định, có tính chất lặp lại, quy trình cộng tác phần
mềm, với các cặp lập trình viên cộng tác. Thí nghiệm đã đưa ra một số nhận
định sau về các nhóm lập trình cộng tác, sử dụng CSP [35]:
1. Các cặp lập trình cộng tác mất thời gian nhiều hơn so với lập trình độc
lập là 15%. Tuy nhiên, thời gian này là không đáng kể.
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
------------------------------------------------------
LUẬN VĂN THẠC SỸ KHOA HỌC
ỨNG DỤNG LẬP TRÌNH LINH HOẠT TRONG
QUY TRÌNH CỘNG TÁC PHẦN MỀM
NGÀNH: CÔNG NGHỆ THÔNG TIN
MÃ SỐ:
AN VĂN MINH
Người hướng dẫn khoa học: TS. HUỲNH QUYẾT THẮNG
HÀ NỘI - 2006
LỜI CAM ĐOAN
Em xin cam đoan luận văn tốt nghiệp này là kết quả nghiên cứu của
bản thân, dưới sự hướng dẫn của thầy giáo, TS.Huỳnh Quyết Thắng. Nếu có
gì sai phạm em xin hoàn toàn chịu trách nhiệm.
Người làm cam đoan
An Văn Minh
2
MỤC LỤC
DANH SÁCH BẢNG ....................................................................................... 5
DANH SÁCH CÁC HÌNH VẼ ......................................................................... 5
LỜI CẢM ƠN ................................................................................................... 6
LỜI NÓI ĐẦU .................................................................................................. 7
Chương 1. TỔNG QUAN VỀ LẬP TRÌNH “LINH HOẠT” VÀ “QUY
TRÌNH CỘNG TÁC PHẦN MỀM”............................................................... 10
1.1. PHƯƠNG PHÁP LẬP TRÌNH LINH HOẠT...................................... 10
1.1.1. Lập trình “linh hoạt” là gì?............................................................. 10
1.1.2. Tại sao sử dụng XP?....................................................................... 11
1.1.3. Lịch sử phát triển của XP............................................................... 11
1.1.4. Các mục tiêu của XP ...................................................................... 12
1.1.5. Các giá trị của XP........................................................................... 13
1.1.6. Các quy tắc của XP ........................................................................ 15
1.1.7. Các hoạt động theo XP................................................................... 16
1.2. QUY TRÌNH CỘNG TÁC PHẦN MỀM ............................................ 19
1.2.1. Giới thiệu quá trình cộng tác phần mềm ........................................ 20
1.2.2. Các yếu tố liên quan đến CSP ........................................................ 23
1.2.3. Các yếu tố cơ bản ........................................................................... 27
1.2.4. Định nghĩa quá trình cộng tác phần mềm ...................................... 29
1.3. KẾT HỢP XP TRONG CSP ĐỂ PHÁT TRIỂN PHẦN MỀM ........... 38
Chương 2. CÁC “THÔNG LỆ” TRONG XP ................................................. 40
2.1. TỔNG QUAN VỀ CÁC THÔNG LỆ TRONG XP ............................. 40
2.2. CÁC THÔNG LỆ TRONG XP ............................................................ 41
2.2.1. Tiêu chuẩn mã hoá ......................................................................... 41
2.2.2. Sở hữu chung mã lệnh.................................................................... 41
2.2.3. Sự kết hợp thường xuyên ............................................................... 41
3
2.2.4. Cải tiến thiết kế .............................................................................. 42
2.2.5. Thiết kế đơn giản............................................................................ 42
2.2.6. Các bước hoàn thiện nhỏ................................................................ 42
2.2.7. Tốc độ làm việc vừa phải ............................................................... 43
2.2.8. Hệ thống trong suốt ........................................................................ 43
2.2.9. Lập trình theo cặp........................................................................... 43
2.2.10. Lập kế hoạch dự án ...................................................................... 44
2.2.11. Phát triển hướng vào việc kiểm tra .............................................. 49
2.2.12. Làm việc theo nhóm..................................................................... 49
2.3. CẢI TIẾN MÃ LỆNH .......................................................................... 50
2.3.1. Giới thiệu về “cải tiến mã lệnh”..................................................... 50
2.3.2. Làm tài liệu cải tiến mã lệnh .......................................................... 51
2.3.3. Các đoạn mã lệnh tồi...................................................................... 52
2.3.4. Các kỹ thuật cơ bản sử dụng để cải tiến mã lệnh........................... 53
2.3.5. Cải tiến mã lệnh trong quá trình phát triển phần mềm .................. 54
2.3.6. Lợi ích của cải tiến mã lệnh ........................................................... 55
2.3.7. Các vấn đề cần lưu ý khi cải tiến mã lệnh...................................... 57
2. 4. KẾT LUẬN ......................................................................................... 58
Chương 3. ỨNG DỤNG LẬP TRÌNH LINH HOẠT TRONG QUY TRÌNH
CỘNG TÁC PHẦN MỀM .............................................................................. 59
3.1. Ý TƯỞNG LẬP TRÌNH LINH HOẠT TRONG QUY TRÌNH CỘNG
TÁC PHẦN MỀM ....................................................................................... 59
3.2. QUY TRÌNH PHÁT TRIỂN PHẦN MỀM ỨNG DỤNG XP TRONG
CSP .............................................................................................................. 59
3.2.1. Mức 0: Điểm xuất phát................................................................... 59
3.2.2. Mức 1: Quản lý chất lượng cộng tác.............................................. 63
3.3. ĐÁNH GIÁ SO SÁNH......................................................................... 72
4
3.3.1. So sánh với quy trình cộng tác phần mềm ..................................... 72
3.3.2. So sánh với phương pháp lập trình linh hoạt ................................. 72
3.4. KẾT LUẬN........................................................................................... 72
Chương 4. THỬ NGHIỆM QUY TRÌNH TRONG ĐÀO TẠO VÀ TRONG
PHÁT TRIỂN PHẦN MỀM ........................................................................... 73
4.1. THỬ NGHIỆM LẬP TRÌNH LINH HOẠT TRONG GIẢNG DẠY
MÔN HỌC “LẬP TRÌNH TRÊN WINDOWS”......................................... 73
4.1.1. Giới thiệu nội dung và mục đích môn học..................................... 73
4.1.2. Phương pháp giảng dạy truyền thống ............................................ 74
4.1.3. Áp dụng phương pháp XP vào việc giảng dạy môn học “Lập trình
trên windows”........................................................................................... 76
4.2. THỬ NGHIỆM QUY TRÌNH ĐỂ PHÁT TRIỂN ỨNG DỤNG
“QUẢN LÝ NHÂN SỰ” CHO CÔNG TY HỒNG HÀ ............................. 81
4.2.1. Giới thiệu hệ thống......................................................................... 81
4.2.2. Phương pháp phát triển hệ thống ................................................... 82
4.2.3. Xây dựng hệ thống ......................................................................... 83
4.2.4. Đánh giá hiệu quả việc ứng dụng “Lập trình linh hoạt” trong “Quy
trình cộng tác phần mềm” ........................................................................ 92
4.3. KẾT LUẬN........................................................................................... 93
TỔNG KẾT ..................................................................................................... 95
PHỤ LỤC........................................................................................................ 98
TÀI LIỆU THAM KHẢO............................................................................. 103
5
DANH SÁCH BẢNG
Tên bảng Trang
Bảng 3.1: So sánh quy trình ứng dụng XP trong CSP với CSP 70
Bảng 3.2: So sánh quy trình ứng dụng XP trong CSP với XP 70
Bảng 4.1: So sánh tỷ lệ sinh viên hoàn thành bài tập trong thời
78
gian quy định trong một buổi học
Bảng 4.2: So sánh kết quả học tập phần lý thuyết cơ bản 78
Bảng 4.3: So sánh kết quả thực hiện bài tập lớn 78
Bảng 4.4: Tóm tắt kết quả thực hiện và kết quả các ứng dụng 90
Bảng 4.5. So sánh thời gian thực hiện 91
Bảng 4.6 So sánh chất lượng chương trình 91
DANH SÁCH CÁC HÌNH VẼ
Tên hình vẽ Trang
Hình 1.1: Mô hình mức tăng trưởng của CSP 26
Hình 1.2: Thẻ CRC 31
Hình 3.1. Mô tả các bước trong quy trình ứng dụng XP trong
69
CSP
6
LỜI CẢM ƠN
Em xin gửi lời cảm ơn sâu sắc tới thầy giáo, TS.Huỳnh Quyết Thắng, đã
hướng dẫn, chỉ bảo và giúp đỡ em hết sức tận tình, để em hoàn thành tốt luận
văn này. Em xin gửi lời cảm ơn chân thành đến các thầy cô giáo trong khoa
Công nghệ thông tin, trường Đại học Bách khoa Hà Nội đã giảng dạy, tạo
điều kiện và giúp đỡ em trong suốt quá trình học tập tại trường.
Chân thành cảm ơn các anh, chị và các bạn học viên lớp CNTT-2004,
đã động viên và giúp đỡ em rất nhiều trong thời gian học tập và làm luận văn
tốt nghiệp, để em có được kết quả tốt.
Em xin chân thành cảm ơn!
7
LỜI NÓI ĐẦU
Xử lý thông tin là một nhu cầu tất yếu của con người, hoạt động này diễn
ra hằng ngày, hằng giờ và trong tất cả các lĩnh vực của đời sống xã hội. Với
sự ra đời của máy tính điện tử, một chiếc máy, xử lý thông tin một cách tự
động và nhanh chóng. Nó đã giúp con người tiết kiệm được rất nhiều thời
gian và công sức trong việc xử lý thông tin. Nhưng ta cũng biết rằng, để máy
tính thực hiện xử lý thông tin, người sử dụng phải đưa vào đó một chương
trình để điều khiển, và được gọi là phần mềm.
Với sự phát triển mạnh mẽ của nền công nghiệp nói chung, và công nghệ
máy tính nói riêng, ngày càng có nhiều tổ chức sử dụng máy tính vào việc xử
lý thông tin, nhằm giảm bớt nhân lực, và sự nhàm chán trong công việc.
Nhưng ta cũng biết rằng, khối lượng thông tin ngày càng lớn, các thao tác xử
lý ngày càng phức tạp. Do vậy, việc xây dựng phần mềm máy tính cũng trở
nên rất khó khăn và đòi hỏi phải tuân theo một quy trình làm việc thích hợp.
Công nghệ phần mềm ra đời, đã đưa ra các quy trình, giúp cho việc xây dựng
phần mềm được thuận lợi, chẳng hạn, quy trình phần mềm dựa trên các cá
nhân (PSP).
Tuy nhiên, với hiểu biết ngày càng sâu sắc hơn về công nghệ thông tin.
Con người, mà cụ thể là các khách hàng phần mềm, không dừng lại ở nhu cầu
cần có một phần mềm máy tính, mà họ còn muốn có nó một cách nhanh
chóng. Hơn nữa, phần mềm phải có kích thước vừa phải, các thao tác xử lý
nhanh, chính xác, đáp ứng yêu cầu của bài toán, đồng thời phải dễ sửa đổi và
nâng cấp. Ngoài ra, họ còn muốn dõi theo quá trình xây dựng phần mềm, để
chắc chắn rằng, phần mềm của họ được xây dựng đúng tiến độ, và đạt được
hiệu quả mong muốn.
Việc xây dựng một phần mềm theo PSP là khá xa rời khách hàng. Tổ
chức phần mềm nhận yêu cầu xây dựng phần mềm, sau một thời gian, giao
8
phần mềm cho khách hàng. Khách hàng chẳng biết gì về quá trình xây dựng
phần mềm và họ không thể tin chắc rằng, phần mềm có thể được xây dựng
thành công hay không?. Hơn nữa, việc sử dụng PSP, một tổ chức xây dựng
phần mềm giao các nhiệm vụ cần thực hiện cho từng cá nhân. Vì vậy, phần
mềm thường có nhiều lỗi, các thao tác xử lý chậm, thiều chính xác…
Để khắc phục các nhược điểm nói trên, cần có một quy trình làm phần
mềm mới, và phương pháp XP ra đời. Với mục tiêu là giao nhanh phần mềm
đến tay khách hàng, đồng thời khách hàng có thể dõi theo quá trình xây dựng
phần mềm, và tin tưởng vào khả năng phần mềm sẽ được hoàn thiện và có
hiệu quả tốt.
Với mong muốn được đóng góp một phần nhỏ bé vào xu thế phát triển
ngành công nghệ thông tin, đặc biệt trong giáo dục-đào tạo, cũng như trong
việc xây dựng phần mềm ứng dụng, đáp ứng yêu cầu xử lý thông tin ngày
càng cao của con người. Luận văn tốt nghiệp đã nghiên cứu đề tài: “ỨNG
DỤNG LẬP TRÌNH LINH HOẠT TRONG QUY TRÌNH CỘNG TÁC
PHẦN MỀM”. NVLV mong rằng nó sẽ góp phần vào việc nâng cao chất
lượng đào tạo sinh viên ngành công nghệ thông tin, và giúp các tổ chức phần
mềm biết thêm về một quy trình xây dựng phần mềm, khắc phục những
nhược điểm của các quy trình cũ. Đáp ứng được những đòi hỏi ngày càng
khắt khe của những khách hàng phần mềm.
Luận văn gồm 4 chương:
- Chương 1:Tổng quan về “Lập trình linh hoạt” và “Quy trình cộng tác
phần mềm”, nghiên cứu các khái niệm trong phương pháp XP và quy trình
CSP.
- Chương 2: Các “thông lệ” trong Lập trình linh hoạt, nghiên cứu các
“thông lệ” trong XP, đây là các quy tắc và các bước thực hiện mà người lập
trình cần tuân thủ khi xây dựng phần mềm dựa trên XP.
9
- Chương 3: Ứng dụng “Lập trình linh hoạt” trong “Quy trình cộng tác
phần mềm”, đề xuất một quy trình ứng dụng “Lập trình linh hoạt” trong “Quy
trình cộng tác phần mềm”, và các bước cần thực hiện để xây dựng phần mềm
theo quy trình này.
- Chương 4: Ứng dụng “Lập trình linh hoạt” trong đào tạo và phát triển
phần mềm, trình bày các thử nghiệm áp dụng phương pháp XP vào giảng dạy
một môn học lập trình, ứng dụng “Lập trình linh hoạt” trong “Quy trình cộng
tác phần mềm” để phát triển phần mềm “Quản lý nhân sự”.
Với khoảng thời gian nghiên cứu đề tài không nhiều và trình độ kiến
thức về công nghệ phần mềm còn hạn chế, nên luận văn không thể tránh khỏi
những sai sót. Em rất mong được sự đánh giá và góp ý bổ sung của các thầy
giáo, cô giáo và các bạn để luận văn được hoàn thiện hơn.
Hà nội, ngày tháng năm 2006
Học viên thực hiện
An Văn Minh
10
Chương 1. TỔNG QUAN VỀ LẬP TRÌNH “LINH HOẠT” VÀ
“QUY TRÌNH CỘNG TÁC PHẦN MỀM”
1.1. PHƯƠNG PHÁP LẬP TRÌNH LINH HOẠT
1.1.1. Lập trình “linh hoạt” là gì?
Lập trình “linh hoạt” (XP) là một tập các giá trị, các quy tắc và các bước
thực hiện, để phát triển nhanh một phần mềm chất lượng cao. Đây là một
phương pháp phát triển phần mềm rất linh hoạt, nó phù hợp để phát triển các
ứng dụng có kích thước vừa phải [5]. Một điểm đặc biệt của XP là trong quá
trình phát triển phần mềm, khách hàng tham gia cùng với nhà phát triển. Nhờ
đó, nhà phát triển nắm bắt được các thay đổi, các yêu cầu mới, làm giảm chi
phí để sửa đổi hệ thống.
XP đạt được thành công bởi nó làm cho khách hàng thoả mãn về tâm lý.
Các tổ chức phần mềm sử dụng XP, để phát triển nhanh một phần mềm và
giao cho khách hàng khi họ yêu cầu. XP giúp các nhà phát triển đáp ứng được
việc thay đổi các yêu cầu của khách hàng, thậm chí là đến cuối chu kỳ phát
triển hệ thống.
XP cải tiến một dự án phần mềm bằng 4 phương pháp chính [1]: trao đổi
thông tin, tính đơn giản, phản hồi thông tin, và sẵn sàng đón nhận thay đổi
yêu cầu. Các lập trình viên XP trao đổi thông tin với khách hàng và với các
lập trình viên trong cùng nhóm. Họ tạo ra thiết kế ở mức đơn giản và rõ ràng.
Họ nhận thông tin phản hồi bằng cách kiểm tra phần mềm của họ vào thời
gian đầu tiên của mỗi ngày làm việc. Họ giao phần mềm cho khách hàng
trong thời gian ngắn và thực hiện các thay đổi nếu được đề nghị. Như vậy, các
lập trình viên XP có thể đáp ứng được việc thay đổi các yêu cầu từ phía khách
hàng và những thay đổi về công nghệ.
11
XP khác với các phương pháp khác. Nó gồm nhiều thành phần nhỏ, các
thành phần riêng biệt không tạo ra được kịch bản, nhưng khi kết hợp chúng
lại với nhau ta có thể nhìn thấy một “bức tranh hoàn thiện”. Đây là một đặc
điểm khác với các phương pháp phát triển phần mềm truyền thống và dẫn đến
một thay đổi trong cách lập trình [1].
1.1.2. Tại sao sử dụng XP?
Như đã biết, hầu hết các phương pháp phát triển phần mềm truyền thống
đều bao gồm các bước: Nắm bắt các yêu cầu, phân tích, thiết kế, viết mã lệnh,
kiểm thử và bảo trì.
Cách tiếp cận này có thuận lợi đó là xác định được sản phẩm cuối cùng
trước khi tiến trình xây dựng phần mềm được thực hiện. Tuy nhiên, điều này
không phù hợp với các dự án phần mềm hiện đại với các yêu cầu luôn luôn
thay đổi. Khách hàng sẽ luôn đưa ra nhiều yêu cầu mới và cần những thông
tin phản hồi liên tục để điều chỉnh lại các lựa chọn của họ. Người lập trình cần
phải có một phương pháp thực hiện nào đó, để luôn sẵn sàng đón nhận những
thay đổi từ người dùng để họ có thể tiếp nhận được các thông tin phản hồi.
Nếu bạn làm việc trong một môi trường mà ở đó hệ thống cần phải đáp ứng
được các yêu cầu luôn thay đổi và khách hàng sẽ có lợi nếu việc bàn giao
phần mềm sớm hơn và thường xuyên thì nên xem xét việc sử dụng XP để
phát triển hệ thống. Các nhóm lập trình sử dụng XP nhận thấy rằng, họ sẽ bàn
giao các sản phẩm phần mềm chất lượng cao với số lượng rất lớn và nhanh
hơn trước đây rất nhiều [1].
1.1.3. Lịch sử phát triển của XP
XP được tạo ra bởi Kent Beck, Ward Cunningham và Ron Jeffries khi họ
làm việc cho dự án phát triển hệ thống Chrysler Comprehensive
Compensation (C3) [34]. Kent Beck trở thành chủ dự án C3 vào tháng 3 năm
1996 và bắt đầu lựa chọn một phương pháp phát triển để sử dụng vào việc
12
phát triển dự án. Kent Beck viết một cuốn sách về phương pháp đã sử dụng và
vào tháng 10 năm 1999, cuốn sách Extreme Programming Explained [34]
được xuất bản. Chrysler huỷ bỏ dự án C3 vào năm 2000, nhưng phương pháp
thực hiện dự án được ghi nhận trong lĩnh vực công nghệ phần mềm. Đến năm
2006, một số dự án phát triển phần mềm vẫn tiếp tục sử dụng XP.
* Nguồn gốc của XP
Việc phát triển phần mềm trong những năm 1990 có hai ảnh hưởng
chính: thứ nhất, lập trình hướng đối tượng (OOP) thay thế lập trình thủ tục khi
OOP được sự quan tâm ủng hộ của ngành công nghiệp; thứ hai là sự xuất hiện
của Internet và các công ty .COM nhấn mạnh thời gian đưa sản phẩm ra thị
trường và sự lớn mạnh của công ty là các yếu tố cạnh tranh thương mại. Các
yêu cầu thay đổi nhanh chóng làm ngắn lại vòng đời sản phẩm và thường
không phù hợp với các phương pháp phát triển phần mềm truyền thống.
Dự án C3 được thực hiện nhằm xác định cách thức tốt nhất để sử dụng
công nghệ đối tượng. Dựa trên việc nghiên cứu các hệ thống thanh toán tại
Chrysler, sử dụng ngôn ngữ Smalltalk. Dự án của Kent Beck được thực hiện
cùng với một lập trình viên giỏi về Smalltalk, để điều khiển quá trình thực
hiện của hệ thống và ông phát hiện ra nhiều vấn đề nảy sinh trong quá trình
phát triển. Từ đó, đề xuất và thực hiện một số thay đổi trong các cách thực
hiện của mình, cùng với một cộng tác viên là Ward Cunningham.
1.1.4. Các mục tiêu của XP
XP là một phương pháp phát triển phần mềm, giúp các tổ chức phần
mềm đạt được các mục tiêu [1]:
- Làm thoả mãn nhu cầu của người dùng.
- Đáp ứng những thay đổi mang tính xã hội.
- Đưa ra cách thức cải tiến phần mềm.
- Xác định kiểu phát triển phần mềm.
13
- Xác định các bước cần thực hiện để phát triển phần mềm.
Ưu điểm chính của XP là làm giảm chi phí cho việc thay đổi các yêu
cầu. Trong các phương pháp truyền thống, các yêu cầu của hệ thống được xác
định ngay từ khi bắt đầu phát triển dự án và thường được cố định từ thời điểm
đó, làm cho việc bảo trì hệ thống rất khó khăn và chí phí lớn.
Việc sử dụng XP có thể giảm được chi phí cho việc thay đổi là nhờ vào
các giá trị, các quy tắc và các bước thực hiện. Bằng cách áp dụng XP, một dự
án phát triển hệ thống sẽ mềm dẻo hơn trong việc sửa đổi hoặc bổ sung yêu
cầu [34].
1.1.5. Các giá trị của XP
XP gồm có 5 giá trị:
- Trao đổi thông tin.
- Tính đơn giản.
- Phản hồi thông tin.
- Phát triển phần mềm theo quan điểm của người dùng.
- Sự quan tâm (respect).
Để phát triển một hệ thống phần mềm, các lập trình viên phải hiểu được
những yêu cầu của hệ thống. Trong các phương pháp truyền thống, việc này
được thực hiện bằng cách làm tài liệu. Tuy nhiên, XP lại sử dụng các giá trị
của nó để phổ biến một cách nhanh chóng các kiến thức đến các thành viên
trong một nhóm phát triển. Mục đích là tạo cho tất cả những người phát triển
một quan điểm chung về hệ thống, để nó phù hợp với quan điểm của những
người sử dụng hệ thống. XP ủng hộ việc tạo ra các thiết kế đơn giản, thông
suốt, sự cộng tác của người sử dụng với lập trình viên, việc trao đổi thông tin
bằng lời, và việc phản hồi thông tin.
XP khuyến khích bắt đầu với giải pháp đơn giản nhất để cho mọi lập
trình viên đều hiểu được bài toán. Sự khác nhau giữa quan điểm này với các
14
phương pháp truyền thống là tập trung vào việc thiết kế và viết mã lệnh cho
các yêu cầu hôm nay thay vì làm việc đó cho ngay mai, tuần sau hoặc tháng
sau. Những người đề xuất XP chấp nhận điều không thuận lợi là có thể việc
cố gắng thay đổi hệ thống là thừa; có những hệ thống không cần sự thay đổi
sau khi đã xây dựng. Từ đó không cần phải tính đến chi phí cho việc sửa đổi
hệ thống. Nếu tính đến giá trị trao đổi thông tin, thì sự đơn giản trong thiết kế
và mã lệnh sẽ cải thiện được “chất lượng” của việc trao đổi. Một thiết kế đơn
giản cùng với mã lệnh rất đơn giản, làm cho các lập trình viên trong nhóm dễ
hiểu hơn.
Trong XP, thông tin phản hồi có liên quan đến nhiều vấn đề khác nhau
của việc phát triển hệ thống:
- Thông tin phản hồi từ hệ thống: bằng cách viết các bộ kiểm tra, hoặc
chạy các bộ kiểm tra để kiểm tra việc kết hợp theo định kỳ, các lập trình viên
có được các thông tin phản hồi trực tiếp từ trạng thái của hệ thống, sau khi
thực hiện các thay đổi.
- Thông tin phản hồi từ người dùng: Các bộ kiểm thử chức năng được
viết bởi người dùng và những người thực hiện kiểm thử. Họ sẽ nhận được các
thông tin cụ thể về trạng thái hiện tại của hệ thống. Việc kiểm thử này chỉ cần
chuẩn bị một lần cho cả hai hay ba tuần, vì vậy, người dùng có thể dễ dàng
hướng theo việc phát triển.
- Thông tin phản hồi từ nhóm: khi người dùng đưa ra các yêu cầu mới,
nhóm phát triển tiếp nhận yêu cầu và đưa ra một đánh giá trực tiếp về thời
gian cần thiết để thực hiện yêu cầu.
Thông tin phản hồi có liên quan mật thiết với việc trao đổi thông tin và
tính đơn giản. Các lỗi trong hệ thống có thể dễ dàng được phát hiện bằng cách
viết một bộ kiểm tra, để tìm ra đoạn mã lệnh có lỗi. Thông tin phản hồi trực
tiếp từ hệ thống cho phép các lập trình viên biết, để ghi nhận lỗi của đoạn mã
15
lệnh đó. Người dùng cũng có thể kiểm tra hệ thống định kỳ theo các yêu cầu
chức năng. Kent Beck nói: “Sự lạc quan là một nguy cơ gây ra lỗi trong lập
trình và thông tin phản hồi giúp xử lý việc này”.
“Sự quan tâm” có thể biểu thị theo nhiều cách. Thứ nhất, trong XP, các
thành viên trong nhóm nên quan tâm lẫn nhau, bởi các lập trình viên không
nên uỷ thác các thay đổi dẫn đển làm hỏng việc biên dịch, các bộ kiểm tra
đang tồn tại bị hỏng, hoặc làm trễ việc của người cùng nhóm. Thứ hai, các
thành viên quan tâm đến công việc của họ bằng cách luôn phấn đấu vì chất
lượng cao và tìm ra các thiết kế tốt nhất cho giải pháp ngay khi cải tiến mã
lệnh.
1.1.6. Các quy tắc của XP
Các quy tắc của XP định dạng cơ sở của XP được dựa trên các giá trị vừa
được mô tả và dự kiến để thúc đẩy việc đưa ra các quyết định trong dự án
phát triển hệ thống. Các quy tắc được dự kiến là cụ thể hơn so với các giá trị
và dễ dàng biên dịch hơn để đưa ra hướng dẫn trong tình huống đặc biệt.
1.1.6.1. Phản hồi thông tin
Sự phản hồi thông tin có tác dụng nhất nếu nó được thực hiện một cách
nhanh chóng. Thời gian giữa một kích hoạt và thông tin phản hồi nhận được
là vấn đề then chốt để nghiên cứu và thực hiện các thay đổi. Trong XP, ngoại
trừ các phương pháp phát triển hệ thống cũ, việc tiếp xúc với người dùng chỉ
trong những khoảng thời gian ngắn. Người dùng hiểu biết rõ ràng về hệ thống
đang được phát triển và có thể đưa ra thông tin phản hồi cũng như hướng theo
sự phát triển nếu cần thiết.
Các bộ kiểm tra (Unit tests) cũng làm cho sự phản hồi thông tin được
thực hiện nhanh hơn. Khi viết mã lệnh, bộ kiểm tra cung cấp thông tin phản
hồi trực tiếp để sao cho hệ thống tác động trở lại các thay đổi. Nếu trong
trường hợp khẩn cấp, các thay đổi ảnh hưởng đến một phần hệ thống mà
16
không nằm trong phạm vị của lập trình viên đã tạo ra thành phần đó, lập trình
viên đó không cần chú ý đến điều này. Khả năng xuất hiện lỗi này là rất lớn
khi hệ thống đang trong thời gian xây dựng.
1.1.6.2. Tính đơn giản
Tính đơn giản là việc xem xét mọi vấn đề nếu như giải pháp của nó là
“hết sức đơn giản”. Các phương pháp phát triển hệ thống cũ nói đến việc lập
kế hoạch cho tương lai và mã hoá cho khả năng sử dụng lại. XP không thực
hiện theo ý tưởng này.
Những người ủng hộ XP nói rằng, việc tạo ra tất cả các thay đổi lớn
trong một lần là không thể thực hiện được. XP áp dụng các thay đổi mang
tính cải tiến: chằng hạn, cứ sau 3 tuần một hệ thống có thể có những bước
hoàn thiện nhỏ. Bằng cách tạo ra nhiều bước hoàn thiện nhỏ, người sử dụng
thể tác động nhiểu hơn đối với quá trình phát triển và đối với hệ thống đang
được phát triển.
1.1.6.3. Đón nhận sự thay đổi
Quy tắc đón nhận sự thay đổi là không chống lại các thay đổi và phải
nắm bắt được chúng. Trong trường hợp cần thiết, nếu có yêu cầu thay đổi nào
đó đến từ phía người dùng, các lập trình viên sẵn sàng đón nhận yêu cầu đó
đồng thời lập kế hoạch cho các yêu cầu sắp tới.
1.1.7. Các hoạt động theo XP
XP mô tả 4 hoạt động chủ yếu được thực hiện trong quá trình phát triển
phần mềm [34] gồm: Viết mã lệnh, kiểm thử, nhận định các tác nhân hệ thống
và thiết kế.
1.1.7.1. Viết mã lệnh
Những người ủng hộ XP cho rằng, sản phẩm thực sự quan trọng của quá
trình phát triển hệ thống là mã lệnh. Không có mã lệnh bạn chẳng có gì hết.
17
Việc viết mã lệnh có thể là việc vẽ các sơ đồ từ đó sẽ phát sinh mã lệnh,
việc viết kịch bản cho hệ thống dựa trên web hoặc viết lệnh cho chương trình
cần thiết phải được biên dịch.
Việc viết mã lệnh cũng có thể được dùng để chỉ ra giải pháp phù hợp
nhất cho bài toán. Trong trường hợp này, XP tán thành việc đối mặt với nhiều
lựa chọn cho một vấn đề lập trình, một lựa chọn đơn giản cho việc viết mã
lệnh cho tất cả các giải pháp và xác định với các bộ kiểm tra tự động cho giải
pháp phù hợp nhất.
Việc viết mã lệnh cũng giúp trao đổi những suy nghĩ về các vấn đề lập
trình. Một lập trình viên thực hiện một bài toán lập trình phức tạp và thấy rằng
khó có thể giải thích giải pháp đó cho các lập trình viên khác, có thể viết mã
lệnh cho nó và sử dụng mã lệnh để giải thích ý định của mình. Các lập trình
viên khác có thể giải thích vấn đề này bằng cách viết mã lệnh theo suy nghĩ
của họ.
1.1.7.2. Kiểm thử
Một lập trình viên không thể chắc chắn về bất kỳ điều gì trừ khi anh ta
đã kiểm tra nó. Việc kiểm thử không phải là để nhận biết được vấn đề mà là
yêu cầu về tính chính xác của người dùng. Trong phát triển phần mềm, XP
cho rằng điều này có nghĩa là một người không thể chắc chắn rằng một chức
năng sẽ hoạt động trừ khi anh ta đã kiểm tra nó. Từ đó, đặt ra câu hỏi là cần
phải xác định điều gì mà anh ta chưa chắc chắn về nó.
- Các lập trình viên có thể không chắc chắn về mã lệnh mà họ đã viết so
với mã lệnh mà họ nên viết. Để kiểm tra điều này, XP sử dụng các bộ kiểm
tra (Unit Tests). Có các bộ kiểm tra, thực hiện việc kiểm tra mã lệnh một cách
tự động. Các lập trình viên sẽ cố gắng viết mã lệnh, nhưng họ có thể nghĩ rằng
các bộ kiểm tra có thể làm hỏng mã lệnh mà họ đang viết; tuy nhiên, nếu tất
18
cả các bộ kiểm tra đều thực hiện thành công thì việc viết mã lệnh là hoàn
thiện.
- Các lập trình viên có thể không chắc chắn về điều mà họ đã làm so với
điều mà đáng ra họ nên làm. Để kiểm tra việc này, XP sử dụng các bộ kiểm
tra chuyên biệt (acceptance tests) dựa trên các yêu cầu được đưa ra bởi khách
hàng trong giai đoạn tìm hiểu việc lập kế hoạch theo từng bước (release
planning).
1.1.7.3. Nhận định các tác nhân của hệ thống
Các lập trình viên không cần biết bất kỳ điều gì về mặt nghiệp vụ của hệ
thống trong quá trình phát triển. Nhưng chức năng của hệ thống lại được xác
định từ nghiệp vụ của hệ thống. Để các lập trình viên tìm ra được những gì
nên thuộc về chức năng của hệ thống, họ cần phải tìm hiểu nghiệp vụ của hệ
thống.
Các lập trình viên phải tìm hiểu trong phạm vi rộng: họ phải tìm hiểu
những gì mà người dùng yêu cầu. Họ phải cố hiểu vấn đề nghiệp vụ của hệ
thống, và gửi thông tin phản hồi cho người dùng về vấn đề của anh ta, để cải
thiện sự hiểu biết của anh ta về bài toán.
Việc trao đổi giữa khách hàng và lập trình viên được trình bày trong
phần “Planning game”.
1.1.7.4. Thiết kế
Từ quan điểm về tính đơn giản, một người có thể nói rằng việc phát triển
hệ thống không cần thêm điều gì ngoài việc viết mã lệnh, kiểm tra và tìm hiểu
các yếu tố tác động đến hệ thống. Nếu các hoạt động này được thực hiện tốt,
kết quả sẽ luôn là một hệ thống làm việc được. Trong thực tế, hệ thống này sẽ
không làm việc. Một người có thể thực hiện công việc theo một cách nào đó
mà không cần thiết kế, nhưng cuối cùng sẽ bị mắc kẹt. hệ thống sẽ trở nên quá
phức tạp, và những ràng buộc trong hệ thống sẽ ngày càng rõ ràng.
19
Có thể tránh điều này bằng cách tạo ra một cấu trúc thiết kế được tổ chức
một cách logic bên trong hệ thống. Một thiết kế tốt sẽ tránh được nhiều phục
thuộc trong hệ thống; điều này có nghĩa là việc thay đổi một phần hệ thống
không ảnh hưởng đến những phần khác của hệ thống.
1.2. QUY TRÌNH CỘNG TÁC PHẦN MỀM
Trong công nghiệp người ta đã chứng minh rằng hai lập trình viên làm
việc bên cạnh nhau, trên cùng một máy tính, cùng thiết kế thuật toán, cùng
viết mã lệnh, hay cùng kiểm tra chương trình, về căn bản, hiệu quả hơn so với
hai người làm việc độc lập[35]. Điều này cho thấy rằng, các lập trình viên sẽ
làm việc tốt hơn khi cùng thực hiện một quá trình đã được xác định, người
này xem xét lại công việc của người kia. Từ việc đưa hai ý tưởng đến cùng
giải quyết một công việc, người ta tạo ra quy trình cộng tác phần mềm (CSP).
CSP là một quy trình phát triển phần mềm được xác định, có tính chất lặp lại,
với hai lập trình viên cộng tác làm việc. CSP là sự mở rộng của quá trình phần
mềm độc lập (PSP) và nó dựa trên nền tảng của PSP.
Để chứng minh hiệu quả của CSP, một thí nghiệm được tiến hành năm
1999, với gần 40 sinh viên cuối khoá, ngành khoa học máy tính tại đại học
Utah. Tất cả các sinh viên đều được học CSP và PSP [35]. Có 3 nhóm, mỗi
nhóm hai sinh viên cùng làm việc trên một máy tính để phát triển các nhiệm
vụ lập trình được giao. Các sinh viên khác làm việc độc lập và cũng thực hiện
những nhiệm vụ tương tự. Nghiên cứu đã đóng góp vào việc tạo ra một quá
trình làm phần mềm xác định, có tính chất lặp lại, quy trình cộng tác phần
mềm, với các cặp lập trình viên cộng tác. Thí nghiệm đã đưa ra một số nhận
định sau về các nhóm lập trình cộng tác, sử dụng CSP [35]:
1. Các cặp lập trình cộng tác mất thời gian nhiều hơn so với lập trình độc
lập là 15%. Tuy nhiên, thời gian này là không đáng kể.