Science for all





Original article:

http://martinfowler.com/articles/designDead.html

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

Ảnh của Martin Fowler

Martin Fowler

 (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ế rng 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 trng. Đố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 vi 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?




Other popular articles:
  • The SIG11 problem