Покрытие кода Java в Гудзоне

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

Рассматривают следующее:

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

Эта модель не масштабируется хорошо, потому что, поскольку количество запросов на страницу повышается, сервер должен сделать то же самое много раз для каждого запроса.

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

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

Кэш Набора результатов

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

Кэш Компонента

веб-страница А состоит из различных компонентов - pagelets, или независимо от того, что можно хотеть назвать их. Стратегия кэширования компонента должна знать, какие параметры использовались для запроса компонента. Например, немного панели "Последних новостей" на сайте использует географическое положение пользователя или предпочтение для показа локальных новостей. Следовательно, если новости для местоположения кэшируются, компонент не должны представлять и можно вытянуть от кэша.

Кэш Страницы

Одна стратегия кэширования всех страниц состоит в том, чтобы сохранить строку запроса и/или параметры заголовка наряду с полностью renderered HTML. Файловая система достаточно быстра для этого - это - все еще путь, менее дорогой для веб-сервера для чтения файла, чем позвонить на сервер приложений, чтобы представить страницу. В этом случае каждый пользователь, который отправляет ту же строку запроса, получит то же кэшируемое содержание.

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

14
задан Community 23 May 2017 в 10:27
поделиться

6 ответов

Sonar - очень крутой инструмент, который легко интегрируется с Hudson, мне очень нравится его организация с многомодульными проектами. Вы должны попробовать

alt text http://sonar.codehaus.org/wp-content/uploads/2009/08/dashboard.png[12209 provided

8
ответ дан 1 December 2019 в 13:33
поделиться

Роберт,

У меня тоже была эта проблема, и я обнаружил, что Хадсон не дважды сообщает если вы настроили проект как фристайл-проект, а не как проект Maven2. Вы действительно теряете некоторую прелесть проекта maven2, но для нас это был обмен, который мы должны были совершить.

Джефф

1
ответ дан 1 December 2019 в 13:33
поделиться

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

Чтобы обеспечить функции слияния, мы создали наш собственный артефакт репозиторий (мы не используем Maven). В конце каждой сборки мы копируем файл cobertura.ser в общий сетевой ресурс, переименовывая его в процессе. У нас есть задание консолидированного представления, которое копирует все файлы cobertura и файлы исходного кода (еще один артефакт сборки, скопированный в общий сетевой ресурс) в локальный каталог сборки и генерирует отчет Cobertura.

Отсутствие стандартного репозитория артефактов внутри Хадсон немного расстраивает, но имеет смысл дать авторам обычно использовать Maven для этих нужд. Наш процесс сборки выполняется на нескольких серверах, поэтому мы не можем просто использовать относительные пути к другим каталогам заданий.

Примечание. мы делаем то же самое для других показателей: результаты тестирования, JavaNCSS и т. д. и присоединились либо с помощью правильных инструментов, либо с помощью специального кода.

Мы используем один и тот же репозиторий для традиционных артефактов сборки: DLL, JAR, сценариев установки.

1
ответ дан 1 December 2019 в 13:33
поделиться

Рассматривали ли вы Atlassian's Clover ?

Подключаемый модуль maven-clover2 имеет новую цель: clover2: setup , который будет просто использовать ваш тесты без разветвления жизненного цикла или двойного запуска тестов.

Вы должны определить цели для запуска в Hudson следующим образом:

mvn clover2:setup verify clover2:aggregate clover2:clover

maven-clover2-plugin можно попробовать абсолютно бесплатно в течение 30 дней.

1
ответ дан 1 December 2019 в 13:33
поделиться

Это немного хакерский подход, но я использую подход, который я использую, заключается в использовании модифицированной версии плагина Maven cobertura (который доступен в их репозитории ). Он предоставляет цель cobertura: generate-report, так что вы можете вставить cobertura: instrument и cobertura: generate-report в свой жизненный цикл до и после запуска тестов соответственно. Это даст вам данные о покрытии, которые вы хотите, без дублирования выполнения / записи тестов.

Основная проблема заключается в том, что все плагины покрытия Maven, отличные от Clover, с которыми я столкнулся, построены на идее запуска тестов с покрытием отдельно от выполнения основного теста в жизненном цикле Maven. Это, очевидно, приводит к двум сериям выполнения тестов. Если вы занимаетесь фристайл-проектом, вы будет записан только один набор тестов (поскольку даже при двух выполнениях теста есть только одна копия результатов теста), но тип проекта Maven фактически перехватывает выполнение Maven mojo и записывает выходные данные / результаты теста во время выполнения теста, скорее чем все сразу в конце сборки, как это делают проекты фристайла. Это имеет множество преимуществ, но также имеет довольно вопиющий недостаток, заключающийся в том, что один тест, выполняемый дважды, считается двумя тестами.

Тем не менее, хотя я видел веские аргументы в пользу запуска тестов как для неинструментированных, так и для инструментальных кода, я предпочитаю запускать тесты только один раз с инструментальным кодом - не только из-за проблем с Maven / Hudson, но и потому, что когда у вас есть тесты, которые занимают 45 минут, кажется откровенно глупым запускать их дважды для генерации тот же результат.

даже при двух выполнениях теста есть только одна копия выходных данных теста), но тип проекта Maven фактически перехватывает выполнение Maven mojo и записывает выходные данные / результаты теста во время выполнения теста, а не все сразу в конце сборки как фристайл проекты делают. Это имеет множество преимуществ, но также имеет довольно вопиющий недостаток, заключающийся в том, что один тест, выполняемый дважды, считается двумя тестами.

Тем не менее, хотя я видел веские аргументы в пользу запуска тестов как для неинструментированных, так и для инструментальных кода, я предпочитаю запускать тесты только один раз для инструментального кода - не только из-за проблем с Maven / Hudson, но и потому, что когда у вас есть тесты, которые занимают 45 минут, кажется откровенно глупым запускать их дважды для генерации тот же результат.

даже при двух выполнениях теста есть только одна копия выходных данных теста), но тип проекта Maven фактически перехватывает выполнение Maven mojo и записывает выходные данные / результаты теста во время выполнения теста, а не все сразу в конце сборки как фристайл проекты делают. Это имеет множество преимуществ, но также имеет довольно вопиющий недостаток, заключающийся в том, что один тест, выполняемый дважды, считается двумя тестами.

Тем не менее, хотя я видел веские аргументы в пользу запуска тестов как для неинструментированных, так и для инструментальных кода, я предпочитаю запускать тесты только один раз с инструментальным кодом - не только из-за проблем с Maven / Hudson, но и потому, что когда у вас есть тесты, которые занимают 45 минут, кажется откровенно глупым запускать их дважды для генерации тот же результат.

s только одна копия выходных данных теста), но тип проекта Maven фактически перехватывает выполнение Maven mojo и записывает выходные данные / результаты теста во время выполнения теста, а не все сразу в конце сборки, как это делают проекты свободного стиля. Это имеет множество преимуществ, но также имеет довольно очевидный недостаток, заключающийся в том, что один тест, выполняемый дважды, считается двумя тестами.

Тем не менее, хотя я видел веские аргументы в пользу запуска тестов как для неинструментированных, так и для инструментальных кода, я предпочитаю запускать тесты только один раз с инструментальным кодом - не только из-за проблем с Maven / Hudson, но и потому, что когда у вас есть тесты, которые занимают 45 минут, кажется откровенно глупым запускать их дважды для генерации тот же результат.

s только одна копия выходных данных теста), но тип проекта Maven фактически перехватывает выполнение Maven mojo и записывает выходные данные / результаты теста во время выполнения теста, а не все сразу в конце сборки, как это делают проекты свободного стиля. Это имеет множество преимуществ, но также имеет довольно очевидный недостаток, заключающийся в том, что один тест, выполняемый дважды, считается двумя тестами.

Тем не менее, хотя я видел веские аргументы в пользу запуска тестов как для неинструментированных, так и для инструментальных кода, я предпочитаю запускать тесты только один раз с инструментальным кодом - не только из-за проблем с Maven / Hudson, но и потому, что когда у вас есть тесты, которые занимают 45 минут, кажется откровенно глупым запускать их дважды для генерации тот же результат.

но тип проекта Maven фактически перехватывает выполнение Maven mojo и записывает вывод / результаты теста во время выполнения теста, а не все сразу в конце сборки, как это делают проекты фристайла. Это имеет множество преимуществ, но также имеет довольно очевидный недостаток, заключающийся в том, что один тест, выполняемый дважды, считается двумя тестами.

Тем не менее, хотя я видел веские аргументы в пользу запуска тестов как для неинструментированных, так и для инструментальных кода, я предпочитаю запускать тесты только один раз с инструментальным кодом - не только из-за проблем с Maven / Hudson, но и потому, что когда у вас есть тесты, которые занимают 45 минут, кажется откровенно глупым запускать их дважды для генерации тот же результат.

но тип проекта Maven фактически перехватывает выполнение Maven mojo и записывает вывод / результаты теста во время выполнения теста, а не все сразу в конце сборки, как это делают проекты фристайла. Это имеет множество преимуществ, но также имеет довольно вопиющий недостаток, заключающийся в том, что один тест, выполняемый дважды, считается двумя тестами.

Тем не менее, хотя я видел веские аргументы в пользу запуска тестов как для неинструментированных, так и для инструментальных кода, я предпочитаю запускать тесты только один раз для инструментального кода - не только из-за проблем с Maven / Hudson, но и потому, что когда у вас есть тесты, которые занимают 45 минут, кажется откровенно глупым запускать их дважды для генерации тот же результат.

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

Тем не менее, хотя я видел веские аргументы в пользу запуска тестов как для неинструментированных, так и для инструментальных кода, я предпочитаю запускать тесты только один раз с инструментальным кодом - не только из-за проблем с Maven / Hudson, но и потому, что когда у вас есть тесты, которые занимают 45 минут, кажется откровенно глупым запускать их дважды для генерации тот же результат.

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

Тем не менее, хотя я видел веские аргументы в пользу запуска тестов как для неинструментированных, так и для инструментальных кода, я предпочитаю запускать тесты только один раз с инструментальным кодом - не только из-за проблем с Maven / Hudson, но и потому, что когда у вас есть тесты, которые занимают 45 минут, кажется откровенно глупым запускать их дважды для генерации тот же результат.

6
ответ дан 1 December 2019 в 13:33
поделиться

См. Раздел «Покрытие тестов SD Java» для получения информации об инструменте с чрезвычайно низкими накладными расходами и красивым графическим интерфейсом. Я не уверен, что понимаю вашу проблему «запустить дважды», но если вы дважды запускали (одни и те же детерминированные) тесты с помощью инструментов SD, вы получите те же данные о тестовом покрытии, например их идемпотент. Если ваши тесты недетерминированы, вы получите два разных прогона теста, но эти инструменты легко объединяют результаты нескольких прогонов в единую общую сводку.

Они также обрабатывают очень большие приложения и довольно хорошо справляются с многопоточными приложениями (маленькими осколки времени могут сделать ответ немного неточным в теории, но на практике это просто не проблема).

1
ответ дан 1 December 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: