Thiết
kế là chết?
Đối với nhiều người
mà đi một thời gian ngắn tiếp xúc
với Extreme Programming, có vẻ như XP gọi cho
cái chết của thiết kế phần mềm. Không chỉ là hoạt động
nhiều thiết kế chế nhạo là "Big Up
Front Design", nhưng các kỹ thuật thiết
kế như UML, các khuôn khổ linh hoạt,
và thậm chí cả các mẫu
được de-nhấn mạnh hoặc hết sức
lờ đi. Trong thực tế XP bao gồm rất
nhiều thiết kế, nhưng hiện nó theo
một cách khác hơn so với quy trình
phần mềm được thiết lập. XP
đã trẻ lại khái niệm về thiết
kế tiến hóa với thực tiễn cho phép
tiến hóa để trở thành một
chiến lược thiết kế khả thi. Nó cũng cung cấp những thách
thức và kỹ năng mới như thiết kế
cần phải tìm hiểu làm thế nào
để làm một thiết kế đơn
giản, làm thế nào để sử dụng
cấu trúc lại để giữ cho một
thiết kế sạch sẽ, và làm thế
nào để sử dụng các mẫu trong
một phong cách tiến hóa.
Tháng 5 năm 2004
(Bài này
được viết cho bài phát biểu của
tôi tại XP 2000 họp và hình
thức ban đầu của nó đã
được công bố như là một
phần của quá trình tố tụng.)
Extreme Programming (XP) thách thức nhiều giả
định chung về phát triển phần mềm.Trong
đó một trong những tranh cãi nhất
là từ chối của mình trong nỗ lực
đáng kể trong thiết kế lên phía
trước, ủng hộ một cách tiếp
cận tiến hóa hơn. Để những
người gièm pha của nó đây là
một trở về "mã và sửa
chữa" phát triển - thường bị chế
nhạo như hack. Với các fan
của nó thường được xem như
là một sự từ chối của các kỹ
thuật thiết kế (như UML), nguyên tắc và
các mẫu. Đừng lo lắng về thiết
kế, nếu bạn nghe mã của bạn một
thiết kế tốt sẽ xuất hiện.
Tôi thấy mình là trung tâm của
lập luận này. Phần lớn sự
nghiệp của tôi đã tham gia ngôn ngữ
thiết kế đồ họa - Unified Modeling Language (UML)
và tiền thân của nó - và trong mô
hình. Quả thực tôi đã viết
cuốn sách về cả UML và mô hình. Có vòng tay của tôi XP có
nghĩa là tôi rút lại tất cả
những gì tôi đã viết về các
chủ đề, làm sạch tâm trí của
tôi về tất cả những quan niệm phản
cách mạng như vậy?
Tôi cũng sẽ không hy vọng rằng tôi
có thể để lại cho bạn treo lủng
lẳng trên móc của căng thẳng kịch
tính. Câu trả lời ngắn gọn là
không. Câu trả lời dài là phần
còn lại của bài viết này.
Kế hoạch và
tiến hóa Thiết kế
Đối với bài viết này tôi
sẽ mô tả hai phong cách thiết kế
được thực hiện như thế nào trong
việc phát triển phần mềm. Có
lẽ phổ biến nhất là thiết kế
tiến hóa. Về cơ bản thiết kế
tiến hóa có nghĩa là việc thiết
kế các hệ thống phát triển như
hệ thống được thực hiện. Thiết
kế là một phần của quá trình
lập trình và là chương trình
tiến hóa thay đổi thiết kế.
Trong cách sử dụng thông thường
của nó, thiết kế tiến hóa là
một thảm họa. Việc thiết kế kết
thúc lên được sự tập hợp
của một loạt các quyết định
chiến thuật quảng cáo-hoc, mỗi trong số
đó làm cho mã khó để thay
đổi. Trong nhiều cách để bạn
có thể tranh luận này là không có
thiết kế, chắc chắn nó thường
dẫn đến một thiết kế nghèo. Như
Kent đặt nó, thiết kế là có
để cho phép bạn tiếp tục thay
đổi phần mềm một cách dễ dàng
trong dài hạn. Vì thiết
kế bị thoái hóa, do đó, hiện
khả năng của bạn để thay đổi
có hiệu quả. Bạn có trạng
thái của phần mềm entropy, theo thời gian thiết
kế trở nên tệ hơn và tồi tệ
hơn.Điều này không
chỉ làm cho các phần mềm khó
để thay đổi, nó cũng làm cho lỗi
cả dễ dàng hơn để sinh sản và
khó khăn hơn để tìm và tiêu
diệt một cách an toàn. Đây là
"mã và sửa chữa" cơn ác
mộng, nơi mà các lỗi trở nên
đắt hơn theo cấp số nhân để
khắc phục như dự án đi về.
Planned Thiết kế là một cập đến
điều này, và chứa một ý niệm
sinh ra từ các chi nhánh khác của kỹ
thuật. Nếu bạn muốn xây
dựng một nhà ổ chuột, bạn chỉ
có thể nhận được một số gỗ
lại với nhau và có được một
hình dạng thô. Tuy nhiên nếu bạn
muốn xây dựng một tòa nhà
chọc trời, bạn không thể làm việc
theo cách đó - nó sẽ chỉ sụp
đổ trước khi bạn nhận được
một nửa con đường lên. Vì vậy, bạn bắt đầu với
bản vẽ kỹ thuật, thực hiện trong một
văn phòng kỹ thuật như một trong những
người vợ của tôi làm việc ở
trong trung tâm thành phố Boston. Khi cô làm việc thiết kế con
số cô ra tất cả các vấn đề,
một phần bởi phân tích toán học,
nhưng chủ yếu là bằng cách sử
dụng tiêu chuẩn xây dựng.Xây dựng mã
số là những quy tắc về cách bạn
thiết kế các cấu trúc dựa trên kinh
nghiệm của những hoạt động (và
một số toán học cơ bản). Khi
thiết kế được thực hiện, sau
đó công ty kỹ thuật của mình
có thể giao việc thiết kế ra đến
một công ty xây dựng nó.
Thiết kế quy hoạch trong phần mềm nên
làm việc cùng một cách. Nhà
thiết kế nghĩ ra những vấn đề lớn
trước. Họ không cần
phải viết mã bởi vì họ không
phải là xây dựng phần mềm, chúng
được thiết kế nó. Vì vậy,
họ có thể sử dụng một kỹ thuật
thiết kế như UML mà được đi
từ một số chi tiết của chương
trình và cho phép các nhà thiết
kế để làm việc ở một mức
độ trừu tượng hơn. Khi thiết
kế được thực hiện họ có
thể bàn tay nó đi đến một nhóm
riêng biệt (hoặc thậm chí một công
ty riêng biệt) để xây dựng. Kể
từ khi các nhà thiết kế đang suy nghĩ
về một quy mô lớn hơn, họ có
thể tránh được hàng loạt các
quyết định chiến thuật dẫn đến
phần mềm entropy. Các lập trình viên
có thể làm theo sự chỉ đạo của
các thiết kế và cung cấp họ làm
theo thiết kế, có một hệ thống cũng
được xây dựng
Bây giờ các
phương pháp thiết kế quy hoạch
đã được khoảng từ những năm
70, và rất nhiều người đã sử dụng
nó. Nó là tốt hơn trong nhiều
cách hơn so với mã và sửa chữa
thiết kế tiến hóa. Nhưng nó có
một số lỗi. Các lỗi đầu
tiên là nó không thể nghĩ qua tất
cả các vấn đề mà bạn cần
để đối phó với khi bạn đang
lập trình. Vì vậy, nó
là không thể tránh khỏi khi lập
trình bạn sẽ tìm thấy những
điều đó đặt câu hỏi về
thiết kế. Tuy nhiên nếu các nhà thiết
kế được thực hiện, chuyển lên
một dự án khác, những gì sẽ
xảy ra?Các nhà lập trình bắt
đầu mã hóa xung quanh việc thiết kế
và bộ entropy. Ngay cả khi các
nhà thiết kế không phải là đi,
phải mất thời gian để sắp xếp ra
các vấn đề thiết kế, thay đổi các
bản vẽ, và sau đó thay đổi mã. Thường
có một sửa chữa và áp lực thời
gian nhanh hơn. Do đó entropy (một lần
nữa).
Hơn nữa thường có một vấn
đề văn hóa. Nhà
thiết kế được thực hiện thiết
kế do kỹ năng và kinh nghiệm, nhưng họ
rất bận rộn làm việc trên thiết kế
họ không có được nhiều thời gian
để mã nữa. Tuy nhiên các
công cụ và tài liệu về sự thay
đổi phát triển phần mềm với một
tốc độ nhanh chóng. Khi
bạn không có mã còn không có
thể chỉ cần bạn bỏ lỡ thay đổi
xảy ra với thông lượng công nghệ
này, bạn cũng mất đi sự tôn
trọng của những người làm mã.
Sự căng thẳng
này giữa các nhà xây dựng và
thiết kế sẽ xảy ra trong xây dựng
quá, nhưng nó mạnh hơn trong phần mềm. Đó
là dữ dội bởi vì có một sự
khác biệt quan trọng.Trong việc
xây dựng có sự phân chia rõ ràng
hơn trong kỹ năng giữa những người
thiết kế và những người xây
dựng, nhưng trong phần mềm đó là
ít trường hợp. Bất
kỳ lập trình viên làm việc trong
môi trường thiết kế cao cần phải
được rất lành nghề. Kỹ năng
đủ để đặt câu hỏi thiết
kế của nhà thiết kế, đặc biệt
là khi các nhà thiết kế là
ít hiểu biết về ngày với thực
tế ngày của nền tảng phát triển.
Bây giờ những vấn đề này
có thể được cố định. Có
lẽ chúng ta có thể đối phó
với sự căng thẳng của con người. Có lẽ chúng ta có thể nhận
được các nhà thiết kế khéo
léo đủ để đối phó với
hầu hết các vấn đề và có
một quá trình xử lý kỷ luật,
đủ để thay đổi các bản vẽ. Vẫn
còn một vấn đề khác: yêu
cầu thay đổi. Yêu cầu thay đổi
là số một trong những vấn đề
lớn là nguyên nhân gây đau đầu
trong các dự án phần mềm mà tôi
chạy vào.
Một cách để đối phó với
yêu cầu thay đổi là để xây
dựng linh hoạt vào thiết kế để
bạn có thể dễ dàng thay đổi như
các yêu cầu thay đổi. Tuy nhiên
điều này đòi hỏi phải có
cái nhìn sâu sắc vào những loại
thay đổi mà bạn mong đợi. Một thiết kế có thể
được lên kế hoạch để
đối phó với các khu vực của
biến động, nhưng trong khi đó sẽ
giúp cho các yêu cầu dự kiến
thay đổi, nó sẽ không giúp
đỡ (và có thể làm tổn thương) cho những thay đổi không
lường trước được. Vì
vậy, bạn cần phải hiểu rõ các
yêu cầu cũng đủ để tách
các khu vực dễ bay hơi, và quan sát
của tôi là điều này là rất
khó.
Bây giờ một số
các yêu cầu vấn đề này là do
không hiểu rõ các yêu cầu đủ. Vì
vậy, rất nhiều người dân tập trung
vào các quá trình yêu cầu kỹ
thuật để có được yêu cầu tốt hơn với hy vọng rằng
điều này sẽ ngăn chặn sự cần
thiết phải thay đổi thiết kế sau
này.Nhưng ngay cả hướng này là
một trong đó có thể không dẫn
đến một chữa bệnh. Nhiều
yêu cầu không lường trước
được những thay đổi xảy ra do sự
thay đổi trong kinh doanh.Những người không
thể ngăn chặn được, tuy nhiên cẩn
thận quá trình kỹ thuật yêu cầu
của bạn.
Vì vậy, tất cả điều này
làm cho thiết kế quy hoạch âm thanh không
thể. Chắc chắn họ là những
thách thức lớn. Nhưng tôi
không có ý định cho rằng thiết
kế quy hoạch là tồi tệ hơn so với
thiết kế tiến hóa vì nó
thường được thực hiện trong một
"mã và sửa chữa" cách.Thực ra
tôi thích thiết kế để
"mã và sửa chữa" kế hoạch. Tuy
nhiên tôi nhận thức được các
vấn đề về thiết kế quy hoạch và
đang tìm kiếm một hướng đi mới.
Practices Khai Thông XP
XP là gây tranh cãi vì nhiều lý do,
nhưng một trong những lá cờ đỏ
chốt trong XP là nó chủ trương thiết
kế tiến hóa hơn là thiết kế quy
hoạch. Như chúng ta biết, thiết kế
tiến hóa có thể không có khả
năng làm việc do các quyết định
quảng cáo hoc thiết kế và phần mềm
entropy.
Tại cốt lõi của sự hiểu biết
lập luận này là các đường cong
thay đổi phần mềm. Các đường
cong thay đổi nói rằng dự án này
chạy, nó sẽ trở thành đắt hơn
theo cấp số nhân để thực hiện thay
đổi. Các đường cong
thay đổi thường được biểu
diễn trong các điều khoản của giai
đoạn "một sự thay đổi được
thực hiện trong phân tích với giá 1
sẽ có chi phí để sửa chữa
hàng ngàn sản xuất". Đây là mỉa mai như hầu hết các
dự án vẫn còn làm việc trong một
quá trình ad-hoc mà không có một giai
đoạn phân tích, nhưng các lũy
thừa vẫn còn đó. Các
đường cong thay đổi theo cấp số
nhân có nghĩa là thiết kế tiến
hóa có thể không thể làm việc. Cũng mang trong nó tại sao thiết kế
quy hoạch phải được thực hiện một
cách cẩn thận bởi vì bất kỳ sai
lầm trong thiết kế quy hoạch phải đối
mặt với cùng một lũy thừa.
Các giả định cơ bản cơ bản XP
là nó có thể san bằng các
đường cong thay đổi đủ để
làm cho công việc thiết kế tiến
hóa. Làm phẳng này
được kích hoạt bởi cả XP và
khai thác bởi XP. Đây là một
phần của các khớp nối của các
thực hành XP: đặc biệt là bạn
không thể làm những phần của XP
mà khai thác các đường cong phẳng
mà không làm những điều đó cho
phép sự làm phẳng. Đây là
một nguồn chung của những tranh cãi về XP. Nhiều
người chỉ trích việc khai thác mà
không hiểu được cho phép. Thường thì những chỉ trích
xuất phát từ kinh nghiệm của chính
các nhà phê bình ", nơi họ
đã không làm các thực hành cho
phép cho phép thực hiện khai thác
để làm việc. Kết quả là
họ đã bị đốt cháy và khi
họ thấy XP họ nhớ lửa.
Có rất nhiều bộ phận để
thực hiện những phép. Tại cốt
lõi là những kinh nghiệm của thử
nghiệm, và hội nhập liên tục. Nếu không có sự an toàn
được cung cấp bằng cách kiểm tra
các phần còn lại của XP sẽ là
không thể. Hội nhập liên tục là
cần thiết để giữ cho các nhóm
đồng bộ, do đó bạn có
thể làm cho một sự thay đổi và
không phải lo lắng về việc tích hợp
nó với những người khác. Cùng
với những hoạt động có thể có
một ảnh hưởng lớn trên các
đường cong thay đổi. Tôi
được nhắc nhở về điều này
một lần nữa ở đây tại Thought. Giới
thiệu các thử nghiệm và tích hợp
liên tục có sự cải thiện rõ
rệt về các nỗ lực phát triển. Chắc
chắn đủ để nghiêm túc đặt
câu hỏi về sự khẳng định XP mà
bạn cần tất cả các thực hành
để có được một cải tiến
lớn.
Refactoring có một hiệu ứng tương
tự. Những
người Refactor mã của họ trong cách
thức xử lý kỷ luật được
đề xuất bởi XP tìm thấy một sự
khác biệt đáng kể trong hiệu quả
của họ so với làm, chuyển dịch cơ
cấu ad-hoc hơn lỏng hơn. Đó
chắc chắn là kinh nghiệm của tôi một
lần Kent đã dạy tôi để cấu
trúc lại đúng. Sau khi
tất cả, chỉ có một sự thay đổi
mạnh mẽ như vậy sẽ thúc đẩy
tôi viết cả một cuốn sách về
nó.
Jim Highsmith,
trong tuyệt vời của mình tóm tắt
của XP , sử
dụng tương tự của một bộ cân. Trong một khay được quy hoạch
thiết kế, các khác được sắp
xếp. Trong cách tiếp cận
truyền thống thiết kế quy hoạch chi phối
vì những giả định là bạn không
thể thay đổi tâm trí của bạn sau
này. Như chi phí thay
đổi làm giảm sau đó bạn có
thể làm nhiều hơn những thiết kế
của bạn sau khi tái cấu trúc. Thiết
kế quy hoạch không hết hoàn toàn,
nhưng bây giờ có một sự cân
bằng của hai cách tiếp cận thiết kế
để làm việc với. Đối với
tôi, nó cảm thấy như thế trước
khi refactoring tôi đã làm tất cả
các thiết kế của tôi một tay.
Những thực hành tạo điều kiện cho
hội nhập liên tục, thử nghiệm, và
tái cấu trúc, cung cấp một môi
trường mới mà làm cho thiết kế
tiến hóa chính đáng. Tuy nhiên có một điều chúng ta
chưa tìm ra là nơi mà các điểm
cân bằng là. Tôi chắc
chắn rằng, mặc dù ấn tượng bên
ngoài, XP không chỉ là kiểm tra, mã,
và cấu trúc lại. Không
có chỗ cho việc thiết kế trước khi
mã hóa. Một số trong
số này là trước khi có bất kỳ
mã hóa, phần lớn xảy ra trong các
lần lặp lại trước khi mã hóa cho một
công việc cụ thể. Nhưng có
một sự cân bằng mới giữa thiết
kế lên phía trước và tái cấu
trúc.
Giá trị của sự
đơn giản
Hai trong số các tập
hợp lớn nhất khóc trong XP là những
khẩu hiệu "Làm đơn giản Thing mà
có thể thành công" và "Bạn
sẽ không cần nó" (được gọi
là YAGNI). Cả hai đều là biểu hiện của
việc thực hành XP của Thiết kế
đơn giản.
Cách YAGNI thường
được mô tả, nó nói rằng
bạn không nên thêm bất kỳ mã
ngày hôm nay mà sẽ chỉ được
sử dụng bởi tính năng đó là cần
thiết ngày mai. Trên khuôn mặt
của nó điều này nghe có vẻ
đơn giản. Vấn đề đi kèm
với những thứ như các khuôn khổ,
các thành phần tái sử dụng và
thiết kế linh hoạt. Những
thứ như vậy là phức tạp để
xây dựng.Bạn phải trả thêm chi phí
lên phía trước để xây dựng
chúng, với hy vọng rằng bạn sẽ lấy
lại chi phí mà sau này. Ý
tưởng này của xây dựng linh
hoạt lên phía trước được xem
là một phần quan trọng của thiết kế
phần mềm hiệu quả.
Tuy nhiên lời khuyên
của XP là bạn không xây dựng các
thành phần linh hoạt và khuôn khổ cho
các trường hợp đầu tiên mà
cần chức năng đó. Hãy để
những cấu trúc này phát triển
khi cần thiết. Nếu tôi muốn có
một lớp tiền ngày hôm nay để xử
lý bổ sung nhưng không nhân sau đó
tôi xây dựng chỉ bổ sung vào các
lớp học tiền. Ngay cả khi
tôi chắc chắn rằng tôi sẽ cần
nhân trong phiên bản kế tiếp, và
hiểu làm thế nào để làm
điều đó một cách dễ dàng,
và nghĩ rằng nó sẽ được
thực sự nhanh chóng để làm,
tôi vẫn sẽ để lại nó cho
đến khi có phiên bản kế tiếp.
Một lý do cho
điều này là kinh tế. Nếu tôi
phải làm bất kỳ công việc mà
chỉ được sử dụng cho một tính
năng cần thiết vào ngày mai, có
nghĩa là tôi mất sức từ các
tính năng mà cần phải được
thực hiện để lặp lại này. Kế hoạch phát hành cho biết
những gì cần phải được làm
việc bây giờ, làm việc vào những
thứ khác trong tương lai là trái với
các thỏa thuận phát triển với
khách hàng. Có một rủi ro
là câu chuyện của sự lặp lại
này có thể không được thực hiện. Ngay cả khi câu chuyện của sự
lặp lại này không có nguy cơ nó
lên đến khách hàng để quyết
định những gì thêm công việc
cần được thực hiện - và đó
có thể vẫn không liên quan đến phép
nhân.
Không khuyến khích kinh tế này là do
các cơ hội mà chúng ta có thể
không nhận được nó ngay. Tuy nhiên nhất định chúng tôi
có thể về cách chức năng này
hoạt động, chúng tôi vẫn có
thể nhận được nó sai - đặc
biệt là vì chúng ta không có yêu
cầu chi tiết nào. Làm việc
trên các giải pháp sai đầu thậm
chí còn lãng phí hơn so với làm
việc trên các giải pháp đúng
sớm. Và Xperts thường tin rằng chúng
tôi có rất nhiều khả năng là sai
lầm hơn bên phải (và tôi đồng
ý với tình cảm đó.)
Lý do thứ hai cho thiết kế đơn
giản là một thiết kế phức tạp
là khó khăn hơn để hiểu hơn
một thiết kế đơn giản. Vì vậy bất kỳ sự sửa
đổi của hệ thống được thực
hiện khó hơn bởi thêm phức tạp. Điều
này cho biết thêm một chi phí trong thời
gian từ khi thiết kế phức tạp hơn
được thêm vào và khi cần
thiết.
Bây giờ lời
khuyên này đánh rất nhiều người
như là vô nghĩa, và họ có
quyền nghĩ rằng.Phải cung cấp mà bạn
tưởng tượng thế giới phát triển
bình thường nơi thực hành cho phép của XP
là không đúng chỗ. Tuy nhiên khi
sự cân bằng giữa những alter thiết kế
quy hoạch và tiến hóa, sau đó YAGNI
trở nên thực hành tốt (và chỉ
nếu).
Vì vậy, để tóm tắt. Bạn
không muốn dành nhiều nỗ lực thêm
khả năng mới mà sẽ không cần
thiết cho đến khi một sự lặp lại trong
tương lai. Và thậm chí
nếu chi phí là số không, bạn vẫn
không muốn thêm nó vì nó làm
tăng chi phí của việc biến đổi ngay
cả khi nó không tốn kém gì để
đưa vào. Tuy nhiên bạn có thể
chỉ có một cách hợp lý cư xử
theo cách này khi bạn đang sử dụng XP,
hoặc tương tự kỹ thuật mà làm
giảm chi phí thay đổi.
Đơn giản những
gì trên trái đất là Anyway
Vì vậy, chúng
tôi muốn mã của chúng tôi để
được như đơn giản càng tốt. Điều
đó không có vẻ như đó là
quá khó để tranh cãi cho, sau khi tất
cả những ai muốn được phức tạp?Nhưng tất
nhiên điều này đặt ra câu hỏi
"cái gì là đơn giản?"
Trong XPE Kent cho bốn tiêu
chí cho một hệ thống đơn giản. Để
(quan trọng đầu tiên nhất):
§
Chạy tất cả các xét nghiệm
§
Không có sự trùng lặp
§
Cho thấy tất cả các ý
§
Số ít nhất của các lớp học
hoặc các phương pháp
Chạy tất cả các bài kiểm tra
là một tiêu chí khá đơn giản. Không có sự trùng lặp cũng
là khá dễ dàng, mặc dù rất
nhiều nhà phát triển cần hướng
dẫn về làm thế nào để đạt
được nó. Một trong những khó
khăn đã làm với tiết lộ ý
định. Chính xác nào đó
có ý nghĩa gì?
Các giá trị cơ bản ở đây
là rõ ràng của mã. XP đặt
một giá trị cao về mã được
dễ dàng đọc. Trong XP "mã thông
minh" là một thuật ngữ của lạm
dụng. Nhưng ý định tiết lộ
mã số của một số người là
sự thông minh của người khác.
Trong giấy XP 2000 của mình, Josh Kerievsky chỉ ra
một ví dụ tốt về điều này. Anh ta nhìn vào có thể mã XP
công nhất của tất cả - JUnit . JUnit sử dụng
trang trí để thêm chức năng tùy
chọn để kiểm tra các trường hợp,
những thứ như đồng bộ hóa
đồng thời và hàng loạt thiết
lập mã. Bằng cách tách ra mã
này vào trang trí nó cho phép mã
chung để được rõ ràng hơn so
với nếu không thì sẽ được.
Nhưng bạn phải tự
hỏi mình nếu các mã kết quả
là thực sự đơn giản. Đối
với tôi đó là, nhưng sau đó
tôi quen với mô hình trang trí. Nhưng
đối với nhiều người mà không
phải là nó khá phức tạp. Tương
tự như JUnit sử dụng phương pháp
pluggable mà tôi đã nhận thấy hầu
hết mọi người ban đầu tìm thấy
bất cứ điều gì nhưng rõ ràng. Vì
vậy, chúng ta có thể kết luận rằng
thiết kế JUnit là đơn giản cho các
nhà thiết kế có kinh nghiệm nhưng
phức tạp hơn cho những người ít kinh
nghiệm?
Tôi nghĩ rằng sự
tập trung vào việc loại bỏ trùng
lặp, cả với "Một lần và chỉ
một lần" của XP và thực dụng Lập trình viên
của KHÔ (Không
lặp lại) là một trong những
mảnh rõ ràng và mạnh mẽ tuyệt
vời của lời khuyên tốt. Chỉ sau
đó một mình có thể đưa
bạn một cách lâu dài. Nhưng nó
không phải là tất cả mọi thứ,
và đơn giản vẫn là một
điều phức tạp để tìm.
Gần đây tôi
đã tham gia làm một cái gì
đó mà có thể cũng được
hơn thiết kế. Nó đã tái
cấu trúc và một số linh hoạt
đã được gỡ bỏ. Tuy nhiên,
như một trong những nhà phát triển cho
biết "nó dễ dàng hơn để
cấu trúc lại trên thiết kế hơn
là để cấu trúc lại không có
thiết kế." Nó là tốt nhất
để có một chút đơn giản hơn
bạn cần phải được, nhưng nó
không phải là một thảm họa
được một ít phức tạp hơn.
Lời khuyên tốt nhất tôi nghe về
tất cả điều này đến từ
Bác Bob (Robert Martin). Lời khuyên
của ông đã không nhận được
quá hung lên về những thiết kế
đơn giản nhất là.Sau khi tất cả
các bạn có thể, nên, và sẽ
cấu trúc lại nó sau này. Cuối
cùng sự sẵn sàng để Refactor là
quan trọng hơn nhiều so với những gì
biết những điều đơn giản nhất
là ngay lập tức.
Có Refactoring Xâm phạm YAGNI?
Chủ
đề này đã đưa vào danh
sách gửi thư XP gần
đây, và nó có giá trị
đưa ra khi chúng ta xem xét vai trò của
thiết kế trong XP.
Về cơ bản các câu hỏi bắt
đầu với các điểm đó refactoring
mất thời gian nhưng không thêm chức
năng. Kể từ
thời điểm YAGNI là bạn có nghĩa
vụ phải thiết kế cho hiện tại không
cho tương lai, đây là một sự vi phạm?
Các điểm YAGNI là bạn không thêm
phức tạp mà không phải là cần
thiết cho những câu chuyện hiện tại. Đây là một phần của việc
thực hành thiết kế đơn giản. Refactoring
là cần thiết để giữ cho các
thiết kế đơn giản như bạn có
thể, vì vậy bạn nên cấu trúc
lại bất cứ khi nào bạn nhận ra bạn
có thể làm cho mọi việc đơn
giản hơn.
Thiết
kế đơn giản cả khai thác thực
hành XP và cũng là một thực tế cho
phép. Chỉ khi bạn có thử nghiệm,
tích hợp liên tục, và refactoring bạn
có thể thực hành thiết kế đơn
giản, hiệu quả. Nhưng đồng thời
giữ thiết kế đơn giản là cần
thiết để giữ phẳng thay đổi
đường cong. Bất kỳ phức tạp
không cần thiết làm cho một hệ thống
khó khăn hơn để thay đổi trong tất
cả các hướng, ngoại trừ một trong
những bạn dự đoán với sự linh
hoạt phức tạp mà bạn đặt vào. Tuy nhiên mọi người không giỏi
dự đoán, vì vậy tốt nhất
để phấn đấu cho sự đơn giản. Tuy
nhiên mọi người sẽ không nhận
được những điều lần đầu
tiên đơn giản nhất, vì vậy bạn
cần phải cấu trúc lại để có
được gần gũi hơn
đến mục tiêu.
Patterns và XP
Các JUnit dụ dẫn tôi chắc chắn
vào việc đưa lên các mẫu. Mối
quan hệ giữa mô hình và XP là thú
vị, và đó là một câu hỏi
phổ biến. Joshua Kerievsky lập
luận rằng mô hình đang được
nhấn mạnh trong XP và ông đã làm
cho lập luận hùng hồn, vì vậy tôi
không muốn lặp lại điều đó. Nhưng
nó có giá trị mang trong tâm trí
rằng đối với nhiều người
mẫu dường như mâu thuẫn với XP.
Bản chất của lập
luận này là mô hình thường
được sử dụng quá. Thế giới
đầy huyền thoại của các lập
trình viên, tươi ra đọc đầu
tiên của GOF người bao
gồm mười sáu mẫu trong 32
dòng mã. Tôi nhớ một buổi tối,
được thúc đẩy bởi một mạch
nha duy nhất rất đẹp, chạy qua với Kent
một bài báo được gọi là
"Không Design Patterns: 23 thủ thuật giá
rẻ" Chúng tôi đang nghĩ đến
những việc như sử dụng một tuyên
bố nếu hơn là một chiến lược. Những
trò đùa đã có một điểm,
mô hình này thường bị lạm
dụng, nhưng điều đó không làm
cho họ một ý tưởng tồi. Câu
hỏi đặt ra là làm thế nào bạn
sử dụng chúng.
Một lý thuyết của việc này là
các lực lượng của thiết kế
đơn giản sẽ dẫn bạn vào các
mẫu. Nhiều phép tái cấu
trúc làm điều này một cách
rõ ràng, nhưng thậm chí không có
họ bằng cách làm theo các quy tắc
của thiết kế đơn giản, bạn sẽ
đến với các mô hình thậm
chí nếu bạn không biết họ đã. Điều
này có thể đúng, nhưng nó
thực sự là cách tốt nhất để
làm điều đó? Chắc
chắn nó sẽ tốt hơn nếu bạn biết
gần nơi bạn đang đi và có một
cuốn sách có thể giúp bạn thông
qua các vấn đề thay vì phải phát
minh ra nó tất cả chính mình.Tôi chắc chắn vẫn đạt cho GOF
bất cứ khi nào tôi cảm thấy một
mô hình sắp tới. Đối với
tôi thiết kế hiệu quả cho rằng chúng
ta cần phải biết giá của một
mô hình là giá trị thanh toán -
đó là kỹ năng riêng của mình. Tương
tự như vậy, khi Joshua cho thấy, chúng ta
cần phải làm quen thêm về làm thế
nào để giảm bớt thành một mô
hình dần dần. Về vấn
đề này XP đối xử theo cách
chúng ta sử dụng các mẫu khác nhau
với các cách một số người sử
dụng chúng, nhưng chắc chắn không
loại bỏ giá trị của họ.
Nhưng đọc một
số các danh sách gửi thư tôi nhận
được cảm giác khác biệt mà
nhiều người nhìn thấy XP như mẫu
chán nản, bất chấp sự trớ trêu
rằng hầu hết những người
ủng hộ của XP là các nhà lãnh
đạo của phong trào mô hình quá. Đây
có phải là vì họ đã thấy
ngoài mô hình, hoặc vì các mẫu
đang có để nhúng vào trong suy nghĩ
của họ rằng họ không còn nhận
ra nó? Tôi không biết câu trả
lời cho những người khác, nhưng
đối với tôi là mô hình vẫn
cực kỳ quan trọng. XP có
thể là một quá trình phát triển,
nhưng mô hình là một xương sống
của kiến thức thiết kế, kiến
thức là có giá trị bất
cứ quá trình của bạn có thể
được. Các quá trình
khác nhau có thể sử dụng mô hình
theo những cách khác nhau. XP
nhấn mạnh cả hai không sử dụng một
mẫu cho đến khi nó cần thiết và
tiến hóa theo cách của bạn thành
một mô hình thông qua một thực hiện
đơn giản. Nhưng mô hình vẫn
là một phần quan trọng của kiến
thức để có được.
Lời khuyên của tôi để XPers sử
dụng các mẫu sẽ được
§
Đầu tư thời gian học hỏi về
mô hình
§
Tập trung khi áp dụng mô hình (không
quá sớm)
§
Tập trung vào làm thế nào để
thực hiện mô hình ở dạng đơn
giản của nó đầu tiên, sau đó
thêm phức tạp sau này.
§
Nếu bạn đặt một mô hình trong,
và sau đó nhận ra rằng nó không
phải là kéo trọng lượng của
nó - không sợ phải lấy nó ra một
lần nữa.
Tôi nghĩ XP nên nhấn mạnh học tập
về mô hình hơn. Tôi không chắc
chắn làm thế nào tôi sẽ phù
hợp đó vào thực hành XP, nhưng
tôi chắc chắn rằng Kent có thể đến
với một cách.
Trồng một kiến
trúc
Chúng ta có ý
nghĩa gì bởi một kiến trúc
phần mềm? Để cho tôi những kiến
trúc hạn truyền tải một ý
niệm của các yếu tố cốt lõi
của hệ thống, các mảnh mà khó có
thể thay đổi. Một nền tảng mà
trên đó các phần còn lại phải
được xây dựng.
Vai trò gì một kiến trúc
chơi khi bạn đang sử dụng thiết kế
tiến hóa? Một lần nữa XPS
nhà phê bình nói rằng XP bỏ qua
kiến trúc, mà tuyến
đường của XP là để đi
đến mã nhanh và tin tưởng rằng
refactoring rằng sẽ giải quyết tất cả
các vấn đề thiết kế. Điều
thú vị là họ đúng, và
đó cũng có thể là sự yếu
đuối. Chắc chắn các XPers hung hăng
nhất - Kent Beck, Ron Jeffries, và Bob Martin - đang
đặt càng nhiều năng lượng vào
tránh bất kỳ lên thiết kế kiến
trúc phía trước. Không
đặt trong một cơ sở dữ liệu cho
đến khi bạn thực sự biết bạn sẽ
cần nó. Làm việc với các tập
tin đầu tiên và cấu trúc lại cơ
sở dữ liệu ở trong một sự lặp lại
sau đó.
Đồng nghiệp của tôi Neal
Ford đã đào sâu sâu hơn vào
các kỹ thuật để thiết kế tiến
hóa trong một loạt mười lăm bài viết
cho IBM developerWorks . Ông cũng nghiên
cứu kịch bản video với một hội thảo về thực hành
kỹ thuật nhanh nhẹn cho O'Reilly.
Tôi biết đến là một XPer hèn
nhát, và như vậy tôi phải đồng
ý. Tôi nghĩ rằng có một vai
trò cho một kiến trúc khởi
điểm rộng. Những thứ
như nêu trên đầu như thế nào
để lớp ứng dụng, làm thế nào
bạn sẽ tương tác với cơ sở
dữ liệu (nếu cần), phương pháp
gì để sử dụng để xử lý
các máy chủ web.
Về cơ bản tôi nghĩ nhiều người
trong các khu vực này là mô hình
mà chúng tôi đã học được
trong những năm qua. Như kiến
thức của bạn về mô hình
phát triển, bạn cần phải có một
đầu take hợp lý như thế nào
để sử dụng chúng. Tuy
nhiên sự khác biệt chính là những
quyết định kiến trúc ban
đầu được dự kiến sẽ
không được đặt trong đá, hay
đúng hơn là nhóm biết rằng họ
có thể phạm sai lầm trong quyết định
ban đầu của họ, và cần phải
có can đảm để sửa chữa chúng. Những người khác đã nói
về câu chuyện của một dự án
đó, gần đến việc triển khai,
quyết định không cần EJB nữa và
loại bỏ nó khỏi hệ thống của
họ. Đó là một cấu trúc
lại khá lớn, nó đã
được thực hiện muộn, nhưng thực
tiễn cho phép làm cho nó không chỉ
có thể, nhưng đáng giá.
Làm thế nào điều này sẽ
làm việc theo chiều ngược lại. Nếu
bạn quyết định không sử dụng EJB,
nó sẽ khó khăn hơn để thêm
nó sau này? Nên bạn do
đó không bao giờ bắt đầu với EJB
cho đến khi bạn đã thử những thứ
không có và tìm thấy nó thiếu? Đó
là một câu hỏi có liên quan
đến nhiều yếu tố. Chắc chắn
làm việc không có thành phần
phức tạp làm tăng sự đơn giản
và làm cho mọi thứ đi nhanh hơn. Tuy
nhiên đôi khi nó dễ dàng hơn
để trích xuất ra một cái gì
đó như thế hơn là để
đặt nó vào.
Vì vậy, lời
khuyên của tôi là bắt đầu bằng
việc đánh giá những gì các
kiến trúc có thể là.Nếu
bạn nhìn thấy một số lượng lớn
các dữ liệu với nhiều người dùng, đi
trước và sử dụng một cơ sở
dữ liệu từ ngày 1. Nếu bạn thấy
logic kinh doanh phức tạp, đặt trong một mô
hình miền. Tuy nhiên, trong sự tôn
kính với các vị thần của YAGNI, khi nghi
ngờ sai lầm về phía của sự đơn
giản. Cũng sẵn sàng để đơn
giản hóa kiến trúc của bạn
ngay khi bạn thấy rằng một phần của
kiến trúc không thêm bất cứ
điều gì.
UML và XP
Trong tất cả những câu hỏi tôi
nhận được về sự tham gia của tôi
với XP là một trong những lớn nhất xoay
quanh hiệp hội của tôi với UML. Không
hai không tương thích?
Có một số điểm của sự không
tương thích. Chắc chắn XP de-nhấn
mạnh sơ đồ đến một mức
độ lớn. Mặc dù vị
trí chính thức là dọc theo dòng
"sử dụng chúng nếu họ là hữu
ích", có một ẩn ý mạnh mẽ
của "XPers thực không làm sơ
đồ". Điều này được
củng cố thêm bởi thực tế rằng những người như Kent không
phải là ở tất cả các tiện nghi
với sơ đồ, thực sự tôi chưa bao
giờ thấy Kent tự nguyện vẽ một sơ
đồ phần mềm trong bất kỳ ký
hiệu cố định
Tôi nghĩ vấn đề này xuất
phát từ hai nguyên nhân riêng biệt. Một
là thực tế là một số người
thấy biểu đồ phần mềm hữu ích
và một số người thì không. Mối
nguy hiểm là những người làm nghĩ
rằng những người không nên làm
gì và ngược lại. Thay vào
đó chúng ta nên chấp nhận rằng
một số người sẽ sử dụng sơ
đồ và một số sẽ không.
Các vấn đề khác là biểu
đồ phần mềm có xu hướng để
có được liên kết với một
quá trình nặng. Quá trình như
vậy dành nhiều thời gian vẽ sơ
đồ mà không giúp đỡ và
thực sự có thể gây ra thiệt hại. Vì vậy, tôi nghĩ rằng mọi
người nên được khuyên làm
thế nào để sử dụng sơ đồ
tốt và tránh các bẫy, chứ không
phải là "chỉ khi bạn phải (WIMP)"
mà thường đi ra khỏi các Xperts.
Vì vậy, đây là lời khuyên
của tôi cho việc sử dụng sơ đồ
tốt.
Đầu tiên hãy ghi nhớ những gì
bạn đang vẽ sơ đồ cho. Các
giá trị chính là giao tiếp. Giao tiếp hiệu quả có nghĩa là
việc lựa chọn những điều quan trọng
và bỏ qua ít quan trọng.Chọn lọc
này là chìa khóa để sử dụng
UML tốt. Đừng vẽ mỗi lớp - chỉ
những người quan trọng. Đối
với mỗi lớp, không hiển thị mỗi
thuộc tính và hoạt động - chỉ
những người quan trọng. Đừng vẽ
sơ đồ trình tự cho tất cả các
trường hợp sử dụng và kịch bản
- chỉ ... bạn có được hình
ảnh. Một vấn đề phổ biến
với việc sử dụng chung của sơ đồ
là những người cố gắng để
làm cho họ toàn diện. Mã
này là nguồn thông tin tốt nhất
toàn diện, vì mã là điều dễ
nhất để giữ cho đồng bộ với
mã. Đối với sơ đồ toàn
diện là kẻ thù của tính toàn
diện.
Một sử dụng phổ
biến của sơ đồ là để khám
phá một thiết kế trước khi bạn
bắt đầu mã hóa nó. Thường
thì bạn có ấn tượng rằng hoạt
động đó là bất hợp pháp trong
XP, nhưng điều đó không
đúng. Nhiều người nói rằng khi
bạn có một nhiệm vụ dính nó
là giá trị nhận được với nhau
để có một phiên thiết kế nhanh
chóng đầu tiên. Tuy nhiên khi bạn
làm phiên như:
§
giữ chúng ngắn
§
đừng cố gắng để giải quyết
tất cả các chi tiết (chỉ những
người quan trọng)
§
điều trị các thiết kế kết
quả như một phác thảo, không phải
là một thiết kế cuối cùng
Điểm cuối cùng là giá trị
mở rộng. Khi bạn làm một
số thiết kế lên phía trước, bạn
sẽ chắc chắn tìm thấy rằng một
số khía cạnh của thiết kế là sai,
và bạn chỉ khám phá điều này
khi mã hóa. Đó không phải là một vấn đề mà
bạn cung cấp sau đó thay đổi thiết
kế. Những rắc rối xảy đến khi
mọi người nghĩ rằng việc thiết kế
được thực hiện, và sau đó
không có những kiến thức mà
họ đã đạt được thông
qua việc mã hóa và chạy nó trở
lại vào thiết kế.
Thay đổi thiết kế không nhất thiết
có nghĩa là thay đổi sơ đồ. Đó
là hoàn toàn hợp lý để vẽ
sơ đồ giúp bạn hiểu được
thiết kế và sau đó ném đồ
đi. Vẽ họ giúp, và đó là
đủ để làm cho họ đáng
giá. Họ không cần phải trở
thành hiện vật vĩnh viễn. Các sơ
đồ UML tốt nhất là không tạo
tác.
Rất nhiều XPers sử dụng thẻ CRC. Đó không phải là
mâu thuẫn với UML. Tôi sử dụng
một kết hợp của CRC và UML tất cả
các thời gian, sử dụng kỹ thuật nào
là hữu ích nhất cho công việc ở
bàn tay.
Một sử dụng các sơ đồ UML
là trên-đi tài liệu. Trong hình thức bình
thường của nó đây là một
mô hình cư trú trên một công
cụ trường hợp. Ý
tưởng là giữ tài liệu này sẽ
giúp mọi người làm việc trên
hệ thống. Trong thực tế nó
thường không giúp gì cả.
§
phải mất quá lâu để giữ cho
sơ đồ được cập nhật, vì
vậy họ rơi ra khỏi đồng bộ với
mã
§
chúng được giấu trong một công
cụ CASE hoặc một chất kết dính dày,
do đó không ai nhìn vào chúng
Vì vậy, lời khuyên cho các tài
liệu trên sẽ chạy từ những vấn
đề quan sát:
§
Chỉ sử dụng sơ đồ mà bạn
có thể giữ cho đến ngày mà
không đau đớn đáng chú ý
§
Đặt sơ đồ nơi mọi người
có thể dễ dàng nhìn thấy chúng. Tôi
muốn gửi cho họ trên một bức
tường. Khuyến khích mọi người
chỉnh sửa các bản sao bức tường
với một cây bút để thay đổi
đơn giản.
§
Hãy chú ý đến việc người
dân đang sử dụng chúng, nếu không
ném chúng đi.
Khía cạnh cuối cùng của việc sử
dụng UML là cho các tài liệu trong một
tình huống giao, chẳng hạn như khi một
nhóm trao lại khác. Dưới
đây là điểm XP là sản xuất
tài liệu là mộtcâu chuyện sử dụng giống
như bất kỳ khác, và do đó giá
trị kinh doanh của nó được xác
định bởi khách hàng. Một
lần nữa các UML là hữu ích ở
đây, cung cấp các sơ đồ
được chọn lọc để giúp
truyền thông. Hãy nhớ rằng mã
là kho lưu trữ các thông tin chi tiết,
sơ đồ hành động để tóm
tắt và làm nổi bật các vấn
đề quan trọng.
Trên Metaphor
Được rồi tôi cũng có thể
nói nó công khai - tôi vẫn chưa nhận
được hang của điều ẩn dụ
này. Tôi đã nhìn
thấy nó hoạt động, và hoạt
động tốt trên các dự án C3,
nhưng nó không có nghĩa là tôi có
bất kỳ ý tưởng làm thế nào
để làm điều đó, hãy
để một mình như thế nào để
giải thích làm thế nào để
làm điều đó.
Việc thực hành XP của phép ẩn
dụ được xây dựng trên phương
pháp tiếp cận của phường Cunninghams
của một hệ thống các tên. Vấn
đề là bạn phải có được
một tập nổi tiếng của tên hoạt
động như một từ vựng để nói
về tên miền. Hệ thống này của
tên đóng vào cách bạn đặt
tên cho các lớp học và phương
pháp trong hệ thống
Tôi đã xây dựng một hệ
thống các tên bằng cách xây dựng
một mô hình khái niệm của tên
miền. Tôi đã làm
điều này với các chuyên gia lĩnh
vực sử dụng UML hoặc người tiền
nhiệm của nó. Tôi đã tìm
thấy bạn phải cẩn thận làm điều
này. Bạn cần phải
giữ cho một tập hợp đơn giản tối
thiểu của các ký hiệu, và bạn
có để bảo vệ chống lại để
cho bất kỳ vấn đề kỹ thuật từ
từ vào mô hình. Nhưng
nếu bạn làm điều này tôi
đã tìm thấy rằng bạn có thể
sử dụng điều này để xây
dựng một vốn từ vựng của domain mà
các chuyên gia tên miền có thể hiểu
và sử dụng để giao tiếp với
các nhà phát triển. Mô hình
không phù hợp với các lớp thiết
kế hoàn hảo, nhưng nó đủ
để cung cấp cho một vốn từ vựng
phổ biến cho toàn bộ miền.
Bây giờ tôi
không thấy bất kỳ lý do tại sao từ
vựng này không có thể là một
ẩn dụ, như ẩn dụ C3 đã biến
biên chế vào một dây chuyền lắp
ráp máy. Nhưng tôi cũng không
hiểu tại sao cơ sở hệ thống của
bạn tên trên từ vựng của tên
miền là một ý tưởng tồi, hoặc. Tôi
cũng không phải đang nghiêng để từ
bỏ một kỹ thuật mà làm việc
tốt cho tôi trong việc hệ thống các
tên.
Thường thì mọi người chỉ
trích XP trên cơ sở đó bạn cần
ít nhất là một số thiết kế
phác thảo của một hệ thống. XPers
thường phản ứng với câu trả lời
"đó là ẩn dụ". Nhưng
tôi vẫn không nghĩ rằng tôi đã
nhìn thấy ẩn dụ giải thích một
cách thuyết phục. Đây là một
khoảng cách thực trong XP, và một trong đó
các XPers cần phải sắp xếp ra ngoài.
Bạn có muốn trở
thành một kiến trúc sư khi
lớn lên?
Đối với nhiều thập kỷ qua, các
thuật ngữ "kiến trúc sư phần
mềm" đã trở thành phổ
biến.Đó là một thuật ngữ
đó là khó khăn đối với
tôi cá nhân để sử dụng. Vợ
tôi là một kỹ sư kết cấu. Mối
quan hệ giữa các kỹ sư và kiến
trúc sư là ... thú vị. Yêu
thích của tôi là "kiến trúc sư
là tốt cho của ba B: bóng đèn, bụi
cây, chim". Khái niệm là kiến
trúc sư đến với tất cả
các bản vẽ đẹp, nhưng đó
là những kỹ sư thiết phải đảm
bảo rằng họ thực sự có thể
đứng lên. Kết quả là
tôi đã tránh được các
kiến trúc sư phần mềm hạn,
sau khi tất cả, nếu vợ tôi không thể
đối xử với tôi với sự tôn
trọng nghề nghiệp gì cơ hội để
tôi đứng với bất cứ ai khác?
Trong phần mềm, các kiến trúc
sư hạn nghĩa là nhiều việc. (Trong
phần mềm bất kỳ hạn có nghĩa
là nhiều điều.) Nói chung, tuy
nhiên nó chuyển tải một trang trọng
nhất định, như trong "Tôi không
phải là chỉ là một chỉ lập
trình - Tôi là một kiến trúc
sư". Điều này có thể chuyển
thành "Tôi là một kiến
trúc sư bây giờ - tôi quá
quan trọng để làm bất kỳ lập
trình".Câu hỏi đặt ra sau
đó trở thành một trong những liệu
tách mình khỏi những nỗ lực lập
trình nhàm chán là điều bạn
nên làm khi bạn muốn có tài lãnh
đạo kỹ thuật.
Câu hỏi này tạo ra một số
lượng lớn của cảm xúc. Tôi đã nhìn thấy mọi
người nhận được rất tức giận
khi nghĩ rằng họ không có một vai
trò nào hơn là kiến trúc
sư. "Không có nơi nào trong XP cho
các kiến trúc sư giàu kinh
nghiệm" thường là tiếng kêu tôi
nghe.
Giống như trong vai trò của thiết kế
riêng của mình, tôi không nghĩ rằng
đó là trường hợp mà XP không
có giá trị kinh nghiệm hoặc kỹ năng
thiết kế tốt. Thực tế
nhiều trong những đề xuất của XP - Kent
Beck, Bob Martin, và tất nhiên Ward Cunningham - là
những người mà tôi đã học
được rất nhiều về những gì
thiết kế là về. Tuy nhiên nó
không có nghĩa là vai trò của
họ thay đổi từ những gì rất
nhiều người xem như là một vai trò
lãnh đạo kỹ thuật.
Như một ví dụ, tôi sẽ trích
dẫn một trong những nhà lãnh đạo
kỹ thuật của chúng tôi tại Thought: Dave
Rice. Dave đã trải qua một vài vòng
đời và đã thừa lớp vỏ
không chính thức của lãnh đạo
kỹ thuật trong một dự án năm mươi
người. Vai trò của ông
là nhà lãnh đạo có nghĩa là
chi tiêu rất nhiều thời gian với tất
cả các lập trình viên. Ông sẽ
làm việc với một lập trình viên khi
họ cần giúp đỡ, anh nhìn xung quanh
để xem ai cần giúp đỡ.Một dấu
hiệu quan trọng là nơi ông ngồi. Như
một thời gian dài ThoughtWorker, anh khá tốt
có thể có bất kỳ văn phòng
ông thích. Ông chia sẻ lại một
lúc với Cara, người quản lý phát
hành. Tuy nhiên, trong vài
tháng qua, ông chuyển ra vào trong vịnh
mở nơi mà các lập trình viên
làm việc (bằng cách sử dụng mở
"chiến tranh phòng" phong cách XP ủng
hộ). Điều này là quan trọng
với anh bởi vì cách này ông nhìn
thấy những gì đang xảy ra, và có
sẵn để cho vay một bàn tay bất cứ
nơi nào nó cần thiết.
Những người biết XP sẽ nhận ra
rằng tôi là mô tả vai trò XP rõ
ràng của Coach. Thật vậy
một trong một số trò chơi với các
từ mà làm cho XP là nó gọi hình
kỹ thuật hàng đầu "Huấn luyện viên". Ý
nghĩa là rõ ràng: trong lãnh đạo
kỹ thuật XP được hiển thị bằng
cách dạy cho các lập trình viên
và giúp họ đưa ra quyết định. Đó
là một đòi hỏi kỹ năng con
người tốt cũng như kỹ năng kỹ
thuật tốt. Jack Bolles ở XP 2000 nhận xét
rằng có rất ít chỗ doanh nghiệp cho
các thầy cô độc. Sự hợp
tác và giảng dạy là chìa khóa
để thành công.
Tại một bữa ăn tối hội nghị, Dave
và tôi đã nói chuyện với một
đối thủ vocal của XP. Như
chúng ta đã thảo luận những gì
chúng tôi đã làm, những điểm
tương đồng trong cách tiếp cận
của chúng tôi đã được
đánh dấu khá. Chúng ta đều
thích thích nghi, phát triển lặp.Thử
nghiệm là quan trọng. Vì vậy,
chúng tôi đã bối rối tại sự
dữ dội của phe đối lập của ông. Sau
đó, đến tuyên bố của ông,
dọc theo dòng "điều cuối cùng
tôi muốn là lập trình cấu trúc
lại và monkeying xung quanh với các thiết
kế của tôi". Bây giờ
tất cả đã rõ ràng.Vịnh khái
niệm được tiếp tục diễn giải
bởi Dave nói với tôi sau đó
"nếu ông không tin tưởng các lập
trình viên của mình tại sao lại thuê
họ?". Trong XP điều quan
trọng nhất các nhà phát triển có
kinh nghiệm có thể làm là vượt qua
trên như nhiều kỹ năng như anh có
thể để các nhà phát triển cơ sở
hơn. Thay vì là một
kiến trúc sư người đã
làm cho tất cả các quyết định quan
trọng, bạn có một huấn luyện viên
mà dạy cho các nhà phát triển
để đưa ra quyết định quan trọng. Như
Ward Cunningham đã chỉ ra, do đó ông
khuếch đại kỹ năng của mình, và
cho biết thêm một dự án so với bất
kỳ anh hùng can duy nhất.
Sự đảo ngược
Tại XP 2002 Enrico Zaninotto
một buổi nói chuyện hấp dẫn mà
thảo luận về tie-ins giữa các phương
pháp nhanh nhẹn và sản xuất nạc. Điểm
của ông là một trong những khía
cạnh quan trọng của cả hai phương pháp là
họ giải quyết phức tạp bằng cách
giảm sự không đảo ngược trong
quá trình này.
Điều này cũng quan hệ vào những
câu hỏi về việc đặt hàng của
câu chuyện. Trong Kế hoạch XP , Kent và tôi
công khai chỉ ra sự bất đồng của
chúng tôi. Kent là ủng hộ để
cho giá trị kinh doanh là yếu tố duy nhất
trong lái xe đặt hàng của các câu
chuyện. Sau khi bất đồng ban đầu Ron
Jeffries giờ đồng ý với điều
này. Tôi vẫn không chắc chắn. Tôi tin rằng đó là một
sự cân bằng giữa giá trị kinh doanh
và rủi ro kỹ thuật. Điều này
sẽ khiến tôi phải cung cấp ít nhất
một số quốc tế sớm để giảm
thiểu nguy cơ này. Tuy nhiên
điều này chỉ đúng nếu quốc
tế hóa là cần thiết cho việc phát
hành đầu tiên. Bắt một thông
cáo càng nhanh càng tốt là cực kỳ
quan trọng. Bất kỳ phức tạp thêm
là giá trị thực hiện sau đó
phát hành đầu tiên, nếu nó
không phải là cần thiết cho việc
phát hành đầu tiên. Sức mạnh
của vận chuyển, mã chạy là rất
lớn. Nó tập trung sự chú ý
của khách hàng, phát triển sự tín
nhiệm, và là một nguồn lớn của
việc học. Làm tất cả mọi thứ
bạn có thể để mang lại ngày
đó gần gũi hơn. Ngay cả nếu
nó là nỗ lực nhiều hơn để
thêm một cái gì đó sau khi phát
hành đầu tiên, nó là tốt hơn
để phát hành sớm hơn.
Với bất kỳ kỹ
thuật mới đó là tự nhiên mà
ủng hộ nó là không chắc chắn
về điều kiện ranh giới của nó. Hầu
hết XPers đã được cho biết rằng
thiết kế tiến hóa là không thể
đối với một vấn đề nào
đó, chỉ để khám phá ra rằng
nó thực sự là có thể. Đó
là chinh phục những tình huống
"không thể" dẫn đến một sự
tự tin rằng tất cả các tình huống
như vậy có thể được khắc
phục. Tất nhiên bạn không
thể làm cho một sự tổng quát như
vậy, nhưng cho đến cộng đồng XP
chạm ranh giới và không thành công,
chúng ta có thể không bao giờ chắc
chắn nơi những ranh giới nói dối,
và nó phải cố gắng và vượt ra
ngoài ranh giới tiềm năng mà những
người khác có thể nhìn thấy.
(A gần đây bài viết bởi Jim Shore
thảo luận về một số tình huống,
kể cả quốc tế, nơi mà ranh giới
tiềm năng hóa ra không phải là rào
cản sau khi tất cả.)
Được thiết
kế Happening?
Một trong những khó khăn của thiết
kế tiến hóa là nó rất khó
để biết được thiết kế thực
sự xảy ra. Sự nguy hiểm
của kẽ thiết kế với lập trình
là lập trình có thể xảy ra mà
không cần thiết kế - đây là
tình huống mà Evolutionary Thiết kế phân
kỳ và thất bại.
Nếu bạn đang ở
trong đội ngũ phát triển, sau đó
bạn cảm nhận cho dù thiết kế đang
xảy ra bởi chất lượng của các cơ
sở mã. Nếu các cơ sở đang
ngày càng phức tạp và khó khăn hơn
để làm việc, không có đủ
thiết kế được thực hiện. Nhưng
thật đáng buồn này là quan
điểm chủ quan. Chúng tôi không
có số liệu đáng tin cậy mà
có thể cung cấp cho chúng ta một cái nhìn
khách quan về chất lượng thiết kế.
Nếu điều này
thiếu khả năng hiển thị là khó
khăn cho người dân kỹ thuật, nó xa
đáng báo động hơn cho các
thành viên phi kỹ thuật của một
đội bóng. Nếu bạn là
một người quản lý hoặc khách
hàng như thế nào bạn có thể cho
biết nếu các phần mềm được
thiết kế tốt không? Nó quan trọng
với bạn vì phần mềm được
thiết kế kém sẽ đắt hơn để
sửa đổi trong tương lai. Không có
câu trả lời dễ dàng cho điều
này, nhưng đây là một vài gợi
ý.
§
Nghe người kỹ thuật. Nếu họ
đang phàn nàn về sự khó khăn
của việc thay đổi, sau đó đi
khiếu nại nghiêm trọng và cung cấp cho
họ thời gian để sửa chữa những thứ.
§
Giữ một mắt trên bao nhiêu mã
đang được ném đi. Một dự
án mà thực hiện tái cấu trúc
khỏe mạnh sẽ dần xóa mã xấu. Nếu không có gì là bị
xóa sau đó nó gần như chắc
chắn là một dấu hiệu cho thấy không
có đủ refactoring xảy ra - mà sẽ dẫn
đến suy thoái thiết kế. Tuy nhiên
giống như bất kỳ số liệu này
có thể bị lạm dụng, theo ý kiến
của người dân kỹ thuật
tốt hơn hẳn bất kỳ số liệu, mặc
dù chủ quan của mình.
Vì vậy, là
Thiết kế là chết?
Không phải bởi bất kỳ phương
tiện, nhưng bản chất của thiết kế
đã thay đổi. Thiết kế XP trông
cho các kỹ năng sau đây
§
Một mong muốn liên tục để giữ
mã càng rõ ràng và đơn giản
càng tốt
§
Kỹ năng Refactoring, do đó bạn có
thể tự tin thực hiện những cải tiến
bất cứ khi nào bạn nhìn thấy sự
cần thiết.
§
Một kiến thức tốt về mô
hình: không chỉ là giải pháp mà
còn đánh giá cao khi sử dụng chúng
và làm thế nào để phát triển
thành chúng.
§
Thiết kế với một mắt để thay
đổi tương lai, biết rằng quyết
định từ bây giờ sẽ phải
được thay đổi trong tương lai.
§
Biết làm thế nào để giao tiếp
các thiết kế cho những người cần
phải hiểu nó, bằng cách sử dụng
mã số, biểu đồ và trên tất
cả: cuộc trò chuyện.
Đó là một lựa chọn đáng
sợ của kỹ năng, nhưng sau đó là
một nhà thiết kế tốt luôn luôn
là khó khăn. XP không
thực sự làm cho nó dễ dàng hơn,
ít nhất là không phải cho tôi.Nhưng
tôi nghĩ rằng XP không cung cấp cho chúng
ta một cách mới để suy nghĩ về
thiết kế hiệu quả bởi vì nó
đã thực hiện thiết kế tiến hóa
một chiến lược hợp lý nữa. Và
tôi là một fan hâm mộ lớn của
sự tiến hóa - nếu không ai biết
những gì tôi có thể được?