Пример программы, которая выполняет самотестирование. Рассмотрим программу, которая складывает и вычитает числа.
#include <cstdlib> #include <iostream> using namespace std; int sum(int a, int b) { return a+b+1; } int mul(int a, int b){ return a*b*2; } bool testSum(){ int a = 3; int b = 2; int expected = 5; return 5 == sum(a, b); } bool testMul(){ int a = 5; int b = 2; int expected = 10; return 10 == mul(a, b); } bool selfTest(){ bool flag = true; flag = flag && testSum(); flag = flag && testMul(); return flag; } int main(){ if ( ! selfTest() ) { cout << "self test error"; exit(0); } else { cout << "self test: OK \n\r"; }; int a = 0; int b = 0; int res = 0; char outbuf[50]; char ch; cin >> a; cin >> b; res = mul(a, b); sprintf(outbuf, "a * b = %d\n\r", res); cout << outbuf; res = sum(a , b); sprintf(outbuf, "a + b = %d\n\r", res); cout << outbuf; cout << "Press q, enter"; cin >> ch; }Нетрудно увидеть, что в программе есть грубые фактические ошибки. Но формально, с точки зрения компилятора, все верно и программа скомпилируется
gcc selftest.cpp -lstdc++ -o selftestЭтот пример говорит, что компилятор, даже такой совершенный, как gcc не может проверить, верна программа или нет. Тем не менее, внутри кода программы мы делаем самотест, который проверяет, что и сумма, и умножение должны быть верны. И если что-то не так, делаем досрочный выход из программы Теперь исправим реализацию Скомпилируем и запустим заново Программа выполняет самотестирование и убедившись, что все ОК, разрешает произвести действия, в данном случае расчеты. Теги документа