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
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 5 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 5 years ago by
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
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 2.0 → 3.0 |
comment:5 Changed 5 years ago by
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
Type: | ожидаются исправления → ожидается проверка |
---|
comment:7 Changed 5 years ago by
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
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
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 - непонятно, что значит.