Статический и динамический анализ кода. Тестирование методом «Черного Ящика». Опыт проведения статического и динамического анализа кода

Страницы работы

Фрагмент текста работы

Санкт-Петербургский Государственный Университет

Информационных Технологий

Механики и Оптики

Тестирование Програмного Обеспечения

Лабораторная работа №1

Тема:

Статический и динамический анализ кода.

Тестирование методом «Черного Ящика».

Цель:

Получить практический опыт проведения статического и динамического анализа кода. Научиться производить тестирование программных систем методом «Черного Ящика».

Убедиться в различной эффективности анализа кода и тестирования методом «Черного Ящика».

Выполнил студент

Группы

5513

(Г.2008)

Исходные данные: код программы с ошибками на языке C#.

//программа считает прирост процентов по депозиту за определенный срок

namespace Percent

{

public class Program

{

public static void Main(string[] args)

{

int nMaxRateSize = 20;

Console.WriteLine("Please enter the sum of your deposit");

string sDeposit = Console.ReadLn();

decimal mDeposit = Convert.ToDecimal(sDeposit);

Console.Write("Please, enter your percent's rate \n");

string sRate = Console.ReadLine();

decimal mRate = Convert.ToDecimal(sRate);

if (mRate < 0 || mRate > nMaxRateSize)

{

Console.WriteLine("Rate Cannot be negative and > 20! \n");

mRate = 0;

}

else

{

Console.WriteLine("Please, enter the number of years \n");

string sDuration = Console.ReadLine();

int nDuration = Convert.ToInt32(sDuration);

Console.WriteLine();

Console.WriteLine("Deposit = " + mDeposit);

Console.WriteLine("Percent rate = " + mRate + " %");

Console.WriteLine("The duration is " + nDuration + " years");

Console.WriteLine();

int nYear = 0;

while (nYear <= nDuration)

{

decimal mPercent;

mPercent = mDeposit * (mRate / 100);

mDeposit = mDeposit + mPercent;

mDeposit = decimal.Round(mDeposit, 2);

Console.WriteLine(nYear + " - " + mDeposit);

++nYear;

}

}

}

}

}

Задание:

1.  Написать техническую спецификацию на программу. Смотри пример №1.

2.  Провести статический анализ кода, найти ошибки, описать и исправить их. При желании разрешается переписать программу на языки С/С++ или Java.

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

4.  Протестировать программу методом «Черного Ящика» используя написанную техническую спецификацию, найти ещё не найденные ошибки, описать и исправить их. Необходимо привести в отчёте тестовые данные и результаты работы программы. Смотри пример №2.

Примечание: если Вы не нашли ошибку при прохождении пункта 2 либо 3, а нашли в следующем (но по вашему мнению она должна была быть найдена в предыдущем), НЕ следует возвращаться к пройденным пунктам: опишите и исправьте ошибку там, где Вы её действительно нашли.


Техническая спецификация:

По задумке автора программа  рассчитывает сумму  депозита за год.

Программа на вход принимает три параметра:

·  mDeposit– сумма вложена\изъятая

·  mRate – процент под который положена\изъята сумма (введенный параметр должен соответствовать поставленным условям. Т.Е. значения параметра должны быть строго больше «0» и строго меньше значения параметра nMaxRateSize(В нашем случае nMaxRateSize = 20 ) В противном случае выводится сообщение о неверно заданном параметре расчета)- Также Зачем-то производится присваивание параметру mRate  значение «0»

·  nDuration – количество лет ( на который будет производиться расчет)

Тестовые данные тестирования методом «черного ящика»

Будем тестировать функцию рассчитывающую сумму депозита за определенный год

(Сумма Депозита за текущий год)  = (сумма Депозита за предыдущий год )+ (процент начисления)

Начальная сумма депозита -D

Период расчета – n

Проценты – P  - если 20<P<=0 – выдается сообщение о ошибке

Искомая Сумма Депозита – D(n)

=>пусть (1+P/100)=Z соответственно Тестируемая функция D(n)=D(Z)n                           

В програме реализована кодом

while (nYear <= nDuration)

{

decimal mPercent;

mPercent = mDeposit * (mRate / 100);

mDeposit = mDeposit + mPercent;

mDeposit = decimal.Round(mDeposit, 2);

Console.WriteLine(nYear + " - " + mDeposit);

++nYear;

}

НА мой взгляд  следует заменить на :

for (int nYear = 1 ; nYear <= nDuration ; nYear++)

{

mDeposit =*(1+mRate/100);

mDeposit = decimal.Round(mDeposit, nYear);

Console.WriteLine(nYear + " - " + mDeposit);

}

1)Нет необходимости пропечатывать n=0

2)меньше переменных и действий

Также если Значение процента Депозита ограничено условиями ввода, логично ограничить также и остальные параметры(Период расчета и Начальная сумма депозита)


исправленная версия программы после выполнения пункта 2,3,4

namespace Percent

{

public class Program

{

public static void Main(string[] args)

{

int nMaxRateSize = 20;

decimal nMaxDepositSize = 1000;

decimal nMaxDurationSize = 30;

// дополнительно обьявляю переменные

Console.WriteLine("Please enter the sum of your deposit");

string sDeposit = Console.ReadLine();

//Исправленно Readln -> Readline

decimal mDeposit = Convert.ToDecimal(sDeposit);

for (;(mDeposit <= 0 || mDeposit > nMaxDepositSize);)

{

Console.WriteLine("Deposit Cannot be negative and > " + nMaxDepositSize + "  \npease, enter your Deposit summ again\n");

sDeposit = Console.ReadLine();

mDeposit = Convert.ToDecimal(sDeposit);

}

//Вставленно условие проверки на входные данные mDeposit

Console.Write("Please, enter your percent's rate \n");

string sRate = Console.ReadLine();

decimal mRate = Convert.ToDecimal(sRate);

for (;(mRate <= 0 || mRate > nMaxRateSize);)

{

Console.WriteLine("Rate Cannot be negative and > " + nMaxRateSize + " \npease, enter your percent's rate again\n");

sRate = Console.ReadLine();

mRate = Convert.ToDecimal(sRate);

}

//исправленно условие проверки на входные данные mRate <= 0!!!

Console.WriteLine("Please, enter the number of years \n");

string sDuration = Console.ReadLine();

int nDuration = Convert.ToInt32(sDuration);

for (;(nDuration <= 0 || nDuration > nMaxDurationSize);)

{

Console.WriteLine("Number of ears Cannot be negative and > " + nMaxDurationSize + "  \npease, enter your Number of ears again\n");

sDuration = Console.ReadLine();

nDuration = Convert. ToInt32(sDuration);

}

//Вставленно условие проверки на входные данные mDuration

Console.WriteLine();

Console.WriteLine("Deposit = " + mDeposit);

Console.WriteLine("Percent rate = " + mRate + " %");

Console.WriteLine("The duration is " + nDuration + " years");

Console.WriteLine();

for (int nYear = 1 ; nYear <= nDuration ; nYear++)

{    

mDeposit *=(1+mRate/100);

mDeposit = decimal.Round(mDeposit, nYear);

Console.WriteLine(nYear + " - " + mDeposit);

}

Console.WriteLine("press enter plz");

string end = Console.ReadLine();

//дает возможность просмотреть результаты расчетов

}

}

}


Тестовые данные

D(0:1000] P(0:20] n(0:30]

D

P

N

Ожидаемые корни

Полученные корни

100

10

3

110;121;133.1

1 - 110;

2 - 121;

3 - 133.1

250

15

4

287.5;330.62;380.213;437.245

1 - 287.5

2 - 330.62

3 - 380.213

4 - 437.245

Фиктивные данные (D(n)<0 или любой из параметров не удовлетворяет условиям):

D

P

n

Ожидаемые корни

Полученные корни

0

10

2

Сообщение об ошибке

"Deposit Cannot be negative and > 1000

pease, enter your Deposit summ again

100

0

2

Сообщение об ошибке

Rate Cannot be negative and > 20

pease, enter your percent's rate again

100

10

0

Сообщение об ошибке

Number of ears Cannot be negative and > 30

pease, enter your Number of ears again

Примерные вопросы для подготовки защите:

1.  Что такое тестирование ПО? Назовите цели тестирования.

- Процесс выявления(исправления) неисправностей/ошибок в ПО. Цель – ПО=)

2.  Что такое анализ исходного кода программы? Назовите  преимущества и недостатки.

- Выявление преследуемых целей, способа их реализации на основания написанного для них кода(исходного).

3.  Что такое и чем отличаются статический и динамический анализ кода? Назовите  преимущества и недостатки каждого.

-Статический анализ – анализ без запуска программы. Преимущество: Использует сильнейший компилятор твой собственный мозг. В этом же и его недостаток. Динамический анализ –проводится непосредственно запуская программу и помогает выявить багги не проявляющие себя в статическом состоянии. Недостаток : Пока программа не запускается в нем нет смысла

Похожие материалы

Информация о работе