Как бы вы эффективно протестировали программное обеспечение командной строки, используя множество ключей и аргументов? - PullRequest
1 голос
/ 15 октября 2011

Утилита / программа командной строки потенциально может состоять из множества различных ключей и аргументов.

Допустим, ваше программное обеспечение называется CLI, и допустим, что CLI обладает следующими функциями:

  • Общий синтаксис CLI: CLI <data structures> <operation> <required arguments> [optional arguments]
  • <data structures>может быть 'matrix', 'complex numbers', 'int', 'floating point', 'log'
  • <operation> может быть 'add', 'subtract', 'multiply', 'divide'
  • Я не могу придумать какие-либо обязательные и необязательные аргументы, но предположим, что ваше программное обеспечение его поддерживает

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

По существу, многие программы для работы с настоящими словами все еще предоставляют интерфейс командной строки с несколькими параметрами.Мне любопытно, есть ли для этого какая-либо формальная методика тестирования.У меня была идея создать грамматику (например, EBNF) и описать «язык» интерфейса.Но я не могу продвинуть эту идею вперед.Для чего нужна грамматика в этом случае?Как это позволяет генерировать много разных комбинаций.

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

Ответы [ 2 ]

1 голос
/ 17 октября 2011

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

1 голос
/ 15 октября 2011

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

Программа реализована в c # / .NET, поэтому я использую среду тестирования Microsoft, встроенную в Visual Studio, но этот подход будет работать с любой структурой модульного тестирования.

Каждый тест вызывает служебную функцию, которая запускает процесс и отправляет входные данные и связывает выходные данные. Затем каждый тест отвечает за проверку того, что выходные данные CLI соответствуют ожидаемым. В некоторых случаях есть семейство тестовых случаев, которые могут быть выполнены одним методом тестирования, в котором есть цикл for. Логика должна запускать CLI и проверять вывод для каждой итерации.

Набор тестов, который у меня есть, не охватывает каждую перестановку аргументов, но охватывает 80% случаев, и я могу добавлять новые тесты, если есть какие-либо дефекты.

...