Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#740 closed ожидается проверка (задача сдана)

HW #2 (X0)

Reported by: vorobeva.aleksandra Owned by: Артур Гулецкий (huletski)
Component: HW #2 (X0) Version: 3.0
Keywords: Cc:

Description

Не реализованы тесты для View. Не очень понятно, во-первых, как их писать (а вернее что подставлять в DO_CHECK в качестве expression) как следует доставать печать поля из потока? По той же причине не реализованы тесты для функции printBoardField(). а, во-вторых, для тестов View надо отдельный файл заводить или можно реализовать там же, где BoardTest??
Стиль ужасен:/ в функции winState() реализовано 4 похожих друг на друга цикла, но т к везде итерация проходит немного по-разному, я не знаю, как оттуда выцепить что-нибудь в отдельную функцию.

Change History (3)

comment:1 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления

Не реализованы тесты для View. Не очень понятно, во-первых, как их писать (а вернее что подставлять в DO_CHECK в качестве expression) как следует доставать печать поля из потока? По той же причине не реализованы тесты для функции printBoardField().

Тесты для view реализовывать не нужно.

а, во-вторых, для тестов View надо отдельный файл заводить или можно реализовать там же, где BoardTest???

Технически, если было бы нужно их писать, стоило другой файл завести.

Стиль ужасен:/ в функции winState() реализовано 4 похожих друг на друга цикла, но т к везде итерация проходит немного по-разному, я не знаю, как оттуда выцепить что-нибудь в отдельную функцию.

Можно вынести проход по направлению, где направление задается аргументами (dx и dy).
FYI: можно написать функцию, которая определяет победил ли какой-то из игроков после очередного хода, учитывая информацию о последнем сделанном ходе. Эта функция будет работать быстрее и, вероятно, проще реализована.

Корректность

Особенно фатальные замечания

  • баги в функции определения победителя. Например, партия ниже должна быть незаконченной:
    O.OX.OX...
    XX...XXOOO
    .OXOXO..O.
    X.OO.XO..X
    X.OX.XXXO.
    OXX...XOOX
    .O.OXOX...
    OO..OX.X..
    ....OX.O.X
    X.O..XXOO.
    X wins!
    

Кроме того, как минимум, не всегда работает обнаружение диагоналей.

  • обработка неверных кодов не работает (например: единственное число в качестве кода должно считаться неверным кодом; если ввести "0a0" решение зависнет).

Стиль

Board.h

11: пробелы лишние в конце строке, неаккуратно;
20: vector используется, а заголовок в файле не подключен.

Board.cpp

6: списки инициализации; 10 нужно вынести в константы; начиная с C++11, который указан при компиляции, пробел между соседними закрывающимися угловыми скобками можно не ставить;
11: знание о том, что -1 -1 означает конец игры специфично для контроллера -- неясно почему это в модели;
20: рисовать доску должен контроллер;
21: по массиву/вектору ходите, используя переменную типа size_t;
32: а как проверяются неглавные диагонали?

StdioBoardView?.h

3: а тут включение вектора лишнее;

StdioBoardView?.cpp

1, 2: ни vector, ни iostreamы не используются;
7: используйте тернарный оператор, чтобы сделать код более лаконичным return cur_ player == 'O' ? 'X' : 'O';
23: сложно придумать более общее имя для параметра типа bool;
27, 37: дублирование условия; наталкивает на мысль о рефакторинге цикла;

main.cpp

11: избавьтесь от if'а избыточного;

BoardTest?.h

  • имена test case'ов: по названию test case'ов сложно представить какой именно случай тестируется (чем, например, testCanMove1 отличается от testCanMove3?)

Test.cpp

9: инкремент totalNum можно вынести в начало функции, чтобы избежать дублирования выражения;
19: избавьтесь от избыточного if'a.


Баллы

Корректность: 6, нужно доделать хотя бы определение победителя;
Стиль: 4.5, так как код будет дописываться.

Last edited 4 years ago by Артур Гулецкий (huletski) (previous) (diff)

comment:2 Changed 4 years ago by vorobeva.aleksandra

Type: ожидаются исправленияожидается проверка
Version: 2.03.0

К сожалению проверку на плохие ходы не доделала:(
Функция определения победителя теперь должна работать правильно.
Тесты переделаны.

comment:3 Changed 4 years ago by Артур Гулецкий (huletski)

Resolution: задача сдана
Status: assignedclosed

Корректность

  • отсутствует обработки некорректных ходов;
  • silent режим не работает (баг в main.cpp:11 - результат strcmp нужно сравнить с нулем);
  • баги в определении ничьей, например:
    OXOXOOXOXX
    XXXXOXXOOO
    OOXOXOOXOX
    XOOOOXOOXX
    XXOXOXXXOX
    OXXXXOXOOX
    OOXOXOXOXO
    OOXXOXOXXO
    XOOOOXOOOX
    XXOXXXXOOO
    X wins!
    

Стиль

Board.h

  • const у методов не проставлены;

Board.cpp

6: константы в данном случае лучше сделать static constexpr полями класса;
15: избыточный if;
33: дублирование похожих циклов в функции;

main.cpp

11: такой код был бы более читабельным:

bool is_silent = arg > 1 && ...;
view.runGame(is_silent);

Баллы

Корректность: 16;
Стиль: 6.75

Last edited 4 years ago by Артур Гулецкий (huletski) (previous) (diff)
Note: See TracTickets for help on using tickets.