To trochę dziwne pytanie.
Piszę bibliotekę szachową, zasadniczo od zera. Możesz znaleźć wiele kodu tutaj , z zamiarem użycia go do GUI i / lub silnika. (Gra jest Grand Chess, ale dla celów tego pytania nie ma to tak naprawdę znaczenia).
Obecnie piszę testy jednostkowe, aby sprawdzić, czy moje funkcje działają zgodnie z oczekiwaniami. Zastanawiałem się, czy istnieje jakaś biblioteka lub baza danych sugerowanych pozycji do przetestowania, z których mogę korzystać i z których mogę korzystać, w podziale na to, czy są to Szach, Stalemate, Czek, Legal, Nielegalne itp.
tl; dr Szukam listy pozycji, na których jednostka będzie testować mój kod.
Tutaj możesz znaleźć moje aktualne testy, które dodam do nich co kilka dni. Chcę jednak upewnić się, że testy są wyczerpujące, zanim zacznę debugować kod. (Połowa z nich zawodzi obecnie).
Edycja: w celu wyjaśnienia: Nie szukam testów silnika („najlepszego ruchu”). Szukam testów reprezentacji zarządu („jest to mat szachowy”). Mam już kilka zagadek do testów silnika.
źródło
Odpowiedzi:
Podczas czytania twojego pytania moja reakcja jelit jest taka, że twój zakres jest zbyt skomplikowany do testów jednostkowych. Polecam szybkie przeczytanie bezpłatnego e-booka Testowanie zwięzłe. Jednak nie mam doświadczenia w pisaniu kodu szachowego (być może twoje paradygmaty są inne) - chociaż zarabiam na życie.
Test jednostkowy powinien być bardzo prosty i przetestować funkcję, która wykonuje 1 jedną rzecz. Następnie możesz połączyć funkcje z pewnym uzasadnieniem, że będą działać. Na przykład spodziewałbym się, że test jednostkowy każdego elementu pozwoli ustalić, czy dany ruch jest legalny. Test jednostkowy dla każdego elementu w celu ustalenia, czy wystawia króla na kontrolę. Test dla każdego elementu w celu ustalenia, gdzie atakuje itp.
Testowanie pozycji wydaje się bardzo skomplikowanym testem jednostkowym i byłoby znacznie trudniejsze do dokładnego wykonania. Zamiast tego pisz mniejsze testy dla mniejszych funkcji, a następnie wiedz, że te indywidualnie działają - ocena pozycji jest tylko kwestią iteracji prostych funkcji.
Jeśli chcesz przetestować pozycję pod kątem dobrego (niewymuszonego) ruchu, myślę, że testy jednostkowe sztucznie ograniczą długoterminowy rozwój i siłę twojego silnika szachowego ... binarny wynik testu jednostkowego zmusi twój silnik do wykonania ten sam ruch za każdym razem.
Spojrzałbym również na dodanie testów jednostkowych dla „najbardziej bezpośredniej” ścieżki do partnera ze znanymi grami końcowymi. Chciałbym również dodać testy jednostkowe dla przechodzenia przez znane otwory. Testy w środkowej fazie gry będą znacznie trudniejsze - być może podłączenie pozycji i ocena, czy silnik daje użyteczny wynik (co jest odpowiedzią binarną).
Jeśli chodzi o ocenę zestawu pozycji silnika, możesz o wiele lepiej postawić to pytanie na https://stackoverflow.com/ za pomocą znacznika „szachy”.
źródło
Chociaż jest to stare pytanie, pomyślałem, że koncepcja przedstawiona na tym blogu może być przydatna: http://scionsoftware.com/blog/write-tests-by-playing-chess
Chodzi o to, że grasz w szachy z graficznym interfejsem użytkownika i masz mechanizm do przechwytywania stanu szachownicy poprzez serializację do pliku.
Możesz nazwać te pliki według przypadków testowych i wprowadzić je do dowolnej zdefiniowanej metody testowej: IsCheckmate; IsLegal; IsDraw
Jednym z głównych powodów, dla których chciałbyś użyć naturalnego interfejsu użytkownika do stworzenia tych przypadków testowych, poza łatwością tworzenia, jest to, że wystarczająca liczba warunków zależy również od liczby ruchów: castling, en passant, warunki losowania.
źródło
Nie znam żadnej bazy danych testów jednostkowych dla silnika szachowego (ogólnie) i tak, napisanie wyczerpującego testu jednostkowego jest prawie niemożliwe.
Być może możesz odkryć alternatywne techniki testowania, takie jak testowanie właściwości (QuickCheck w Haskell, nie znam środowiska F #, ale na pewno istnieje coś takiego dla F #), które może automatycznie wygenerować dużą liczbę „pozycji” i przetestować je korzystając z właściwości określonych przez Ciebie.
Mam nadzieję, że to trochę pomoże :)!
źródło