Инструмент командной строки для генерации массивных случайных Java-приложений
Инструмент командной строки, который вы так долго ждали. Или нет. В конце концов, это довольно эзотерично. В любом случае, это довольно полезно для некоторых, и забавная утилита для других. Bullshifier — это внутренний инструмент OverOps, разработанный Дэвидом Леваноном и Hodaya Gamliel . Он используется для того, чтобы протестировать некоторые из наших возможностей мониторинга на смехотворно больших базах кода, с транзакциями, которые проходят тысячи вызовов, более тысячи классов и заканчиваются исключениями.
Давайте разберемся, как его использовать и почему мы его создали.
Некоторая мотивация
OverOps показывает разработчикам, где, когда и почему перерывы в работе кода. Всякий раз, когда регистрируется ошибка, предупреждение или исключение, он показывает вам полный исходный код и состояние переменной по всему стеку вызовов в момент ошибки.
Он создан для производства и требует низких накладных расходов, которые никогда не превышают 3% с точки зрения использования процессора и памяти. Таким образом, как часть нашего процесса, нам нужно было протестировать его с некоторыми крайними крайними случаями — вот где приходит Bullshifier:
- Создает массивные проекты с тоннами кода и журналирования
- Работает с методами с глубокими стеками вызовов
- Выдает исключения, вызванные состоянием случайной величины
Основное использование
Требования
- Groovy установлен
- Java установлена
Установка
- Скачайте, распакуйте, и вы готовы к работе
Запустить настройки
- ./gradlew run (Параметры по умолчанию, генерирует один jar с 10 классами)
- вывод cd && gradle fatJar для создания сгенерированного проекта
- java -cp output / build / libs / tester.jar helpers.Main для его запуска
Или вы можете просто запустить ./scripts/small.sh или ./scripts/big.sh с предварительно настроенными параметрами запуска.
Флаги
- -Poutput-directory (Относительный путь к выходному каталогу)
- -Poutput-classes (количество генерируемых классов)
- -Подпроекты (количество банок для генерации)
Имейте в виду, что создание более 500 классов займет довольно много времени. Наше самое большое количество пробежек составило 20 000 классов, но лучше не превышать 5000.
Запуск подпроектов
- / gradle build (получить файл WAR)
- Перейти в корзину
- Сценарий оболочки создается для каждого проекта, root запустит их все
Расширенный конфиг
Есть несколько дополнительных опций, которые дают вам точный контроль над сгенерированным кодом, но вы можете испортить его и использовать на свой страх и риск:
- Конфигурация низкого уровня: src / main / groovy / generator / Config.groovy
- Конфигурация более высокого уровня доступна в выходной папке. Есть больше опций для добавления регистрации и точной настройки поведения приложения, но на данный момент это экспериментально.
Если вы хотите узнать больше, не стесняйтесь обратиться или попросите нас в разделе комментариев для более глубокого прохождения. Настройки по умолчанию — не журналы, а исключение для каждого 10-го кадра в стеке вызовов.
Образец вывода
Забавно, что сначала все эти случайно сгенерированные имена классов и переменных вызывали множество обращений с зарезервированными словами. Несмотря на то, что они абсолютно случайны, из-за огромного количества сгенерированного кода. Так что теперь это случайный минус зарезервированные слова & # 55357; & # 56859;
Каждый сгенерированный метод содержит 4 раздела:
- Определение переменной со случайными типами, случайными именами и значениями.
- Раздел выдает исключения или печатает в журнал, в соответствии с настройками конфигурации для скорости событий. Это также включает в себя функцию «самоубийства», которая останавливает выполнение программы.
- Вызывает следующий режим.
- Код, который никогда не запускается.
Вот случайный фрагмент из первой части:
1
2
3
4
5
6
7
8
|
int methodId = 2 ; Object[] root = new Object[ 9 ]; List<Object> valCjrukeawxor = new LinkedList<Object>(); Set<Object> valRvshucjormy = new HashSet<Object>(); boolean valSboiogeldpb = true ; valRvshucjormy.add(valSboiogeldpb); boolean valPjvoucyfprv = true ; |
Посетите сайт, чтобы загрузить пример результата или просмотреть на GitHub .
Ссылка: | Java Bullshifier — генерируйте массивные базы случайного кода от нашего партнера JCG Алекса Житницкого в блоге OverOps . |