Làm thế nào phổ biến là thử nghiệm tự động trong phát triển trò chơi? [đóng cửa]


35

Các nhà phát triển game thủ có sử dụng để viết các bài kiểm tra đơn vị và tích hợp không? Làm thế nào phổ biến là giữa các nhà phát triển câu đố? Và trong số các nhà phát triển MMORPG và FPS?

(Tôi không có nền tảng về phát triển trò chơi không phải tôi đang cogitating về làm việc với nó -. Nó chỉ là một nghi ngờ đã xảy ra với tôi Vì vậy, không cần phải cố gắng thuyết phục tôi để viết cho họ, thậm chí bởi vì tôi đã như để kiểm tra tự động ghi. )


3
Làm thế nào phổ biến là các câu hỏi tự động trên Stack Exchange?
MichaelHouse

2

Chỉ vì chúng không phổ biến trong ngành công nghiệp trò chơi không có nghĩa là bạn không nên cố gắng tiếp tục viết chúng. Vấn đề gì bạn đang cố gắng giải quyết với câu hỏi này?
Tetrad

@Tetrad Chỉ cần đọc câu hỏi. Đoạn thứ hai giải thích tất cả.
brandizzi

Câu trả lời:


37

Nói chung, kiểm thử đơn vị và tích hợp các trò chơi không phổ biến. Điều này chủ yếu là do khía cạnh kết xuất của các trò chơi thường được liên kết chặt chẽ với phần còn lại của cơ chế trò chơi mà thực sự có thể rất khó để viết các bài kiểm tra đơn vị hoạt động.

Điều đó nói rằng, thử nghiệm đơn vị có thể xảy ra trong phát triển trò chơi và nếu mã được thiết lập cho nó, nó có thể mang lại lợi ích lớn. Tuy nhiên, việc viết các bài kiểm tra tự động cho các trò chơi có thể phổ biến hơn nhiều, thường ở dạng chương trình AI có thể chơi trò chơi với tốc độ cao hơn so với người chơi bình thường. Có một số câu chuyện tuyệt vời về các nhà phát triển làm điều đó trong câu hỏi này về thử nghiệm tự động . Loại thử nghiệm tự động này có khả năng tốt hơn, vì thử nghiệm đơn vị có thể không gặp lỗi trong công cụ kết xuất, nhưng thử nghiệm tự động có nhiều khả năng phơi bày một vấn đề như vậy.

Tuy nhiên, cuối cùng, tất cả phụ thuộc vào studio. Một số hãng phim sẽ thực hiện một số thử nghiệm tự động, trong khi những hãng khác chỉ có thể thuê 20 học sinh trung học vào mùa hè để chơi trò chơi của họ hàng giờ liền.


17
+1 chỉ vì tất cả chúng ta đều ước mình là một trong những đứa trẻ này. :(
Bobby

13
@ BOB Hãy nói cho chính mình. Bị buộc phải chơi các trò chơi lỗi và dang dở hết lần này đến lần khác là một suy nghĩ kinh khủng, ngay cả khi cuối cùng bạn không được chỉ định thử nghiệm thứ gì đó giống như trò chơi Barney the Dinosaur mới nhất.
Dan Neely

9
@Bulk, tôi đã QA khoảng 3-4 năm, đó là một công việc tuyệt vời nếu bạn thích phá vỡ phần mềm và làm việc trong ngành đó, nhưng đừng làm điều đó vì 'bạn thích chơi game cả ngày' :)
JuniorDeveloper1208

9
Tôi đã ở QA khoảng sáu tháng. Trong khi đi đến xe của tôi vào cuối ngày thứ hai của tôi trong công việc, tôi nhớ rất rõ suy nghĩ của mình, "Tôi có thể thấy bản thân mình cuối cùng sẽ ghét công việc này." Và vào cuối ngày thứ ba, "tôi thực sự ghét công việc này". Những người kiểm tra QA giỏi, những người có thể đối phó với các yêu cầu của công việc đáng giá vàng của họ, và đó là một tội ác mà họ không được coi trọng và đền bù cao hơn họ.
Trevor Powell

16

Theo kinh nghiệm của tôi, nó không phổ biến lắm.

Hầu hết thử nghiệm đơn vị không xảy ra bởi vì hầu hết các nhà phát triển trò chơi đến từ thời đại và văn hóa trước khi những thứ như thế được phổ biến rộng rãi, và do đó thật khó để đưa ra lập luận rằng các phương pháp như vậy là cần thiết. Điều này thậm chí còn trở nên đúng hơn trong những năm gần đây với mong muốn người dùng có thể tự vá phần mềm của mình sau khi phát hành.

Một phần là do ngôn ngữ thống trị trong ngành phát triển trò chơi là C ++ và điều đó khiến cho việc kiểm thử đơn vị trở nên cồng kềnh hơn một chút so với các ngôn ngữ khác. Các khung kiểm thử đơn vị tồn tại nhưng chúng không dễ sử dụng như các hệ thống tương tự trong các ngôn ngữ hiện đại hơn có thể sử dụng phản xạ và các thủ thuật tương tự để tăng tốc độ phát hiện các trường hợp kiểm thử.

Ngoài ra, đó là vì các trò chơi thường không cho phép thử nghiệm đơn vị - phần lớn logic phụ thuộc vào các nguồn bán xác định (ví dụ: phần cứng đồ họa, thời gian đầu vào, tốc độ khung hình), phần lớn đầu ra khó đo lường (ví dụ: Đồ họa trên màn hình, hiệu ứng âm thanh) và một số gần như vô nghĩa bên ngoài bối cảnh trò chơi đầy đủ (ví dụ: AI phản ứng phức tạp, mô phỏng vật lý). Có một số trường hợp ngoại lệ - nhiều người, nếu bạn làm việc chăm chỉ để tạo mã theo cách đó - nhưng trên toàn bộ thử nghiệm thì đắt hơn trong các trò chơi so với hầu hết các loại phần mềm khác và do đó tỷ lệ chi phí / lợi ích đáng ngờ hơn.

Đối với thử nghiệm tích hợp, tôi chưa bao giờ nghe về thuật ngữ được sử dụng rõ ràng trong phát triển trò chơi, nhưng nhiều nhà phát triển thực hiện các thử nghiệm tự động của toàn hệ thống khi có thể. Theo phỏng đoán, tôi có thể nói rằng có thể 1 trong 3 nhà phát triển chuyên nghiệp làm điều này, vì không phải lúc nào cũng dễ cài đặt và vì lợi ích bị giảm đi bởi thực tế là hầu như mọi nhà phát triển vừa và lớn (hoặc nhà xuất bản của họ) đều có QA bộ phận sẽ tự thực hiện các bài kiểm tra tương tự. QA thường được trả ít hơn nhiều so với các nhà phát triển, vì vậy có thể được coi là kinh tế khi để thử nghiệm cho họ, thay vì đầu tư thêm thời gian mã vào nó. (Tranh cãi.)


5
Điểm tuyệt vời về đầu ra là khó đo lường. Thật dễ dàng để tự động kiểm tra rằng một lớp đã phun ra, giả sử, chính xác về mặt cú pháp, nhưng cách duy nhất để đảm bảo rằng ragdoll của bạn không bị mất kiểm soát khi bắn là thực sự chơi trò chơi. Điều tồi tệ nhất là điều này làm cho nó thực sự rất khó để nhận thấy các tác dụng phụ (ví dụ: bạn sửa một lỗi, nhưng bây giờ một số phần từ xa khác của trò chơi lại hoạt động khác.)
jhocking

8

Tôi không thấy cách viết một trò chơi khác với bất kỳ phần mềm nào khác khi thử nghiệm. Mỗi thành phần của phần mềm, cho dù nó đang kích hoạt một sự kiện được định thời gian, gửi lệnh đến một nhân vật trong trò chơi hoặc nhấn các nút menu, nên được kiểm tra để thực hiện đúng.

Việc kiểm tra xem trò chơi có thể hoàn thành hay không là một vấn đề khác và không thuộc đơn vị hoặc thử nghiệm tích hợp quá nhiều.


8

Nói chung, tự động hóa kiểm tra giao diện người dùng (ngay cả trong các chương trình thông thường) khó hơn tự động hóa thông thường. Vì vậy, mặc dù bạn có thể viết bài kiểm tra đơn vị cho các trò chơi của mình, nhưng việc kiểm tra trò chơi thực tế khó hơn. Hầu hết các công ty sử dụng thử nghiệm của con người chạy trò chơi hết lần này đến lần khác.

Ví dụ: Đây là một bài viết giải thích cách họ làm điều đó trong một Game Studio nhỏ (2 dev). Từ những gì tôi đọc có vẻ như xác nhận của họ không chi tiết lắm (tự động hóa bắt đầu trò chơi và ghi lại bất kỳ lỗi / xác nhận nào).

Tuy nhiên, một số công ty rất thành công với bán tự động hóa (Chẳng hạn như Microsoft Test Studios). Đó là, Nhà phát triển hoặc SDET xây dựng các công cụ giúp việc thử nghiệm trò chơi dễ dàng hơn nhiều. Đã có những cuộc nói chuyện của Gamefest nơi họ thảo luận về cách họ đã thử nghiệm Crackdown chẳng hạn hoặc Fable. Ví dụ, họ vẫn sử dụng những người kiểm tra xác minh rằng mọi đối tượng đều ở đó nhưng họ sử dụng một công cụ chụp nhanh vị trí đó để tất cả những gì con người làm được đều xác minh trực quan ở đó mà không cần phải chơi trò chơi.

Dưới đây là một cuộc nói chuyện tốt vào loại công cụ mà họ xây dựng sử dụng / để kiểm tra các trò chơi. Nó được gọi là "Đá quý thử nghiệm: Ra ngoài trước sự phức tạp ngày càng tăng của các trò chơi của chúng tôi"


4

Tôi muốn đặt cược rằng MMO và mã máy chủ nhiều người chơi, tuy nhiên, thường được thử nghiệm hơn một chút.

Ít nhất, các bài kiểm tra hồi quy tự động đã được phổ biến. Tôi đã thấy những điều này được thực hiện dưới dạng kiểm tra vệ sinh hàng loạt trong quá trình khởi động máy chủ, ví dụ như đảm bảo rằng máy chủ "đám mây" mới được cấu hình đúng trước khi bắt đầu chấp nhận người chơi; một bộ hồi quy khá tốt được xây dựng trong 3-4 năm, trong trường hợp đó, chạy trong khoảng 4 giây, trong khi đưa ra một máy chủ ảo (từ một hình ảnh hệ điều hành trống) mất gần 10 phút, vì vậy nó rất đáng thời gian. Chúng tôi đã chạy các thử nghiệm tương tự trên "tinderbox" (hệ thống xây dựng liên tục) trên kho lưu trữ Subversion của chúng tôi để kiểm tra một số lỗi khó chịu, khá phổ biến, thích quay trở lại. Đặc biệt, chức năng đa máy chủ có thói quen khó chịu khi cố gắng tạo các bản sao của các đối tượng khi chúng được truyền xung quanh: khởi tạo đối tượng, lưu vào bộ đệm, và mã truyền qua mạng được bảo hiểm gần 100%; chúng tôi tiếp tục nghĩ rằng chúng tôi đã nghĩ về tất cả mọi thứ có thể được kiểm tra, và sau đó khám phá ra một số trường hợp vui nhộn, mới.

Tại một số MMO mà tôi đã làm việc, chúng tôi cũng sẽ phát triển "máy khách sơ khai" để thực hiện kiểm tra đơn vị ban đầu và thường cung cấp các lệnh "toán tử" để thực hiện kiểm tra đơn vị đặc biệt cho các tính năng mới. Điều này cho phép chúng tôi thực thi mã máy chủ trước khi máy khách sẵn sàng tận dụng lợi thế của nó và thực hiện các tình huống "không thể" (ví dụ: dịch chuyển tức thời một người chơi bên trong tường) để đảm bảo rằng trình xử lý khôi phục lỗi sẽ hoạt động tốt. Đưa một tính năng mới trực tuyến trên máy chủ đôi khi có thể mất ít hơn nhiều ngày so với hỗ trợ khách hàng cho nó; ngược lại, đôi khi chúng ta phải tạo ra một phương thức máy chủ "giả" cho máy khách, trả lại dữ liệu giả nhưng được định dạng tốt, nếu chúng vượt lên trước chúng ta.

Tuy nhiên, sự phát triển MMO nói chung phải chịu nhiều vấn đề hơn, có thể phản ánh môi trường. Khi tôi đang làm việc trên các hệ thống trò chơi nhúng, thì thử nghiệm trên thực tế là không nghe thấy bất cứ điều gì ngoại trừ một số mã widget có thể tái sử dụng (ví dụ: trình soạn thảo văn bản).


3

Một lý do khác khiến việc kiểm tra tự động không phổ biến trong Phát triển trò chơi có thể được xem xét là vì trong hầu hết các trò chơi, có rất nhiều tình nguyện viên thử nghiệm Beta đánh lừa sự tham gia của Game Beta như một "lợi thế" khi trò chơi được phát hành. Tất nhiên, kiểm tra tự động đã phát triển vượt quá các yêu cầu chất lượng, nhưng cũng vượt ra khỏi những hạn chế về ngân sách. Do đó, vì trong chơi game có rất nhiều người thử nghiệm có kinh nghiệm chuẩn bị thử nghiệm miễn phí, có lẽ đây là một lý do khác khiến các bài kiểm tra tự động không phổ biến.


3

Tôi đã tham gia một cuộc thảo luận bàn tròn về thử nghiệm tự động tại GDC 2011 . IIRC, có khoảng 60 người trong phòng. Tại một thời điểm, người điều hành đã thực hiện một cuộc khảo sát về phạm vi kiểm tra đơn vị. Có một người đã tuyên bố bảo hiểm mã lớn hơn 90%. Mọi người khác bật cười khi nghĩ đến việc đạt mức bảo hiểm 1% . Nếu nhóm đó là một đại diện công bằng cho toàn bộ ngành, tôi nói rằng kiểm tra tự động thường không xảy ra nhiều, nếu có.

Các câu trả lời khác ở đây đưa ra lý do tốt là tại sao. Tôi chỉ nghĩ rằng nó sẽ hữu ích để có một tài khoản đầu tay.


Tôi ngạc nhiên rằng con số quá thấp (mặc dù tôi không mong đợi hơn một phần ba số người chơi sẽ sử dụng các thử nghiệm như vậy, như tôi đã nói trong câu trả lời của mình.) Để thêm một số bằng chứng cá nhân, phần mềm máy chủ tôi đang làm việc có hơn 70% đơn vị kiểm tra bảo hiểm. Tôi có thể có thể đạt được 85% với một chút nỗ lực, nhưng 15% cuối cùng sẽ liên quan đến các mâu thuẫn tiêm phụ thuộc khác nhau mà tôi không sẵn sàng thực hiện. Để so sánh, phần mềm máy khách gần như không thể kiểm tra đơn vị vì vậy chúng tôi tập trung vào kiểm tra thủ công.
Kylotan

Trong một dự án Lua, nhờ sự dễ dàng của việc sơ khai và chế giễu, tôi đã cố gắng giữ được phạm vi bảo hiểm 100% trong quá trình phát triển. Tuy nhiên, tôi nhận thấy nhiều thử nghiệm không thú vị (chẳng hạn như kiểm tra vị trí chính xác của giao diện người dùng hoặc bất kỳ thứ gì nên được điều khiển dữ liệu nhưng thực sự được thực hiện trong mã). Để giữ mọi thứ sạch hơn, tôi chia mã giữa "engine" (có thể tái sử dụng) và dành riêng cho trò chơi và chỉ đảm bảo bao gồm tất cả mã động cơ, trong khi phạm vi bảo hiểm dao động cho mã trò chơi (tôi vẫn kiểm tra các lớp cấp thấp vì nó dễ dàng làm và vật lý tùy chỉnh vì nó dễ gây rối, nhưng không phải giao diện người dùng / kết xuất cấp cao nữa).
hsandt
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.