Thợ lành nghề #26: Giám sát liều lượng 3 – Yêu cầu được đề ra

Thợ lành nghề

Robert C.Martin

11/5/2004

…….Tiếp tục từ phần trước

21/2/2002, 0900

Con tàu của chúng tôi, Dyson, có thể tăng tốc tại 1G trong 60 tháng mà không cần tiếp nhiên liệu. Trong năm đầu tiên của chuyến đi đến các vì sao, chúng tôi tăng tốc đến gần C. Suốt năm ngoái, chúng tôi giảm tốc đến khung tham chiếu của đích đến. Ở tốc độ gần C, phần còn lại của vũ trụ theo cách nhìn chủ quan, nhỏ đến nỗi chúng tôi có thể đi bất cứ đâu trong vài tuần hoặc vài tháng. Theo như lý thuyết thì điều đó có nghĩa là chúng tôi có thể đi bất cứ đâu trong vũ trụ trong hai năm trực quan

Trong 43 năm qua, chúng tôi đã dừng lại ở mười hệ thống các vì sao. Chúng tôi dành 1 năm hoặc lâu hơn ở mỗi nơi, khám phá, tiếp nhiên liệu và tái trang bị. Mọi thứ sẽ dừng lại cho tới khi – tìm kiếm được một ngôi nhà cho hàng triệu phôi thai đông lạnh trên tàu. Thông thường, chúng tôi ngừng tăng tốc ở khoảng .999C, thả trôi trong vài tháng như một cách tiết kiệm nhiên liệu. Đã có hai hệ thống sao không cung cấp đủ uranium cho lượng nhiên liệu tương ứng, và thuyền trưởng không phải loại người đánh đổi thời gian với sự rủi ro.

Ngay bây giờ chúng tôi đang đạt vận tốc cao nhất, và đã thả trôi được ít tháng. Chúng tôi có thêm 8 tháng trước khi phải vượt qua 20 năm ánh sáng cho bước nhảy này và bắt đầu giảm tốc. Vậy nên, chúng tôi sẽ vượt qua đám mây phân tử hydro ngay trước mặt chúng tôi chỉ trong một tức khắc. 

Avery và tôi đứng ngay sau Jerry và Carole khi họ bắt đầu làm việc trên kiểm thử chấp nhận cho story Đăng kí đồ bảo hộ. Jerry mở một trình duyệt mạng và truy cập vào trang web có tên FitNesse1. Hắn ta làm gì đó trên màn hình mà tôi không kịp nhìn theo, nhưng nhanh chóng bị gián đoạn bởi một trang có tên hiển thị là RegisterNormalSuit.

“Được rồi” Hắn nói. “Hãy mô tả những gì thường xảy ra khi chúng ta thêm vào một bộ đồ.”

“Anh nói thông thường ý là sao?” Avery hỏi.

Carole nói: “Không có gì sai sót cả. Mói thứ đều làm việc như những gì đã sắp đặt”

“Đúng thế.” Jerry nói. “Đầu tiên, chúng ta muốn khẳng định rằng kho chứa bộ đồ hiện tại rỗng.”

“Có cái gì là bình thường về việc này sao?” Avery chế nhạo.

“Avery à”, Jean nhẹ nhàng nói, “chúng ta bắt đầu bằng cách đưa ra những giả thuyết đơn giản nhất. Đừng lo, chúng ta cũng sẽ chỉ định các trường hợp cơ sở dữ liệu không rỗng. Tuy nhiên, giờ thì, sẽ dễ hơn nếu giả định rằng không có bộ đồ nào trong cơ sở dữ liệu.”

Jerry gõ cái gì đó và một cái bảng lập tức xuất hiện trên màn hình

Suit inventory parameters

Number of suits?
0

“Cái gì vậy?” Tôi hỏi

“Đó là sự xác nhận”. Jerry trả lời. “Tao đang xác nhận rằng không có bộ đồ nào trong cơ sở dữ liệu. Tiếp theo tao muốn khẳng định rằng có một yêu cầu đăng ký một bộ đồ mới.”

Hắn ta tiếp tục gõ, và một bảng khác xuất hiện ngay bên dưới cái đầu tiên:

Suite Registration Request
bar code
314159 

“Tôi vẫn thắc mắc.” Tôi nói. “Tại sao có một câu hỏi ở bảng một, nhưng bảng 2 lại không có nữa?”

Jasper tiến tới và tặng tôi cái cười tươi hết cỡ. “Oa, Jerry, cậu có một tài năng ở đây này. Tinh mắt lắm, Alphonse!”

Từ khóe mắt tôi có thể thấy Avery đang cứng người lại. Hắn ta không thích Jasper khen ngợi tôi.

“Lý do” Jerry nói, “là vì ở bảng đầu tiên là truy vấn, còn bảng hai là một khai báo. Trong bảng đầu tiên, chuáng ta đang hỏi hệ thống là có bao nhiêu bộ đồ trong cơ sở dữ liệu. Ở bảng thứ hai, chúng ta nói với hệ thống rằng bộ đồ số 314159 đang được đăng kí.”

“Đúng rồi” Avery thốt lên nhanh chóng, “mày thấy đấy, Alphonse, cái bảng đầu tiên có thể đã được kiểm tra rồi, nhưng ở cái thứ hai chỉ là một sự kiện.”

Lông mày của Jasper giật giật. “Rất tốt, Avery! Chúa ơi, Jerry, tôi nghĩ chúng ta có hai người giám sát ở đây.”

Avery đứng cạnh tôi, mỉm cười, nhưng tôi có thể nói hắn ta đang rất sung sướng.

“Khoan đã.” Tôi nói. “Mày nói bảng đầu tiên có thể được kiểm tra là có ý gì? Điều đó chẳng có nghĩa lý gì với tao cả.”

Avery định trả lời nhưng dường như chưa thể tìm ra được từ nào. “Ừ, ờ thì, ừm….”

Jerry bước vào giải thoát cho hắn. “FitNesse đang thực thi các bảng này.” Gã ta nói. “Khi nó thực thi bảng đầu tiên, nó sẽ kiểm tra để đảm bảo rằng số lượng bộ đồ là 0. Đó là điều câu hỏi đã bảo FitNesse làm. Nếu số lượng bộ đồ là 0, ô ở bảng sẽ chuyển thành đỏ, hoặc không thì nó sẽ chuyển thành xanh.”

Avery chớp mắt, nhưng chẳng nói năng gì. Mặt khác, tôi tiến lên ngay phía trước. “Ý ông là các ô sẽ thay đổi màu sắc?”

“Đúng.” Jerry nói. Hắn ta chỉ vào màn hình đang hiển thị hai cái bảng. “Mày thấy nút “Kiểm tra” trên màn hình chứ? Khi tao nhấn nút đó, FitNesse sẽ đọc từng cái bảng một. Với mỗi bảng, nó sẽ chuyển một số dữ liệu vào trong hệ thống DTrack, và đọc hết những dữ liệu khác còn lại. Câu hỏi là dành cho dữ liệu xuất ra từ DTrack. Nếu dữ liệu xuất ra khớp với dữ liệu trong bảng, FitNesse chuyển thành ô xanh. Nếu không thì nó sẽ chuyển thành đỏ.”

Avery lại xen vào. “Tôi hiểu rồi! Vậy là, bảng đầu tiên đã hỏi DTrack có bao nhiêu dòng ở trong cơ sở dữ liệu về bộ đồ, và sẽ chuyển thành đỏ nếu như bất kỳ số nào khác không được trả về. Còn bảng thứ hai sẽ bảo DTrack đăng ký cho bộ đồ 314159.”

“Nó là thế đó.” Jasper Jovially nói.

“Kết thúc lần kiểm thử này thôi.” Carole sốt ruột nói.

Jerry quay lại bảng điều khiển. “Được thôi, vậy tiếp theo chúng ta muốn chắc chắn rằng tin nhắn thích hợp được gửi đến nhà sản xuất.”

Message sent to manufacturing

message id?
Suit Registration 
message argument?
314159 
message sender?
Outside Maintenance

Avery trông bối rối. “Vậy khi FitNesse thực thi bảng này, nó sẽ hỏi Nhà sản xuất là nó nhận được những tin nhắn như thế nào chứ?”

“Không.” Jasper nói. “Chúng ta sẽ bắt tin nhắn trước khi nó được gửi.” Rồi hắn ta nhìn Carole một cách tinh quái, và nói “Nó chắc sẽ đốt cháy ống khói của Courtney nếu chúng ta hạ thấp hệ thống của cô ấy xuống bằng cách gửi những tin nhắn không hợp lệ mỗi khi chúng ta kiểm tra, Carole nhỉ?”

