Перевод англоязычных терминов в тестировании ПО и около
Я не считаю себя специалистом в переводе текстов, тем не менее все описанные термины мне близки, и я хочу согласованности в переводе курса по фаззинг-тестированию. Так что я одеваю шляпу Норы Галь и попробую найти наиболее подходящие переводы терминов.
В статье ниже я использую англоязычные определения в основном из Википедии. Под Глоссарием подразумевается глоссарий, скомпилированный из разных источников.
Используются в русскоязычных переводах, слайдах: whitebox - “белый” ящик, blackbox - “черный” ящик, greybox - “серый” ящик. Вполне устоявшиеся переводы терминов.
Computer science переводится вовсе не “компьютерная наука”, а теоретическая информатика.
Fuzzing (англ. Википедия: “fuzz testing is an automated software testing technique that involves providing invalid, unexpected, or random data as inputs to a computer program.”).
Калька с англ. “фаззинг” используется повсеместно: разговорная речь, доклады, книги.
В диссертации Алексея Вишнякова используется калька “фаззинг”, но и даётся точное определение в русскоязычных терминах:
Фаззинг является динамическим методом анализа программы, во время которого порождаются новые входные данные. Фаззер мутирует входные данные программы и наблюдает за ее выполнением. Таким образом, могут быть получены входные данные программы, на которых она зависает или аварийно завершается.
Возможно использование как кальки “фаззинг”, так и более развернутого описания - “динамическим методом анализа программы”. Ещё один вариант перевода - это использование словосочетания “рандомизированное тестирование”.
Fuzzer (англ. Глоссарий: “Fuzzer: The most overloaded term and used in a variety of contexts, which makes it bad. Sometimes, “Fuzzer” is referred to a fuzz target, a fuzzing engine, a mutation engine, a test generator or a fuzzer build.”).
Заметьте, что в самом англоязычном определении акцент на перегруженности термина. Русскоязычные варианты термина: фаззер, фаззинг-тест. Эти русскоязычные кальки прочно закрепились в русском языке. В качестве синонима по аналогии с “фаззинг” можно использовать “рандомизированный тест”, но всё-таки под фаззингом подразумевается тестирование “серого” ящика и все непременные атрибуты классического фаззинга: обратная связь, корпус данных и т.д.
Fuzzing Engine - (англ. Глоссарий: “Fuzzing Engine: A program that produces an infinite stream of inputs for a fuzz target and orchestrates the execution. Examples: libFuzzer, AFL, honggfuzz, etc.”)
Model checking (англ. Википедия: “In computer science, model checking or property checking is a method for checking whether a finite-state model of a system meets a given specification (also known as correctness).”).
Термин, состояние с переводом которого, обстоят хуже всего.
В некоторых книгах на эту тему термин не перевели даже в названиях самих книг:
- Model Checking. Верификация параллельных и распределенных программных систем. - Ю.Г. Карпов, СПб.: БХВ-Петербург, 2010.
- Верификация моделей программ. Model Checking. - Э.М. Кларк, О. Грамберг, Д. Пелед. M.: МЦНМО, 2002.
- Верификация программ методом Model Checking, А.М. Миронов
На мой взгляд это просто ужасно. Не использовали никакого перевода в одной из научных публикаций - “О верификации простых автоматных программ на основе метода Model Checking”, Вельдер Сергей Эдуардович, Шалыто Анатолий Абрамович, 2007. В более свежей (2021) статье от JetBrains тоже не используется перевод - “Model Checking для тестирования многопоточности? С Lincheck — легко”.
В статье Википедии термин “model checking” перевели как “проверка на модели”. В статье журнала “Открытые системы” в 2003 году использовали перевод “Верификация программ с помощью моделей”.
Mutation engine (англ. Глоссарий: “Mutation Engine: A tool that takes a set of testcases as input and creates their mutated versions. It is just a generator and does not feed the mutations to fuzz target.”) - ???
Mutator (англ. Глоссарий: “Mutator: A function that takes bytes as input and outputs a small random mutation of the input.”) - мутатор.
Testcase minimization (англ. Глоссарий: “Minimization: A process that tries to minimize a testcase to its smallest possible size, such that it still triggers the same underlying bug on the target program.”) - минимизация, усечение тесткейса.
Sanitizer (англ. Глоссарий: “A dynamic testing tool that can detect bugs during program execution. Examples: ASan, DFSan, LSan, MSan, TSan, UBSan.”) - калька “санитайзер” или “динамический анализатор”.
Reproducer (англ. Глоссарий: “Reproducer: (also Test Case): A test input that can be used to reproduce a bug when processed by a fuzz target.”) - кроме кальки “репродьюсер” в разговорной речи другого варианта я не нигде не видел.
Symbolic execution (англ. Википедия: “Symbolic execution (also symbolic evaluation or symbex) is a means of analyzing a program to determine what inputs cause each part of a program to execute. An interpreter follows the program, assuming symbolic values for inputs rather than obtaining actual inputs as normal execution of the program would. It thus arrives at expressions in terms of those symbols for expressions and variables in the program, and constraints in terms of those symbols for the possible outcomes of each conditional branch. Finally, the possible inputs that trigger a branch can be determined by solving the constraints.”).
В статье используется перевод “символьное исполнение”.
Property-based testing (англ. “Property-based testing takes a very different approach, where a single test is run hundreds of times with randomly generated inputs.”).
Один из популярных методов рандомизированного тестирования наряду с фаззингом. Популярный перевод - “тестирование с помощью свойств”.
Concolic Execution (англ. “Concolic testing (a portmanteau of concrete and symbolic, also known as dynamic symbolic execution) is a hybrid software verification technique that performs symbolic execution, a classical technique that treats program variables as symbolic variables, along a concrete execution (testing on particular inputs) path.”).
В упомянутой выше статье Немного про современные технологии Greybox-фаззинга используется калька - “конколическое исполнение”, что звучит и выглядит ужасно.
В диссертации Алексея Вишнякова “Поиск ошибок в бинарном коде методами динамической символьной интерпретации” используется близкий термин DSE (dynamic symbolic execution), который переведен как “методы динамической символьной интерпретации”.
На мой взгляд последний перевод термина выглядит наиболее близким к смыслу и не использует кальку и выглядит наиболее достойным вариантом перевода.