GSOC 20 (12 Часть серии)
Google лето кода 2020 наконец подходит к концу, а какой увлекательный опыт он был! В этом посте я покажу свои фрукты моего труда.
Я создал пример рабочего процесса действий GitHub на прошлой неделе, и это отмечает последнюю серьезную вехою моего проекта GSOC Улучшение функциональности параллелизма и ввода . Я очень рад, что я смог закончить все основные этапы вовремя. Ниже я дам быстрое резюме моего путешествия.
О проекте
Прежде чем идти в детали, я хотел бы дать краткое введение в проект для непосвященных. Вы можете пропустить этот раздел, если вы уже знакомы с этим.
Мой проект был на Улучшить функциональность параллелизма и ввода CVE двоичный инструмент . CVE Binary Tool Сканирует несколько распространенных уязвимых компонентов с открытым исходным кодом, таким как openssl, libpng, libxml2 и т. Д. Для того, чтобы знать, если данный каталог или двоичный файл включает в себя общие библиотеки с известными уязвимостями, известными как CVES ( общие уязвимости и экспозиции ) Отказ Это написано на моем любимом языке Python Отказ Это доступно как пакет Python, и вы можете получить его от Пейпина . Вы можете просмотреть исходный код из Репозиторий GitHub И это поддерживается Терри Ода и Джон Андерсен . Они также мои наставники для этого проекта.
Когда я начал работать над проектом, CVE Binary Tool есть Некоторые ошибки под платформой Windows И поскольку я использую окна в первую очередь, я исправил все ошибки Windows в периоде связи сообщества. Я также написал Более быстрый родной раствор Python Чтобы заменить модуль расширения C-Strings и Рефакторованные целые шашки модуль использовать Объектно-ориентированный дизайн Чтобы уменьшить повторение кода в периоде связи сообщества. Поскольку мы удалили поддержку Python2 в последнем выпуске, я также оптимизировал Legacy Code Python2 для Python3.
Первая веха: улучшить тестовый люкс
Я хотел улучшить тесты в CVE Binary Tool, потому что CI Runtime был слишком длинным, и была отсутствует инициализация, которая не пропустила тест, когда мы проводим тесты локально.
У меня есть Удаленные зависимости компилятора из тестового набора в пользу родного решения Python. Я также исправил сложно Ошибка инициализации Pytest Исследуя и понимаю происхождение ошибки. Я также постепенно улучшил тестовый набор каждого модуля, мигрируя его на Pteest из стандартных межкомнатных и использование pteest-xdist
оптимизировать время выполнения. (Ex: параллелизация test_json .
Вторая веха: улучшить параллелизм
Ранее CVE двоичный инструмент использовал многопроцессор для загрузки NVD Data-feeds . Поскольку загрузка является задача IO-связанной, я предложил асинсио будет лучший выбор для этого использования.
Я поклонировал почти все модули, связанные с io, чтобы использовать asyncio . Я также разрабатывал много async-ommities для различных модулей. Ниже приведены все поступления в отношении моей работы по улучшению параллелизма инструмента.
- Асинхронный экстрактор модуль
- Модуль асинхронных струн
- Асинхронный файл модуль
- Асинхронный модуль Cedb
Основной усиление производительности было снижение времени загрузки по 50% После перехода на asyncio .
Третий этап: улучшить входную функциональность
CVE Двоичный инструмент имел команду с именем CSV2CVE Чтобы получить CEND из CSV отформатированного ввода. Моя цель состояла в том, чтобы заменить его с помощью универсального Inputendine Модуль, который может поддерживать различные типы ввода. В настоящее время он поддерживает CSV и JSON в качестве действительного входного типа данных. Я также добавил поддержку указания данных собора для CVes, таких как замечания (например, Смягченный, игнорируется и т. Д.), Комментарии, пользовательские серьезности и т. Д.
Поскольку двоичный инструмент CVE имеет несколько аргументов командной строки, я решил добавить поддержку файлов конфигурации, чтобы пользователи не должны постоянно указывать эти аргументы каждый раз Он/он хочет сканировать каталог. Он также может быть полезен в автоматической среде, такими как CI/CD-трубопроводы. Ниже приведен список моих вытяжных запросов, связанных с этим вехой.
- Добавлен входчик с примечаниями функционал
- Inportendine: Комментарии и настраиваемая серьезность
- Исправлена проблема с фиксированным путем для ввода данных и снижения сложности Cvescanner
- Добавлена поддержка файлов конфигурации
- Документированное использование файла конфигурации и файла ввода
Окончательная веха: Улучшить пользовательский опыт
Нам повезло иметь Энтони (пользователь), который был готов посещать нашу еженедельную встречу. Он предложил многим функциям и документации, которые будут полезны для него и другими пользователями. Я внес собой Как-гиды (По сути, поваренная книга рецептов) для разных случаев использования.
Я также создал модуль обработчика ошибок для обеспечения красивой трассировки, используя богатый Библиотека и установите пользовательский код выхода в соответствии с исключением, чтобы пользователь мог знать, почему программа завершается в тихом режиме или сценарии автоматизации.
Вот список всех моих вытяжных запросов, связанных с этой целью.
- Документация: добавьте руководства
- Пример Workflow YML для запуска CVE Binary Tool в Действия GitHub
- Улучшено обработка ошибок с красивым кодом трассировки и выхода в CLI, INPUT_ENGINE и CVEDB
- Улучшена обработка ошибок и читаемость экстрактора
- Выходные данные: Модернизация обработки ошибок
- OpdentEngine: Fix Generate_FileName Args Signature
Будущая работа
Мое оригинальное предложение было огромным и из-за ограниченного времени, я должен расставить приоритеты своих целей в соответствии с требованиями пользователя. Я полностью завершил свою основную цель улучшить входную функциональность и пользовательский опыт, но у меня все еще есть много оптимизаций в отношении аспекта параллелизма проекта. Итак, я собираюсь продолжать свою работу на Улучшение производительности CVE Binary Tool . Я также хочу оптимизировать время выполнения длинных тестов, поскольку он занимает 30 минут, чтобы запустить все тесты, и я полагаю, что мы можем значительно оптимизировать его, кэшируя и/или уменьшить тестовые данные, которые необходимо загрузить для тестирования. Я также хочу создать готовность использовать действие GitHub для инструмента, чтобы разработчик мог легко интегрировать его как часть их конвейера CI/CD.
Что я получил от GSOC
Сумма опыта, который я получил от работы на CVE Binary Tool С Terri Oda и Джон Андерсеном неизмерим. И мои наставники добрые, полезны и чрезвычайно талантливы. Они дали мне много советов и предложений от низкого уровня работы языка в лучшие практики о написании хорошего кода.
Terri Oda помог мне улучшить качество моего PR (Pull-request), предлагая статьи о лучших практиках. Она также помогла мне понять, какие задачи должны быть приоритеты. Пока Джон Андерсен помог мне много вещей о Python в целом, как метаклассы, асинсио, контекстно-менеджер и т. Д.
Перед GSOC я только знал базовые команды Git Но теперь я могу уверенно сказать, что я освоил Гит. У меня также есть гораздо лучшее понимание того, как работает языки программирования, когда и как выбрать сторонние библиотеки, как эффективно ссылаться на документацию, как писать чистый, читаемый и ремонтопригодный код, как эффективно документировать и тестировать код, как эффективно, как Правильно структурируйте потянутые запросы и самое главное, как практично Программирование работ, которые я бы не знал иначе.
OpenSource теперь стал моим хобби, потому что являясь частью сообщества OpenSource, я узнал, что в качестве вкладчика Opensource, помимо предоставления взносов в кодексе, я также добираюсь до сортировки и разрешаю проблем пользователей и проанализировать другие запросы на проезд. Я также могу направлять и мотивировать новых участников. Я не получу этот опыт, если я просто сделаю свои личные проекты.
Все эти уроки неоценимы для меня, и я твердо верю, что мне будет полезно на протяжении всей моей карьеры.
GSOC 20 (12 Часть серии)
Оригинал: “https://dev.to/nirajkamdar/cve-binary-tool-gsoc-final-report-4nlk”