Carole liếc mắt và nói “Chỉ nên tập trung vào đây thôi. Tiếp theo là gì nào?”

Tôi nói: “Tôi nghĩ chúng ta cần khẳng định việc nhà sản xuất gửi lại một tin nhắn chấp thuận.”

“Mày nói đúng đấy, Alphonse.” Jerry nói khi đang gõ vào một bảng thích hợp.

Message received from manufacturing

message id
Suit Registration Accepted 
message argument
314159 
message sender
Manufacturing 
message recipient
Outside Maintenance

“Anh quên những câu hỏi kìa.” Avery nói. Bạn có thể nói rằng hắn ta thích thú khi bắt lỗi được lỗi của Jerry.

“Tao á?” Jerry đáp lại.

Avery trông khó chịu. Tôi nghĩ tôi biết tại sao Jerry bỏ những câu hỏi đi, nhưng tôi muốn giữ hòa khí.

Carole nói: “Không cần thiết phải có câu hỏi nữa vì chúng ta đang nói với hệ thống DTrack rằng Nhà sản xuất đã gửi tin nhắn này.Chúng ta không có hỏi.” Carole rõ ràng không còn mấy sự kiên nhẫn nữa. Cô ta muốn hoàn thành công việc này. “Tiếp theo là gì hả Jerry?”

“Được rồi, khi nhận được tin nhắn đó, hệ thống DTrack sẽ nhập bộ đồ vào trong cơ sở dữ liệu. Và giờ cơ sở dữ liệu nên có bộ đồ ở bên trong.”

Suits in inventory
bar code next inspection date
314159 2/21/2002

“Sao anh lại để ngày hôm nay là ngày kiểm tra?” Tôi hỏi.

Avery nói: “Vì, Alphonse à, theo những story của Carole, những bộ đồ đăng kí mới phải được xếp lịch để kiểm tra.”

“Ừ, tôi nhớ chứ;” Tôi đáp lại, “nhưng tại sao lại phải là ngày hôm nay? Việc kiểm thử sẽ không hoạt động nếu chúng ta chạy nó vào ngày mai. Chúng ta sẽ phải thay đổi ngày tháng mỗi lần chúng ta chạy kiểm thử ư?”

Jasper châm chọc “Đó là việc của cậu đó, Jerry. Chúng tôi muốn cậu đến đây mỗi sáng để thay đổi thời gian.”

“Không đâu.” Jerry nói. “Không, chúng ta cần xác định rõ ngày của ngày hôm nay trong lần kiểm thử. Hãy làm thế này ở bảng đầu tiên.”

DTrack Context
Today’s date
2/21/2002 

  “Thôi được rồi.” Carole nói; vẫn đang cố đẩy tiến độ mọi việc. “Tôi nghĩ đó là một story. Giờ thì hãy tân trang nó một chút.” Cô ta lấy bàn phím và bắt đầu viết các chữ quanh những cái bảng. Khi cô ấy viết xong, trang trông như thế này:

Normal suit registration.
We assume that today is 2/21/2002.
DTrack Context
Today’s date
2/21/2002

We also assume that there are no suits in inventory.
Suit inventory parameters
Number of suits?
0
We register suit 314159.
Suit Registration Request
bar code
314159
DTrack sends the registration confirmation to Manufacturing.
Message sent to manufacturing

message id
Suit Registration 
message argument
314159 
message sender
Outside Maintenance

Manufacturing accepts the confirmation.
Message received from manufacturing

message id?
Suit Registration Accepted 
message argument?
314159 
message sender?
Manufacturing 
message recipient?
Outside Maintenance

And now the suit is in inventory, and is scheduled for immediate inspection
Suits in inventory

bar code?
314159 
next inspection date?
2/21/2002

“Tuyệt vời!” Carole nói. “Một yêu cầu rất tốt.”

Tôi phải thừa nhận rằng, nó trông rất rõ ràng. Nhưng vẫn có cái gì đó tôi vẫn chưa hiều được.

“Bằng cách nào anh có được FitNesse để thực thi những cái bảng này vậy?” Tôi hỏi.

Jerry ngước lên và nói: “Ngồi xuống đi, Alphonse, cả Avery nữa; hãy làm cho yêu cầu này chuyển thành đỏ đi!”

Xem thêm về Tạp chí lập trình Vol.4 tại đây

Đăng ký nhận bộ tài liệu kỹ năng dành cho lập trình viên (video hướng dẫn + slide) tại đây

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: