Алгоритм проектирования и анализа разделения - PullRequest
1 голос
/ 04 марта 2010

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

Ответы [ 2 ]

1 голос
/ 04 марта 2010

Существует два различных типа юнит-тестирования:

  1. Черный ящик
  2. Стеклянный ящик

Оба невероятно важны.Тесты черного ящика должны быть написаны исключительно на основе документации функции (ее заявленных входных данных, заявленных предварительных условий, заявленных выходных данных, заявленных постусловий и заявленных случаев ошибок и поведения / результатов в случае таких ошибок).Тестирование Glassbox пытается убедиться, что все ветви реализации работают правильно, и требует проверки реализации.Такие тесты обычно предоставляют несколько примеров входных данных для каждой ветви выполнения.

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

1 голос
/ 04 марта 2010

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

Вторая форма - это функциональное тестирование, чтобы увидеть, соответствуют ли выходные данные, созданные алгоритмом, проектному замыслу. Для этого вам не обязательно знать о реализации, и есть разумный аргумент, чтобы сказать, что это делается более объективно, если вы этого не сделаете.

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

Однако, в зависимости от алгоритма, это может быть невозможно. В тех случаях, когда алгоритм анализирует данные в пространстве, которое нелегко визуализировать (скажем, он имеет 27 измерений и 1М точек данных), тогда только тривиальные случаи могут быть проверены на функциональную точность. Ситуация ухудшается, если в результате анализа нет единственного «правильного» ответа, а есть множество вероятных результатов. В этих случаях требуется опытный аналитик, чтобы посмотреть на результаты, чтобы увидеть, имеют ли они смысл. Иногда это тот же человек, который реализует код, иногда нет. В этих случаях реализация почти наверняка будет поставлена ​​под сомнение при попытке понять результаты, которые сами по себе будут сложными.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...