Скачиваний:
79
Добавлен:
09.05.2014
Размер:
61.95 Кб
Скачать

Санкт-Петербургский Государственный Университет Информационных Технологий, Механики и Оптики

Кафедра Информационных Технологий и Программирования

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

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

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

Шевченко Алексей

Тихонов Дмитрий

Группа: 5511

Преподаватель:

Санкт-Петербург

2008 год

1. Данный пример творчества неизвестного программиста получает при старте 3 переменные: сумму вклада, процентную ставку и время вклада в годах. Далее эти данные выводятся на консоль, а на их основе производится вклада с суммированием процентов на время срока вклада, и также выводится на консоль на каждый год. Если сумма вклада меньше либо равно нулю – ошибка, если процент больше 20 либо отрицателен – ошибка, если время вклада меньше, либо равно нулю – ошибка.

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

Исходные данные: код программы с ошибками на языке 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.

//1 итерация

using System;

using System.Collections.Generic;

using System.Text;

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.ReadLine();

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;

}

Console.ReadLine();

}

}

}

}

Баги:

  • Отсутствует подключение системных классов

  • Console.ReadLn() – это не паскаль

  • Отсутсвует проверка длительности вклада на отрицательные значения nDuration <= 0

  • Логическая ошибка: начинает отсчет с нулевого года, лечится int nYear = 1;

  • Нет проверок на пустые строки. Не ловит исключения ошибок конвертации.

//итоговый код

using System;

using System.Collections.Generic;

using System.Text;

namespace Percent

{

public class Program

{

public static void Main(string[] args)

{

int nMaxRateSize = 20;

decimal mDeposit=0;

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

string sDeposit = Console.ReadLine();

try

{

mDeposit = Convert.ToDecimal(sDeposit);

}

catch (FormatException)

{

Console.WriteLine("Exception thrown, program handled ");

return;

}

if (mDeposit <= 0)

{

Console.WriteLine("You need more money \n");

}

else

{

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

string sRate = Console.ReadLine();

decimal mRate = 0;

try

{

mRate = Convert.ToDecimal(sRate);

}

catch (FormatException)

{

Console.WriteLine("Exception thrown, program handled");

return;

}

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=0;

try

{

nDuration = Convert.ToInt32(sDuration);

}

catch (FormatException)

{

Console.WriteLine("Exception thrown, program handled ");

return;

}

if (nDuration <= 0)

{

Console.WriteLine("We recieve deposits atlist for a year/ \n");

}

else

{

Console.WriteLine();

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

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

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

Console.WriteLine();

int nYear = 1;

while (nYear <= nDuration)

{

decimal mPercent;

mPercent = mDeposit * (mRate / 100);

mDeposit = mDeposit + mPercent;

mDeposit = decimal.Round(mDeposit, 2);

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

++nYear;

}

}

}

}

}

}

}

sDeposit

sRate

sDuration

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

Полученные результаты

0

0

0

Ошибка

Ошибка

1

0

0

Ошибка

Ошибка

1

10

1

1,1

1,1

-100

20

30

Ошибка

Ошибка

100

15

-1

Ошибка

Ошибка

100

35

12

Ошибка

Ошибка

4. Итоги: Цель работы достигнута, тестирование проведено успешно, программа заработала так как должна. Приобрел навыки написания отчетов по тестированию, вспомнил как ловить исключения в C#.

Соседние файлы в папке все лабы итип