Mã hóa và thử nghiệm trong cùng một lần chạy nước rút


22

Làm thế nào kiểm tra được xử lý trong cùng một lần chạy nước rút như mã hóa, nếu tất cả hoặc hầu hết mã hóa không được thực hiện cho đến khi kết thúc cuộc chạy nước rút? (Tôi đang đề cập đến việc phát triển và thử nghiệm "súp-to-nut" của một PBI duy nhất trong giai đoạn nước rút.)

Hầu hết các câu trả lời tôi đã xem trực tuyến liên quan đến tự động hóa QA, nhưng thậm chí điều đó không thực sự khả thi vì bạn thường cần một giao diện người dùng chức năng để ghi lại hoặc tạo các bài kiểm tra tự động từ đó. Tôi chỉ có bảng phân cảnh tiếp tục phát triển khi tôi phát triển các tính năng và khám phá các yêu cầu mới.

Trong trường hợp của tôi, tôi đang phát triển một ứng dụng máy tính để bàn mới. Các ứng dụng máy tính để bàn thường không cho vay để kiểm tra tự động rất tốt. Tôi có một số bài kiểm tra đơn vị tự động, nhưng chúng không phải là bài kiểm tra chức năng / tích hợp thủ công mà chuyên gia QA sẽ thực hiện.

Vì vậy, nơi tôi đang ở hiện tại là cuộc chạy nước rút của tôi kết thúc vào ngày mai, tôi vẫn còn mã hóa để hoàn thành, và những người QA của tôi chưa có gì để kiểm tra, và không biết làm thế nào để kiểm tra bất cứ điều gì tôi đưa cho họ mà không cần tôi nắm tay họ.

Tôi chắc chắn tôi không phải là người đầu tiên gặp vấn đề nan giải này.

Trước đây, tôi đã thực hiện một đường ống dẫn: trong lần chạy nước rút hiện tại, nhóm thử nghiệm kiểm tra các tính năng đã được triển khai trong lần chạy nước rút trước đó. Trong công việc hiện tại của tôi, Thủ tướng gọi phương pháp này là "thác nước", và như vậy, không thể chấp nhận được.


2
Bạn không phải là người đầu tiên gặp vấn đề nan giải này. Bạn có thể sử dụng một đường ống dẫn: trong lần chạy nước rút hiện tại, nhóm thử nghiệm sẽ kiểm tra các tính năng đã được triển khai trong lần chạy nước rút trước đó.
Giorgio

2
Thủ tướng buộc nhóm phải làm mọi thứ theo cách của họ nghe giống như một Agile Half-Arsed
gnat


8
@Mark Richman: Thác nước? Bạn không có chu kỳ phát triển 1-2 tuần trong thác nước. Tôi nghĩ rằng anh ấy không biết anh ấy đang nói về cái gì.
Giorgio

2
@gnat: nếu nhóm không có chức năng đặc biệt cao (và có vẻ như nhóm này phù hợp với mô tả đó), bạn có thể xem đây là Thủ tướng hướng dẫn nhóm phát triển chiến lược phát triển hiệu quả hơn. Có lẽ Thủ tướng cảm thấy rằng việc liên tục cung cấp mã chưa được kiểm tra là không tốt cho doanh nghiệp. Agile không nhất thiết có nghĩa là "để các đội làm bất cứ điều gì họ muốn", phải có một số ranh giới cho đến khi một nhóm đủ trưởng thành để tự quyết định.
Bryan Oakley

Câu trả lời:


13

Nếu bạn không kiểm tra Câu chuyện người dùng (Hoa Kỳ) và xác minh rằng các tiêu chí chấp nhận được đáp ứng thì câu chuyện này đã không được thực hiện. Nếu nó không được thực hiện, Mỹ sẽ đi đến nước rút tiếp theo tất nhiên. Và nếu tất cả Hoa Kỳ của bạn ở trong trạng thái này, bạn chạy nước rút đã kết thúc mà không có giá trị gia tăng cho dự án. Từ quan điểm của khách hàng, tôi không thể phân biệt điều này với toàn bộ nhóm phát triển đang đi nghỉ.

Một trong những nguyên tắc tinh gọn (nhanh nhẹn không kết thúc với scrum) nói rằng "chất lượng được tích hợp sẵn". Một cái gì đó chỉ được thực hiện nếu nó đáp ứng các tiêu chí chất lượng mà bạn xác định. Điều này là rất quan trọng để có một quá trình nhanh nhẹn thực sự, kết thúc mùa xuân với giá trị bằng không hoặc thử nghiệm riêng biệt từ sự phát triển là triệu chứng của một vấn đề lớn.

Có rất nhiều điều bạn có thể làm:

  • tự động hóa là chìa khóa để thành công. Ít nhất là ở cấp độ kiểm tra đơn vị, và một số thực tiễn khác như CI cũng quan trọng. Điều này là không đủ, nhưng nếu thực hiện tốt các loại thử nghiệm này dẫn đến một vài hoặc không có lỗi được phát hiện trong thử nghiệm thủ công (thường là những thứ UI nhỏ). Nếu bạn có những người QA tận tâm, họ có thể là người tự động hóa thử nghiệm chấp nhận và một số tự động hóa này có thể bắt đầu trước khi bạn hoàn thành một cuộc chạy nước rút.

  • Nhìn vào kích thước của Câu chuyện người dùng của bạn. Nếu bạn có một nước Mỹ kết thúc hai ngày đầu tiên của cuộc đua nước rút vào ngày thứ ba, một người QA có thể kiểm tra nó. Theo tôi có lịch sử người dùng (SMART) nhỏ, một trong những điều quan trọng nhất để thành công trong phát triển nhanh, và rất nhiều người dường như không nhận ra điều này.

  • Hợp tác giữa người thử nghiệm và nhà phát triển là một phần quan trọng khác của thành công. Trong dự án trước đây của tôi khi một nhà phát triển ở Mỹ do một nhà phát triển hoàn thành, một người QA thực hiện "thử nghiệm cặp" với nhà phát triển (có thể là thủ công, có thể thông qua việc khởi chạy một số tự động, hoặc tốt hơn, cả hai), điều này hoạt động khá tốt.


8

Vấn đề thiết yếu là bạn có những lập trình viên viết mã nhưng không kiểm tra và người kiểm thử kiểm tra nhưng không mã.

Giải quyết vấn đề đó và bạn sẽ không gặp phải vấn đề này, và một nhóm hiệu quả hơn nhiều.

Một cách làm việc cho tôi trong quá khứ là đề nghị các lập trình viên và người thử nghiệm ghép nối các câu chuyện với nhiệm vụ rõ ràng là cung cấp một câu chuyện được thử nghiệm đầy đủ. Cùng với đó, tôi đã xóa tất cả các dạng suy nghĩ "dev hoàn thành": không có cột "dev hoàn thành" trên bảng scrum / kanban / trello, không có thái độ "dev thực hiện" bởi các lập trình viên.

Chuyện gì đã xảy ra:

  • Các cặp có trách nhiệm truyền tải câu chuyện và cả hai sẽ thất bại nếu câu chuyện chưa hoàn thành. Họ được đối xử như những chuyên gia có trách nhiệm phụ trách việc cung cấp phần mềm và họ đã làm, trong hầu hết các trường hợp.

  • Có rất ít công việc kiểm tra được thực hiện bởi vì những người kiểm tra đã được tiếp xúc với các bài kiểm tra đơn vị và tích hợp, vì vậy họ không lặp lại cùng một bài kiểm tra.

  • Một số thử nghiệm đã được tự động hóa khi các nhà phát triển hiểu rõ hơn những gì người kiểm tra cần.

  • Một số người đã buồn bã.

  • Các câu chuyện được phân phối nhanh hơn trung bình vì chu trình kiểm tra mã xác nhận-thử nghiệm đã trở nên gần như ngay lập tức

Tất nhiên, đây chỉ là kinh nghiệm của tôi, nhưng bạn có thể muốn tự mình thử nếu có thể.

Trong trường hợp của bạn, đưa ra nhận xét của bạn rằng người kiểm tra và nhà phát triển được phân tách có thẩm quyền trong công ty của bạn, thông điệp có vẻ rõ ràng đối với tôi. Có một rào cản rõ ràng đối với giao tiếp và hợp tác được đưa ra bởi các quy tắc của công ty.

