Какой метод программирования помогает вам больше всего избегать или устранять ошибки до их появления - PullRequest
12 голосов
/ 24 августа 2009

Я не имею в виду внешние инструменты. Я думаю об архитектурных моделях, языковых конструкциях, привычках. Меня больше всего интересует C ++

Ответы [ 28 ]

1 голос
/ 24 августа 2009

В дополнение к уже упомянутым вещам, я считаю, что некоторые функции, представленные в C ++ 0x, помогут избежать определенных ошибок. Вспоминаются такие функции, как строго типизированные перечисления, циклы for-in и удаление стандартных функций объектов.

В общем, строгая типизация - это то, что нужно.

1 голос
/ 24 августа 2009

Наймите кого-нибудь, кто тестирует / проверяет ваше программное обеспечение.

У нас есть парень, который использует наше программное обеспечение раньше любого из наших клиентов. Он находит ошибки, которые не обнаруживаются нашими процессами автоматизированного тестирования, потому что он считает себя клиентом, а не разработчиком программного обеспечения. Этот парень также оказывает поддержку нашим клиентам, потому что он очень хорошо знает программное обеспечение с точки зрения клиента. НЕОЦЕНИМО .

1 голос
/ 24 августа 2009

Модульное тестирование с последующей непрерывной интеграцией.

1 голос
/ 24 августа 2009

Используя IDE, например IntelliJ, который проверяет мой код при его написании и помечает хитрый код при его написании.

0 голосов
/ 15 февраля 2010

Создание строкового представления состояния класса и его вывод на консоль. Обратите внимание, что в некоторых случаях одной строковой строки будет недостаточно, вам придется кодировать небольшой цикл печати, который будет создавать многострочное представление состояния класса. Как только вы «визуализировали» свою программу таким образом, вы можете начать поиск ошибок в ней. Когда вы знаете, какая переменная содержит неправильное значение в конце, легко разместить утверждения везде, где эта переменная назначена или изменена. Таким образом, вы можете точно указать точное место ошибки и исправить ее, не используя пошаговую отладку (что является довольно медленным способом поиска ошибок imo).

Буквально вчера обнаружил действительно неприятную ошибку, не отлаживая ни одной строки:

vector<string> vec;
vec.push_back("test1");
vec.push_back(vec[0]); // second element is not "test1" after this, it's empty string

Я просто продолжал размещать операторы assert и перезапускать программу, пока многострочное представление состояния программы не было правильным.

0 голосов
/ 24 августа 2009

все виды «следов».

0 голосов
/ 25 августа 2009

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

0 голосов
/ 25 августа 2009

Что-то еще не упомянутое - когда происходит даже полусложная логика, назовите свои переменные и функции как можно точнее (но не слишком долго). Это сделает несоответствия в их взаимодействии друг с другом, и с тем, что они должны делать лучше выделяться. «Значение», или часть вашего мозга, анализирующая язык, будет иметь больше возможностей для понимания. Я обнаружил, что со смутно названными вещами ваш мозг как бы затуманивает то, что на самом деле там, и видит то, что / должно / происходит, а не то, что на самом деле происходит.

Кроме того, сделайте код чистым, это поможет предотвратить размывание вашего мозга.

...