Wednesday, May 28, 2008

Architect

Trích từ quyển XP explained của Kent Beck

Kiến trúc sư (architect) trong nhóm XP tìm kiếm và thực hiện việc refactoring1 ở qui mô lớn, viết các bộ kiểm thử mức hệ thống để kiểm thử mức chịu đựng2 của kiến trúc, và cài đặt các story. Trong suốt dự án, kiến trúc sư sử dụng năng lực của mình nhiều lần, mỗi lần một chút ít. Họ điều chỉnh kiến trúc xuyên suốt quá trình tiến hóa của dự án. Kiến trúc cho một hệ thống nhỏ thì không giống với hệ thống lớn. Trong khi hệ thống còn nhỏ, kiến trúc sư phải bảo đảm rằng hệ thống chỉ mang một kiến trúc vừa đủ nhỏ. Nhưng khi một hệ thống trở nên lớn hơn, kiến trúc sư phải bảo đảm rằng kiến trúc phải theo kịp sự phát triển.


Thay đổi một kiến trúc lớn theo nhiều bước nhỏ, an toàn là một trong những thách thức của nhóm XP. Nguyên tắc về cân bằng quyền hạn - trách nhiệm cho rằng: trao cho một cá nhân quyền ra quyết định mà người khác phải tuân theo nhưng bản thân họ không lệ thuộc vào hậu quả (của các quyết định) là một ý tưởng tồi. Kiến trúc sư cũng tham gia công việc lập trình giống như những lập trình viên khác. Tuy nhiên, họ cũng đồng thời đứng canh gác những thay đổi lớn, những thay đổi phải trả giá cao.


Các bộ kiểm thử luôn truyền đạt mục đích của kiến trúc. Tôi từng nói chuyện với một kiến trúc sư chuyên về bộ xử lý thẻ credit. Anh ta nói rằng, trong môi trường đòi hỏi năng lực xử lý cao, bạn không muốn bị hạn chế bởi bất kỳ kiến trúc nào. Để đạt được điều này nhóm của anh ta có một bộ kiểm thử trong môi trường khắc nghiệt3 rất tinh vi. Khi họ muốn cải tiến kiến trúc, đầu tiên họ sẽ cải tiến các bộ stress test cho đến khi hệ thống bị vỡ. Sau đó, họ sẽ cải tiến kiến trúc vừa đủ để vượt qua bộ kiểm thử.


Tôi đã đề nghị chiến lược này cho một kiến trúc sư ở một công ty khác. Anh ta than phiền rằng mình tốn hầu hết thời gian để viết đặc tả và sau đó, giải thích chúng cho các lập trình viên. Anh ta chán nản vì không còn chút thời gian nào cho lập trình. Tôi đề nghị anh phát triển một cơ sở hạ tầng phục vụ kiểm thử và sau đó, sử dụng các bộ kiểm thử thay thế cho đặc tả và những lời giải thích. Nếu anh ta thấy một lỗ hổng trong thiết kế, anh ta sẽ viết một bộ kiểm thử để chỉ điểm nó. Tôi đã không thể thuyết phục được anh thử nghiệm ý tưởng này, song tôi vẫn cho rằng nó rất có giá trị.


Một nhiệm vụ khác của kiến trúc sư trong nhóm XP là chia nhỏ (partition) hệ thống. Chia nhỏ không phải là công việc được làm trước hay chỉ “làm một lần cho mãi mãi”. XP không dùng chia để trị, XP dùng trị để chia. Lúc đầu, một nhóm nhỏ viết một hệ thống nhỏ. Sau đó, họ tìm thấy những vết nứt tự nhiên và chia hệ thống thành nhiều phần độc lập nhưng phụ thuộc nhau để dễ dàng mở rộng. Các kiến trúc sư hỗ trợ cách chọn những vết nứt thích hợp nhất. Sau đó, họ theo dõi hệ thống như một tổng thể. Họ luôn nhớ bức tranh lớn (big picture) trong đầu bởi vì các nhóm con chỉ tập trung vào những phần nhỏ hơn.


1Refactoring: tạm dịch là tái cấu trúc mã nguồn

2Từ nguyên gốc tác giả dùng là stress, mang nghĩa là tạo môi trường khắc nghiệt để biết mức chịu đưng của kiến trúc.

3Dịch từ chữ stress test. Stress test có nghĩa là ... Sau này sẽ dịch là kiểm thử stress hoặc stress test.

No comments: