Как можно было бы пойти о тестировании интерпретатора или компилятора?

Это пример того, как показать загрузчик в течение пяти секунд, используя state и setTimeout(). Вместо <Loader/> вы можете указать splash screen component.

import React, { Component } from 'react';

import Drawer from '../Drawer/Drawer';
import Loader from '../../components/UI/Spinner/Loader/Loader';

class App extends Component {
  state = {
    loading: true
  }

  componentDidMount(){
    setTimeout(() => {
      this.setState({loading: false});
    }, 5000);
  }

  render() {  
    return (
      <React.Fragment>
        {
          this.state.loading ? <Loader />: <Drawer />
        }
      </React.Fragment>
    );
  }
}

export default App;

Надеюсь, это поможет!

11
задан philant 30 March 2009 в 15:47
поделиться

6 ответов

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

  1. Вы захотите создать комплект регрессионного теста. Каждый тест должен иметь
    • Исходный код Вы интерпретируете, скажете test001.bf
    • Стандартный вход к программе Вы интерпретируете, скажете test001.0
    • Что Вы ожидаете, что интерпретатор произведет на стандартном выводе, скажет test001.1
    • Что Вы ожидаете, что интерпретатор произведет на стандартной погрешности, скажет test001.2 (Вы заботитесь о стандартной погрешности, потому что Вы хотите протестировать сообщения об ошибках своего интерпретатора),
  2. Вам будет нужен "запущенный тест" скрипт, который делает что-то как следующее

    function fail {
      echo "Unexpected differences on $1:"
      diff $2 $3
      exit 1
    }
    
    for testname
    do
      tmp1=$(tempfile)
      tmp2=$(tempfile)
      brainfuck $testname.bf < $testname.0 > $tmp1 2> $tmp2
      [ cmp -s $testname.1 $tmp1 ] || fail "stdout" $testname.1 $tmp1
      [ cmp -s $testname.2 $tmp2 ] || fail "stderr" $testname.2 $tmp2
    done
    
  3. Вы найдете, что это полезный, чтобы иметь "создает тест" сценарий, который делает что-то как

    brainfuck $testname.bf < $testname.0 > $testname.1 2> $testname.2
    

    Вы выполняете это только, когда Вы полностью уверены, что интерпретатор работает на тот случай.

  4. Вы сохраняете свой набор тестов при управлении исходным кодом.

  5. Удобно украсить Ваш сценарий тестирования, таким образом, можно не учесть файлы, которые, как ожидают, будут пусты.

  6. Любое время, которое что-либо изменяет, Вы повторно выполняете все тесты. Вы, вероятно, также повторно выполняете их всех ночью через задание крона.

  7. Наконец, Вы хотите добавить достаточно тестов для получения хорошего тестового покрытия исходного кода компилятора. Качество инструментов покрытия значительно различается, но GNU Gcov является инструментом подробного освещения.

Удача с Вашим интерпретатором! Если Вы хотите видеть любовно обработанный, но не очень хорошо зарегистрированная инфраструктура тестирования, пойти посмотреть на test2 каталог для Quick C - компилятор.

11
ответ дан 3 December 2019 в 09:21
поделиться

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

Как любой сложный объект программного обеспечения, будет много путей выполнения кода, но так как он все очень ориентировал на данные (текст в, текст и байты), это просто для авторской разработки тестов.

2
ответ дан 3 December 2019 в 09:21
поделиться

I ' Мы написали статью о тестировании компилятора, первоначальный вывод которой (слегка смягченный для публикации) был: Морально неправильно изобретать велосипед. Если вы уже не знаете всего о ранее существовавших решениях и не имеете веских оснований игнорировать их, вам следует начать с изучения уже существующих инструментов. Самым простым местом для начала является Gnu C Torture , но имейте в виду, что оно основано на Deja Gnu, который, скажем так, имеет проблемы. (Мне потребовалось шесть попыток даже заставить сопровождающего разрешить сообщение о критической ошибке о примере Hello World в список рассылки.)

Я нескромно предлагаю вам взглянуть на следующее как стартовое место для инструментов для исследования:

  1. Программное обеспечение: практика и опыт Апрель 2007 . (Платное ПО, недоступное для широкой публики - бесплатная препринт на http://pobox.com/~flash/Practical_Testing_of_C99.pdf .

  2. http://en.wikipedia.org/wiki / Compiler_c корректность # Тестирование (в значительной степени написано мной.)

  3. Библиография тестирования компилятора (Пожалуйста, дайте мне знать о любых обновлениях, которые я пропустил.)

2
ответ дан 3 December 2019 в 09:21
поделиться

В случае brainfuck я думаю, тестируя его, должен быть сделан с brainfuck сценариями. Я протестировал бы следующее, хотя:

1: Все ячейки, инициализированные к 0

2: Что происходит, когда Вы постепенно уменьшаете указатель данных, когда он в настоящее время указывает на первую ячейку? Это переносится? Это указывает на недопустимую память?

3: Что происходит, когда Вы увеличиваете указатель данных, когда он указывает на последнюю ячейку? Это переносится? Это указывает на недопустимую память

4: Делает функцию вывода правильно

5: Делает функцию ввода правильно

6: Делает [], наполняют работу правильно

7: То, что происходит, когда Вы увеличиваете байт больше чем 255 раз, делает он переносится к 0 правильно, или это, неправильно рассматривал как целое число или другое значение.

Больше тестов возможно также, но это, вероятно, где я запустил бы. Я записал компилятор BF несколько лет назад, и это имело несколько дополнительных тестов. Особенно я протестировал [] материал в большой степени при наличии большого количества кода в блоке, так как ранняя версия моего генератора кода имела проблемы там (на x86 с помощью jxx, у меня были проблемы, когда блок произвел приблизительно больше чем 128 байтов кода, приводящего к недопустимому x86 asm).

1
ответ дан 3 December 2019 в 09:21
поделиться

Уже можно протестировать с некоторыми записанные приложения.

-1
ответ дан 3 December 2019 в 09:21
поделиться

Секрет в том, чтобы:

  • Разделить проблемы
  • Соблюдать закон Деметры
  • Вводить зависимости

Ну, программное обеспечение, которое трудно тестировать, является признаком того, что разработчик писал его так, будто это 1985 год. Извините, что говорю это, но используя три принципа, которые я представил здесь, даже BASIC с нумерацией строк будет поддаваться модульному тестированию (в BASIC можно внедрять зависимости, потому что вы можете сделать "goto variable".

-3
ответ дан 3 December 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: