Как вы гарантируете, что вы как программист написали качественный C-код? - PullRequest
8 голосов
/ 11 января 2009

Я хочу написать качественный C-код. Может кто-то указать мне на некоторые статьи, сайты ... Мне нужно что-то с примерами. Я уже видел и читал книгу K & R C.

Но времена изменились, кто-то должен сказать больше о качестве кода C. и еще одна важная вещь: как вы гарантируете, что вы, как программист, написали качественный код на C ??

Ответы [ 11 ]

11 голосов
/ 11 января 2009

Кто-то упомянул некоторые переключатели компилятора, но наличие синтаксически сглаженного кода не гарантирует качества конечного продукта, потому что качество программного обеспечения не ограничивается этим.

Существует несколько классификаций программных качеств, но вот список, который вы можете использовать в качестве контрольного списка:

  • Корректность (работает в соответствии со спецификацией?)
  • Надежность (может ли пользователь зависеть от этого?)
  • Надежность (работает в неожиданных ситуациях?)
  • Производительность (достаточно ли быстро он выполняет работу для пользователя?)
  • Удобство использования (это удобно для пользователя?)
  • Проверяемость (можно ли легко проверить его свойства?)
  • Ремонтопригодность (можно ли легко вносить изменения?)
    • Ремонтопригодность (можно ли устранить дефекты в разумные сроки?)
    • Расширяемость (можно просто добавить новую функциональность?)
  • Возможность повторного использования (можно ли легко использовать код в других проектах?)
  • Переносимость (может ли он легко работать в разных средах?)
  • Понятность (могут ли это легко понять сопровождающие?)
  • Функциональная совместимость (насколько хорошо он взаимодействует?)
  • Производительность (эффективная и эффективная поставка)
  • Своевременность (возможность доставки в срок)
  • Видимость (все ли шаги четко задокументированы?)
10 голосов
/ 11 января 2009

Включить предупреждения в вашем компиляторе. С gcc я использую эти флаги:

-std=c99 -pedantic -Wall -Wextra -Werror -Wmissing-prototypes
-Wmissing-declarations -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings
-Wredundant-decls -Wnested-externs -Winline -Wno-long-long -Wconversion
-Wstrict-prototypes

Если ваш код нельзя изменить, чтобы он не выдавал предупреждения, отбросьте -Werror или не используйте специальный флаг, выдающий предупреждение.

7 голосов
/ 11 января 2009

Традиционно люди использовали пух , чтобы помочь с этим.

4 голосов
/ 11 января 2009

Используйте инструмент статического анализа, традиционно называемый линтом, однако я использовал splint , что хорошо. См. Рекомендации в этом вопросе . Лично я бы рекомендовал включить предупреждения и исправить их.

С точки зрения правил

  • Не доверяйте входным данным - проверьте все, размер, тип, содержание.
  • Защита от переполнения буфера - strcat и многие другие не являются безопасными.
  • Используете юнит-тестирование, ddj article .
  • Получите ваш код, проверенный кем-то еще
  • Не делайте предположений.
  • Делайте функции короткими и тщательно проверяйте каждую.
  • Используйте значимые имена.
  • Написать читаемый код.
  • Не ленитесь - если вам нужно что-то изменить, чтобы сделать его более значимым, сделайте это раньше, а не позже.

Edit: Специфично для C, этот список C получен является необходимым чтением, и хотя он предназначен для C ++, стоит пройти через CERT C ++ Стандарт безопасного кодирования

4 голосов
/ 11 января 2009

Есть много аспектов для качества кода и тонны статей, книг, блогов

но я могу посоветовать вам это как начало:

Код завершен

Код безопасности

2 голосов
/ 11 января 2009

Предыдущее обсуждение, что такое хорошие ресурсы для обучения c-beyond-kr , может указывать на другие (книги) примеры.

1 голос
/ 11 января 2009

Написать юнит-тесты!

Может быть немного сложнее писать юнит-тесты на C по сравнению с более современными языками, но это все же очень стоит.

Я бы сказал, что правильные модульные тесты - это способ № 1 обеспечить качество любого кода. Вы можете использовать все инструменты статического анализа и проверки кода, которые вам нужны, но ничто не сравнится с фактическим выполнением кода и проверкой результатов.

1 голос
/ 11 января 2009

Частично это зависит от того, что вы подразумеваете под «качественным кодом C».

Одним из важных аспектов программы является «делает ли она то, для чего она предназначена»? Это трудно измерить, но важно.

Затем вам нужно узнать, приемлем ли код для компиляторов - использование набора параметров компилятора GCC , предоставленного Cristoph , будет указывать, что код находится в хорошем состоянии. (Несмотря на то, что я бы сказал: -Wno-long-long, это зависит от того, куда ваш код может быть перемещен).

Макет кода важен. Является ли код читаемым как людьми, так и компиляторами? Является ли макет равномерным? Является ли это в одном из стандартных форматов - есть несколько, все с основными указаниями, и если вы используете один из них последовательно, код должен быть в порядке. Это правильно прокомментировано? Это означает, что достаточно комментариев, но не слишком много! В файле должен быть заголовок комментария, указывающий, что в нем - и, возможно, кто его написал, и, возможно, лицензия, под которой он распространяется. На SO было несколько вопросов по этому поводу, включая Professional #include comments . За короткое время написание кода для хорошего стандарта компоновки становится рутиной.

Документация может иметь отношение к делу - как правило, имеет отношение к делу. Как кто-то другой узнает, что код существует, что он делает, как его использовать, когда его использовать, когда его не использовать?

Код должен быть написан с использованием достаточно хороших алгоритмов - он не должен использовать чрезмерные объемы памяти, диска или процессорного времени. Также не должно быть утечки ресурсов. Также нет смысла выжимать последний цикл повышения производительности процессора из процедуры, которая будет использоваться один раз за запуск программы, в течение нескольких миллисекунд, когда она запускается, если только вы не сможете продемонстрировать, что это узкое место производительности для Программа в целом.

Ваутер ван Нифтерик дал превосходный набор указателей тоже.

1 голос
/ 11 января 2009

Люди уже упоминали инструменты. Однако, помимо определенного момента, вы действительно можете сделать только одно, чтобы реально улучшить качество написанного вами кода:

Введите код.

1 голос
/ 11 января 2009

Сами по себе трудно понять, пишете ли вы качественный код или нет, конечно, есть тонны автоматизации и стандартов, но как можно применить все, что они там видели?

Здесь я большой поклонник рецензирования как метода оценки качества кода. Пусть другие увидят (и также узнают) из вашего кода, и это будет судьей качества.

...