Thử nghiệm phát triển có khả thi trong phát triển trò chơi không?


23

Là được chứng nhận Scrum, tôi có xu hướng thiên về các phương pháp Agile trong khi phát triển một hệ thống, và thậm chí sử dụng một số khung vẽ từ khung Scrum để quản lý công việc hàng ngày của tôi.

Bên cạnh đó, tôi tự hỏi liệu TDD có phải là một lựa chọn trong phát triển trò chơi không, liệu nó có khả thi?

Nếu tôi tin câu hỏi GD này, TDD không được sử dụng nhiều trong phát triển trò chơi.
Tại sao MVC & TDD không được sử dụng nhiều hơn trong kiến ​​trúc trò chơi?

Tôi đến từ lập trình công nghiệp, nơi các dự án lớn với ngân sách lớn cần phải hoạt động hoàn hảo, vì nó có thể dẫn đến các kịch bản thảm khốc nếu mã không được kiểm tra nghiêm ngặt cả trong và ngoài.

Ngoài ra, việc tuân theo các quy tắc Scrum khuyến khích đáp ứng ngày hoàn thành công việc của bạn trong khi mọi hành động trong Scrum đều được sắp xếp theo thời gian! Vì vậy, tôi đồng ý khi trong câu hỏi được liên kết ở trên, họ nói ngừng cố gắng xây dựng một hệ thống, và bắt đầu viết trò chơi. Đó là những gì Scrum nói, cố gắng không xây dựng hệ thống hoàn hảo, trước tiên: làm cho nó hoạt động vào cuối Sprint. Sau đó, cấu trúc lại mã trong khi làm việc trong Sprint thứ hai nếu cần!

Tôi hiểu rằng nếu không phải tất cả các bộ phận chịu trách nhiệm phát triển trò chơi sử dụng Scrum, Scrum sẽ trở nên vô dụng. Nhưng chúng ta hãy cân nhắc một chút rằng tất cả các bộ phận đều sử dụng Scrum ... Tôi nghĩ rằng TDD sẽ tốt khi viết mã không có lỗi, mặc dù bạn không muốn viết hệ thống / trò chơi "hoàn hảo".

Vì vậy, câu hỏi của tôi là như sau:

TDD có khả thi trong việc phát triển game không?


Các cuộc thảo luận từ câu hỏi này sẽ thêm gì ngoài câu hỏi bạn liên kết?

Tôi trình bày khung Scrum về quản lý dự án trong phát triển phần mềm Agile và tranh luận về những gì Scrum muốn từ nhà phát triển trong Sprint, do đó biến TDD thành một lựa chọn. Tôi muốn có được quan điểm của người khác về chủ đề này từ quan điểm Scrum, không chỉ dưới khía cạnh TDD hay MVC. Tôi muốn hiểu làm thế nào TDD không khả thi khi được tranh luận từ phía bên này của huy chương, ngoài việc chỉ xem xét bản thân TDD như một cách tiếp cận độc lập.
Will Marcouiller

@Will TDD == Thiết kế từ trên xuống hoặc Thiết kế hướng thử nghiệm? Tôi đã suy nghĩ Top Down và sẽ đưa ra câu trả lời về khả năng quản lý trong thời gian dài nhưng sau đó thấy câu trả lời khác đang diễn giải TDD theo cách mà tôi không ...
James

@James: Kiểm tra hướng phát triển.
hỗn loạn

@James: Xin lỗi vì sự nhầm lẫn! Tôi không biết về ý nghĩa khác của từ viết tắt, vì điều tôi nghĩ đến là Phát triển phần mềm Agile với Scrum.
Will Marcouiller

Câu trả lời:


11

Điều đó chắc chắn khả thi, mặc dù rất nhiều lập trình viên trò chơi chưa thực sự tham gia ý tưởng này hoặc hiểu rõ về cách kiểm tra các hệ thống phức tạp. Tôi thừa nhận rằng tôi hiếm khi sử dụng nó, ngoại trừ các hệ thống không liên quan đến trò chơi dễ kiểm tra.

Mong đợi để sử dụng rất nhiều đối tượng giả. Do có rất nhiều hệ thống liên kết với nhau, thật khó để kiểm tra các thành phần riêng lẻ của hệ thống đó.

Cộng với rất nhiều thứ không thể được kiểm tra kỹ lưỡng. Làm thế nào để bạn lái thử, nói, một hệ thống hạt? Làm thế nào để bạn kiểm tra rằng hệ thống hoạt hình của bạn đang hoạt động chính xác? Rất nhiều thứ có bản chất trực quan và không rõ ràng (ít nhất là đối với tôi) về cách làm xét nghiệm thích hợp.

Tuy nhiên, có rất nhiều thứ không nhất thiết phải kiểm tra đơn vị theo nghĩa truyền thống của từ này, nhưng tồn tại dưới dạng "kiểm tra" cho các tính năng cụ thể. Những thứ như mức độ kiểm tra cho điều hướng AI là khá phổ biến, nhưng không nhất thiết là những thứ dễ dàng nhất để tự động hóa.

Có một số khía cạnh nhất định của trò chơi có thể (và có lẽ nên) có các bài kiểm tra đơn vị được viết cho chúng. Bất kỳ loại hệ thống "đọc tệp" chung chung nên được kiểm tra. Có thể có một số thử nghiệm để khởi tạo những thứ phần cứng (bề mặt 3d, v.v.). Có thể có một số máy chủ giả và kiểm tra mã tương tác máy khách / máy chủ của bạn. Những thứ như vậy.


9
Đây là những đề xuất tuyệt vời cho sự hiện diện của thử nghiệm tự động, nhưng hoàn toàn không phải cho sự phát triển dựa trên thử nghiệm.

1
Ý kiến ​​thú vị, Tetrad! Cảm ơn hạt muối của bạn. Bạn hỏi làm thế nào để kiểm tra hình ảnh động? Thật khó để nói như đối với các hệ thống 3D, vì tôi chưa bao giờ viết một trò chơi nào, có lẽ sau khi một số đã phát triển một vài trò chơi nhỏ! Ngoài ra, trong 2D, tôi thường thấy các đối tượng được biểu thị bằng ma trận và trình phân tích cú pháp ma trận để hiển thị hình ảnh trên màn hình. Do đó, đảm bảo rằng sau khi nhấn một số phím định hướng, thông tin đúng được tìm thấy ở đúng vị trí trong ma trận kết quả có thể là một sự khởi đầu, tôi đoán vậy. Tôi chỉ chưa biết đủ về các thành phần trực quan của một trò chơi, và tôi chắc chắn sẽ có trong năm nay! =)
Will Marcouiller

Tôi trở lại sau một số mã hóa để nói rằng tôi đã trả lời một câu hỏi trong tuần này (lần đầu tiên của tôi về GD! =)) Yêu cầu kiến ​​thức về các khái niệm OOP. OP muốn di chuyển một con rắn trên Keys.Down, Keys.Leftvv Đó là để nói rằng các trò chơi biết nơi người dùng muốn con rắn để đi, và con rắn có đi đâu chơi cho nó để, mặc dù đó chỉ là con rắn mà biết cách để di chuyển theo các hướng khác nhau, do đó cũng có vị trí của nó trong trò chơi. Đã nói điều này, IMHO, làm cho Snakelớp trở thành một thử nghiệm! (Sẽ được tiếp tục ...)
Will Marcouiller

Không chỉ là thử nghiệm, mà bây giờ nó là một ứng cử viên tốt cho TDD. Hãy nói rằng con rắn được khởi tạo ở vị trí Vector2.Zero, với tốc độ 10.0ftrên cả trục X và Y trong trò chơi 2D này. Câu hỏi đầu tiên là: Nó có được đặt ở vị trí ban đầu được cho là của nó không và làm thế nào để kiểm tra nó? Sau đó, bạn nghĩ rằng Positiontài sản sẽ được công khai. Thứ hai: làm thế nào để làm cho nó di chuyển? Phương pháp di chuyển phải tốt, vì vậy bạn viết một bài kiểm tra cho từng phương pháp định hướng MoveDown, MoveLeftv.v. Bây giờ, đi và viết khai báo phương pháp của bạn và xem thử nghiệm có phàn nàn không. Sau đó, tôn kính vị trí của con rắn
Will Marcouiller

sau một MoveDowncuộc gọi phương thức! Vì bạn biết rằng Positiontài sản được kiểm tra kỹ lưỡng, đó là một thành viên mà bạn có thể đếm! Bạn có thể đoán sự tiếp tục ở đây! ;-) Điều đó có nghĩa là các thành phần thị giác chắc chắn không thể được kiểm tra, nhưng con rắn sẽ trông giống như một con rắn, tất cả tùy thuộc vào loại rắn bạn muốn trong trò chơi. Nghệ sĩ vẽ con rắn nên chứng minh đủ sự hài lòng với bản vẽ con rắn của cô ấy, điều đó không được kiểm tra thông qua TDD, tất nhiên! Nhưng vị trí của nó so với các vật thể khác có thể, và lớp đại diện cho con rắn này cũng vậy. Trên thực tế, TDD
Will Marcouiller

11

Tôi không nghĩ TDD, như vậy, là phù hợp làm nền tảng để phát triển trò chơi. Thử nghiệm đơn vị tự động như một phần của phương pháp, chắc chắn, nhưng quá nhiều mối quan tâm chính của phát triển trò chơi là chủ quan và không thể kiểm tra bằng máy để thử nghiệm là động lực của sự phát triển. Làm thế nào bạn sẽ viết một bài kiểm tra kịch bản cho một cơ chế trò chơi là thú vị? Đó là một mức độ hấp dẫn trực quan? Thậm chí một cấp độ cần một người chơi thông thường khoảng 15 phút để hoàn thành? TDD phù hợp với các tình huống trong đó sự trưởng thành của một dự án có thể được đo lường một cách định lượng về mặt tuân thủ của nó đối với một đặc điểm kỹ thuật và đó không phải là phát triển trò chơi.


3
Ý bạn là gì khi bạn nói rằng phát triển trò chơi không tuân thủ các thông số kỹ thuật? Quan điểm của tôi là bạn phải biết loại trò chơi nào bạn muốn viết khi bạn muốn viết. Như vậy, thông số kỹ thuật, yêu cầu sẽ được viết dưới dạng tính năng hoặc tương tự; hãy lấy một ví dụ về Product Backlog trong Scrum. Bạn biết những câu chuyện người dùng bạn sẽ phải phát triển trong trò chơi của mình để bạn viết trò chơi mong đợi! Sau đó, cho một ví dụ khác, có lẽ bạn sẽ cần phải phát hiện va chạm trong một trò chơi chiến đấu, đây là những điều có thể kiểm chứng! Cho dù trò chơi thú vị là câu chuyện nhiều hơn là lập trình, IMHO.
Will Marcouiller

@Will Marcouiller: Tôi không có ý ám chỉ rằng chúng tôi không có thông số kỹ thuật hoặc không thể đo lường sự tuân thủ với chúng, nhưng ít quan trọng hơn về dự án có thể được chỉ định một cách có ý nghĩa so với các loại phát triển khác. Bạn có thể viết "trò chơi nên vui" vào thông số kỹ thuật của bạn, nhưng đó không phải là một đặc điểm kỹ thuật có ý nghĩa kỹ thuật. Bạn có thể và nên kiểm tra xem những gì có thể kiểm tra được, nhưng quan điểm của TDD là kiểm tra không chỉ là một phần của quy trình, đó là toàn bộ cơ sở của quy trình, một tư duy cơ bản và tôi không thấy điều đó rất tốt lĩnh vực chủ quan.
hỗn loạn

2
@Will Marcouiller, tôi rất, rất cao, không đồng ý rằng sự thú vị của trò chơi bắt nguồn từ câu chuyện. Tất cả những điều thú vị trong trò chơi đều thuộc về lối chơi, câu chuyện chỉ là một phần thưởng.
Tấn

1
@ Will: Không, anh ta nói rằng sự thích thú mà người dùng có được từ trò chơi không thể được xác định thông qua kiểm tra tự động và các trò chơi có số lượng lớn những thứ chỉ có thể được kiểm tra bằng cách gửi trò chơi vào tay người tiêu dùng.
DeadMG

1
@DeadMG: Điều đó đúng hơn bất kỳ ai mong muốn, nhưng quan điểm của tôi (không nhất thiết là AttackHobo) liên quan đến thực tế rằng chính quá trình phát triển phải kết hợp thử nghiệm, bởi các nhà thiết kế và nhà sản xuất và nhà phát triển và người thử nghiệm, không thể định lượng được trong một đơn vị thử nghiệm, đó là để làm với chất lượng của kinh nghiệm và cảm giác và phong cách và hiệu ứng thẩm mỹ mà trò chơi tạo ra. Nói với mọi người rằng họ đang làm TDD khi đó là một phần quan trọng của sự phát triển về cơ bản chỉ là nói dối họ.
hỗn loạn

6

Có một chút khó khăn để tìm ra chính xác những gì bạn hỏi vì tiêu đề hoàn toàn là về TDD nhưng dường như bạn cũng biến Scrum thành một phần không thể thiếu của câu hỏi - và như tôi hiểu, người ta không yêu cầu cái kia.

Nếu tôi tin câu hỏi GD này, TDD không được sử dụng nhiều trong phát triển trò chơi.

Đúng rồi. Tôi không nghĩ rằng tôi đã từng nghe về nó được sử dụng trong thực tế trong ngành công nghiệp trò chơi. (Nhưng sau đó tôi chưa bao giờ nghe về nó được sử dụng ngoài ngành công nghiệp trò chơi - chỉ bởi các cá nhân.)

Tôi đến từ lập trình công nghiệp, nơi các dự án lớn với ngân sách lớn cần phải hoạt động hoàn hảo, vì nó có thể dẫn đến các kịch bản thảm khốc nếu mã không được kiểm tra nghiêm ngặt cả trong và ngoài.

Trò chơi không cần phải hoạt động hoàn hảo. Vì vậy, có rất ít sự nhấn mạnh về tính chính xác của mã. TDD không đảm bảo tính chính xác của mã, nhưng một số người cảm thấy nó làm giảm tính không chính xác. Tôi vẫn chưa thấy bằng chứng về điều này.

Ngoài ra, việc tuân theo các quy tắc Scrum khuyến khích đáp ứng ngày hoàn thành công việc của bạn trong khi mọi hành động trong Scrum đều được sắp xếp theo thời gian!

Tôi chưa bao giờ thấy một phương pháp nào không khuyến khích các cuộc họp đúng hạn hoặc có các hành động không đúng giờ. Vấn đề là cho dù bạn sử dụng phương pháp nào, việc ước tính độ phức tạp của phần mềm là khá khó. Điều đó không phải là không thể, nhưng ước tính chính xác nó không liên quan nhiều đến quá trình. Nếu nhiệm vụ của tôi là thêm bảng điều khiển GUI mới hoặc sửa lỗi với hình động hoặc thêm thống kê mới cho các ký tự, thì việc sử dụng Scrum sẽ không tăng tốc chút nào và việc sử dụng TDD sẽ diễn ra để làm chậm nhiệm vụ (với lợi ích có thể là giảm các nhiệm vụ bảo trì tiếp theo sau này). Họ chắc chắn sẽ không làm cho việc ước tính thời gian thực hiện nhiệm vụ dễ dàng hơn.

Tôi nghĩ rằng TDD sẽ tốt khi viết mã không có lỗi, mặc dù bạn không muốn viết hệ thống / trò chơi "hoàn hảo".

Nếu TDD được chứng minh là viết mã tốt hơn các phương thức khác, thì có.

Có bằng chứng về điều này? Thực tế là ngành công nghiệp có thể sử dụng nó không phải là bằng chứng. Công nghiệp nổi tiếng với việc sản xuất mã kém được giao muộn. Sự vắng mặt của các ví dụ về các dự án TDD lớn đã thất bại hoặc bị trễ có thể chỉ vì đó là một cách tiếp cận mới và ít người thực sự đã hoàn thành một dự án như vậy. (Và những cái đang chạy muộn ... vẫn có thể đang chạy.)

TDD có khả thi trong việc phát triển game không?

Khả thi? Tất nhiên. Có lợi? Điều đó vẫn chưa được chứng minh.


1
Thật không may, TDD và Scrum vẫn bị hiểu lầm. Và điều này đúng với các dự án hiện tại sẽ không giúp tăng tốc sửa lỗi hay cách khác. Scrum là một khuôn khổ để phát triển các hệ thống phức tạp, dường như là một trò chơi. Scrum khuyến khích sửa lỗi từ Sprint sang một cái khác để chúng không bao giờ tích lũy. TDD đặt bạn về phía người dùng. Theo người dùng, ý tôi là các lập trình viên đồng nghiệp sẽ sử dụng mã của bạn. Nó buộc bạn phải nghĩ nó nên được sử dụng như thế nào để làm cho mã của bạn dễ sử dụng cho người khác. Do đó, nó dẫn đến thiết kế tốt hơn, theo kinh nghiệm. Tất cả đã nói, bạn có quan điểm thú vị về chủ đề này.
Will Marcouiller

1
Buộc các lỗi không tích lũy chỉ khiến các tính năng bị trượt - bạn không thể tạo ra nhiều thời gian hơn. Tôi hiểu rằng Scrum không có bất kỳ phương pháp cụ thể nào đối với các lỗi. Đối với TDD buộc bạn phải suy nghĩ về cách người khác sẽ sử dụng mã của bạn, đó không phải là cách duy nhất để làm điều đó. Do đó, nó không nhất thiết phải tốt hơn, và chắc chắn không nhất thiết là cách sử dụng thời gian hiệu quả nhất.
Kylotan

1
FYI, Noel Llopis sử dụng TDD cho các trò chơi độc lập của mình và công ty cũ High Moon Studios đã sử dụng nó rộng rãi. Xin lỗi, xin lỗi.
tenpn

Bạn có một số điểm thú vị để đọc! Cảm ơn sự đóng góp của bạn. Tuy nhiên, tôi muốn thêm rằng TDD là một cách tiếp cận khác giống như XP (lập trình cực đoan). Và vâng, Scrum không cung cấp bất kỳ phương pháp cụ thể nào cho các lỗi và thay vào đó đầu tư vào việc tự tổ chức Nhóm (của các nhà phát triển). Scrum không cho bạn biết cách làm, nó chỉ nói những gì nên làm. Đó là cam kết của Đội để đi qua những gì phải làm. Scrum chỉ đặt cược vào các Đội đa chức năng tự tổ chức. Đó là Nhóm quyết định cách phát triển và thử nghiệm các tính năng, v.v.
Will Marcouiller

(tiếp tục ...) Tôi đã trả lời câu hỏi đầu tiên của mình trong tuần này về các lớp học ở đây trên GD. OP muốn biết làm thế nào để làm cho sprite của anh ấy di chuyển theo các phím bấm định hướng. Thoải mái với các khái niệm OOP, tôi nhận ra rằng có lẽ tôi nên sử dụng các lớp để phát triển trò chơi đầu tiên của mình bằng XNA. Điều đó nói rằng, Spacecraftlớp của tôi trở thành một lớp hoàn toàn có thể kiểm tra với các phương thức và thuộc tính. Đây là loại công cụ hoàn toàn có thể, IMHO, được kiểm tra đầy đủ bằng TDD. Giả sử bạn cần một tàu vũ trụ, sau đó bạn viết các bài kiểm tra cho những gì bạn cần để hoàn thành một bài kiểm tra tại một thời điểm.
Will Marcouiller

4

xin lỗi vì tiếng anh kém của tôi và xin lỗi vì quan điểm thiên vị của tôi: tôi không phải là nhà thiết kế trò chơi mà là một lập trình viên.

Tôi nghĩ rằng có một số hiểu lầm trong cuộc thảo luận này. Tôi sẽ nói về TDD ở dạng tổng quát hơn, cái gọi là BDD. Phát triển theo hướng hành vi không phải là một cách để kiểm tra dự án (các thử nghiệm giống như tác dụng phụ). BDD là một cách để thiết kế , một cách để tái cấu trúc và thiết kế phần mềm trong tất cả quá trình sản xuất (xem một số phương châm như KISS, "giữ chất lượng trong", "kiểm tra sớm, kiểm tra thường xuyên") và không trong một giai đoạn đơn lẻ. BDD trái ngược với một số quy trình phần mềm cổ điển như quy trình thác nước hoặc một số phương pháp lặp khác để tạo ra phần mềm.

Một điểm khác là các kiểm tra tự động dành cho các tính năng có thể được kiểm tra tự động bằng máy tính toán. không có thử nghiệm nào cho sự vui vẻ trong các trò chơi và không có thử nghiệm nào về khả năng sử dụng giao diện người dùng đồ họa. vui vẻ hoặc khả năng sử dụng là nguyên liệu cho các công việc khác chứ không phải để phát triển phần mềm như nhà thiết kế tương tác, thế giới và cấp độ d. theo cùng một cách mà các bộ phận nghệ thuật (mô hình hóa, kết cấu, v.v.) dành cho nghệ sĩ sử dụng máy tính làm công cụ cho sự sáng tạo - rõ ràng những công việc đó có thể được thực hiện bởi cùng một người viết mã, nhưng đây không phải là vấn đề. vật lý có thể được kiểm tra, các thuật toán tối ưu hóa có thể được kiểm tra, các hành vi của đối tượng đơn lẻ có thể được kiểm tra (với giả, cuống và giả như đã đề cập trước đó)

suy nghĩ cuối cùng là, imho, không chỉ thiết kế trò chơi mà toàn bộ mã viết là một nghệ thuật.


4

Đây là một nghiên cứu trường hợp từ một người nghĩ rằng TDD và gamedev kết hợp khá tốt:

http: //powertoven.com/kpd/doads/TestDrivenDevelopmentInPython.pdf

Phải thừa nhận rằng, đây là một dự án nhỏ ở Pygame, nhưng nó đưa ra ý tưởng về những phần có thể được thử nghiệm với một trò chơi đồ họa và không thể. Tôi đã rất ngạc nhiên về mức độ có thể được thực hiện với TDD trong kịch bản này.


1
Nếu không so sánh với một nhóm kiểm soát đã thực hiện cùng một dự án (sao chép một trò chơi arcade tầm thường hiện có bằng ngôn ngữ cấp cao), nó không nói gì về việc TDD có hiệu quả hay không. Nó chỉ nói rằng anh ấy đã sử dụng TDD.

3

Không, Test Driven Development không phù hợp với Phát triển trò chơi. Chắc chắn bạn có thể viết bài kiểm tra cho một số phần bạn muốn kiểm tra, nhưng quy trình Phát triển trò chơi hoàn toàn khác với Phát triển dựa trên thử nghiệm yêu cầu phải có thông số kỹ thuật chính xác trước khi bắt đầu tiến trình.

Trò chơi hiếm khi có thông số kỹ thuật chính xác khi bắt đầu. Và nếu họ làm, họ luôn thay đổi và phát triển trong quá trình phát triển.

Thiết kế trò chơi là một nghệ thuật, bạn không thể có các bài kiểm tra cụ thể để biết khi nào nghệ thuật tốt hay hoàn thành.


Bạn không nghĩ rằng yếu tố thú vị nên được xem xét khi phân tích trò chơi, phân tích chức năng hay tương tự? Bạn có thể thiết lập một bộ các tính năng cùng nhau sẽ làm cho trò chơi trở nên thú vị để chơi và các tính năng này sau đó là bản thử nghiệm! Tôi chỉ cố gắng đưa ra những ý kiến ​​khác nhau để đi sâu về chủ đề và những tranh luận mà bạn đưa ra. Cảm ơn sự đóng góp của bạn! =)
Will Marcouiller

3
Rất nhiều sự phát triển bắt nguồn từ việc điều chỉnh những thứ nhỏ nhặt và xem chúng vui như thế nào khi chơi. Bạn không thể kiểm tra những thứ đó trừ khi chúng được đặt 100%. Và thử nghiệm một hệ thống sau khi nó được thực hiện không phải là TDD, nó là thử nghiệm, nhưng không phải là Phát triển được thúc đẩy bởi thử nghiệm.
Tấn

2
Nếu bạn nghĩ rằng hầu hết các dự án trong thế giới thực đều có thông số kỹ thuật chính xác khi chúng bắt đầu, thì có lẽ bạn chưa từng làm việc với nhiều dự án trong thế giới thực.
BlueRaja - Daniel Pflughoeft
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.