Файл: Отладка и тестирование программ: основные подходы и ограничени.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 29.03.2023

Просмотров: 228

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

3. Запуск теста - тест выполнился и завершился: это значит, что решение теста оказалось правильным и ошибок не найдено.

  1. Выполнение тестового цикла. Тестирование выполнено с помощью среды разработки Visual Studio на основе шаблона Unit-тест. Для тестирования был создан тестовый драйвер UnitTest1, в котором реализована вся функциональность тестов:
    1. Тест 1: Тестирование методов Encrypt и Decrypt класса Form1
      Описание тестового случая: проверка шифрования данных, и работа обратной работы алгоритма, с сравнением полученных значений.
      Начальные условия: указана строковая переменная, которая содержит данные. Проведение алгоритма работы двух методов на основе данных в переменной.
      Ожидаемый результат: полученная переменная должна быть равной указанным данным.
      Полученный результат: тест выполнен успешно (рисунок 3).

Рисунок 3 - Тесты выполнены успешно

    1. Тест 2: Тестирование класса исключения KeyException
      Описание тестового случая: проверка методов при нулевом значении переменной «Ключа».
      Начальные условия: «Ключ» пустой.
      Ожидаемый результат: Оповещение пользователя об ошибке.
      Полученный результат: тест выполнен успешно (рисунок 3).
    2. Тест 3: Тестирование класса исключения TextException
      Описание тестового случая: проверка методов при нулевом значении переменной «Данные».
      Начальные условия: «Данные» пустой.
      Ожидаемый результат: Оповещение пользователя об ошибке.
      Полученный результат: тест выполнен успешно (рисунок 3).

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

Разработка через тестирование - техника программирования, при которой модульные тесты для программы или ее фрагмента пишутся до самой программы и, по существу, управляют ее разработкой.

Методика разработки через тестирование позволяет получить ответы на вопросы об организации автоматических тестов и выработке определенных навыков тестирования. Это предсказуемый способ разработки программ. Разработчик знает, когда работу следует считать законченной, и больше нет необходимости беспокоиться о появлении очередной ошибки.

Заключение

В итоге, важность этапов тестирования и отладки программного продукта заключается:


  1. Во-первых, обеспечить разработку продукта с заявленным качеством;
  2. Во-вторых, предотвратить значительные временные затраты на исправление несоответствий с предъявленными требованиями к проекту;
  3. В-третьих, предотвратить финансовые затраты, так как, чем раньше выявлено несоответствие, тем дешевле обходится исправление;
  4. В-четвертых - обеспечить безупречную репутацию перед заказчиком и сохранить или даже поднять место компании на рынке разработок ПО.

Практическая значимость полученных результатов:

  • Определение понятий “тестирование” и “отладка” и рассмотреть этапы развития;
  • Исследование видов тестирования;
  • Изучение методов отладки и виды ошибок;
  • Анализирование методов тестирования и отладки;
  • Практическое применение изученного материала на основе информационной системы.

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

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

Теоретические навыки были закреплены путем проведения практики на информационной системе «Программа по шифрованию/дешифрованию текстовых файлов». С помощью применения метода модульного тестирования и использования точек останова, удалось предусмотреть ошибки программы и исправить их на начальном уровне разработки. Модульное тестирование способствовало быстрому разбору программы на несколько частей, благодаря чему получилось эффективнее провести проверку на наличие ошибок.

Тестирование и отладка играют важную роль в процессе разработки и создания программного обеспечения. Тестирование производится каждый раз, как только были произведения в исходном коде программы. Любое незначительное изменение, должно тщательно тестироваться на наличие допущенных разработчиком ошибок.

Библиография

  1. Тестирование программного обеспечения, фундаментальные концепции менеджмента бизнес-приложений / Канер Сэм и др.; Под ред. Ю. Н. Артеменко; ДиСофт, 2001.
  2. Программное обеспечение и его разработка / Дж. Фокс; - Мир, 1985. - С. 179-295.
  3. Индивидуальная отладка программ / Ю.М. Безбородов; - Наука, 1982. - С. 9-79.
  4. Тестирование программ / В.В. Липаев; - Радио и связь, 1986. - С. 15-47.
  5. Введение в технологию программирования (конспект лекций) / Е. А. Жоголев; - ДИАЛОГ-МГУ, 1994.
  6. Индивидуальная отладка программ / Ю. М. Безбородов; - Наука, 1982. - С. 9-79.
  7. Стиль, разработка, эффективность, отладка и испытание программ / Д. Ван Тассел; - Мир, 1985. - С. 179-295.
  8. Тестирование программного обеспечения (Базовый курс / 2-е издание) / С. С. Куликов; - Четыре четверти, 2017. - 312 с.
  9. Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложения / Канер Сэм и др.; - ДиаСофт, 2001. - 544 с.
  10. Управление качеством разработки программного обеспечения / Учебно-методическое пособие; - С-ПГУИТМО.
  11. Тестирование и отладка программного обеспечения. Методические указания для выполнения контрольной работы / Ю. Б. Попова.