Đây là một vấn đề giao tiếp , không phải là một vấn đề nhanh . Việc áp dụng một phương pháp nhanh nhẹn chỉ đơn giản là làm cho nó trở nên rõ ràng. Các nhóm của Silo là một mô hình chống quản lý đã biết , vì vậy hãy nắm lấy tính không thích ứng của nhanh nhẹn trong trường hợp này!


2
Tổ chức này đã tạo ra các ranh giới và vai trò rõ ràng cho "nhà phát triển" và "người thử nghiệm", và sẽ có hai người gặp nhau;)
Mark Richman

Vì vậy, thay đổi quy tắc!
Sklivvz

3
@MarkRichman tại một trong những việc làm quá khứ của tôi cũng có những ranh giới rõ ràng trong vai trò của "nhà phát triển" và "thử nghiệm", nhưng tổ chức đó đã không đưa n'er phải đáp ứng khối cho họ để giao tiếp (những gì một ý tưởng què btw!); Tôi nhớ lại việc chạy nước rút theo cặp với "người thử nghiệm được chỉ định" và nó đã diễn ra rất tuyệt. Công ty của bạn chỉ đơn giản là phân tách vai trò hoặc bổ sung một rào cản giao tiếp / hợp tác giữa các kỹ sư hoàn thành các vai trò này?
gnat

1
"Vấn đề thiết yếu là bạn có những lập trình viên viết mã nhưng không kiểm tra và người kiểm thử kiểm tra nhưng không viết mã.": Hả? Tại sao điều này là một vấn đề? Một lập trình viên nên, tốt, chương trình và một người kiểm thử nên kiểm tra. Hơn nữa, bạn cần một số tính năng tối thiểu được triển khai trước khi bạn có thể kiểm tra nó: bạn không thể song song hai tác vụ nếu đầu ra của một tác vụ là đầu vào của tác vụ khác.
Giorgio

@Giorgio đó là một thác nước. Trong nhanh nhẹn, những người có thể cung cấp giá trị một cách độc lập được ưa thích rất nhiều. Không có lý do tại sao phát triển và thử nghiệm nên là ngành nghề riêng biệt. Đó là một sự lựa chọn, đáng kính trọng, nhưng không phù hợp với sự phát triển nhanh.
Sklivvz

4

Vai trò thực tế của QA của bạn gần với thử nghiệm chấp nhận. Tôi sẽ tưởng tượng điều này sẽ được thực hiện bởi một nhóm riêng biệt, đóng vai trò là chủ sở hữu sản phẩm hơn là một phần của nhóm phát triển.

Ví dụ: trong khi chạy nước rút, bạn cần thêm một tính năng cho phép lọc kết quả tìm kiếm theo các tiêu chí khác nhau. Bạn đã thực hiện cơ chế tìm kiếm của mình, nhưng kết quả được sắp xếp theo thứ tự abc.

  • Trong giai đoạn nước rút:

    1. Nhóm nghiên cứu phác thảo thiết kế của tính năng mới và tác động đến cơ sở mã thực tế.

    2. Các nhà phát triển viết các bài kiểm tra đơn vị đảm bảo rằng đơn đặt hàng hoạt động như mong đợi, đồng thời viết mã thực tế.

    3. Tính năng mới được kiểm tra chu đáo để đảm bảo rằng nó không phá vỡ bất cứ điều gì (kiểm tra hồi quy) và nó hoạt động như mong đợi (kiểm tra đơn vị).

    4. Nếu có thể và phù hợp , đó không phải là trường hợp trong hầu hết các dự án , chủ sở hữu sản phẩm (và vì vậy nhóm QA của bạn) có thể liên tục đánh giá tính năng mới để ngăn nhóm đi sai hướng. Điều này đòi hỏi tích hợp liên tục với hàng chục bản dựng mỗi ngày.

  • Sau khi chạy nước rút, chủ sở hữu sản phẩm đánh giá tính năng mới để kiểm tra xem nó có tương ứng với nhu cầu của khách hàng không. Nhóm QA của bạn thực sự ở đây, sau khi nước rút kết thúc.

Tôi tin rằng các vấn đề thực tế của bạn là như sau:

  • Phạm vi . Chạy nước rút liên quan đến nhóm của bạn và chỉ nhóm của bạn, không phải QA thực tế của bạn, hoạt động nhiều hơn với tư cách là chủ sở hữu sản phẩm.

  • Kiểm tra . Việc bạn có một nhóm QA không có nghĩa là tất cả những gì bạn cần làm là viết mã. Công việc của nhóm của bạn là cung cấp một tính năng hoạt động như mong đợi, không phải đưa ra mã để những người khác kiểm tra. Nếu bạn dựa vào nhóm QA để thực hiện kiểm tra cho bạn, điều này sẽ làm tăng chi phí chung, vì các lỗi sẽ được sửa từ một đến hai tuần sau thay vì được sửa gần như ngay lập tức.


Tôi thực sự nghĩ rằng phần lớn vấn đề của tổ chức này (mà tôi là người mới) là có ít thời gian dành cho các yêu cầu phân tích trước và xác định một giải pháp có thể được phân tách thành các đơn vị nguyên tử nhỏ. Với trạng thái hiện tại của dự án và nhóm, tôi nghĩ rằng lần chạy nước rút hiện tại không có gì khác hơn là một cuộc chạy nước rút phân tích, trong đó các sản phẩm phân phối là PBI hoàn thành với các nhiệm vụ và trường hợp thử nghiệm. Tuy nhiên, họ dường như tập trung vào số tiền họ trả cho tôi mỗi giờ và cứ sau mỗi giờ tôi không "thực hiện mã hóa bàn phím" thì họ đang mất giá trị.
Đánh dấu Richman

@MarkRichman cứ mỗi giờ họ trả tiền cho bạn để nhập vô nghĩa vào cơ sở mã mà họ đang mất không chỉ là giờ họ trả tiền cho bạn, mà là tất cả những giờ cần thiết để loại bỏ những điều vô nghĩa ra khỏi cơ sở mã.
Móż

4

nếu tất cả hoặc hầu hết mã hóa không được thực hiện cho đến khi kết thúc nước rút?

Tại sao nó không hoàn thành sớm hơn? Giới hạn chính này là nguồn gốc của những rắc rối của bạn và tôi đã thấy hai cách tiếp cận thành công. Một cách phù hợp với cách tiếp cận nhanh (nhưng không phải là các cách làm thông thường khác) và các dấu hiệu khác nhanh nhẹn một chút (nhưng phổ biến hơn).

Đầu tiên là bạn không viết mã cho đến khi kết thúc nước rút. Trên thực tế viết mã là một phần tương đối nhỏ của sự phát triển. Nếu bạn hoàn thành khoảng một nửa chặng đường nước rút, điều đó cung cấp nhiều thời gian để QA thực hiện công việc của họ. Nó cũng khiến bạn mất nhiều thời gian để viết tài liệu, xóa nợ kỹ thuật, thiết kế cho các hạng mục tồn đọng ... Tất cả những thứ khác mà bạn cần làm cho một sản phẩm chất lượng. Một nhược điểm của điều này tôi đã thấy là gần như không thể có được chức năng các bài kiểm tra đơn vị được thực hiện nhanh chóng. Cá nhân, tôi nghĩ việc kiểm tra đơn vị hoàn toàn ổn sau khi để QA bắt đầu xem xét chức năng, nhưng những người ủng hộ TDD (và những người khác) sẽ không đồng ý.

Tùy chọn thứ hai là để QA vận hành chạy nước rút đằng sau các nhân viên phát triển như PM ghét của bạn. Tôi cũng có xu hướng không thích điều này. Nó loại bỏ khái niệm "sản phẩm đáng tin cậy" vào cuối giai đoạn nước rút, ngay cả khi bạn có một quy trình leo thang cho các bản phát hành của mình. Tồi tệ hơn, các nhà phát triển sẽ tập trung vào những thứ "mới" khi QA đến với họ với những câu hỏi hoặc lỗi từ thử nghiệm. Các nhà phát triển cũng không có khả năng sửa lỗi trong sự sắp xếp này. Nhưng tôi đã thấy nó sản xuất phần mềm chất lượng đúng thời gian.


