Немного другой подход:
bool A() {...}
bool B() {...}
bool C() {...}
int main(void)
{
/**
* Declare an array of pointers to functions returning bool
* and initialize with A, B, and C
*/
bool (*farr[])() = {A, B, C};
...
/**
* Call A, B, or C based on the value of i
* (assumes i is in range of array)
*/
if (farr[i]()) // or (*farr[i])()
{
...
}
...
}
Запуск исполняемых файлов на http://virustotal.com для проверки на вирусы всех основных антивирусных механизмов.
Не то чтобы мы думали, что наши бывшие содержат вирусы, но иногда вы получаете ложное срабатывание и не хотите, чтобы его обнаружил покупатель. 8 -)
Запуск модульных тестов и инструментов анализа кода, таких как NDepend, Gandarme. Результаты опубликованы CC.Net
Сбросить тестовую базу данных на этапе пост-сборки:
Используйте эти файлы, чтобы
После этого у нас есть чистый тестовый баз данных, с правильной схемой, все фиксированные данные из центральной базы данных, а затем некоторые дополнительные тестовые данные.
Было бы лучше, если бы схема и фиксированные данные также были бы в сопоставимых данных и файлах sql, но это WIP. Центральной базы данных еще нет, но она должна быть в системе управления версиями.
Для Java вы также можете использовать Ivy для автоматического получения любых недостающих библиотек. Например, если вы используете Hibernate, вы можете захотеть или не захотеть включать эти библиотеки в свой выпуск.
У нас есть аккаунт в Твиттере, поэтому мы можем проверить его статус в любое время из любого места
У нас был сценарий сборки, который автоматически пометил сборку и SVN и развернул приложение на сервере приложений WebSphere.
У нас есть простая кнопка Staples, которую мы подключили, чтобы запускать сборку при нажатии.
Создайте отчет для любых TODO / FIXME и т. Д., Которые могут быть разбросаны по коду.
Развертывание веб-сайтов непосредственно на тестовых серверах развертывания.
Автоматическое продвижение рабочего процесса.
Мы написали специальный плагин для нашего сервера Bamboo CI, который собирает все проблемы JIRA, связанные со сборкой (определяемые из комментариев svn commit), и проверяет их статус в JIRA.
После успешной сборки (и развертывания приложения на работающем сервере) любая проблема на этапе рабочего процесса «, ожидает сборки » автоматически переносится на « build и доступен для этапа тестирования ", который инициирует отправку электронного письма тестеру, назначенному для решения проблемы.
Это означает, что наши тестировщики получают электронные письма с уведомлением о проблеме не тогда, когда разработчик проверяет код, а когда исправление работает в реальном времени на сервере, и тестировщик действительно может что-то с этим сделать.
Вот некоторые вещи, которые я сделал, делаю или планирую сделать:
Заменяет номер версии на заставке SVG, а затем отображает его в Inkscape .
В различных проектах, в которых я участвовал, были большие публичные показы того, кто последний раз отмечался, а кто нарушил сборку. Мы сделали это с помощью Build-o-matic , и я написал Team Piazza , чтобы отображать ту же информацию для сборок Team City .
У нас есть веб-приложение, мы провели тестирование производительности и добавим проверку HTML / CSS в тестовые сценарии.
Управляемый код:
Собственный код:
Мы применяем цифровую подпись ко всем создаваемым двоичным файлам. Сценарий сборки делает это автоматически.
For Java development we use:
Hudson also
Как насчет встраивания отметки времени сборки в каждый построенный образ?
<ItemGroup>
<StampFile Include="BuildTimestamp.cs"/>
</ItemGroup>
<Target Name="BuildTimestamp"
Outputs="@(StampFile)">
<Message Text="Building Timestamp..." />
<Touch
AlwaysCreate = "true"
Files="@(StampFile)" />
<WriteLinesToFile
File="@(StampFile)"
Lines='public static class Build { public static string Timestamp = "%(StampFile.CreatedTime)" %3B }'
Overwrite="true"/>
</Target>
Вы можете расширить это, включив в него имя машины, фазу луны и т. Д.
Мы используем 'checkstyle' ( http://checkstyle.sourceforge.net/anttask.html ), чтобы создать отчет для кода, который может быть вновь зарегистрирован и не проверяется (формально) перед сборкой разработчика. Кроме того, я написал несколько пользовательских задач, которые выполняют следующие действия:
Есть еще несколько задач, которые есть, но они специфические во внутреннюю среду связанные настройки.
Несколько вещей, которые мы сделали:
Мы проводим анализ двоичной совместимости (с использованием отражения) с нашим последним общедоступным выпуском, чтобы убедиться, что мы случайно не внесем критические изменения двоичного кода. Каждый раз, когда мы вынуждены вносить критические изменения, мы добавляем конкретный api в список «принятых критических изменений», чтобы в следующей сборке можно было пропустить его тестирование. Когда пришло время выпуска, у нас будет полный список API, которые ломаются в новом выпуске.
У нас есть Nabaztag / tag , показывающий, возникают ли какие-либо ошибки на сервере сборки.
Вот некоторые вещи, которые я обычно использую в Continuous Integration :
Я действительно удивлен, что никто не упомянул об обновлении файлов конфигурации! Мы обновляем наши файлы конфигурации b в зависимости от среды, которую мы создаем для использования сценария сборки. Это экономит как минимум 20 минут, которые потребуются для замены всех connectionStrings и appSettings. Мы также делаем следующее:
Обновление номера версии
Перейти на тестовые серверы
Выполнить анализ кода
Отправить статус сборки по электронной почте
Запустите несколько скриптов базы данных
Извлечь случайное изображение с сайта failblog.com, чтобы прикрепить его к электронному письму о сбое сборки.
Я не читал здесь более половины ответов, но надеюсь, что некоторые из них «новые»:
Мы много делаем: с MSBUILD
Помимо управления версиями, подписи, тестирования и т. Д., Уже упомянутых здесь несколько раз, мы также: