Это связано с добавлением дополнений, чтобы удовлетворить ограничениям выравнивания. Уравнение структуры данных влияет как на производительность, так и на правильность программ:
SIGBUS
). Вот пример использования типичных настроек для процессора x86 (все используемые 32 и 64-битные режимы):
struct X
{
short s; /* 2 bytes */
/* 2 padding bytes */
int i; /* 4 bytes */
char c; /* 1 byte */
/* 3 padding bytes */
};
struct Y
{
int i; /* 4 bytes */
char c; /* 1 byte */
/* 1 padding byte */
short s; /* 2 bytes */
};
struct Z
{
int i; /* 4 bytes */
short s; /* 2 bytes */
char c; /* 1 byte */
/* 1 padding byte */
};
const int sizeX = sizeof(struct X); /* = 12 */
const int sizeY = sizeof(struct Y); /* = 8 */
const int sizeZ = sizeof(struct Z); /* = 8 */
Можно минимизировать размер структур путем сортировки (например, структура Z
в приведенном выше примере).
ВАЖНОЕ ЗАМЕЧАНИЕ: В стандартах C и C ++ указано, что выравнивание структуры определяется реализацией , Поэтому каждый компилятор может выбрать выравнивание данных по-разному, что приводит к разным и несовместимым макетам данных. По этой причине при работе с библиотеками, которые будут использоваться разными компиляторами, важно понять, как компиляторы выравнивают данные. Некоторые компиляторы имеют параметры командной строки и / или специальные #pragma
операторы для изменения настроек выравнивания структуры.
Я использую Знатока с плагинами Surefire и Cobertura для всех моих сборок. Фактические тестовые сценарии создаются с JUnit, DbUnit и EasyMock.
Идентификация Модульных тестов, я пытаюсь следовать за Разработкой через тестирование, но быть честным я обычно просто делаю это для небольшого количества тестовых сценариев и затем возвратиться и создать тесты для края и случаев исключения позже.
Идентификация Данных тестирования DbUnit является большой для загрузки данных тестирования для Ваших модульных тестов.
При записи Тестов я использую JUnit для создания тестовых сценариев. Я пытаюсь записать сам документирующий тестовые сценарии, но буду использовать Javadocs для комментария чего-то, что не очевидно.
При отслеживании и Предоставлении доступа к Результатам Доступными я интегрирую поблочное тестирование в свой цикл сборки Знатока с помощью Безошибочного плагина, и я использую плагин Corbertura для измерения покрытия, достигнутого теми тестами. Я всегда генерирую и публикую веб-сайт включая отчеты Surefire и Cobertura как часть моей ежедневной сборки, таким образом, я вижу то, что привели к сбою/передали тесты.
Очень убедительный путь состоит в том, чтобы сделать формализованный модульный тест самостоятельно, независимо от того, что делает Ваша команда/компания. Это могло бы приложить некоторые дополнительные усилия на Вашей стороне, особенно если Вы не испытаны с этим видом практики.
Когда можно затем показать, что код лучше, и Вы более продуктивны, чем Ваши поддерживающие разработчики, они собираются хотеть знать почему. Затем подайте их Ваши любимые методы поблочного тестирования.
После того как Вы убедили своих поддерживающих разработчиков, убедите управление вместе.
Событие, которое убедило меня, было, когда нам удалось регрессировать ошибка три раза в трех последовательных выпусках. После того как я понял, сколько еще продуктивный я был как программист, когда я постоянно не фиксировал тривиальные ошибки после того, как они перешли к клиенту, и у меня могло быть теплое нечеткое чувство, что коллеги кодируют, сделал бы то, что они утверждали, что это будет, я стал преобразованием.
Назад в день я сделал разработку Кобола на Мейнфреймах, мы сделали это неукоснительно в этих нескольких компаниях, в которых я работал, и она была принята как способ, которым Вы сделали вещи, потому что среда осуществила ее. Я думаю, что это была очень типичная схема в течение эры, и возможно некоторые причины могли бы быть применимы к Вам:-
Как большинство сред мейнфреймов у нас было три области, разработка, Гарантия качества и Производство. Программисты разработали в разработке и единице, протестированной там, и после того как они закончили и были рады, что единица была перемещена в среду QA (с тестом и документами результатов), где это была система, протестированная специализированным штатом QA. Разработка к миграции QA была формальным шагом, который произошел в течение ночи. Однажды QA'ed код был перемещен в Производство - и у нас было очень немного ошибок.
Мотивация, чтобы сделать поблочное тестирование и право была то, что, если Вы не сделали и ошибка была найдена штатом QA, было очевидно, что Вы не сделали работы. Следовательно, Ваша репутация зависела от того, насколько строгий Вы были. Конечно, большинство людей закончило бы со случайной ошибкой, но кодеры, которые произвели протестированное тело, кодируют, все время скоро получил звездообразную репутацию и тех, кто произвел содержащий ошибки код, был замечен также. Нажатие всегда было бы к Вашей игре, и следовательно произведенная культура была той, которая продвинула к ошибке, которую бесплатный код обеспечил в первый раз.
Извлечение подходящих точек -
Я уверен, что Ваша среда будет отличаться, но принципалы могли бы быть переводимы.
Иногда примером лучший способ. Я также нахожу, что напоминание людям, что определенные вещи просто не происходят, когда вещи находятся под тестом. В следующий раз кто-то просит, чтобы Вы записали что-то, сделали это с тестами независимо. В конечном счете Ваши коллеги будут ревновать к простоте, которой можно изменить код и знать, что это все еще работает.
Что касается управления необходимо подчеркнуть, сколько времени потрачено впустую из-за ядерного взрыва, который происходит, когда необходимо внести изменение в кодовую базу X, который не находится под тестом.
Многие разработчики не понимают, сколько они осуществляют рефакторинг, не удостоверяясь, что они сохраняют поведение через всю систему. Для меня это - самое большое преимущество для поблочного тестирования и TDD, по-моему.
Единственная уверенность является изменением. Изменение кода, который не находится под тестом, требует, чтобы разработчик знал о каждом поведенческом возможном побочном эффекте. Действительность - то, что кодеры, которые думают, что могут читать в каждую перестановку, делает так процессом провешивания боли метода проб и ошибок, пока ничто не повреждается, очевидно. В этой точке они регистрируются.
Прагматически настроенный программист распознает, что он не прекрасен и все знание, и что тесты похожи на систему поддержки, которая позволяет им обходить натянутый канат рефакторинга быстро и безопасно.
Что касается того, когда к тесту записи на коде greenfield, я должен был бы защитить как можно больше. Проведите время, определяя поведения, что Вы хотите из своего тестирования системы и тестов записи первоначально выразить те высокоуровневые конструкции. Модульные тесты могут прибыть, поскольку мысли кристаллизуют.
Надеюсь, это поможет.
Образование и/или сертификация.
Дайте Вашим членам команды формальное обучение в области тестирования - возможно, с экзаменом сертификации (в зависимости от Ваших членов команды и Вашего собственного отношения к сертификации). Вы возьмете тестирование к более высокому уровню тот путь, и Ваши члены команды, более вероятно, возьмут профессиональное отношение к тестированию.
Существует большая разница между убеждением и требованием.
Если Вы находите способ убедить Ваших коллег писать им - большой. Однако, если Вы создадите некоторые формализованные правила и потребуете, чтобы они записали модульные тесты, то они найдут способ преодолеть это. В результате Вы получите набор модульных тестов, которые ничего не стоят: будет модульный тест на каждый доступный класс, и они протестируют методы set и методы считывания.
Думайте дважды прежде, чем создать и осуществить правила. Разработчики способны преодолевать их.
В моей команде программного обеспечения мы склонны писать случай малого бизнеса по этим проблемам и представлять их управлению для имения времени в наличии, чтобы создать и отследить тесты. Мы объясняем, что время, потраченное для тестирования, хорошо восполнено, когда решающее время настает, и все находится на строке. Мы также настраиваем Гудзонский сервер сборки для централизации отслеживания модульных тестов. Это делает намного легче для разработчиков отслеживать проваливание тестов и обнаружить повторяющиеся проблемы.
Как руководитель группы, это - моя обязанность гарантировать, что мои программисты делают поблочное тестирование на всех модулях, они продолжают работать. Я предполагаю в этой точке, это даже не вопрос того, как убедить их, это требуется. Не иногда, не на великоватых проектах, все время. Поблочное тестирование является первым оборонительным рубежом против помещения чего-то в производстве, которое необходимо будет поддержать. Если что-то будет введено в эксплуатацию, который не был полностью единицей и протестированной системой, то она возвратится, чтобы укусить Вас. Я предполагаю одну из политик, которые мы должны здесь поддерживать, это - то, что, если дует ветер в производстве, или вызывает проблемы, затем программист, ответственный за кодирование и тестирование того модуля, будет тем, который должен заботиться о проблемах, сделать очистку и т.д. Тот один довольно хороший фактор мотивации.
Другой то, что это о гордости. Я работаю в магазине приблизительно 75 кодеров, хотя это является большим по некоторым стандартам, это является достаточно действительно маленьким для всех нас для знания друг друга. Его также достаточно маленький, что мы знаем то, что друг друга продолжает работать, и когда это действительно перемещается в производство, мы знаем о любых аварийных завершениях, отказах, и т.д. Если Вы осторожны, сделайте поблочное тестирование и тестирование системы, возможности перемещения, что-то к производству, не вызывая отказы значительно увеличивается. Это может занять время или два из перемещения чего-то к производству и не удающийся понять это, но существуют большие вознаграждения, вовлеченные в то, чтобы не портить. Действительно хорошо услышать поздравления в прихожей, когда Вы перемещаете проект в, и это не завинчивает.
Напомните своей команде или другим разработчикам, что они - профессионалы, не любители. Работавший для меня!
Кроме того, это - промышленный стандарт в эти дни. Без опыта поблочного тестирования они менее желательны и менее ценны как сотрудники потенциальным будущим работодателям.
Первый раз вокруг Вас просто должен идти вперед и записать им и показать людям, что это стоит того. Я нашел на трех проектах, что это - единственный способ убедить людей. Некоторые люди, которые не кодируют (например, младшие менеджеры по проектам) не смогут видеть значение, пока оно не будет смотреть их прямо в поверхности.
Запишите набор их и продемонстрируйте, что поблочное тестирование улучшило Вашу производительность и качество Вашего кода. Без некоторого доказательства иногда люди не будут полагать, что это стоит того.