Tuy nhiên, theo thời gian, người sử dụng phép ẩn dụ để chiếu sáng quá trình phát triển phần mềm sẽ được coi là người hiểu rõ hơn vềlập trình và tạo mã tốt hơn nhanh hơn những người không
Trang 1TRƯỜNG ĐẠI HỌC GIA ĐỊNH
KHOA CÔNG NGHỆ THÔNG TIN
Thành phố Hồ Chí Minh, tháng 03 năm 2023
Trang 2LỜI CẢM ƠN
Để hoàn thành đề tài nghiên cứu này, lời đầu tiên nhóm thực hiện xin chân thành cảm ơncác thầy cô giáo Trường Đại Học Gia Định nói chung và các thầy cô trong Khoa CNTTnói riêng, những người đã dạy dỗ, trang bị cho các thành viên nhóm thực hiện đề tài vớinhững kiến thức nền tảng và chuyên ngành bổ ích, giúp nhóm thực hiện có được cơ sở lýthuyết vững vàng và tạo điều kiện giúp đỡ chúng tôi trong quá trình học tập
Đặc biệt, nhóm thực hiện xin chân thành cảm ơn thầy Th.s Trịnh Đình Yến đã tận tìnhgiúp đỡ, trực tiếp chỉ bảo, đưa ra những định hướng nghiên cứu cũng như hướng giảiquyết một số vấn đề trong suốt thời gian nghiên cứu thực hiện đồ án Trong thời gian làmviệc với thầy, nhóm thực hiện không ngừng tiếp thu thêm nhiều kiến thức, thái độ nghiêncứu khoa học nghiêm túc, hiệu quả, đây là điều rất cần thiết trong quá trình học tập vàcông tác sau này
Nhóm thực hiện xin chân thành cảm ơn!
Tp.HCM, ngày 15 tháng 03 năm 2023
Trang 3MỤC LỤC
LỜI CẢM ƠN 1
Phần I: Đặt nền móng 3
Chương I: Phép Ẩn dụ Cho Sự Hiểu Biết Phong Phú Hơn Về Phần Mềm Phát triển 3
1.1 Tầm Quan trọng Của Phép Ẩn Dụ 3
1.2 Cách Sử Dụng Ẩn Dụ Phần Mềm 4
1.3 Ẩn Dụ Phần Mềm Phổ Biến 5
Phần 2: Tạo mã chất lượng cao 13
Chương 2: Thiết kế trong xây dựng 13
2.1 Những thách thức về thiết kế 13
2.2 Khái niệm thiết kế chính 13
2.3 Khối xây dựng thiết kế: Heuristic 16
2.4 Thực tiễn thiết kế 21
2.5 Nhận xét về các phương pháp phổ biến 23
TÀI LIỆU THAM KHẢO 25
Trang 4Phần I: Đặt nền móng
Chương I: Phép Ẩn dụ Cho Sự Hiểu Biết Phong Phú Hơn Về Phần Mềm Phát triển 1.1 Tầm Quan trọng Của Phép Ẩn Dụ
Những phát triển quan trọng thường phát sinh từ sự tương tự Bằng cách so sánh một chủ
đề mà bạn hiểu kém với một chủ đề tương tự mà bạn hiểu rõ hơn, bạn có thể nghĩ ranhững hiểu biết dẫn đến sự hiểu biết tốt hơn về chủ đề ít quen thuộc hơn Việc sử dụngphép ẩn dụ này được gọi là "mô hình hóa.”
Lịch sử khoa học đầy những khám phá dựa trên việc khai thác sức mạnh của phép ẩn dụ.Nhà hóa Học Kekulé đã có một giấc mơ trong đó ông là một con rắn nắm đuôi của nótrong miệng Khi tỉnh dậy, anh nhận ra rằng một cấu trúc phân tử dựa trên một vòngtương tự hình dạng sẽ giải thích cho các tính chất của benzen Thử nghiệm thêm đã xácnhận giả thuyết (Barbour 1966)
Lý thuyết động học của khí dựa trên mô hình "bi-a" Các phân tử khí là được cho là cókhối lượng và va chạm đàn hồi, như những quả bóng bi-a làm, và nhiều hữu ích các định
lý được phát triển từ mô hình này
Lý thuyết sóng ánh sáng được phát triển phần lớn bằng cách khám phá những điểm tươngđồng giữa ánh sáng và âm thanh Ánh sáng và âm thanh có biên độ (độ sáng, độ to), tần
số (màu sắc, pitch), và các thuộc tính khác chung Sự so sánh giữa các lý thuyết song âmthanh và ánh sáng rất hiệu quả đến nỗi các nhà khoa học đã dành rất nhiều nỗ lực để tìmkiếm đối với một phương tiện sẽ truyền ánh sáng cách không khí truyền âm thanh Họthậm chí đặt cho nó một cái tên —"ether"—nhưng họ không bao giờ tìm thấy phươngtiện Sự tương tự đã được vì vậy, hiệu quả theo một số cách đã được chứng minh là gâyhiểu lầm trong trường hợp này
Như bạn có thể mong đợi, một số phép ẩn dụ tốt hơn những phép ẩn dụ khác Một phép
ẩn dụ tốt rất đơn giản, liên quan tốt đến các phép ẩn dụ có liên quan khác và giải thíchphần lớn thử nghiệm bằng chứng và các hiện tượng quan sát khác
Ẩn dụ góp phần hiểu biết nhiều hơn về các vấn đề phát triển phần mềm trong giống nhưcách họ đóng góp vào sự hiểu biết nhiều hơn về các câu hỏi khoa học
Copernicus giới thiệu một lý thuyết nhật tâm, ý tưởng rằng mặt trời chứ không phải là tráiđất là trung tâm của vũ trụ Sự thay đổi này trong các mô hình tinh thần cuối cùng đã dẫnđến việc phát hiện ra các hành tinh mới, việc phân loại lại mặt trăng như một vệ tinh chứkhông phải là là một hành tinh, và một sự hiểu biết khác nhau về vị trí của loài ngườitrong vũ trụ
Bachman đã so sánh sự thay đổi Ptolemaic-To-Copernicus trong thiên văn học với sựthay đổi trong lập trình máy tính vào đầu những năm 1970 Khi Bachman so sánh năm
Trang 51973, xử lý dữ liệu đã thay đổi từ chế độ xem thông tin lấy máy tính làm trung tâm hệthống để xem cơ sở dữ liệu làm trung tâm Bachman chỉ ra rằng người xưa của dữ liệu xử
lý muốn xem tất cả dữ liệu dưới dạng một luồng thẻ tuần tự chảy qua máy tính (chế độxem tập trung vào máy tính) Sự thay đổi là tập trung vào một nhóm dữ liệu về mà máytính tình cờ hoạt động (chế độ xem hướng cơ sở dữ liệu)
Ngày nay, thật khó để tưởng tượng bất cứ ai nghĩ rằng mặt trời di chuyển quanh trái đất.Tương tự, thật khó để tưởng tượng một lập trình viên nghĩ rằng tất cả dữ liệu có thể đượcxem như một dòng tuần tự của thẻ Trong cả hai trường hợp, một khi lý thuyết cũ đã bịloại bỏ, có vẻ như không thể tin được rằng bất cứ ai từng tin điều đó cả Tuyệt vời hơn,những người tin rằng lý thuyết cũ nghĩ rằng lý thuyết mới chỉ là vô lý sau đó như bạnnghĩ rằng lý thuyết cũ là bây giờ
Quan điểm trái đất làm trung tâm của vũ trụ hobbled nhà thiên văn học người bám vào nósau khi một lý thuyết tốt hơn đã có sẵn Tương tự, chế độ xem lấy máy tính làm trung tâmcủa máy tính vũ trụ hobbled các nhà khoa học máy tính người tổ chức vào nó sau khi cơ
sở dữ liệu làm trung tâm lý thuyết đã có sẵn
Trên thực tế, nhiều mô hình đã được thay thế bằng các mô hình tốt hơn vẫn hữu ích Kỹ
sư vẫn giải quyết hầu hết các vấn đề kỹ thuật bằng Cách sử dụng Động Lực Học Newtonmặc dù, Về mặt lý thuyết, Động Lực Học Newton đã được thay thế bởi lý thuyếtEinsteinian
Phát triển phần mềm là một lĩnh vực trẻ hơn hầu hết các ngành khoa học khác Nó chưatrưởng thành đủ để có một tập hợp các phép ẩn dụ tiêu chuẩn Do đó, nó có rất nhiều ẩn
dụ bổ sung và mâu thuẫn Một số tốt hơn những người khác Một số tệ hơn Làm thế nàobạn hiểu các phép ẩn dụ xác định mức độ bạn hiểu phát triển phần mềm
1.2 Cách Sử Dụng Ẩn Dụ Phần Mềm
Một phép ẩn dụ phần mềm giống như một đèn rọi hơn là một bản đồ đường bộ Nó khôngcho bạn biết tìm câu trả lời ở đâu; nó cho bạn biết làm thế nào để tìm kiếm nó Một phép
ẩn dụ phục vụ nhiều hơn như một heuristic hơn nó như là một thuật toán
Thuật toán là một tập hợp các hướng dẫn được xác định rõ để thực hiện một nhiệm vụ cụthể thuật toán có thể dự đoán được, xác định và không phải chịu cơ hội Một thuật toáncho biết bạn làm thế nào để đi từ điểm A đến Điểm B không có đường vòng, không cóchuyến đi phụ đến Điểm D, E, Và F, và không dừng lại để ngửi hoa hồng hoặc có mộttách joe
Heuristic là một kỹ thuật giúp bạn tìm kiếm câu trả lời Kết quả của nó là tùy thuộc vào
cơ hội bởi vì một heuristic chỉ cho bạn biết làm thế nào để tìm, không phải những gì đểtìm Nó không nói bạn làm thế nào để có được trực tiếp từ điểm A đến Điểm B; nó thậmchí có thể không biết điểm a ở đâu và điểm B là Trên thực tế, heuristic là một thuật toán
Trang 6trong bộ đồ chú hề Nó ít dự đoán hơn, nó vui hơn và không có bảo đảm hoàn lại tiềntrong 30 ngày.
Đây là một thuật toán để lái xe đến nhà của ai đó: Đi Xa lộ 167 về phía nam ĐếnPuyallup Đi Theo Lối Ra South Hill Mall và lái xe 4,5 dặm lên đồi Rẽ phải tại ánh sángcủa cửa hàng tạp hóa, và sau đó lấy trái đầu tiên Biến thành đường lái xe của nhà tan lớnbên trái, tại 714 Bắc Tuyết tùng
Sự khác biệt giữa một thuật toán và một heuristic là tinh tế, và hai thuật ngữ trùng lặpphần nào Đối với mục đích của cuốn sách này, sự khác biệt chính giữa hai là mức độgián tiếp từ giải pháp Một thuật toán cung cấp cho bạn các hướng dẫn trực tiếp Mộtheuristic cho bạn biết làm thế nào để khám phá các hướng dẫn cho chính mình, hoặc ítnhất là nơi để tìm kiếm chúng
Có hướng dẫn cho bạn biết chính xác cách giải quyết các vấn đề lập trình của bạn chắcchắn sẽ làm cho lập trình dễ dàng hơn và kết quả dễ dự đoán hơn Nhưng khoa học lậptrình vẫn chưa tiến bộ và có thể không bao giờ như vậy Thách thức nhất một phần củalập trình là khái niệm hóa vấn đề và nhiều lỗi trong lập trình là lỗi khái niệm Bởi vì mỗichương trình là duy nhất về mặt khái niệm, rất khó hoặc không thể tạo ra một tập hợp cáchướng dẫn chung dẫn đến một giải pháp trong mọi trường hợp Vì vậy, biết cách tiếp cậncác vấn đề nói chung ít nhất cũng có giá trị như biết giải pháp cụ thể cho các vấn đề cụthể
Làm thế nào để bạn sử dụng ẩn dụ phần mềm? Sử dụng chúng để cung cấp cho bạn cáinhìn sâu sắc về các vấn đề và quy trình lập trình của bạn Sử dụng chúng để giúp bạn suynghĩ về lập trình của bạn các hoạt động và để giúp bạn tưởng tượng ra những cách làm tốthơn Bạn sẽ không thể nhìn vào một dòng mã và nói rằng nó vi phạm một trong nhữngphép ẩn dụ được mô tả trong này chương Tuy nhiên, theo thời gian, người sử dụng phép
ẩn dụ để chiếu sáng quá trình phát triển phần mềm sẽ được coi là người hiểu rõ hơn vềlập trình và tạo mã tốt hơn nhanh hơn những người không sử dụng chúng
1.3 Ẩn Dụ Phần Mềm Phổ Biến
Một sự phong phú khó hiểu của phép ẩn dụ đã lớn lên xung quanh phát triển phần mềm.David Gries cho biết viết phần mềm là một khoa học (1981) Donald Knuth nói đó là mộtnghệ thuật (1998) Watts Humphrey nói rằng đó là một quá trình (1989) Pj Plauger VàKent Beck nói rằng đó là giống như lái xe, mặc dù họ đưa ra kết luận gần như trái ngược(Plauger 1993, Beck 2000) Alistair Cockburn nói đó là một trò chơi (2002) EricRaymond nói nó giống như một chợ (2000) Andy Hunt và Dave Thomas nói rằng nógiống như làm vườn Paul Heckel cho biết Nó giống Như Quay Phim Bạch Tuyết Và BảyChú Lùn (1994) Fred Brooks nói rằng nó giống như nuôi, săn người sói hoặc chết đuốivới khủng long trong hố hắc ((1995)
Phần Mềm Penmanship: Viết thư
Trang 7Phép ẩn dụ nguyên thủy nhất để phát triển phần mềm phát triển từ biểu thức "viếtthư."Phép ẩn dụ viết cho thấy rằng việc phát triển một chương trình giống như viết một láthư bình thường-bạn ngồi xuống với bút, mực và giấy và viết nó từ đầu đến cuối Nókhông yêu cầu bất kỳ kế hoạch chính thức, và bạn tìm ra những gì bạn muốn nói khi bạnđi.
Nhiều ý tưởng bắt nguồn từ phép ẩn dụ viết Jon Bentley nói rằng bạn sẽ có thể ngồixuống bên đống lửa với một ly rượu mạnh, một điếu xì gà ngon và chú chó săn yêu thíchcủa bạn để thưởng thức một" chương trình biết chữ " theo cách bạn muốn một cuốn tiểuthuyết hay Brian Kernighan và P J Plauger đã đặt tên cho cuốn sách theo phong cách lậptrình Của họ Là Các Yếu tố Của Phong cách Lập Trình (1978) sau cuốn sách kiểu viếtCác Yếu Tố Của Phong Cách (Strunk and White 2000)
Các lập trình viên thường nói về "khả năng đọc chương trình.”
Đối với công việc của một cá nhân hoặc cho các dự án quy mô nhỏ, phép ẩn dụ viết thưhoạt động đầy đủ, nhưng đối với các mục đích khác, nó rời khỏi bữa tiệc sớm—nó không
mô tả phát triển phần mềm đầy đủ hoặc đầy đủ Viết thường là một hoạt động một người,trong khi đó một dự án phần mềm rất có thể sẽ liên quan đến nhiều người với nhiềungười khác nhau trách nhiệm Khi bạn viết xong một lá thư, bạn nhét nó vào một phong
bì và thư nó Bạn không thể thay đổi nó nữa, và đối với tất cả các ý định và mục đích, nó
đã hoàn thành Phần mềm không khó để thay đổi và hầu như không bao giờ hoàn thànhđầy đủ Có tới 90 nỗ lực phát triển trên một hệ thống phần mềm điển hình xuất hiện saulần đầu tiên phát hành, với hai phần ba là điển hình (Pigoski 1997) Bằng văn bản, phíbảo hiểm cao là đặt trên độc đáo Trong xây dựng phần mềm, cố gắng tạo ra công việcthực sự ban đầu là thường kém hiệu quả hơn so với việc tập trung vào việc tái sử dụngcác ý tưởng thiết kế, mã và các trường hợp thử nghiệm từ các dự án trước Tóm lại, phép
ẩn dụ viết ngụ ý một quá trình phát triển phần mềm quá đơn giản và cứng nhắc để có thểkhỏe mạnh
Thật không may, phép ẩn dụ viết thư đã được duy trì bởi một trong những điều nhất sáchphần mềm phổ biến trên hành tinh, Fred Brooks ' S The Mythical Man-Month (Brooks1995) Brooks nói, " Hãy lên kế hoạch vứt bỏ một cái; dù sao thì bạn cũng sẽ làmđược."Điều này gợi lên một hình ảnh của một đống bản nháp nửa viết ném vào một thùngrác, như thể hiện Trong Hình 2-1
Trang 8Hình 2-1 phép ẩn dụ viết thư cho thấy rằng quá trình phần mềm dựa vào thử nghiệm vàlỗi đắt tiền hơn là lập kế hoạch và thiết kế cẩn thận.
Lập kế hoạch vứt bỏ một cái có thể là thực tế khi bạn đang viết một cách lịch
sự-doyou-do cho dì của bạn Nhưng mở rộng phép ẩn dụ của phần mềm "viết" thành một kế hoạch
để vứt bỏ một là lời khuyên kém cho phát triển phần mềm, nơi một hệ thống chính đã cóchi phí nhiều như một tòa nhà văn phòng 10 tầng hoặc một lớp lót đại dương Thật dễdàng để lấy chiếc nhẫn bằng đồng nếu bạn có thể đủ khả năng để ngồi trên con ngựa gỗyêu thích của bạn cho một không giới hạn số vòng quay xung quanh băng chuyền Bíquyết là để có được nó lần đầu tiên xung quanh-hoặc để hãy dành nhiều cơ hội khi chúng
rẻ nhất Các phép ẩn dụ khác chiếu sáng tốt hơn các cách đạt được những mục tiêu nhưvậy
Nông nghiệp phần Mềm: Phát triển Một Hệ thống
Trái ngược với phép ẩn dụ viết cứng nhắc, một số nhà phát triển phần mềm nói rằng bạnnên hình dung việc tạo phần mềm như một cái gì đó như trồng hạt giống và trồng câytrồng Bạn thiết kế một mảnh, mã một mảnh, kiểm tra một mảnh, và thêm nó vào hệthống một chút tại một thời điểm
Bằng cách thực hiện các bước nhỏ, bạn giảm thiểu những rắc rối bạn có thể gặp phải bất
cứ lúc nào Đôi khi một kỹ thuật tốt được mô tả với một phép ẩn dụ xấu Trong nhữngtrường hợp như vậy, hãy cố gắng giữ kỹ thuật và đưa ra một phép ẩn dụ tốt hơn Trongtrường hợp này, gia tang kỹ thuật có giá trị, nhưng phép ẩn dụ nông nghiệp là khủngkhiếp
Ý tưởng làm một chút tại một thời điểm có thể mang một số giống với cách cây trồngphát triển, nhưng tương tự nông nghiệp là yếu và không có thông tin, và thật dễ dàng đểthay thế bằng các phép ẩn dụ tốt hơn được mô tả trong các phần sau Thật khó để mởrộng phép ẩn dụ nông nghiệp vượt ra ngoài ý tưởng đơn giản là làm mọi thứ một chút tạimột thời điểm Nếu bạn mua vào phép ẩn dụ nông nghiệp, tưởng tượng Trong Hình 2-2,bạn có thể thấy mình đang nói chuyện về việc bón phân cho kế hoạch hệ thống, làmmỏng thiết kế chi tiết, tăng năng suất mã thông qua quản lý đất đai hiệu quả, và thu hoạch
Trang 9mã chính nó Bạn sẽ nói về quay trong một vụ Mùa Của C++ thay vì lúa mạch, để cho đấtnghỉ ngơi trong một năm để tang việc cung cấp nitơ trong đĩa cứng.
Điểm yếu trong phép ẩn dụ phần mềm-nông nghiệp là gợi ý rằng bạn không có bất kỳkiểm soát trực tiếp nào đối với cách phần mềm phát triển Bạn trồng các hạt mã trongmùa xuân Nông dân Của Almanac và Bí ngô tuyệt vời sẵn sàng, bạn sẽ có một vụ mùabội thu của mã vào mùa thu
Hình 2-2 thật khó để mở rộng phép ẩn dụ nông nghiệp để phát triển phần mềm thích hợp
Phần Mềm Nuôi Hàu: Bồi Tụ Hệ Thống
Đôi khi mọi người nói về việc phát triển phần mềm khi họ thực sự có nghĩa là bồi tụ phầnmềm Hai phép ẩn dụ có liên quan chặt chẽ với nhau, nhưng sự bồi tụ phần mềm là hìnhảnh sâu sắc hơn "Bồi tụ", trong trường hợp bạn không có từ điển tiện dụng, có nghĩa làbất kỳ sự phát triển hoặc tăng kích thước bằng cách bổ sung hoặc bao gồm bên ngoài dầndần Bồi tụ mô tả cách một con hàu làm cho một viên ngọc trai, bằng cách dần dần thêmmột lượng nhỏ canxi cacbonat Trong địa chất, "bồi tụ" có nghĩa là một bổ sung chậm chođất bằng tiền gửi của nước trầm tích Về mặt pháp lý," bồi đắp " có nghĩa là sự gia tăngđất dọc theo bờ biển của một cơ thể của nước bằng tiền gửi của trầm tích trong nước.Điều này không có nghĩa là bạn phải học cách tạo mã từ trầm tích trong nước; nó cónghĩa là bạn phải học cách thêm vào hệ thống phần mềm của mình một cách nhỏ số tiềntại một thời điểm Các từ khác liên quan chặt chẽ đến bồi tụ là "tăng dần", "lặp đi lặp lại",
"thích nghi" và "tiến hóa."Thiết kế, xây dựng và thử nghiệm gia tăng là một số khái niệmphát triển phần mềm mạnh mẽ nhất hiện có
Trong phát triển gia tăng, trước tiên bạn tạo phiên bản đơn giản nhất có thể của hệ thống
sẽ chạy Nó không phải chấp nhận đầu vào thực tế, nó không phải thực hiện thao tác thực
tế trên dữ liệu, nó không phải tạo ra đầu ra thực tế—nó chỉ có để trở thành một bộ xương
đủ mạnh để giữ hệ thống thực sự khi nó được phát triển Nó có thể gọi các lớp giả chomỗi chức năng cơ bản mà bạn đã xác định Sự khởi đầu cơ bản này giống như sự khởiđầu của con hàu một viên ngọc trai với một hạt cát nhỏ
Sau khi bạn đã hình thành bộ xương, từng chút một bạn nằm trên cơ và da Bạn thay đổitừng lớp giả thành các lớp thực Thay vì có chương trình của bạn giả vờ chấp nhận đầu
Trang 10vào, bạn thả mã chấp nhận đầu vào thực Thay vì có chương trình của bạn giả vờ sản xuấtđầu ra, bạn thả mã tạo ra đầu ra thực.
Như một phép ẩn dụ, sức mạnh của phép ẩn dụ gia tăng là nó không quá hứa hẹn Nó khóhơn phép ẩn dụ nông nghiệp để mở rộng không phù hợp Hình ảnh của một con hàu tạothành một viên ngọc trai là một cách tốt để hình dung sự phát triển gia tăng, hoặc bồi tụ
Xây Dựng Hệ Thống: Xây Dựng Phần Mềm
Hình ảnh của phần mềm "xây dựng" hữu ích hơn so với "viết " hoặc"phát triển" phầnmềm Nó tương thích với ý tưởng bồi tụ phần mềm và cung cấp nhiều hơn nữa hướng dẫnchi tiết Phần mềm xây dựng ngụ ý các giai đoạn lập kế hoạch, chuẩn bị khác nhau, vàthực hiện khác nhau về loại và mức độ tùy thuộc vào những gì đang được xây dựng Khinào bạn khám phá phép ẩn dụ, bạn tìm thấy nhiều điểm tương đồng khác
Nếu bạn đang xây dựng một cấu trúc đơn giản—một doghouse, nói—bạn có thể lái xeđến gỗ lưu trữ và mua một số gỗ và móng tay Đến cuối buổi chiều, bạn sẽ có một cáimới nhà Cho Fido Nếu bạn quên cung cấp cho một cánh cửa, như thể hiện Trong Hình 2-
3, hoặc thực hiện một số sai lầm khác, nó không phải là một vấn đề lớn; bạn có thể sửachữa nó hoặc thậm chí bắt đầu lại từ bắt đầu Tất cả những gì bạn đã lãng phí là một phầncủa một buổi chiều Cách tiếp cận lỏng lẻo này cũng thích hợp cho các dự án phần mềmnhỏ Nếu bạn sử dụng thiết kế sai cho 1000 dòng mã, bạn có thể tái cấu trúc hoặc bắt đầulại hoàn toàn mà không mất nhiều
Hình 2-3 hình phạt cho một sai lầm trên một cấu trúc đơn giản chỉ là một chút thời gian
và có thể một số bối rối
Nếu bạn đang xây dựng một ngôi nhà, quá trình xây dựng phức tạp hơn, và như vậy làhậu quả của thiết kế kém Đầu tiên bạn phải quyết định loại nhà bạn muốn xây dựng—tương tự trong phát triển phần mềm để định nghĩa vấn đề Sau đó bạn và một kiến trúc sưphải đưa ra một thiết kế chung và nhận được nó được chấp thuận Điều này tương tự nhưthiết kế kiến trúc phần mềm Bạn vẽ bản thiết kế chi tiết và thuê một nhà thầu Cái nàytương tự như thiết kế phần mềm chi tiết Bạn chuẩn bị các trang web xây dựng, đặt mộtnền tảng, đóng khung ngôi nhà, đặt vách ngăn và một mái nhà trên đó, và dây dọi và dây
Trang 11nó Điều này tương tự như xây dựng phần mềm Khi hầu hết các ngôi nhà được thực hiện,các landscapers, họa sĩ, và trang trí đi vào để làm cho tốt nhất của tài sản của bạn và nhàbạn đã xây dựng.
Điều này tương tự như tối ưu hóa phần mềm Trong suốt quá trình, các thanh tra khácnhau hãy đến để kiểm tra trang web, nền tảng, khung, hệ thống dây điện và các thanh trakhác Điều này tương tự như đánh giá và kiểm tra phần mềm
Độ phức tạp và kích thước lớn hơn ngụ ý hậu quả lớn hơn trong cả hai hoạt động Trongxây dựng một ngôi nhà, vật liệu có phần đắt tiền, nhưng chi phí chính là lao động Tríchxuất ra một bức tường và di chuyển nó sáu inch là tốn kém không phải vì bạn lãng phí rấtnhiều móng tay nhưng bởi vì bạn phải trả tiền cho mọi người thêm thời gian để di chuyểnbức tường Bạn phải làm cho thiết kế tốt nhất có thể, như Được Đề xuất Bởi Hình 2-4, đểbạn đừng lãng phí thời gian để sửa chữa những sai lầm có thể tránh được Trong việc xâydựng một phần mềm sản phẩm, vật liệu thậm chí còn ít tốn kém hơn, nhưng chi phí laođộng cũng nhiều Thay đổi a định dạng báo cáo cũng đắt như di chuyển tường trong nhà
vì chi phí chính thành phần trong cả hai trường hợp là thời gian của mọi người
Hình 2-4 cấu trúc phức tạp hơn đòi hỏi phải lập kế hoạch cẩn thận hơn
Hai hoạt động này chia sẻ những điểm tương đồng nào khác? Trong việc xây dựng mộtngôi nhà, bạn sẽ không cố gắng xây dựng những thứ bạn có thể mua đã được xây dựng.Bạn sẽ mua một máy giặt và máy sấy, máy rửa chén, tủ lạnh, và tủ đông Trừ khi bạn làmột thuật sĩ cơ khí, bạn sẽ không xem xét xây dựng chúng cho mình Bạn cũng sẽ mua tủđúc sẵn, quầy, cửa sổ, cửa ra vào, và đồ đạc trong phòng tắm Nếu bạn đang xây dựngmột hệ thống phần mềm, bạn sẽ làm điều tương tự
Bạn sẽ sử dụng rộng rãi các tính năng ngôn ngữ cấp cao hơn là viết của riêng bạn mã cấp
hệ điều hành Bạn cũng có thể sử dụng các thư viện được xây dựng sẵn của các lớpcontainer, các chức năng khoa học, các lớp giao diện người dùng và các lớp thao tác cơ
sở dữ liệu Nó thường không có ý nghĩa để mã hóa những thứ bạn có thể mua làm sẵn
Trang 12Tuy nhiên, nếu bạn đang xây một ngôi nhà sang trọng với đồ nội thất hạng nhất, bạn cóthể có tủ của bạn tùy chỉnh Bạn có thể có máy rửa bát, tủ lạnh và tủ đông được xây dựng
để trông giống như phần còn lại của tủ của bạn Bạn có thể có windows custom-madetrong hình dạng và kích cỡ khác thường Tùy chỉnh này có sự tương đồng trong phát triểnphần mềm
Nếu bạn đang xây dựng một sản phẩm phần mềm hạng nhất, bạn có thể xây dựng khoahọc của riêng mình chức năng cho tốc độ tốt hơn hoặc độ chính xác Bạn có thể xây dựngcác lớp container của riêng mình, các lớp giao diện người dùng và các lớp cơ sở dữ liệu
để cung cấp cho hệ thống của bạn một cách liền mạch, hoàn hảo nhìn và cảm nhận nhấtquán
Lập kế hoạch cẩn thận không nhất thiết có nghĩa là lập kế hoạch toàn diện hoặc lập kếhoạch quá mức Bạn có thể lập kế hoạch hỗ trợ cấu trúc và quyết định sau này có nên đặt
gỗ cứng hay không sàn hoặc thảm, màu gì để sơn tường, vật liệu lợp nào để sử dụng, vànhư vậy trên Một dự án được lên kế hoạch tốt sẽ cải thiện khả năng thay đổi suy nghĩ củabạn sau này chi tiết Bạn càng có nhiều kinh nghiệm với loại phần mềm bạn đang xâydựng, thêm chi tiết bạn có thể lấy cho các cấp Bạn chỉ muốn chắc chắn rằng bạn có kếhoạch đủ vì vậy, việc thiếu kế hoạch không tạo ra vấn đề lớn sau này
Tương tự xây dựng cũng giúp giải thích lý do tại sao các dự án phần mềm khác nhauđược hưởng lợi từ các phương pháp phát triển khác nhau Trong xây dựng, bạn sẽ sửdụng các cấp độ lập kế hoạch, thiết kế và đảm bảo chất lượng khác nhau nếu bạn đangxây dựng một nhà kho hoặc một kho công cụ hơn là nếu bạn đang xây dựng một trungtâm y tế hoặc một lò phản ứng hạt nhân Bạn sẽ sử dụng các cách tiếp cận vẫn khác nhau
để xây dựng một trường học, một tòa nhà chọc trời, hoặc một ngôi nhà ba phòng ngủ.Tương tự như vậy, trong phần mềm bạn nói chung có thể sử dụng các phương pháp pháttriển linh hoạt, nhẹ, nhưng đôi khi bạn sẽ cần phương pháp tiếp cận cứng nhắc, nặng đểđạt được mục tiêu an toàn và các mục tiêu khác
Thực hiện các thay đổi trong phần mềm mang đến một song song khác với xây dựng tòanhà Để di chuyển một bức tường sáu inch chi phí nhiều hơn nếu bức tường chịu lực hơnnếu nó chỉ đơn thuần là một phân vùng giữa các phòng Tương tự, thực hiện thay đổi cấutrúc trong chi phí chương trình hơn là thêm hoặc xóa các tính năng ngoại vi
Cuối cùng, sự tương tự xây dựng cung cấp cái nhìn sâu sắc về các dự án phần mềm cực
kỳ lớn Bởi vì hình phạt cho sự thất bại trong một cấu trúc cực lớn là nghiêm trọng, cấutrúc có để được thiết kế quá mức Các nhà xây dựng thực hiện và kiểm tra kế hoạch của
họ một cách cẩn thận Họ xây dựng trong lợi nhuận của an toàn; nó là tốt hơn để trả 10phần trăm nhiều hơn cho vật liệu mạnh hơn để có một tòa nhà chọc trời rơi xuống Rấtnhiều sự chú ý được trả cho thời gian Khi Nhà Nước Đế Chế Xây dựng được xây dựng,
Trang 13mỗi xe tải giao hàng có một biên độ 15 phút để làm cho nó giao hàng Nếu một chiếc xetải không được đặt đúng chỗ vào đúng thời điểm, toàn bộ dự án đã bị trì hoãn.
Phép ẩn dụ xây dựng tòa nhà có thể được mở rộng theo nhiều hướng khác nhau, đó là lý
do tại sao phép ẩn dụ rất mạnh mẽ Nhiều thuật ngữ phổ biến trong phát triển phần mềmbắt nguồn từ phép ẩn dụ xây dựng: kiến trúc phần mềm, giàn giáo, xây dựng, các lớp nềntảng và tách mã ra Bạn có thể sẽ nghe nhiều hơn nữa
Áp Dụng Kỹ Thuật Phần Mềm: Hộp Công Cụ Trí Tuệ
Những người có hiệu quả trong việc phát triển phần mềm chất lượng cao đã dành nhiềunăm để tích lũy hàng chục kỹ thuật, thủ thuật và câu thần chú ma thuật Các kỹ thuậtkhông phải là quy tắc; chúng là công cụ phân tích Một thợ thủ công giỏi biết công cụphù hợp cho công việc và biết cách sử dụng nó một cách chính xác Lập trình viên cũngvậy Bạn càng tìm hiểu nhiều về lập trình, bạn càng lấp đầy hộp công cụ tinh thần củamình bằng các công cụ phân tích và kiến thức về thời điểm sử dụng chúng và cách sửdụng chúng một cách chính xác
Trong phần mềm, các chuyên gia tư vấn đôi khi bảo bạn mua vào một số phần mềm nhấtđịnh-phát triển phương pháp để loại trừ các phương pháp khác Thật không may vì nếubạn mua vào bất kỳ phương pháp duy nhất 100 phần trăm, bạn sẽ thấy cả thế giới về điều
đó phương pháp luận Trong một số trường hợp, bạn sẽ bỏ lỡ cơ hội sử dụng các phươngpháp khác phù hợp hơn với vấn đề hiện tại của mình Phép ẩn dụ hộp công cụ giúp giữ tất
cả các phương pháp, kỹ thuật và mẹo trong phối cảnh - sẵn sàng để sử dụng khi thíchhợp
Kết Hợp Các Phép Ẩn Dụ
Bởi vì phép ẩn dụ mang tính heuristic hơn là thuật toán, chúng không loại trừ lẫn nhau.Bạn có thể sử dụng cả sự bồi tụ và phép ẩn dụ xây dựng Bạn có thể sử dụng viết nếu bạnmuốn và bạn có thể kết hợp viết với lái xe, săn người sói hoặc chết đuối trong hố hắcwith với khủng long Sử dụng bất kỳ phép ẩn dụ hoặc kết hợp các phép ẩn dụ nào sẽ kíchthích suy nghĩ của chính bạn hoặc giao tiếp tốt với những người khác trên đội của anh
Sử dụng phép ẩn dụ là một doanh nghiệp mờ Bạn phải mở rộng chúng để hưởng lợi từnhững hiểu biết heuristic họ cung cấp Nhưng nếu bạn mở rộng chúng quá xa hoặc saihướng, chúng sẽ đánh lừa bạn Cũng như bạn có thể lạm dụng bất kỳ công cụ mạnh mẽnào, bạn có thể lạm dụng ẩn dụ, nhưng sức mạnh của chúng khiến chúng trở thành mộtphần có giá trị trong hộp công cụ trí tuệ của bạn