Надежность программного обеспечения

 

Министерство образования Республики Беларусь

БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Международный институт дистанционного образования

Кафедра информационных технологий











КОНТРОЛЬНАЯ РАБОТА

Надежность программного обеспечения




Выполнила

Захарик В.Н.








Минск 2014

Содержание


Введение

. Общее описание

.1 Функции продукта

.1.1 Работа в роли пользователя

.2 Пользовательские характеристики

.3 Общие ограничения

.4 Допущения и зависимости

.4.1 Операционные системы

.4.2 Зависимость от процессора

. Специальные требования

.1 Функциональные требования

.1.1 Пользовательский интерфейс

.1.2 Навигация

.1.3 Параметры геометрических фигур

.1.4 Вывод полученных данных

.1.5 Главное окно

Задание № 2.Модульное тестирование

. Обзор разработанного программного кода

. Вычисление цикломатического числа и построение графы каждого модуля

. Тестовые сценарии

.Тестирование

Литература


Введение


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

Программный продукт «Калькулятор», может использоваться для элементарных арифметических действий.

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

программный калькулятор модуль

1. Общее описание


.1 Функции продукта


В этом разделе описываются функциональные высокоуровневые свойства программного продукта «Калькулятор». Более подробное описание требований находится в разделе 2.0.


.1.1 Работа в роли пользователя

Программное средство Моделирование должен обеспечивать следующие возможности для пользования:

возможность ввода начальных чисел;

возможность выбора арифметических операций;

средства отображения результатов расчета;


.2 Пользовательские характеристики


Пользователями описываемого программного продукта могут являться любые люди умеющие обращаться с персональным компьютером.


.3 Общие ограничения


Ниже перечислены ограничения, которые могут повлиять на возможности команды разработчиков программного обеспечения (ПО):

·Ограничения, связанные с оборудованием: должна быть возможность эксплуатации программы на архитектуре ПК основанной на процессоре PentiumII и выше;

·Требования, накладываемые языками высокого уровня: в качестве среды программирования выбрать Visual Studeo C++ 2008.

1.4 Допущения и зависимости


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


.4.1 Операционные системы

Предполагается, что пользователь выполняет приложение на компьютере, работающем под управлением одной из следующих операционных систем: MicrosoftWindowsXP, MicrosoftWindowsNT 3/51 или выше, MicrosoftWindows 2000, MicrosoftWindows 7 Максимальная.


.4.2 Зависимость от процессора

Приложение не зависит от типа применяемого процессора. Перечисленные ранее допустимые операционные системы могут использоваться на платформах с процессорами x86, RISC, SPARC, Motorola или РРС.


2. Специальные требования


В этом разделе представлены детализованные требования, относящиеся к программному продукту «Калькулятор».


2.1 Функциональные требования


2.1.1 Пользовательский интерфейс

Пользовательский интерфейс для «Калькулятор» создается с использованием системы визуального проектирования, встроенной в Visual Studeo C++ 2008.


.1.2 Навигация

Главное окно ПП Visual Studeo C++ 2008, включает в себя следующие пункты:

.Отображение элементов управления для ввода данных

.Кнопки для выбора арифметических операций

.Отображение результата в текстовом окне


.1.3 Калькулятор

Главное окно содержит поля для ввода начальных значений.


Таблица 1. Поля ввода данных

ПолеТипОграниченияОписание, параметры, ограниченияtextBox1textBoxПоле предназначено только для ввода вещественных или целых числовых символов.Вводится число для арифметической операции.textBox2TextBoxПоле предназначено только для ввода строковых символов.Вводится знак арифметической операции.textBox3TextBoxПоле предназначено только для ввода вещественных или целых числовых символов.Вводится число для арифметической операции.

Таблица 2. Кнопки назначения знака арифметической операции

Название кнопкиТипОграниченияОписаниеbPlusButtonЗнак арифметической операции «+»bMinusButtonЗнак арифметической операции «-»bUmnozButtonЗнак арифметической операции «x»bDelitButtonЗнак арифметической операции «/»

.1.4 Вывод полученных данных

Результат выполнения арифметической операции выводится в поле textBox4.


Таблица 3Окно «textBox4»

Название элементаТипОграниченияОписаниеtextBox4TextBoxВыводится результат арифметической операции.

2.1.5 Главное окно

