Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2012, 23:27   #1
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию Как организовать тестирование ПО?

Здоровья всем! И так, как организовать тестирование ПО?

Для начала возьмём консольную программу на Си, защитим её
максимально, а потом организуем тестирование.

Недавно нашёл книжку: Test-Driven Development By Example By Kent
Beck. Слегка начал читать, но пока ничего не понял.

Мне интересны лично ваши предпочтения. Как вы проводите
крупномасштабное тестирование? Какие инструменты? Как это делают
профессиональные разработчики в крупных компаниях? Любые
соображения, пожалуйста! Может у кого-то есть общее представление
о тестировании, опыт. Выскажите, пожалуйста, своё мнение. На примере
не только консольных программ на ANSI C, но и GUI программ, к
примеру, WinAPI+Си. А как обстоит дело с тестированием ПО,
написанным на С++? Какие средства самые актуальные на данный
момент?

Задание взял вот отсюда:
Цитата:
Сообщение от vbn1 Посмотреть сообщение
1.Написать функцию,которая принимает в
качестве параметров два указателя на массивы и возвращает
указатель на массив,удовлетворяющий условию: Сумма элементов
массива должна быть максимальной
2.Выбранный массив отсортировать по возрастанию и вывести на экран.
Вот мои соображения по тестированию:
Пусть массивы числовые и ограниченны 100 символами. Массивы будут
храниться в входном файле input.txt, а выходные данные будут
записываться в файл output.txt, например:

Входные данные (файл input.txt):
12344
23423432

Выходные данные (файл output.txt):
output.txt
22233344

Проверяем корректность входных данных и в случае ошибки, оповещать
пользователя.

Для себя пишем файл с входными данными и ожидаемыми результатами
(файл expectation.txt):

Ожидаемые результаты:

expectation.txt
Цитата:
// в строке должны быть только цифры
input:
w234
321

output:
ERROR 002: в строке должны быть только цифры

input:
321
w234

output:
ERROR 002: в строке должны быть только цифры


// строка не должна превышать 10 символов
input:
12345678901
12345

output:
ERROR 003: строка не должна превышать 10 символов

input:
347823
12345678901

output:
ERROR 003: строка не должна превышать 10 символов


// нормальный результат (размер строки равен 10 символам)
input:
1234788832
347823

output:
1223347888

input:
347823
1234788832

output:
1223347888


// нет парной строки
32345

output:
ERROR 001: нет парной строки

Теперь копируем входные данные из файла expectation.txt в
файл input.txt.

input.txt:
Цитата:
w234
321
321
w234
12345678901
12345
347823
12345678901
1234788832
347823
347823
1234788832
32345
Запускаем программу и на выходе получаем:

output.txt
Цитата:
ERROR 002: в строке должны быть только цифры
ERROR 002: в строке должны быть только цифры
ERROR 003: строка не должна превышать 10 символов
ERROR 003: строка не должна превышать 10 символов
1223347888
1223347888
ERROR 001
Теперь можем сравнить ожидаемые результаты из файла expectation.txt с
выходными данными программы из файла output.txt.

Последний раз редактировалось 8Observer8; 09.09.2012 в 23:35. Причина: орфография
8Observer8 вне форума Ответить с цитированием
Старый 09.09.2012, 23:28   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию продолжение

Код:
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#define BSIZE 20
#define MAX 10

char *max_array(char*, char*);

int main (int argc, char *argv[])
{
    char *infilename = "input.txt";
    char *outfilename = "output.txt";
    FILE *infile = fopen(infilename, "r");
    FILE *outfile = fopen(outfilename, "w");

    char buf[BSIZE];
    char instr1[BSIZE];
    char instr2[BSIZE];
    int error_code = 0;
    int i, gen_counter = 0;
    int is_pair = 0;
    int sum1 = 0, sum2 = 0;
    char *pmax_array;

    if (infile == NULL) {
        fprintf(stderr, "%s\n", argv[0]);
        fprintf(stderr, "Error: cannot open file \"%s\"\n", infilename);
        return 1;
    }

    if (outfile == NULL) {
        fprintf(stderr, "%s\n", argv[0]);
        fprintf(stderr, "Error: cannot open file \"%s\"\n", outfilename);
        return 1;
    }

    setlocale(LC_ALL, "Russian");

    while(fgets(buf, BSIZE, infile) != NULL) {
        gen_counter++;

        // считываем парную строку
        if ((gen_counter%2) != 0) {
            strcpy(instr1, buf);
            continue;
        }
        else {
            strcpy(instr2, buf);
        }

        // если есть ошибка, то выводим сообщение
        if (error_code != 0) {
            fprintf(outfile, "ERROR %03d: ", error_code);
            switch (error_code) {
            case 1:
                fprintf(outfile, "нет парной строки\n");
                break;
            case 2:
                fprintf(outfile, "в строке должны быть только цифры\n");
                break;
            case 3:
                fprintf(outfile, "строка не должна превышать 10 символов\n");
                break;
            default:
                fprintf(outfile, "нет описания ошибки\n");
                break;
            }
        }
        error_code = 0;

        //очищаем концы строк от символов перевода \n
        if (instr1[strlen(instr1)-1] == '\n') {
            instr1[strlen(instr1)-1] = '\0';
        }
        if (instr2[strlen(instr2)-1] == '\n') {
            instr2[strlen(instr2)-1] = '\0';
        }

        // проверяем все ли символы строк - цифры
        for (i = 0; i < strlen(instr1); i++) {
            if (!isdigit(instr1[i])) {
                error_code = 2;
                break;
            }
        }
        if (error_code == 2) {
            continue;
        }
        for (i = 0; i < strlen(instr2); i++) {
            if (!isdigit(instr2[i])) {
                error_code = 2;
                break;
            }
        }
        if (error_code == 2) {
            continue;
        }

        // строки не должны превышать 10 символов
        if ((strlen(instr1) > MAX) || (strlen(instr2) > MAX)) {
            error_code = 3;
            continue;
        }

        // сортируем строку и выводим результат
        pmax_array = max_array(instr1, instr2);
        qsort(pmax_array, strlen(pmax_array), sizeof(char), (int (*)(void*,void*))(strcmp));
        fprintf(outfile, "%s\n", pmax_array);
    }

    // нет парной строки
    if ((gen_counter%2) != 0) {
        error_code = 1;
    }

    // если есть ошибка, то выводим сообщение
    if (error_code != 0) {
        fprintf(outfile, "ERROR %03d\n", error_code);
    }
    error_code = 0;

    fclose(infile);
    fclose(outfile);
    return 0;
}

// max_array: выбор массива с масксимальной суммой элементов
char *max_array(char* instr1, char* instr2)
{
    int i;
    int sum1 = 0;
    int sum2 = 0;

    // поиск сумм элементов массивов
    for (i = 0; i < strlen(instr1); i++) {
        sum1 += instr1[i]-'0';
    }
    for (i = 0; i < strlen(instr2); i++) {
        sum2 += instr2[i]-'0';
    }

    return (sum1 > sum2) ? instr1 : instr2;
}
8Observer8 вне форума Ответить с цитированием
Старый 09.09.2012, 23:48   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://www.ibm.com/developerworks/ru...tingframework/
_Bers вне форума Ответить с цитированием
Старый 10.09.2012, 22:57   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Спасибо, _Bers! Видимо, мощный инструмент для тестирования С++ приложений. Сразу попробовать не смог. Может на недельке разберусь.

Последний раз редактировалось 8Observer8; 10.09.2012 в 23:00.
8Observer8 вне форума Ответить с цитированием
Старый 10.09.2012, 23:57   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Спасибо, _Bers! Видимо, мощный инструмент для тестирования С++ приложений. Сразу попробовать не смог. Может на недельке разберусь.
Он очень простой в использовании. И очень удобный)
У гугла есть документация на русском языке. Да и вообще, информации полно)
_Bers вне форума Ответить с цитированием
Старый 11.09.2012, 00:37   #6
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://code.google.com/p/googletest-...ting_Framework
_Bers вне форума Ответить с цитированием
Старый 11.09.2012, 12:39   #7
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

О-о-о! То что нужно. Понравилось, что после введения можно примеры изучить, и потом "Advanced Google Test Guide". И времени не жалко потратить на изучение такого инструмента. Спасибо!
8Observer8 вне форума Ответить с цитированием
Старый 21.01.2013, 20:25   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

CppUnit. Разработка ПО на C++ через тестирование http://programmersforum.ru/showthread.php?t=225824

Для языка Си инструкция выше тоже подходит. Только нужно вместо CppUnit установить CUnit

Последний раз редактировалось 8Observer8; 21.01.2013 в 20:30.
8Observer8 вне форума Ответить с цитированием
Старый 21.01.2013, 20:53   #9
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

8Observer8

CppUnit не надо использзовать. Оно безнадёжно устарело, да и умерло вообще.

goole test - simply the best (:

Кроме юнит тестов, есть специальные средства для автоматицации тестирования - Squish, Test Complete.
Rififi вне форума Ответить с цитированием
Старый 21.01.2013, 21:27   #10
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
8Observer8

CppUnit не надо использзовать. Оно безнадёжно устарело, да и умерло вообще.

goole test - simply the best (:

Кроме юнит тестов, есть специальные средства для автоматицации тестирования - Squish, Test Complete.
Как же умер? В NetBeans только его и используют. Поддержка на уровне самой IDE

Последний раз редактировалось 8Observer8; 21.01.2013 в 22:45. Причина: добавил
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как организовать? (C++) Jеня Помощь студентам 2 20.11.2011 18:43
Как организовать хеш? Utkin Общие вопросы по программированию, компьютерный форум 12 04.01.2011 09:31
как организовать цикл KAMKAM Microsoft Office Excel 29 05.07.2010 22:20
Как лучше организовать базу данных типо как в ICQ Руслантус БД в Delphi 3 09.08.2008 23:57