1
Tôi đã từng có QA là một cuộc đua nước rút trong thử nghiệm của họ. Mọi người ở đây muốn thấy toàn bộ SDLC hoàn thành cứ sau hai tuần. Tôi chỉ không thấy làm thế nào có thể.
Mark Richman

5
@MarkRichman - Tại sao không? 1 ngày để lập kế hoạch, 5 ngày cho mã hóa và 4 ngày cho các bài kiểm tra đơn vị, tài liệu, sửa lỗi và thiết kế cho lần chạy nước rút tiếp theo. Thách thức không thực sự là hoàn thành nó, nhưng phải đủ kỷ luật như một công ty để thực hiện tốt một lượng nhỏ công việc.
Telastyn

1
bởi vì họ sẽ không tập trung vào 5 ngày tôi đang viết mã, nhưng 5 ngày còn lại thì không. Tôi chắc chắn sẽ lấp đầy 5 ngày còn lại bằng mã hóa, nhưng vì họ mong muốn hoàn thành tất cả các nhiệm vụ mã hóa "súp-to-nut" (bao gồm cả thử nghiệm), nên nó không phù hợp với mũi tên của vật lý thời gian :)
Mark Richman

1
@markrichman - tốt, vậy thì thật dễ dàng để chỉ ra tất cả những điều khác không mã hóa mà bạn cần làm để thực sự được thực hiện .
Telastyn

tốt, tôi cũng khám phá ra công việc bổ sung cần phải được thực hiện để hoàn thành công việc đã cam kết trong giai đoạn nước rút hiện tại. Điều này buộc các công việc khác không được thực hiện cho lần chạy nước rút đó. Điều này tốt, và tôi nghĩ là theo tinh thần nhanh nhẹn, nhưng tôi được bảo là không bao giờ thêm bất cứ điều gì vào lần chạy nước rút hiện tại và thêm các nhiệm vụ mới được phát hiện (và hoàn thành) này vào Product Backlog, điều này không phù hợp với tôi .
Đánh dấu Richman

1

Hướng dẫn Scrum yêu cầu các nhóm phải có chức năng chéo. Tất cả các thành viên trong nhóm được coi là nhà phát triển, không phân biệt chuyên môn cá nhân của họ. Các cá nhân silo (lập trình viên, người kiểm tra, qa, ux, v.v.) không có ích trong Scrum. Các thành viên trong nhóm giúp đỡ lẫn nhau bất cứ nơi nào họ có thể. Không có khái niệm 'chuyển vật phẩm cho qa'.

Trong tình huống của bạn, có vẻ như bạn có thể có một vấn đề ước tính. Khi ước tính các mục tồn đọng của sản phẩm, bạn cần xem xét tất cả các hoạt động, ví dụ: Mã hóa, Kiểm tra, Đánh giá ngang hàng, Triển khai, Tích hợp - bất kể định nghĩa của bạn về nhu cầu đã thực hiện.

Theo nguyên tắc thông thường, dự kiến ​​sẽ đưa từ 5 đến 15 mặt hàng tồn đọng của sản phẩm vào một lần chạy nước rút. Điều này cung cấp cho bạn một ý tưởng về mức độ lớn của mỗi sản phẩm tồn đọng. Nó cũng mang đến cho bạn một cơ hội tuyệt vời để hoàn thành công việc 'trong giai đoạn nước rút.

Cuối cùng, nhiệm vụ của nhóm là chuyển một mục tồn đọng của sản phẩm sang 'hoàn thành' và sau đó chuyển sang mục tiếp theo. Đôi khi, làm điều này có nghĩa là mọi người đang giẫm lên các ngón chân của nhau và do đó, có ý nghĩa để quay vòng nhiều hơn một sản phẩm tồn đọng tại một thời điểm. Hướng dẫn của bạn mặc dù nên là để giảm tiến độ công việc của bạn (WIP) và di chuyển các mục tồn đọng của sản phẩm để hoàn thành.


0

Kiểm tra và mã hóa đi đôi với nhau. Bạn có thể lên lịch cho nó theo mô-đun. Khi mô-đun kết thúc, bạn có thể cung cấp nó cho người kiểm tra. Toàn bộ kịch bản này cũng phụ thuộc vào giai đoạn thử nghiệm mà bạn đang làm việc. Mô hình xoắn ốc SDLC trông tốt. Trong đó, kiểm tra và mã hóa đồng thời là thuận tiện. Một cách khác có thể là mô hình V .


Tôi đồng ý với bạn, nhưng "quyền hạn" dường như là chủ nghĩa thuần túy về bất cứ điều gì khác ngoài việc hoàn thành toàn bộ SDLC trong một lần chạy nước rút hai tuần. Bất cứ điều gì khác ngoài phương pháp này dường như được coi là thác nước.
Đánh dấu Richman

0

Câu trả lời của tôi, có lẽ khá lạ lúc đầu, sẽ là: bạn không tìm thấy thời gian để kiểm tra vì bạn nghĩ việc kiểm tra phải được thực hiện đối với các tác dụng phụ của mã. Và với tác dụng phụ, ý tôi là thuật ngữ khoa học máy tính :

một chức năng (...) được cho là có tác dụng phụ nếu ngoài việc trả về một giá trị, nó còn (...) có tương tác quan sát được với (...) thế giới bên ngoài.

Tôi đã đưa ra trích dẫn để nhấn mạnh phần "tương tác với thế giới bên ngoài": bạn muốn thử nghiệm xảy ra trên giao diện người dùng vì nó được in trên màn hình ("[để bắt đầu thử nghiệm] không thực sự khả thi vì bạn thường cần một chức năng UI để ghi lại hoặc tạo các bài kiểm tra tự động từ ").

Các câu trả lời khác đã nói với bạn tự động hóa "thử nghiệm chấp nhận" này, để nó có thể xảy ra nhanh chóng. Điều này đúng, nhưng không giải quyết đầy đủ vấn đề ban đầu của bạn: nếu không có đủ thời gian để viết các bài kiểm tra chấp nhận đó thì sao?

Bạn phải từ bỏ quan điểm kiểm tra một khi mã đã tương tác với thế giới bên ngoài, tức là nó đã in ra một cái gì đó và mong đợi một số đầu vào. Vấn đề với các tác dụng phụ là chúng không thể kiểm chứng được. Điều này làm tôi hiểu ra khi đọc một cuộc phỏng vấn với Guido van Rossum, nơi anh ta nói rằng một tuyên bố tắt máy tính chỉ có thể được chứng minh là có hiệu quả bằng cách thực hiện nó.

Giải pháp cho "tính không ổn định" đó là hiểu rằng, nếu bạn đã chứng minh một khi tuyên bố đó hoạt động, bạn có thể sử dụng nó ở mọi nơi và dựa vào nó để thực hiện công việc của mình. Cô lập nó trong một chức năng và kiểm tra mọi thứ khác .

Đưa ví dụ đó gần hơn với câu hỏi của bạn, chức năng giờ đây có thể là toàn bộ thư viện hoặc khung, và thay vì tắt máy tính, nó sẽ in ra một thứ: giao diện người dùng. Giữ các cuộc gọi đến nó câm và ổn định nhất có thể , bởi vì một khi bạn nhập phần đó vào ứng dụng của mình, bạn chỉ có thể kiểm tra thông qua các bài kiểm tra chấp nhận đắt tiền, tức là một số loại quan sát bên ngoài.

Đối với UI là "lãnh thổ nước ngoài" thực sự là một quan điểm chính xác, vì bạn không cần phải kiểm tra logic của một thư viện không do bạn cung cấp, và có lẽ đáng ngạc nhiên, đó là một quan điểm thực tế: bạn có thực sự mong đợi bao giờ kiểm tra việc gọi đó, ví dụ như MyWidget.draw()những gì bạn mong đợi, đến mức của một pixel?

Điều này không có nghĩa là thử nghiệm chấp nhận không quan trọng hoặc có thể bỏ qua. Nó ở đó để ở lại và tự động hóa nó, như những câu trả lời khác cho thấy, có lợi ích to lớn. Nhưng nếu bạn muốn tìm thời gian để kiểm tra và viết mã trong cùng một lần chạy nước rút, hãy cố gắng giữ cho mã của bạn không có tác dụng phụ nhất có thể.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.