Пользователь имеет возможность ознакомиться со списком арифметических операций которые производит данный программный продукт.


.2 Требования к производительности


Требований к производительности не имеется.


Задание №2. Модульное тестирование


Провести обзор разработанного программного кода. В случае обнаружения ошибок составить отчет

Отдельные модули программы:

процедура нажатия на кнопку bPlus_Click(System::Object^ sender, System::EventArgs^ e);

- процедура нажатия на кнопку bMinus_Click(System::Object^ sender, System::EventArgs^ e);

процедура нажатия на кнопку bUmnoz_Click(System::Object^ sender, System::EventArgs^ e);

процедура нажатия на кнопку bDelit_Click(System::Object^ sender, System::EventArgs^ e);

процедура изменения содержимого текстового поля textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e);

функция PlusMinus(System::String ^Znak);

- функция Rezultat(void);

1.В ходе проведения обзора разработанного программного кода были обнаружены следующие ошибки:


Таблица 1. Ошибки обзора

№ ОшибкиНазвание модуля/функцииОписание ошибкиВажность ошибки (высокая, средняя, низкая)Ошибка исправлена Да/Нет1textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e);В процедуре textBox1_TextChanged () не проводилась проверка входных данных на возможность преобразования их в вещественный или целый типвысокаяДа1.Для каждого модуля построить графы и вычислить цикломатические числа.

Метрический показатель сложности или цикломатическое число G потокового графа определяется по формуле:

=R-V+2,


где G - минимальное количество тестовых проходов- количество ребер графа;- количество вершин графа.

Процедура нажатия на кнопку bPlus_Click(System::Object^ sender, System::EventArgs^ e);


=1-2+2=1


Процедура нажатия на кнопку bMinus_Click(System::Object^ sender, System::EventArgs^ e);


G=1-2+2=1


Процедура нажатия на кнопку bUmnoz_Click(System::Object^ sender, System::EventArgs^ e);


G=1-2+2=1


Процедура нажатия на кнопку bDelit_Click(System::Object^ sender, System::EventArgs^ e);


G=1-2+2=1


процедура изменения содержимого текстового поля textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e);


G=6-5+2=3


функция PlusMinus(System::String ^Znak);


G=4-4+2=2


функция Rezultat(void);


G=13-9+2=6


.Разработать тестовые сценарии для модульного тестирования


Таблица 2. Модуль bPlus _Click()

G№ сце-нарияОписание проходаКонтрольные примеры, позволяющие реализовать описанную ситуациюТест пройден Да/НетG=11a-bZ=1;Да

Таблица 3. Модуль textBox1_TextChanged()

G№ сценарияОписание проходаКонтрольные примеры, позволяющие реализовать описанную ситуациюТест пройден Да/НетG=31a-b-d-e-сtextBox3->Text=10 textBox2->Text=+ s=15 textBox4->Text=Rezultat();Да2a-b-e-сtextBox3->Text=10 textBox2->Text=+ s=0Да3a-сtextBox3->Text= textBox2->Text=Да

Таблица 4. Модуль PlusMinus

G№ сце-нарияОписание проходаКонтрольные примеры, позволяющие реализовать описанную ситуациюТест пройден Да/НетG=21a-b-ctextBox4->Text="15"Да2a-d-ctextBox4->Text=""Да

Таблица 5. Модуль Rezultat

G№ сценарияОписание проходаКонтрольные примеры, позволяющие реализовать описанную ситуациюТест пройден Да/НетG=61a-b-s-d-ctextBox1->Text=10 Z=1Да2a-b-g-d-ctextBox1->Text=10 Z=2Да3a-b-f-d-ctextBox1->Text=10 Z=3Да4a-b-e-d-ctextBox1->Text=10 Z=4Да5a-b-k-d-ctextBox1->Text=10 Z=0Да6a-ctextBox1->Text= Z=0Да

Все тесты пройдены.

Реализовать рассмотренные выше проходы Microsoft::VisualStudio::TestTools::UnitTesting.

Листинг тэста:


#include "StdAfx.h"namespace Microsoft::VisualStudio::TestTools::UnitTesting;namespace Calculator;TestProject1 {namespace System;class Form1Test;

/// <summary>

///Это класс теста для Form1Test, в котором должны

///находиться все модульные тесты Form1Test

///</summary>

[TestClass]ref class Form1Test

{: Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ testContextInstance;

/// <summary>

///Получает или устанавливает контекст теста, в котором предоставляются

///сведения о текущем тестовом запуске и обеспечивается его функциональность.

///</summary>: property Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ TestContext

{::VisualStudio::TestTools::UnitTesting::TestContext^ get()

{testContextInstance;

}::Void set(Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ value)

{= value;

}

#pragma region Дополнительные атрибуты теста

//

//При написании тестов можно использовать следующие дополнительные атрибуты:

//

//ClassInitialize используется для выполнения кода до запуска первого теста в классе

//public: [ClassInitialize]

//static System::Void MyClassInitialize(TestContext^ testContext)

//{

//ClassCleanup используется для выполнения кода после завершения работы всех тестов в классе

//public: [ClassCleanup]

//static System::Void MyClassCleanup()

//{

//TestInitialize используется для выполнения кода перед запуском каждого теста

//public: [TestInitialize]

//System::Void MyTestInitialize()

//{

//TestCleanup используется для выполнения кода после завершения каждого теста

//public: [TestCleanup]

//System::Void MyTestCleanup()

//{

#pragma endregion

/// <summary>

///Тест для PlusMinus

///</summary>: [TestMethod]

[DeploymentItem(L"Calculator.exe")]PlusMinusTest()

{::Form1_Accessor^ target = (gcnew Calculator::Form1_Accessor()); // TODO: инициализация подходящего значения^ Znak = System::String::Empty; // TODO: инициализация подходящего значенияexpected = false; // TODO: инициализация подходящего значенияactual;= target->PlusMinus(Znak);::AreEqual(expected, actual);::Inconclusive(L"Проверьте правильность этого метода теста.");

}

/// <summary>

///Тест для Rezultat

///</summary>: [TestMethod]

[DeploymentItem(L"Calculator.exe")]RezultatTest()

{::Form1_Accessor^ target = (gcnew Calculator::Form1_Accessor()); // TODO: инициализация подходящего значения^ expected = System::String::Empty; // TODO: инициализация подходящего значения^ actual;= target->Rezultat();::AreEqual(expected, actual);::Inconclusive(L"Проверьте правильность этого метода теста.");

}

/// <summary>

///Тест для textBox1_TextChanged

///</summary>: [TestMethod]

[DeploymentItem(L"Calculator.exe")]textBox1_TextChangedTest()

{::Form1_Accessor^ target = (gcnew Calculator::Form1_Accessor()); // TODO: инициализация подходящего значения^ sender = nullptr; // TODO: инициализация подходящего значения::EventArgs^ e = nullptr; // TODO: инициализация подходящего значения>textBox1_TextChanged(sender, e);::Inconclusive(L"Невозможно проверить метод, не возвращающий значение.");

}TestProject1 {

}

Результат тестирования функции PlusMinus();

public: [TestMethod]

[DeploymentItem(L"Calculator.exe")]PlusMinusTest()

{::Form1_Accessor^ target = (gcnew Calculator::Form1_Accessor()); // TODO: инициализация подходящего значения^ Znak = "+"; // TODO: инициализация подходящего значенияexpected = true; // TODO: инициализация подходящего значенияactual;= target->PlusMinus(Znak);::IsTrue(actual==expected);

}



Литература


1.Канер, C. Тестирование программного обеспечения / C. Канер [и др.]. - К.: ДиаСофт, 2001.- 544 с.

2.Калбертсон, Р. Быстрое тестирование / Р. Калбертсон, К. Браун, Г. Кобб. - М.: Вильямс, 2002. - 384 с.

3.Майерс, Г. Искусство тестирования программ / Г. Майерс. - М.: Финансы и статистика, 1982.

.Майерс, Г. Надежность программного обеспечения / Г. Майерс. - М., 1980.

.Липаев, В.В. Тестирование программных средств / В.В. Липаев. - М., 1999.

.Липаев, В.В. Обеспечение качества программных средств: методы и стандарты / В.В. Липаев. - М., 2001.

.Липаев, В.В. Надежность программных средств / В.В. Липаев. - М., 1998.


Приложение листинг программы


#pragma onceCalculator {namespace System;namespace System::ComponentModel;namespace System::Collections;namespace System::Windows::Forms;namespace System::Data;namespace System::Drawing;

/// <summary>

/// Сводка для Form1

/// Внимание! При изменении имени этого класса необходимо также изменить

/// свойство имени файла ресурсов ("Resource File Name") для средства компиляции управляемого ресурса,

/// связанного со всеми файлами с расширением.resx, от которых зависит данный класс. В противном случае,

/// конструкторы не смогут правильно работать с локализованными

/// ресурсами, сопоставленными данной форме.

/// </summary>ref class Form1 : public System::Windows::Forms::Form

{:(void)

{();

//

//TODO: добавьте код конструктора

//

}:

/// <summary>

/// Освободить все используемые ресурсы.

/// </summary>

~Form1()

{(components)

{components;

}: System::Windows::Forms::TextBox^ textBox1;: : System::Windows::Forms::TextBox^ textBox2;: System::Windows::Forms::TextBox^ textBox3;: System::Windows::Forms::TextBox^ textBox4;: System::Windows::Forms::Label^ label1;: System::Windows::Forms::Button^ bPlus;: System::Windows::Forms::Button^ bMinus;: System::Windows::Forms::Button^ bUmnoz;: System::Windows::Forms::Button^ bDelit;:

/// <summary>

/// Требуется переменная конструктора.

/// </summary>::ComponentModel::Container ^components;::Int32 Z;

#pragma region Windows Form Designer generated code

/// <summary>

/// Обязательный метод для поддержки конструктора - не изменяйте

/// содержимое данного метода при помощи редактора кода.

/// </summary>InitializeComponent(void)

{>textBox1 = (gcnew System::Windows::Forms::TextBox());>textBox2 = (gcnew System::Windows::Forms::TextBox());>textBox3 = (gcnew System::Windows::Forms::TextBox());>textBox4 = (gcnew System::Windows::Forms::TextBox());>label1 = (gcnew System::Windows::Forms::Label());>bPlus = (gcnew System::Windows::Forms::Button());>bMinus = (gcnew System::Windows::Forms::Button());>bUmnoz = (gcnew System::Windows::Forms::Button());>bDelit = (gcnew System::Windows::Forms::Button());>SuspendLayout();

//

// textBox1

// >textBox1->BorderStyle = System::Windows::Forms::BorderStyle::None;>textBox1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>textBox1->Location = System::Drawing::Point(76, 35);>textBox1->Name = L"textBox1";>textBox1->Size = System::Drawing::Size(162, 22);>textBox1->TabIndex = 0;>textBox1->TextChanged += gcnew System::EventHandler(this, &Form1::textBox1_TextChanged);

//

// textBox2

// >textBox2->BorderStyle = System::Windows::Forms::BorderStyle::None;>textBox2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>textBox2->Location = System::Drawing::Point(208, 63);>textBox2->Name = L"textBox2";>textBox2->ReadOnly = true;>textBox2->Size = System::Drawing::Size(30, 22);>textBox2->TabIndex = 0;

//

// textBox3

// >textBox3->BorderStyle = System::Windows::Forms::BorderStyle::None;>textBox3->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>textBox3->Location = System::Drawing::Point(76, 91);>textBox3->Name = L"textBox3";>textBox3->ReadOnly = true;>textBox3->Size = System::Drawing::Size(162, 22);>textBox3->TabIndex = 0;

//

// textBox4

// >textBox4->BorderStyle = System::Windows::Forms::BorderStyle::None;>textBox4->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>textBox4->Location = System::Drawing::Point(76, 119);>textBox4->Name = L"textBox4";>textBox4->ReadOnly = true;>textBox4->Size = System::Drawing::Size(162, 22);>textBox4->TabIndex = 0;

//

// label1

// >label1->AutoSize = true;>label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>label1->Location = System::Drawing::Point(49, 117);>label1->Name = L"label1";>label1->Size = System::Drawing::Size(21, 24);>label1->TabIndex = 1;>label1->Text = L"=";

//

// bPlus

// >bPlus->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>bPlus->Location = System::Drawing::Point(269, 34);>bPlus->Name = L"bPlus";>bPlus->Size = System::Drawing::Size(38, 32);>bPlus->TabIndex = 2;>bPlus->Text = L"+";>bPlus->UseVisualStyleBackColor = true;>bPlus->Click += gcnew System::EventHandler(this, &Form1::bPlus_Click);

//

// bMinus

// >bMinus->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>bMinus->Location = System::Drawing::Point(313, 35);>bMinus->Name = L"bMinus";>bMinus->Size = System::Drawing::Size(38, 32);>bMinus->TabIndex = 2;>bMinus->Text = L"-";>bMinus->UseVisualStyleBackColor = true;>bMinus->Click += gcnew System::EventHandler(this, &Form1::bMinus_Click);

//

// bUmnoz

// >bUmnoz->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>bUmnoz->Location = System::Drawing::Point(357, 35);>bUmnoz->Name = L"bUmnoz";>bUmnoz->Size = System::Drawing::Size(38, 32);>bUmnoz->TabIndex = 2;>bUmnoz->Text = L"x";>bUmnoz->UseVisualStyleBackColor = true;>bUmnoz->Click += gcnew System::EventHandler(this, &Form1::bUmnoz_Click);

//

// bDelit

// >bDelit->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, _cast<System::Byte>(204)));>bDelit->Location = System::Drawing::Point(401, 35);>bDelit->Name = L"bDelit";>bDelit->Size = System::Drawing::Size(38, 32);>bDelit->TabIndex = 2;>bDelit->Text = L"/";>bDelit->UseVisualStyleBackColor = true;>bDelit->Click += gcnew System::EventHandler(this, &Form1::bDelit_Click);

//

// Form1

// >AutoScaleDimensions = System::Drawing::SizeF(6, 13);>AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;>ClientSize = System::Drawing::Size(593, 305);>Controls->Add(this->bDelit);>Controls->Add(this->bUmnoz);>Controls->Add(this->bMinus);>Controls->Add(this->bPlus);>Controls->Add(this->label1);>Controls->Add(this->textBox4);>Controls->Add(this->textBox3);>Controls->Add(this->textBox2);>Controls->Add(this->textBox1);>Name = L"Form1";>Text = L"Калькуляток";>Load += gcnew System::EventHandler(this, &Form1::Form1_Load);>ResumeLayout(false);>PerformLayout();

}

#pragma endregion

//нажимаем кнопку +: System::Void bPlus_Click(System::Object^ sender, System::EventArgs^ e)

{("+");=1;

}

// функция выстовления знаков::Boolean PlusMinus(System::String ^Znak)

{(this->textBox4->Text!="")

{->Text=textBox4->Text;->Text=Znak;->Text="";->Text="";

}

{->Text=Znak;->Text=textBox1->Text;->Text="";

}true;

}

//нажимаем кнопку -: System::Void bMinus_Click(System::Object^ sender, System::EventArgs^ e)

{("-");=2;

}

//нажимаем кнопку x: System::Void bUmnoz_Click(System::Object^ sender, System::EventArgs^ e)

{("x");=3;

}

//нажимаем кнопку /: System::Void bDelit_Click(System::Object^ sender, System::EventArgs^ e)

{("/");=4;

}

//изменяем значение поля ввода данных: System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e)

{(textBox3->Text!="" && textBox2->Text!="")

{//если текстовые поля не пусты::Double s=0;(System::Double::TryParse(textBox1->Text,s))//проверка на значение поля->Text=Rezultat();

}

//результат вычислений::String ^Rezultat(void)

{::String ^Rez="";//результат вычислений

(textBox1->Text!="")//если текстовое поле не пустое

{(Z)

{1: //если count = 2

{

Rez=System::Convert::ToString(System::Convert::ToDouble(textBox3->Text)+System::Convert::ToDouble(textBox1->Text)); // выполнить сложение;

}2: // если count = 2

{

Rez=System::Convert::ToString(System::Convert::ToDouble(textBox3->Text)-System::Convert::ToDouble(textBox1->Text)); // выполнить сложение;

}3: // если count = 3

{

Rez=System::Convert::ToString(System::Convert::ToDouble(textBox3->Text)*System::Convert::ToDouble(textBox1->Text)); // выполнить сложение;

}4: // если count = 4

{

Rez=System::Convert::ToString(System::Convert::ToDouble(textBox3->Text)/System::Convert::ToDouble(textBox1->Text)); // выполнить сложение;

}

: // если count равно любому другому значению="";

}Rez;

}

//загрузка формы: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {

Z=0;//значение знака

}


Министерство образования Республики Беларусь БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Международный институт дистанционного образования Кафедра

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