Opened 5 years ago

Closed 5 years ago

#122 closed ожидаются исправления (задача сдана)

WW_strings

Reported by: tarasov.denis Owned by: Sokolov Viacheslav
Component: WW_strings Version: 3.0
Keywords: Cc:

Description


Change History (8)

comment:1 Changed 5 years ago by Sokolov Viacheslav

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

Makefile: obj должна выступать как order-only зависимость, чтобы повторный запуск make ничего не делал. Цели, не соответствующие файлам на диске, следует пометить как .PHONY:.
Стандарт языка Си - 11. Стоит разделить компиляцию test.c -> test.o и компоновку lab2. Цель clean не должна зависеть от цели obj: clean по смыслу только удаляет.

codestyle: не стоит смешивать пробелы и табуляции, это приводит к тому, что форматирование может выглядеть непредсказуемо плохо в зависимости от способа просмотра.
Пробельные символы перед переводом строки лучше удалять.

Реализацию my_strcmp можно укоротить.

Нет проверки предусловий, желательно добавить assert-ы на соблюдение контрактов функций.

Рекомендую запустить программу с -fsanitize=address.

Желательно не экономить на названиях. s, s1, s2 - это ОК в контексте абстрактных имен для однотипных функций по работе над строками. p - непонятно, что значит.

comment:2 Changed 5 years ago by tarasov.denis

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

comment:3 Changed 5 years ago by Sokolov Viacheslav

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

Сейчас все цели не соответствуют файлам на диске, в результате чего повторный запуск make приводит к полной пересборке проекта.

Тесты должны проверять не реализацию, а соответствие заданным требованиям.
assert(strcmp(str, str2) == my_strcmp(str, str2)); некорректен, потому что стандарт не гарантирует, что именно должна возвращать функция. Кроме того, стоит проверять возвращаемое значение.

Компилирую с -fsanitize=address, получаю lab2: src/test_str.c:13: test_cmp: Assertion `strcmp(str, str2) == my_strcmp(str, str2)' failed.

Стоит поработать над именованием в тестах, наверняка его можно улучшить.

Субъективно: код, например, test_cat тяжело воспринимать - очень большая плотность непробельных символов на пиксель.

comment:4 Changed 5 years ago by tarasov.denis

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

comment:5 Changed 5 years ago by Sokolov Viacheslav

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

Проект не собирается

In file included from src/str.c:1:0:
src/str.c: In function ‘my_strcpy’:
src/str.c:20:3: error: called object is not a function or function pointer
   assert(s1 != NULL)

comment:6 Changed 5 years ago by tarasov.denis

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

comment:7 Changed 5 years ago by Sokolov Viacheslav

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

Повторный запуск make все еще делает что-то нетривиальное.

Какая мотивация писать так strcpy(str, ""), strcpy(str2, ""), strcpy(str_app, "");, а не так strcpy(str, ""); strcpy(str2, ""); strcpy(str_app, ""); или так

strcpy(str, "");
strcpy(str2, "");
strcpy(str_app, "");

?

Сейчас тест test_cmp не проверяет, что функция my_strcmp следует Стандарту.

Также, например, my_strcpy может работать не в соответствии со Стандартом, потому что Стандарт накладывает дополнительные требования на возвращаемое значение. (дополнительные в смысле совсем не покрытые тестами).

comment:8 Changed 5 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed
Note: See TracTickets for help on using tickets.