Sự khác biệt giữa thử nghiệm đơn vị, chức năng, chấp nhận và tích hợp (và bất kỳ loại thử nghiệm nào khác mà tôi không đề cập đến) là gì?
Sự khác biệt giữa thử nghiệm đơn vị, chức năng, chấp nhận và tích hợp (và bất kỳ loại thử nghiệm nào khác mà tôi không đề cập đến) là gì?
Câu trả lời:
Tùy thuộc vào nơi bạn nhìn, bạn sẽ nhận được câu trả lời hơi khác nhau. Tôi đã đọc về chủ đề này rất nhiều, và đây là sự chắt lọc của tôi; một lần nữa, đây là một chút len lỏi và những người khác có thể không đồng ý.
Bài kiểm tra đơn vị
Kiểm tra đơn vị chức năng nhỏ nhất, thường là một phương thức / hàm (ví dụ: được cung cấp một lớp với một trạng thái cụ thể, gọi phương thức x trên lớp sẽ khiến y xảy ra). Các bài kiểm tra đơn vị nên được tập trung vào một tính năng cụ thể (ví dụ: gọi phương thức pop khi ngăn xếp trống sẽ ném một InvalidOperationException
). Tất cả mọi thứ nó chạm vào nên được thực hiện trong bộ nhớ; điều này có nghĩa là mã kiểm tra và mã được kiểm tra không nên:
Bất kỳ loại phụ thuộc nào chậm / khó hiểu / khởi tạo / thao tác nên được đặt ra / chế giễu / bất cứ điều gì bằng cách sử dụng các kỹ thuật thích hợp để bạn có thể tập trung vào những gì đơn vị mã đang làm, chứ không phải những gì phụ thuộc của nó làm.
Nói tóm lại, các bài kiểm tra đơn vị càng đơn giản càng tốt, dễ gỡ lỗi, đáng tin cậy (do các yếu tố bên ngoài giảm), nhanh chóng thực hiện và giúp chứng minh rằng các khối xây dựng nhỏ nhất của chức năng chương trình của bạn như dự định trước khi chúng được đặt cùng nhau. Thông báo trước là, mặc dù bạn có thể chứng minh rằng chúng hoạt động hoàn hảo trong sự cô lập, các đơn vị mã có thể nổ tung khi kết hợp với chúng ta ...
Kiểm tra tích hợp
Kiểm thử tích hợp xây dựng trên các kiểm thử đơn vị bằng cách kết hợp các đơn vị mã và kiểm tra kết quả hoạt động chính xác. Đây có thể là bộ phận bên trong của một hệ thống hoặc kết hợp nhiều hệ thống lại với nhau để làm một cái gì đó hữu ích. Ngoài ra, một điều khác biệt giữa kiểm tra tích hợp với kiểm tra đơn vị là môi trường. Kiểm thử tích hợp có thể và sẽ sử dụng các luồng, truy cập cơ sở dữ liệu hoặc làm bất cứ điều gì được yêu cầu để đảm bảo rằng tất cả các mã và các thay đổi môi trường khác nhau sẽ hoạt động chính xác.
Nếu bạn đã xây dựng một số mã tuần tự và đơn vị đã kiểm tra bộ phận bên trong của nó mà không chạm vào đĩa, làm sao bạn biết rằng nó sẽ hoạt động khi bạn đang tải và lưu vào đĩa? Có lẽ bạn đã quên tuôn ra và loại bỏ filestreams. Có thể quyền truy cập tệp của bạn không chính xác và bạn đã kiểm tra các bộ phận sử dụng trong các luồng bộ nhớ. Cách duy nhất để tìm hiểu chắc chắn là kiểm tra nó 'thực tế' bằng cách sử dụng một môi trường gần nhất với sản xuất.
Ưu điểm chính là họ sẽ tìm thấy các lỗi mà đơn vị kiểm tra không thể như lỗi nối dây (ví dụ: trường hợp của lớp A bất ngờ nhận được một phiên bản B của null) và lỗi môi trường (nó chạy tốt trên máy CPU đơn của tôi, nhưng tôi Máy 4 lõi của đồng nghiệp không thể vượt qua các bài kiểm tra). Nhược điểm chính là các thử nghiệm tích hợp chạm vào nhiều mã hơn, kém tin cậy hơn, các lỗi khó chẩn đoán hơn và các thử nghiệm khó bảo trì hơn.
Ngoài ra, kiểm tra tích hợp không nhất thiết phải chứng minh rằng một tính năng hoàn chỉnh hoạt động. Người dùng có thể không quan tâm đến các chi tiết nội bộ của các chương trình của tôi, nhưng tôi thì có!
Kiểm tra chức năng
Kiểm tra chức năng kiểm tra tính năng cụ thể về tính chính xác bằng cách so sánh kết quả cho đầu vào đã cho so với thông số kỹ thuật. Các xét nghiệm chức năng không quan tâm đến kết quả trung gian hoặc tác dụng phụ, chỉ là kết quả (họ không quan tâm rằng sau khi thực hiện x, đối tượng y có trạng thái z). Chúng được viết để kiểm tra một phần của đặc tả kỹ thuật, như "hàm gọi Square (x) với đối số 2 trả về 4".
Xét nghiệm nghiệm thu
Kiểm tra chấp nhận dường như được chia thành hai loại:
Kiểm tra chấp nhận tiêu chuẩn bao gồm thực hiện các kiểm tra trên toàn hệ thống (ví dụ: sử dụng trang web của bạn thông qua trình duyệt web) để xem liệu chức năng của ứng dụng có thỏa mãn thông số kỹ thuật hay không. Ví dụ: "nhấp vào biểu tượng thu phóng sẽ phóng to chế độ xem tài liệu lên 25%." Không có kết quả thực sự liên tục, chỉ là kết quả vượt qua hoặc thất bại.
Ưu điểm là các bài kiểm tra được mô tả bằng tiếng Anh đơn giản và đảm bảo phần mềm, nói chung, là tính năng hoàn chỉnh. Nhược điểm là bạn đã chuyển một cấp độ khác lên kim tự tháp thử nghiệm. Các bài kiểm tra chấp nhận chạm vào hàng núi mã, vì vậy việc theo dõi một thất bại có thể khó khăn.
Ngoài ra, trong phát triển phần mềm nhanh, kiểm tra chấp nhận của người dùng bao gồm tạo các kiểm tra để phản ánh các câu chuyện của người dùng được tạo bởi / cho khách hàng của phần mềm trong quá trình phát triển. Nếu các bài kiểm tra vượt qua, điều đó có nghĩa là phần mềm sẽ đáp ứng yêu cầu của khách hàng và câu chuyện có thể được coi là hoàn thành. Một bộ kiểm tra chấp nhận về cơ bản là một đặc tả thực thi được viết bằng ngôn ngữ cụ thể của miền mô tả các kiểm tra bằng ngôn ngữ được sử dụng bởi người dùng hệ thống.
Phần kết luận
Chúng đều bổ sung cho nhau. Đôi khi, việc tập trung vào một loại hoặc tránh hoàn toàn chúng là một lợi thế. Sự khác biệt chính đối với tôi là một số thử nghiệm nhìn mọi thứ từ quan điểm của lập trình viên, trong khi những thử nghiệm khác sử dụng trọng tâm khách hàng / người dùng cuối.
Điều quan trọng là bạn biết những điều khoản đó có ý nghĩa gì với đồng nghiệp của bạn. Các nhóm khác nhau sẽ có định nghĩa hơi khác nhau về ý nghĩa của chúng khi họ nói các bài kiểm tra "toàn bộ từ đầu đến cuối" chẳng hạn.
Gần đây tôi đã xem qua hệ thống đặt tên của Google cho các thử nghiệm của họ và tôi thích nó hơn - họ bỏ qua các đối số bằng cách chỉ sử dụng Nhỏ, Trung bình và Lớn. Để quyết định loại thử nghiệm nào phù hợp, họ xem xét một số yếu tố - mất bao lâu để chạy, truy cập mạng, cơ sở dữ liệu, hệ thống tệp, hệ thống bên ngoài, v.v.
http://googletesting.blogspot.com/2010/12/test-sizes.html
Tôi tưởng tượng sự khác biệt giữa Nhỏ, Trung bình và Lớn đối với nơi làm việc hiện tại của bạn có thể khác với Google.
Tuy nhiên, nó không chỉ là về phạm vi, mà còn về mục đích. Quan điểm của Mark về các quan điểm khác nhau cho các thử nghiệm, ví dụ như lập trình viên so với khách hàng / người dùng cuối, thực sự quan trọng.
http://martinfowler.com/articles/microservice-testing/
Bài đăng trên blog của Martin Fowler nói về các chiến lược để kiểm tra mã (Đặc biệt là trong kiến trúc dịch vụ vi mô) nhưng hầu hết áp dụng cho bất kỳ ứng dụng nào.
Tôi sẽ trích dẫn từ slide tóm tắt của anh ấy:
- Kiểm tra đơn vị - thực hiện các phần mềm nhỏ nhất có thể kiểm tra trong ứng dụng để xác định xem chúng có hoạt động như mong đợi hay không.
- Kiểm tra tích hợp - xác minh đường dẫn giao tiếp và tương tác giữa các thành phần để phát hiện lỗi giao diện.
- Kiểm tra thành phần - giới hạn phạm vi của phần mềm được sử dụng ở một phần của hệ thống được kiểm tra, thao tác hệ thống thông qua giao diện mã nội bộ và sử dụng kiểm tra nhân đôi để tách mã được kiểm tra khỏi các thành phần khác.
- Kiểm tra hợp đồng - xác minh các tương tác tại ranh giới của một dịch vụ bên ngoài khẳng định rằng nó đáp ứng hợp đồng mà dịch vụ tiêu thụ mong đợi.
- Thử nghiệm đầu cuối - xác minh rằng một hệ thống đáp ứng các yêu cầu bên ngoài và đạt được các mục tiêu của nó, thử nghiệm toàn bộ hệ thống, từ đầu đến cuối.
Kiểm thử đơn vị - Như tên cho thấy, phương pháp này kiểm tra ở cấp đối tượng. Các thành phần phần mềm riêng lẻ được kiểm tra cho bất kỳ lỗi nào. Kiến thức về chương trình là cần thiết cho bài kiểm tra này và các mã kiểm tra được tạo ra để kiểm tra xem phần mềm có hoạt động như dự định hay không.
Kiểm tra chức năng - Được thực hiện mà không có bất kỳ kiến thức nào về hoạt động nội bộ của hệ thống. Người kiểm tra sẽ cố gắng sử dụng hệ thống bằng cách làm theo các yêu cầu, bằng cách cung cấp các đầu vào khác nhau và kiểm tra các đầu ra được tạo. Thử nghiệm này còn được gọi là thử nghiệm hộp kín hoặc hộp đen.
Kiểm tra chấp nhận - Đây là thử nghiệm cuối cùng được thực hiện trước khi phần mềm được bàn giao cho khách hàng. Nó được thực hiện để đảm bảo rằng phần mềm được phát triển đáp ứng tất cả các yêu cầu của khách hàng. Có hai loại thử nghiệm chấp nhận - một loại được thực hiện bởi các thành viên của nhóm phát triển, được gọi là thử nghiệm chấp nhận nội bộ (thử nghiệm Alpha) và loại thử nghiệm được thực hiện bởi khách hàng hoặc người dùng cuối được gọi là (thử nghiệm Beta)
Kiểm thử tích hợp - Các mô-đun riêng lẻ đã được thử nghiệm đơn vị được tích hợp với nhau. Nói chung, hai cách tiếp cận được tuân theo:
1) Từ trên xuống
2) Từ dưới lên
Điều này rất đơn giản.
Kiểm thử đơn vị: Đây là thử nghiệm thực sự được thực hiện bởi các nhà phát triển có kiến thức về mã hóa. Thử nghiệm này được thực hiện ở giai đoạn mã hóa và nó là một phần của thử nghiệm hộp trắng. Khi một phần mềm được phát triển, nó được phát triển thành một đoạn mã hoặc các đoạn mã được gọi là một đơn vị. Và thử nghiệm riêng lẻ của các đơn vị này được gọi là thử nghiệm đơn vị được thực hiện bởi các nhà phát triển để tìm ra một số loại lỗi của con người như thiếu bảo hiểm tuyên bố, v.v.
Kiểm tra chức năng: Thử nghiệm này được thực hiện ở giai đoạn thử nghiệm (QA) và nó là một phần của thử nghiệm hộp đen. Việc thực hiện thực tế của các trường hợp thử nghiệm bằng văn bản trước đó. Thử nghiệm này thực sự được thực hiện bởi những người thử nghiệm, họ tìm thấy kết quả thực tế của bất kỳ chức năng nào trong trang web và so sánh kết quả này với kết quả mong đợi. Nếu họ tìm thấy bất kỳ sự chênh lệch thì đây là một lỗi.
Kiểm tra chấp nhận: gọi là UAT. Và điều này thực sự được thực hiện bởi người thử nghiệm cũng như các nhà phát triển, nhóm quản lý, tác giả, nhà văn và tất cả những người có liên quan đến dự án này. Để đảm bảo dự án cuối cùng đã sẵn sàng để được cung cấp với các lỗi miễn phí.
Kiểm thử tích hợp: Các đơn vị mã (được giải thích trong điểm 1) được tích hợp với nhau để hoàn thành dự án. Các đơn vị mã này có thể được viết bằng công nghệ mã hóa khác nhau hoặc có thể là các phiên bản khác nhau để thử nghiệm này được thực hiện bởi các nhà phát triển để đảm bảo rằng tất cả các đơn vị mã tương thích với nhau và không có bất kỳ vấn đề tích hợp nào.
Một số (tương đối) ý tưởng gần đây chống lại sự chế nhạo quá mức và thử nghiệm đơn vị thuần túy:
Tôi sẽ giải thích cho bạn điều này với một ví dụ thực tế và không có công cụ lý thuyết:
Một nhà phát triển viết mã. Không có GUI nào được triển khai. Kiểm tra ở cấp độ này xác minh rằng các chức năng hoạt động chính xác và các loại dữ liệu là chính xác. Giai đoạn thử nghiệm này được gọi là thử nghiệm đơn vị.
Khi GUI được phát triển và ứng dụng được gán cho người kiểm tra, anh ta sẽ xác minh các yêu cầu nghiệp vụ với máy khách và thực hiện các kịch bản khác nhau. Đây được gọi là thử nghiệm chức năng. Ở đây chúng tôi đang ánh xạ các yêu cầu của khách hàng với các luồng ứng dụng.
Kiểm thử tích hợp: giả sử ứng dụng của chúng tôi có hai mô-đun: Nhân sự và Tài chính. Mô-đun nhân sự đã được chuyển giao và thử nghiệm trước đó. Bây giờ Tài chính được phát triển và có sẵn để thử nghiệm. Các tính năng phụ thuộc lẫn nhau cũng có sẵn ngay bây giờ, vì vậy trong giai đoạn này, bạn sẽ kiểm tra các điểm giao tiếp giữa hai và sẽ xác minh chúng đang hoạt động theo yêu cầu.
Kiểm tra hồi quy là một giai đoạn quan trọng khác, được thực hiện sau bất kỳ sự phát triển mới hoặc sửa lỗi. Mục đích của nó là để xác minh các chức năng làm việc trước đây.
kiểm thử đơn vị: kiểm tra mô-đun riêng lẻ hoặc thành phần độc lập trong một ứng dụng được biết là kiểm thử đơn vị, kiểm thử đơn vị sẽ được thực hiện bởi nhà phát triển.
kiểm thử tích hợp: kết hợp tất cả các mô-đun và kiểm tra ứng dụng để xác minh giao tiếp và luồng dữ liệu giữa các mô-đun có hoạt động tốt hay không, thử nghiệm này cũng được thực hiện bởi các nhà phát triển.
kiểm tra chức năng kiểm tra chức năng cá nhân của một ứng dụng có nghĩa là kiểm tra chức năng
thử nghiệm chấp nhận thử nghiệm này được thực hiện bởi người dùng cuối hoặc khách hàng cho dù ứng dụng xây dựng theo yêu cầu của khách hàng và đặc điểm kỹ thuật của khách hàng được gọi là thử nghiệm chấp nhận