Các bài kiểm tra chấp nhận được thực hiện trước tiên làm thế nào điều này có thể được thực hiện?


8

Ý chính cơ bản của hầu hết các phương thức Agile là một tính năng không được "thực hiện" cho đến khi nó được phát triển, thử nghiệm và trong nhiều trường hợp được phát hành. Điều này được cho là xảy ra trong những khoảng thời gian quay vòng nhanh, chẳng hạn như "Nước rút" trong quy trình Scrum.

Một phần phổ biến của Agile cũng là TDD, trong đó tuyên bố rằng các bài kiểm tra được thực hiện trước tiên.

Nhóm của tôi làm việc trên một chương trình GUI có nhiều bản vẽ cụ thể và như vậy. Để cung cấp các bài kiểm tra, nhóm thử nghiệm cần có khả năng làm việc với một cái gì đó ít nhất là cố gắng thực hiện những điều họ đang cố gắng kiểm tra. Chúng tôi đã tìm thấy không có cách nào xung quanh vấn đề này.

Tôi rất có thể thấy họ đến từ đâu bởi vì nếu tôi cố gắng viết phần mềm nhắm vào giao diện cơ bản bí ẩn nào đó thì tôi sẽ có một khoảng thời gian rất khó khăn. Mặc dù chúng tôi có hành vi được chỉ định khá rõ ràng, quá trình tương tác chính xác với các yếu tố UI khác nhau khi nói đến tự động hóa dường như quá độc đáo đối với một tính năng để cho phép người kiểm tra viết các tập lệnh tự động để điều khiển thứ gì đó không tồn tại. Ngay cả khi chúng ta có thể, rất nhiều thứ cuối cùng sẽ xuất hiện sau khi bị thiếu trong đặc tả.

Một điều chúng tôi cân nhắc làm là yêu cầu người kiểm tra viết "kịch bản" kiểm tra giống như một tập hợp các bước phải được thực hiện, như được mô tả từ góc độ trường hợp sử dụng, để chúng có thể được "tự động hóa" bởi con người. Điều này sau đó có thể được thực hiện bởi (các) nhà phát triển viết tính năng và / hoặc xác minh bởi người khác. Khi những người thử nghiệm sau đó có cơ hội, họ tự động hóa "kịch bản" cho mục đích hồi quy là chủ yếu. Điều này cuối cùng đã không bắt kịp trong đội.

Phần thử nghiệm của nhóm thực sự đang tụt lại phía sau chúng tôi khá nhiều. Đây là một lý do tại sao rõ ràng có thêm thời gian để phát triển một "kịch bản" để con người thực hiện chỉ không xảy ra .... họ đang ở trong tình trạng khó khăn để theo kịp các nhà phát triển của chúng tôi. Nếu chúng tôi chờ đợi họ, chúng tôi sẽ không làm được gì. Đó thực sự không phải là lỗi của họ, họ là một cái cổ chai nhưng họ đang làm những gì họ nên làm và làm việc nhanh nhất có thể. Quá trình này dường như được thiết lập để chống lại họ.

Rất thường xuyên, chúng tôi cuối cùng phải quay lại một tháng hoặc hơn trong những gì chúng tôi đã làm để khắc phục các lỗi mà người kiểm tra cuối cùng đã kiểm tra. Đó là một sự thật xấu xí mà tôi muốn làm gì đó.

Vì vậy, các đội khác làm gì để giải quyết thác thất bại này? Làm thế nào chúng ta có thể đưa người kiểm tra đi trước chúng ta và làm thế nào chúng ta có thể làm điều đó để thực sự có thời gian để họ viết bài kiểm tra cho các tính năng chúng ta làm trong một lần chạy nước rút mà không khiến chúng ta ngồi và vặn ngón tay cái trong lúc này? Như hiện tại, để có được một tính năng "hoàn thành", sử dụng các định nghĩa nhanh, sẽ có các nhà phát triển làm việc trong 1 tuần, sau đó người kiểm tra làm việc vào tuần thứ hai và các nhà phát triển hy vọng có thể khắc phục tất cả các lỗi họ gặp phải trong vài ngày qua Điều đó sẽ không xảy ra, ngay cả khi tôi đồng ý, đó là một giải pháp hợp lý. Tôi cần những ý tưởng tốt hơn ...

Câu trả lời:


7

trước tiên, hãy loại bỏ sự phân chia giữa 'người thử nghiệm' và 'nhà phát triển'. Mọi người kiểm tra

thứ hai, trong TDD, các nhà phát triển mã hóa các thử nghiệm trước khi họ mã hóa tính năng / câu chuyện

Những gì bạn đã mô tả không phải là TDD [mặc dù nó có thể là Scrum; Scrum là một phương pháp quản lý dự án độc lập với phương pháp phát triển; Scrum không liên quan đến vấn đề của bạn]

Các tình huống trong đó kiểm tra tự động là không thể là cực kỳ hiếm. Các tình huống trong đó kiểm tra tự động là khó khăn, tốn kém hoặc bất tiện là phổ biến hơn nhiều - nhưng đó chính xác là những kịch bản trong đó kiểm thử tự động là cần thiết nhất.

Từ mô tả mơ hồ, tôi giả sử phần mềm đang vẽ một cái gì đó trên màn hình. Nếu những gì đang được rút ra được xác định bởi dữ liệu, công thức hoặc các bước chức năng, thì ít nhất hãy viết các bài kiểm tra tự động kiểm tra mức độ của dữ liệu / công thức / các bước chức năng. Nếu đầu ra màn hình là xác định (các bước giống nhau dẫn đến cùng một đầu ra bản vẽ mỗi lần) thì hãy kiểm tra thủ công một lần, chụp ảnh màn hình và để các thử nghiệm trong tương lai so sánh đầu ra với ảnh chụp màn hình đã được xác minh. Nếu đầu ra màn hình không đặc biệt và không bị chi phối bởi dữ liệu, công thức hoặc các bước chức năng, thì bạn đang ở trong khu vực hiếm hoi đó, nơi có thể không thể kiểm tra tự động. Nhưng tôi nghi ngờ nó.

Tôi đoán rằng lý do duy nhất kiểm tra chưa được tự động hóa cho đến nay là các nhà phát triển không quan tâm đến nó . Trong TDD, các nhà phát triển thực hiện thử nghiệm, vì vậy họ cảm thấy đau đớn vì sự lặp lại nhàm chán khi thử nghiệm quy trình 62 bước tương tự một trăm lần cho đến khi hết lỗi. Không có gì có được một giải pháp thử nghiệm tự động được phát triển nhanh hơn việc khiến các nhà phát triển thực hiện thử nghiệm.


Tôi đang nói cụ thể về các bài kiểm tra chấp nhận, không phải bài kiểm tra đơn vị. Bằng mọi giá, tôi sẽ không có cơ hội thay đổi cấu trúc bộ phận của công ty. Cần một giải pháp hoạt động với cả nhà phát triển và "nhà phát triển đang thử nghiệm". Điều đó nói rằng, làm thế nào bạn sẽ làm ví dụ ảnh chụp màn hình của bạn trước khi có một cái gì đó để chụp màn hình? Thực sự có RẤT NHIỀU bài kiểm tra tự động của chúng tôi thực hiện điều này, nhưng trước khi mọi thứ như thế có thể được tự động hóa, phải có một cái gì đó để chụp ảnh màn hình.
Edward Strange

@Crazy Eddie: TDD xác định các bài kiểm tra cho các câu chuyện của người dùng xác định các tính năng của ứng dụng. Thuật ngữ của 'kiểm tra đơn vị' thường được sử dụng trong ngữ cảnh này, nhưng nó không có cùng ý nghĩa hạn chế như trong phương pháp thử nghiệm đơn vị thuần túy (ví dụ, trong đó phạm vi bảo hiểm mã sẽ quan trọng). TDD kiểm tra các tính năng và mở rộng đến mức kiểm tra chấp nhận. Việc sử dụng thuật ngữ 'kiểm tra đơn vị' trong tài liệu là một điểm gây nhầm lẫn đáng tiếc cho nhiều người. Đối với ảnh chụp màn hình, bạn phải chạy thành công một lần để phương pháp đó chỉ tốt cho thử nghiệm hồi quy.
Steven A. Lowe

@Crazy Eddie: với một cái tên như Crazy Eddie, tôi hy vọng bạn sẽ trở thành nhà vô địch của những chu kỳ thất bại vô hiệu quả đầy thách thức ;-) [vâng tôi đọc blog của bạn]. Nghiêm túc mà nói, không có gì sẽ thay đổi vì các nhà phát triển cảm thấy không đau. Hãy để họ cảm thấy đau - hoặc có thể cung cấp cho họ một số phần thưởng để giúp đỡ - và họ sẽ đưa ra giải pháp để kiểm tra tự động, và / hoặc bắt đầu viết mã dễ kiểm tra hơn.
Steven A. Lowe

Sự khác biệt mà tôi thấy là quan trọng nhất theo quan điểm của tôi là chúng đòi hỏi các lĩnh vực chuyên môn khác nhau. Một bài kiểm tra đơn vị có thể, và thường là, được viết bằng cùng ngôn ngữ với các bit ứng dụng mà chúng kiểm tra. Mặt khác, kiểm tra chấp nhận tự động sử dụng bất kỳ ngôn ngữ nào mà phần mềm cụ thể được sử dụng để điều khiển UI đáp ứng. Chúng cũng đòi hỏi các kiến ​​trúc khác nhau, vì ít nhất những người thử nghiệm của chúng tôi đã phát triển các thư viện lớn các thành phần có thể tái sử dụng mà chúng thích nghi cho các nhu cầu cụ thể. Giống như một nhóm có thể liên quan đến các chuyên gia DB so với mã, có vẻ tốt khi có các chuyên gia kiểm tra.
Edward Strange

Tôi đoán điều này giải quyết vấn đề giữ cho các nhà phát triển bận rộn trong khi các thử nghiệm được thực hiện mặc dù. Ngay cả khi phải mất nhiều thời gian hơn cho bất kỳ nhiệm vụ nhất định, nó có thể có giá trị. Tôi rất có thể không nhận được mua trong tôi cần và tôi tưởng tượng vấn đề là cứ tiếp tục tái xuất hiện cho đến khi chúng tôi có thể tìm ra cách để kiểm tra trước thời hạn hoặc ít nhất là đồng bộ hóa. Tôi vẫn không thấy cách nào để giải quyết vấn đề này vì yêu cầu phải có thứ gì đó để lái xe dường như là điều kiện tiên quyết của vấn đề tự động hóa.
Edward Strange

4

Các nhóm của tôi thấy rằng TDD không phù hợp để thiết kế các bài kiểm tra GUI. Tất cả các khung kiểm tra mức GUI tự động mà chúng tôi đã sử dụng mã được yêu cầu phải được viết trước khi kiểm tra. Vì vậy, chúng tôi chuyển sang phát triển hướng hành vi . Chắc chắn, các thử nghiệm không tự động, nhưng nó đã cho chúng ta một cách để đo xem UI có "hoàn thành" ngay từ đầu không.


3

Chúng tôi thấy ATDD cho GUI khó / tốn kém.

Chúng tôi thường làm front-end đầu tiên. Vì chúng tôi viết các ứng dụng web, nó thường bằng HTML / CSS / JS, và sau đó chúng tôi đăng nhập vào giao diện, luồng, v.v ... Cuối cùng, chúng sẽ nhận được các mẫu dịch thuật với các phần thích hợp được thay thế bằng các bit động.

Khi mockup UI hoàn tất, chúng tôi viết các bài kiểm tra bắt chước một yêu cầu web. XPath được sử dụng để xác nhận dữ liệu tồn tại trong các thẻ HTML chính xác.

Chúng tôi thấy phong cách thử nghiệm này mang lại cho chúng tôi giá trị tốt cho thời gian chúng tôi dành. Chúng tôi vẫn khẳng định dữ liệu được trả về và một số cấu trúc chung về html. Vì chúng tôi đã tìm ra giao diện trước qua giai đoạn mô phỏng, chúng tôi không lo lắng về việc cố gắng xác nhận vị trí pixel. Chúng tôi chỉ nhìn vào trang khi chúng tôi phát triển cả hai phần của sự phát triển cũng như kiểm tra hai lần.

Đối với nhà phát triển GUI không có web, có lẽ tôi sẽ thử thêm một số hook để tạo giao diện người dùng. Tôi cũng có thể sẽ mô phỏng giao diện người dùng trước, ngay cả khi trên giấy.


1
 > Acceptance tests done first…how can this be accomplished?

Tôi thích kiểu phát triển bdd-tdd như được mô tả trong bài viết này: Phát triển dựa trên hành vi với SpecFlow và WatiN .

Ví dụ sử dụng .net để phát triển với SpecFlow + NUnit + WaitN. Nếu bạn đang phát triển với (j) ruby ​​/ java, bạn có thể thử dưa chuột + Junit + Waitr


1

Một điều chúng tôi cân nhắc làm là yêu cầu người kiểm tra viết "kịch bản" kiểm tra giống như một tập hợp các bước phải được thực hiện, như được mô tả từ góc độ trường hợp sử dụng, để con người có thể được "tự động hóa". Điều này sau đó có thể được thực hiện bởi (các) nhà phát triển viết tính năng và / hoặc xác minh bởi người khác. Khi những người thử nghiệm sau đó có cơ hội, họ tự động hóa "kịch bản" cho mục đích hồi quy là chủ yếu. Điều này cuối cùng đã không bắt kịp trong đội.

Đây là ít nhiều những gì chúng ta làm. Mọi tính năng đều được phát triển song song với trường hợp thử nghiệm (tập lệnh) và không có tính năng nào được 'thực hiện' cho đến khi cả ba bước được thực hiện: phát triển, trường hợp thử nghiệm và thử nghiệm. Tất cả các trường hợp thử nghiệm được viết từ các yêu cầu của người kiểm tra và được kiểm tra với các nhà phát triển, vì vậy tất cả chúng ta đều có một sự hiểu biết chung về vấn đề. Giống như đề xuất 'mỗi tuần khác của bạn, ngoại trừ khi các nhà phát triển đang làm việc trên tính năng, người kiểm tra đang làm việc trên các trường hợp thử nghiệm và khi người kiểm tra đang kiểm tra thì các nhà phát triển đang điều tra tính năng tiếp theo.

Tôi nghĩ vấn đề lớn nhất của bạn là

[t] anh ta kiểm tra một phần của đội thực sự đang tụt lại phía sau chúng tôi khá nhiều. [...] Nếu chúng tôi đợi họ, chúng tôi sẽ không làm gì cả

Vì nhóm thử nghiệm ở phía sau rất xa nên tôi thực sự nghĩ rằng bạn nên chờ đợi họ. Tôi chắc chắn có những thứ hữu ích mà bạn có thể làm - chẳng hạn như phát triển một số tính năng dễ kiểm tra nhưng mất nhiều thời gian để phát triển. Nó cũng có thể giúp cân nhắc thời gian thử nghiệm khi lập kế hoạch chạy nước rút, cả nhà phát triển hoặc người thử nghiệm không nên làm việc quá sức hoặc không hoạt động.


1

Chấp nhận phát triển dựa trên thử nghiệm (khác với, nhưng bổ sung cho phát triển dựa trên thử nghiệm) là một cách tuyệt vời để đảm bảo rằng bạn có các yêu cầu đóng đinh trước khi bạn bắt đầu viết mã.

Trong nhóm của tôi, chúng tôi (chủ sở hữu sản phẩm, nhà phân tích và nhà phát triển QA) ngồi lại với nhau và sử dụng FitNlie hai bài kiểm tra chấp nhận viết. Các phiên này thường được điều khiển bởi QA nhưng tất cả chúng ta đều tham gia. Chúng sẽ không chạy ngay lập tức vì một số nỗ lực phát triển là cần thiết để thêm các đồ đạc (chất keo giữa các trang wiki và mã sản xuất). Những bài kiểm tra này hình thành các tiêu chí chấp nhận cho một câu chuyện . FitNesse được thiết kế để tương tác với lớp bên dưới UI.

Là nhà phát triển, sau đó chúng tôi làm việc để làm cho các thử nghiệm chấp nhận này vượt qua. Chúng tôi sử dụng TDD cho việc này, nhưng TDD không nên nhầm lẫn với ATDD.

Khi các trang FitNlie chuyển sang màu xanh, chúng tôi gần như đã hoàn tất, chúng tôi vẫn còn một số việc phải làm (thử nghiệm thăm dò, thường được dẫn dắt bởi QA, v.v.).


Tôi thấy cách kiểm tra đơn vị và kiểm tra chấp nhận không nên nhầm lẫn. Không phải chú Bob là một vị thần, nhưng trong "Nguyên tắc, mô hình và thực tiễn nhanh nhẹn trong C #", ông bao gồm thử nghiệm chấp nhận (và sử dụng FitNesse) như một phần của TDD và không phân biệt và thậm chí không đề cập đến ATDD.
JeffO

0

Có lẽ viết bài kiểm tra UI được mã hóa có thể giúp bạn ra ngoài. Nếu bạn đang làm việc với Visual studio 2010, bạn có thể sử dụng một bổ trợ gọi là "kiểm tra mã hóa" để ghi và mã hóa một tập lệnh rất cụ thể để tương tác với giao diện người dùng của ứng dụng. Ghi lại một tương tác vào một kịch bản giới thiệu một mức độ trừu tượng bổ sung để bảo vệ bạn những thay đổi nhỏ trong giao diện người dùng. Tuy nhiên, giới thiệu hình thức kiểm tra này cũng giới thiệu gánh nặng của việc duy trì các bài kiểm tra.

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.