Приложение А. Листинг программы по шифрованию файлов

using System;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Security.Cryptography;

namespace FileEncryption

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void buttonFile_Click(object sender, EventArgs e)

{

openFileDialog1.FileName = null;

if (openFileDialog1.ShowDialog() == DialogResult.Cancel)

return;

textBoxFile.Text = openFileDialog1.FileName;

}

public static string Encrypt(string text, string key)

{

if (key.Length == 0)

throw new KeyException();

if (text.Length == 0)

throw new TextException();

TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider();

MD5CryptoServiceProvider hashMD5Provider = new MD5CryptoServiceProvider();

byte[] keyToByte = hashMD5Provider.ComputeHash(Encoding.UTF8.GetBytes(key));

byte[] textToByte = Encoding.UTF8.GetBytes(text);

provider.Key = keyToByte;

provider.Mode = CipherMode.ECB;

string encrypted = Convert.ToBase64String(provider.CreateEncryptor().TransformFinalBlock(textToByte, 0, textToByte.Length));

return encrypted;

}

public static string Decrypt(string encryptedText, string key)

{

if (key.Length == 0)

throw new KeyException();

if (encryptedText.Length == 0)

throw new TextException();

TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider();

MD5CryptoServiceProvider hashMD5Provider = new MD5CryptoServiceProvider();

byte[] keyToByte = hashMD5Provider.ComputeHash(Encoding.UTF8.GetBytes(key));

byte[] textToByte = Convert.FromBase64String(encryptedText);

provider.Key = keyToByte;

provider.Mode = CipherMode.ECB;

string decryptText = Encoding.UTF8.GetString(provider.CreateDecryptor().TransformFinalBlock(textToByte, 0, textToByte.Length));

return decryptText;

}

public void EncryptFile()

{

try

{

try

{

string s = File.ReadAllText(textBoxFile.Text);

string FileText = Encrypt(s, textBoxKey.Text);

StreamWriter sw = new StreamWriter(textBoxFile.Text);

sw.WriteLine(FileText);

sw.Close();

timer1.Start();

}

catch (KeyException ex)

{

MessageBox.Show(ex.Message);

}

}

catch(TextException e)

{

MessageBox.Show(e.Message);

}

}

public void DecryptFile()

{

try

{

try

{

string s = File.ReadAllText(textBoxFile.Text);

string FileText = Decrypt(s, textBoxKey.Text);

StreamWriter sw = new StreamWriter(textBoxFile.Text);

sw.WriteLine(FileText);

sw.Close();

timer1.Start();

}

catch (KeyException ex)

{

MessageBox.Show(ex.Message);

}

}

catch (TextException e)

{

MessageBox.Show(e.Message);

}

}

private void buttonStart_Click(object sender, EventArgs e)

{

progressBar1.Value = 0;

if (radioButtonEncrypt.Checked == true)

{

EncryptFile();

}

else

{

DecryptFile();

}

}

private void timer1_Tick(object sender, EventArgs e)

{

if(progressBar1.Value == 100)

{

timer1.Stop();

}

else

{

progressBar1.Value = progressBar1.Value + 10;

}

}

private void buttonCancel_Click(object sender, EventArgs e)

{

if (textBoxFile.Text == "")

{

this.Close();

}

else

{

timer1.Stop();

progressBar1.Value = 0;

if (radioButtonEncrypt.Checked == true)

{

DecryptFile();

}

else

{

EncryptFile();

}

}

}

}

[Serializable]

public class KeyException:Exception

{

public KeyException() : base("Поле Ключ пустое. Введите ключ.") { }

}

[Serializable]

public class TextException : Exception

{

public TextException() : base("Файл не найден. Добавьте файл.") { }

}

}

Приложение B. Листинг тестового проекта