Насколько я знаю, нет способа получить размер существующего сопоставления файлов или отображения сопоставления файлов. Вы должны отслеживать эту информацию самостоятельно.
MSDN заявляет, что VirtualQueryEx способен делать такую вещь.
blockquote>Нет, все VirtualQueryEx может определить число страниц, зарезервированных для представления. Это означает, что результат всегда округляется до размера страницы. Кроме того, нет явной гарантии, что MapViewOfFile зарезервирует только минимальное количество страниц, необходимых для сопоставления файла. Например, он может выбрать округление до гранулярности распределения.
По моему опыту, существует несколько факторов, вовлеченных в это:
Естественно, существуют другие факторы, но это, с чем я столкнулся до сих пор.
Я думаю, что часть проблемы - то, что разработчики ожидают, что деловые люди, чтобы иметь то же множество значений и действительно заботиться об ответе на "должны мы модульный тест или нет?". Мы не заставляем одобрение заранее бизнеса использовать высокоуровневый язык, а не ассемблер - это - просто обычно разумный способ сделать работу.
точка, мы являемся единственными, квалифицированными для совершения вызова (который не должен говорить, что у всех нас есть то же знание о теме). Кроме того, даже если Ваша команда, в рамках проводимой политики, не делает поблочного тестирования (или name-your-method-of-the-day), это обычно не означает, что Вы не можете сделать этого.
истина, мы не можем действительно доказать ROI на большей части материала, который мы делаем при слишком прекрасной из гранулярности. То, почему поблочное тестирование сохранено до этого unreasonable/non-typical стандарта доказательства, вне меня...
Люди ленивы и только принимают изменение при принуждении к.
Мои 2 цента:
Так, это - просто вопрос времени.
существуют дебаты Martin-Coplien, в которых Bob Martin утверждает что:
"в наше время безответственно для разработчика поставить строку кода, которую он не выполнил в модульном тесте".
Если Вы хотите продать всех на тестировании, делают следующее:
Даже менеджер мог понять это.
Как самые хорошие идеи, принятие больше имеет отношение к организационной зависимости от предшествующего пути развития, чем с качеством идеи.
В большинстве компаний, которые поставили продукты, существенное подразделение QA было создано с головой QA высшего уровня. Тестирование является феодальным владением команды QA.
команда QA вряд ли напишет код модульного теста, потому что компания обычно не укомплектовывает QA, подходят к его брутальным кодерам.
команда программистов отказывается к коду теста записи, потому что она создает конфликт с командой QA.
я видел больше интереса и принятия Поблочного тестирования в группах, где QA не был отделен в отдельную функцию задания
Простой это стоило денег, чтобы записать и обновить модульные тесты. Большинство компаний предыдущее программное обеспечение не имеет модульных тестов и будет стоить слишком много для записи. Таким образом, они не делают этого, и это добавляет время к процессу разработки, таким образом, они также не добавляют его к новым возможностям.
Большинство компаний бесполезно. Не тот, что Вы (или I) работаете на, очевидно.
Конечно, в идеальном мире, Вы не можете привести доводы против наличия модульного теста.
Однако, пишете ли Вы, модульный тест зависит в ряде вещей:
, Как программное обеспечение будет использоваться. Если бы Вы писали программное обеспечение для просто себя, то Вы записали бы модульные тесты?Наверное, нет. Если Вы писали предварительное серийное программное обеспечение, которое будет продано коммерчески, вероятно, да.
, Сколько людей поддерживает код...., если это - просто Вы, затем можно знать, что это достаточно хорошо достаточно уверено после внесения изменения, которое быстрое пробегает кода, достаточно гарантировать, что ничто не повредилось. Если другие люди, которые первоначально не написали код, должны теперь поддержать его затем, модульный тест поможет вселить им веру что, когда они обновляют код для фиксации большого (который не был, очевидно, получен в модульном тесте!) они ничего не повредили.
сложность кода: только тестовый код, для которого нужен тест. Для одного метода присвоения переменной строки не нужно тестирование. 50 методов строки с разнообразными путями выполнения, вероятно, делают.
Практические коммерческие коммерческие соображения: факт пишет, что модульные тесты занимают больше времени, чем не выполнение так. Если Вы пишете опытное программное обеспечение, которое имеет неопределенное коммерческое будущее, то существует плата прочь, чтобы быть, имеет между наличием кода быстро, теперь, который работает достаточно хорошо по сравнению с тестированием единицы, кодируют за 2 недели, который работает лучше. Иногда это платит для обнаружения быстро (потребительский аппетит), если программное обеспечение будет иметь короткую полку как и идти дальше к следующему проекту.
и поскольку другие указали, тест только так же хорош как человек, который записал это.
я пропускаю поблочное тестирование - оно просто делает жизнь легче.
, Который является не , действительно, достаточная причина компании для принятия поблочного тестирования.
достаточная причина А могла бы быть "более дешевой" (и/или, "лучше"): который не столь легко доказать о поблочном тестировании.
единственное серьезное основание могло бы "писать, что модульные тесты являются лучшим использованием времени разработчиков", которое действительно трудно доказать IMO: и это может быть верно в некоторых местах, для некоторого программного обеспечения, с некоторыми разработчиками, и не верно в другом месте.
существует много разработчиков, которые не думают мир модульных тестов: включая некоторых то, кто думает, что другие формы тестирования (например, автоматизированная интеграция/функциональные испытания) могут быть более дешевыми и более ценными, например , Является мной единственный dev, кому не нравятся модульные тесты?
По моему опыту, это действительно зависит от программного обеспечения, которое Вы пишете. Я нашел, что чрезвычайно трудно записать модульные тесты на UI. Я только использую модульные тесты на части системы, которые имеют определенное в/.
1) Это твердо
2), Это занимает время
3), очень трудно решить, что значение тестового кода
Точка 3 является липким. Хорошие модульные тесты уменьшают ошибки. Но хороший производственный код - также. Как Вы определяете, сколько ошибок не существует из-за Ваших модульных тестов? Вы не можете измерить то, что не существует. Можно указать на исследования, но они не соответствуют приятно на электронной таблице управляющего делами.
Легко поместить всю вину на “ управление ” Но управление действительно сообщение, Вы к конкретно не делаете какое-либо поблочное тестирование?
управление в целом не делает (и вероятно не должен) говорить Вам, как сделать Ваше задание, является ли это модуляризацией, абстрактными типами данных, шаблонами разработки или поблочным тестированием. Это инструменты торговли, которую применяет успешный, компетентный разработчик программного обеспечения, но бедный инженер не делает.
я думаю, что реальный ответ на Ваш вопрос: поблочное тестирование является действительно трудным, и студенты информатики не обучены ему.
легко, когда Вы пишете свой собственный строковый класс. При тестировании реального продукта Вы сталкиваетесь с проблемами, о которых никто не сказал Вам в слайдах powerpoint:
одна вещь, в которой мы можем обвинить управление, состоит в том, что спецификации требований редко содержат любые требования к уровню качества поставляемого компонента.
В следующий раз Ваш босс просит, чтобы Вы сделали временную оценку, включали время для записи модульного теста и видели то, что происходит.
Большинство тестов ничего не тестирует.
Вы пишете fileopen () функция и unittest, который перестал работать, если файл не существует и успешно выполняется, если файл действительно существует.Отлично! Теперь Вы проверяли, работает ли это с именем файла в китайцах BIG5? на доле NFS? на перспективе с файлом на флеш-карте и включенном контроле учётных записей?
проблема состоит в том, что модульные тесты записаны тем же программистом, который записал функцию к тому же ряду допущений и с тем же уровнем навыка. Для реальной работы тесты должны быть записаны кем-то еще, только к опубликованным спецификациям без них видящий код. - В большинстве компаний, просто получив записанные спецификации был бы прорыв!
Модульные тесты проверяют ошибки в коде отдельных функций. Они могут работать на уровни доступа к данным, библиотеки математики и т.д., где исходные данные/выводы известны, и внутренняя структура сложна, но для большого количества случаев они - просто пустая трата времени.
Они перестали работать, когда ошибки происходят из-за взаимодействий между различными частями кода или с ОС и пользователем. Проблемы как высокие/низкие настройки DPI, портящие диалоговое окно или установку иностранного языка, подкачивающую a'.' и'', обычно не находятся.
Были исследования, сделанные на ROI модульных тестов - см. этот вопрос .
Я нашел много разработчиков, которые не интересуются поблочным тестированием. На большую работу с небольшой выплатой всегда походит, когда Вы запускаете. Никто не хочет зарегистрироваться в дополнительной работе и таким образом, они сопротивляются. После того как люди запускают, они обычно с энтузиазмом придерживаются его, но получение их запустилось, может быть твердым.
Кроме проблемы принятия поблочного тестирования, поблочное тестирование не всегда стоит, хотя в целом я думаю, что это при надлежащем применении. Нет ничего специального о модульных тестах, которое сохраняет их от того, чтобы быть уязвимым для некачественного строительства.
Модульные тесты имеют затраты (создание, обслуживание, и работающий) и только стоят, если они предоставляют большие преимущества, чем те затраты. Тестовое создание является навыком как любой другой, оно требует определенного опыта и знаний для успеха. Без достаточного опыта даже для в других отношениях опытных разработчиков очень легко создать низкое качество, низкую стоимость и/или дорогостоящие модульные тесты, которые не стоят. Особенно так данный, насколько трудный это может быть должно определить ценность модульного теста.
Кроме того, поблочное тестирование является всего одним способом улучшить качество кода, но это не единственный путь. При некоторых обстоятельствах и с некоторыми командами это не может быть самый эффективный способ увеличить качество программного обеспечения.
Имеют в виду, что прикладывание много сил для поблочного тестирования не является никакой гарантией качественного программного обеспечения. И также возможно произвести программное обеспечение высшего качества без любого поблочного тестирования вообще.
Ну, моя компания не пошла с TDD или Поблочным тестированием. Честно говоря, мы не уверены, как сделать это. Мы можем, очевидно, сделать это для глупых функций как CapitalizeString (), и т.д., но мы не знаем, как сделать это для очень сложных систем со сложными объектами. Кроме того, у большинства людей, у которых взяли интервью, есть или нулевой опыт или ограниченный опыт. Кажется, что Поблочное тестирование является большим от ТАК толпа, но не особенно большим в доступном workpool.
TDD является отдельной темой. Мы нравственно настроены против TDD. Мы не кодеры ковбоя, но мы действительно полагаем, что это останавливает рост креативности и гибкости в проекте. Кроме того, имея кодер, который записал, функция поблочного тестирования не имеет никакого смысла. Когда я делаю что-то, я кодирую ко всем пограничным случаям, о которых я могу думать. То, в чем я нуждаюсь, является другим мозгом для поиска вещей, которые я, возможно, пропустил. У нас нет этого. Команды являются малочисленными и автономными.
Короче говоря, мы не верим в TDD, но мы хотели бы к Модульному тесту. У нас просто нет опыта сделать так, и мы не можем найти его легко.
Существует много компаний там, которые действительно ничего не делают вроде лучших практик. Никакие обзоры кода, никакое поблочное тестирование, никакие планы тестирования, нет ничто, только местом их штанов.
Берут это в качестве возможности заставить их использовать Непрерывную платформу Интеграции и разрабатывать модульные тесты! Простой способ произвести на власть имущих впечатление и увеличить качество и устойчивость Вашего кода одновременно
Редактирование: Что касается причины, я думаю, что они просто не знают о текущих инструментах там, которые делают CI и поблочное тестирование чрезвычайно легкими.
Вероятно, комбинация нескольких вещей Вы уже упомянули. Его трудное для измерения снижения расходов TDD. Если Вы хотите произвести свой IT на стороне, можно показать, сколько Вы оплачиваете в год парней, которых Вы имеете штатный по сравнению со стоимостью заключения контракта его; его очень конкретное. Как сказать, "О, этот тест поймал ошибку, которая возьмет меня 4 часа, чтобы отладить и зафиксировать..."?
Причина некоторые места не используют его, состоит просто в том, потому что требуется большая работа и чтобы начать и продолжиться. То, что запись модульных тестов сопровождает столько же времени сколько запись фактической функциональности, кажется некоторым менеджерам как, Вы сокращаете производительность своего разработчика в половине.
Вдобавок ко всему, Вы создаете команду (или кто-то) должен поместить инфраструктуру на месте и поддержать его.
И как Alan говорит, много мест просто не использует лучшие практики - они просто хотят видеть что-то материальное.
Я не думаю, что лень является первопричиной тестирования неверного имени устройства. Для моей компании ограничения времени и "просто получают, сделанное" отношение является самыми большими средствами устрашения для того, чтобы сделать поблочное тестирование. Кроме того, места, где наш системный сбой имеют тенденцию быть больше в степени интеграции (сервисы, доступы базы данных, сложные запросы, которые требуют определенных данных для тестирования), не "уровень единицы". Эти вещи просто более трудно протестировать, и если у Вас едва есть достаточно времени, чтобы сделать функцию, Вы, вероятно, не собираетесь иметь время для получения любых полезных тестов, сделанных одновременно.
Из того, что я видел, много компаний имеет огромные, высоко связанные кодовые базы, которые не являются практически тестируемой единицей. У них также нет достойных тестируемых требований, таким образом, модульные тесты протестировали бы против, "как создано" фактических требований.
Поблочное тестирование является одним из тех условий черного квадрата, что большинство людей услышало, но не знает то, что точно составляет модульный тест, где запустить, как записать им, как на самом деле запустить тесты, что точно они должны тестировать, и т.д. и т.д. и т.д.
В большом количестве случаев, его более легкого для неуверенного разработчика для простого отклонения их как ненужных или некоторое обледенение, в котором только "нуждаются разработчики уровня предприятия".
Поблочное тестирование должно быть просто естественной частью рабочего процесса разработки кода, как компилятор.
Однако это требует обучения управления на преимуществах поблочного тестирования. У младших разработчиков есть относительно низкие возможности иметь такое влияние, все же. Таким образом, ли компания является сторонником поблочного тестирования, зависит от того, есть ли у них старший разработчик или архитектор, который является защитником поблочного тестирования.
я полагаю, что это - ответ на Ваш вопрос , "что отсутствует и почему не больше компаний, делающих поблочное тестирование" . :-)
Двумя вещами являются препятствия поблочному тестированию
В моей компании (> 5.000 emp) модульные тесты "там", но никакой шанс сделать TDD или получить большое покрытие кода. Это трудно для выполнения его.
Я работал на 3 компании до сих пор и только что недавно начал писать "offical" NUnit тесты, и я должен сказать, что я - большой поклонник. Существует 2 точки, которые я заметил однако за последние несколько недель:
Это зависит от приложения - существуют определенные приложения/части приложения, которое может быть очень легко к модульному тесту. Функция, которая делает что-то в основном тот же каждый раз и приводит к легко распознаваемому результату. И существуют разделы, которые не делают этого: блок кода, который печатает кристаллические отчеты или изменяет изображение - здесь глазное яблоко, на самом деле необходим и вероятно лучше/быстрее. Эти области могут отговорить людей пробовать к тестам записи. Они затем только начинают думать это, если определенные области не могут быть протестированной единицей, почему беспокойство?
гранулярность теста - много DEVs/QAs уже имеют в распоряжении своего рода автоматизацию, чтобы 'протестировать' часть функциональности и запутаться относительно того, как это отличается от модульного теста. В зависимости от их теста это не могло бы быть. Важная вещь здесь, которая занимает время для понимания, состоит в том, что хороший модульный тест полностью детализирован. Это тестирует минимальную часть логики, которая имеет смысл, который делает это повторяемым, автоматическим, и надо надеяться всегда допустимым. Это взяло меня немного, чтобы действительно ценить, как полезный то есть, особенно когда Вы имеете огромную кодовую базу и любите выполнять регрессионные тесты после внесения изменения, чтобы видеть если Вы просто foobared целое приложение.
Я думаю, что стоит записать хорошее покрытие модульного теста для кода, что Вы собираетесь быть работой с путем в будущее. Например, когда Вы работаете на производственную компанию, путем записи качественных случаев модульного теста Вы просто делаете инвестиции времени, зная, что вся тяжелая работа, пишущий тестовые сценарии окупится и сделает Вашу жизнь легче по линии.
печальная истина - то, что много программистов работает над внутренней разработкой приложений или заключением контракта и просто попыткой получить некоторое программное обеспечение снаружи. В тех случаях инвестиции времени не имеют так большого смысла, поскольку возможности - Вы, никогда не смотрите эту груду кода никогда снова.
Мы можем все утверждать, что соблюдение твердых методов разработки программного обеспечения является ответственностью каждого разработчика. Однако ROI значит много для отдельных разработчиков, как он делает к управлению.
Это собирается немного походить на встречу AA.
я - разработчик программного обеспечения.
я говорил о разработке программного обеспечения своему брату в РОЖДЕСТВО (он - бизнес-аналитик).
Поэтому насколько я мог сказать, 100's вовлеченных разработчиков, ни один из них не услышал о поблочном тестировании.
Мои предшественники в моем текущем задании использовали автоматическую валидацию и имели очень немного модульных тестов. Само собой разумеется, для кода нужен тяжелый рефакторинг.
Я знаю одного человека, который посмотрит на форму с единственной кнопкой и скажет, что "Это - излишество, это должно иметь интерфейс командной строки, таким образом, это может быть автоматизировано в сценарии", и все же он никогда действительно отстал от модульных тестов. Я просто не получаю его. Страх перед изменением мог быть частью его, но я предложил обходить его посредством процесса, и он уменьшен.
, Очевидно, моя текущая компания не осуществляет их, я только что взял ее на меня, чтобы записать им, если это возможно. Я нашел, что установка тестов впереди приводит к обвинению лучшего/более чистого кода, потому что в размышлении, как протестировать что-то, обычно необходимо полагать, что это - более позднее использование.