Главная страница

Программная инженерия лабораторный практикум


Скачать 1.48 Mb.
НазваниеПрограммная инженерия лабораторный практикум
Дата07.10.2019
Размер1.48 Mb.
Формат файлаpdf
Имя файлаprogrammnaya-inzheneriya-lab-praktikum-(pie-2013g).pdf
ТипПрактикум
#88973
страница4 из 5
1   2   3   4   5
34
Рис. 6.1. Диаграмма состояний для моделирования поведения банкомата
Контрольные вопросы
1. Поясните два подхода к моделированию поведения системы.
Объясните достоинства и недостатки каждого из этих подходов.
2. Охарактеризуйте вершины и дуги диаграммы схем состоя- ний. В чем состоит назначение этой диаграммы?
3. Как отображаются действия в состояниях диаграммы схем состояний?
4. Как показываются условные переходы между состояниями?
5. Как задаются вложенные состояния в диаграммах схем со- стояний?
6. Поясните понятие исторического подсостояния.

35
Лабораторная работа №7
РЕАЛИЗАЦИЯ КОМПОНЕНТОВ ПРОГРАММНЫХ СРЕДСТВ
Программа выполнения работы
1.Изучить методику представления на физическом уровне эле- ментов программных систем с помощью диаграмм компонентов
UML.
2.Изучить технологию построения диаграмм компонентов UML в среде Rational Rose.
Методически указания
Диаграмма компонентов служит частью физического представ- ления модели, играет важную роль в процессе ООАП и является не- обходимой для генерации программного кода. Общие рекомендации по построению диаграммы компонентов были рассмотрены в лекции
12 курса «Основы объектно-ориентированного моделирования в но- тации UML». Для разработки диаграмм компонентов в браузере про- екта предназначено отдельное представление
компонентов
(Component View), в котором уже содержится диаграмма компонен-
тов с пустым содержанием и именем по умолчанию Main (Главная).
Активизация диаграммы компонентов может быть выполнена одним из следующих способов:
- Щелкнуть на кнопке с изображением диаграммы компонен-
тов на стандартной панели инструментов.
- Раскрыть представление компонентов в браузере (Component
View) и дважды щелкнуть на пиктограмме Main (Главная).
- Через пункт меню Browse Component Diagram (Браузер
Диаграмма компонентов).
В результате выполнения этих действий появляется новое окно с чистым рабочим листом диаграммы компонентов и специальная па- нель инструментов, содержащая кнопки с изображением графических примитивов, необходимых для разработки диаграммы компонентов
(табл. 7.1).

36
Таблица 7.1.
Назначение кнопок специальной панели инструментов диаграм-
мы компонентов
Графическое изображение
Всплывающая подсказка
Назначение кнопки
Selection Tool
Превращает изображение курсора в форму стрелки для последующего выделения эле- ментов на диаграмме
Text Box
Добавляет на диаграмму текстовую область
Note
Добавляет на диаграмму примечание
Anchor Note to
Item
Добавляет на диаграмму связь примечания с соответствующим графическим элемен- том диаграммы
Component
Добавляет на диаграмму компонент
Package
Добавляет на диаграмму пакет
Dependency
Добавляет на диаграмму отношение зави- симости
Subprogram
Specification
Добавляет на диаграмму спецификацию подпрограммы
Subprogram Body
Добавляет на диаграмму тело подпрограм- мы
Main Program
Добавляет на диаграмму главную програм- му
Package
Specification
Добавляет на диаграмму спецификацию па- кета
Package Body
Добавляет на диаграмму тело пакета
Task Specification
Добавляет на диаграмму спецификацию за- дачи
Task Body
Добавляет на диаграмму тело задачи
Generic
Subprogram
Добавляет на диаграмму типовую подпро- граммы(по умолчанию отсутствует)
Generic Package
Добавляет на диаграмму типовой пакет (по умолчанию отсутствует)
Database
Добавляет на диаграмму базу данных (по умолчанию отсутствует)

37
Как видно из этой таблицы, по умолчанию на панели инстру- ментов отсутствуют только три графических элемента из рассмот- ренных ранее элементов диаграммы компонентов, а именно - кнопки с пиктограммами типовой подпрограммы, типового пакета и базы данных. При необходимости их можно добавить на специальную па- нель диаграммы компонента стандартным способом.
Таблица 7.2.
Графическое изображение стереотипов компонентов и
их характеристика
Графическое изобра- жение и имя по умол- чанию
Название стереотипа
Характеристика стереотипа компонента
Subprogram
Specification
Спецификация подпрограммы. Содержит описание переменных, процедур и функ- ций и не содержит определений классов
Subprogram
Body
Тело подпрограммы. Содержит реализа- цию процедур и функций, не относящих- ся к каким-то классам, при этом не со- держит определений классов или реали- заций операций других классов
Main Program
Главная программа. Реализует базовую логику работы программного приложе- ния и содержит ссылки на другие компо-
ненты модели
Package
Specification
Спецификация пакета. Содержит опреде- ление класса, его атрибутов и операций.
В языке программирования С++ специ- фикации пакета соответствует отдельный файл с расширением «h»

38
Package Body
Тело пакета. Содержит код реализации операций класса. В языке программиро- вания С++ спецификации пакета соответ- ствует отдельный файл с расширением
«cpp»
Task
Specification
Спецификация задачи. Может содержать определение класса, его атрибутов и опе- раций, которые предполагается исполь- зовать в независимом потоке управления
Task Body
Тело задачи. Может содержать реализа- цию операций класса, которые имеют не- зависимый поток управления.
Generic
Subprogram
Типовая подпрограмма. Содержит опи- сание переменных, процедур и функций, которые могут быть использованы в не- скольких программных приложениях.
При этом типовая подпрограмма не со- держит определений классов
Generic
Package
Типовой пакет. Содержит определение класса, его атрибутов и операций, кото- рое может быть использовано в несколь- ких программных приложениях
Database
База данных. Содержит определение од- ного или нескольких классов, их атрибу- тов и, возможно, операций. При этом со- ответствующие классы могут быть реа- лизованы в форме одной или нескольких таблиц базы данных
Использование рассмотренных стереотипов существенно уве- личивают наглядность графического представления диаграммы ком-
понентов и позволяют архитектору уточнить характер реализации модели программистом на выбранном языке программирования.
Для завершения построения диаграммы компонентов рассмат- риваемого примера следует выполнить следующие действия:
1. Добавить компонент с именем: Устройства Банкомата, для которого задать стереотип Task Specification.

39
2. Добавить компоненты с именами: Устройство чтения кар- точки, Клавиатура Банкомата, Принтер Банкомата, Экран Банкомата,
Устройство выдачи наличных, для которых задать стереотип Task
Body.
3. Добавить
зависимость от
компонента с именем
MainATM.exe к компоненту с именем Устройства Банкомата.
4. Добавить зависимость от компонента с именем Устройство чтения карточки к компоненту с именем Устройства Банкомата.
5. Добавить зависимость от компонента с именем Клавиатура
Банкомата к компоненту с именем Устройства Банкомата.
6. Добавить зависимость от компонента с именем Принтер
Банкомата к компоненту с именем Устройства Банкомата.
7. Добавить зависимость от компонента с именем Экран Бан- комата к компоненту с именем Устройства Банкомата.
8. Добавить зависимость от компонента с именем Устройство выдачи наличных к компоненту с именем Устройства Банкомата.
Построенная таким образом диаграмма компонентов будет иметь следующий вид (рис. 7.1).
Рис. 7.1. Окончательный вид диаграммы компонентов разрабатываемой
модели управления

40
Лабораторная работа №8
ТЕСТИРОВАНИЕ И ОТЛАДКА ПРОГРАММНЫХ СРЕДСТВ
Цель работы
:
получить навыки тестирования модулей в среде MS
Visual Studio .Net
Программа выполнения работы
1. Изучить возможности модульного тестирования в MS Visual
Studio средствами
Nunit и Unit Testing Framework
2. Выполнить тестирование заданного модуля программы на языке C#
Содержание отчета
1.Тестовые варианты.
2. Протокол тестирования заданных модулей ( классов)
Методически указания
Unit-тестирование средствами .NET
Основная идея юнит (или модульного, как его еще называют) тестирования – тестирование отдельных компонентов программы, т.е. классов и их методов. При работе в среде Visual Studio .Net получили распространения следующие два средства модульного тестирования:
Nunit и Unit Testing Framework.
Unit Testing Framework — это встроенная в Visual Studio система тестирования, разрабатываемая Майкрософт, постоянно развиваю- щаяся. Ее особенность - хорошая интеграция в IDE и функция под- счета процента покрытия кода в программе.
Юнит-тесты кода
Рассмотрим тестированию кода на примере небольшого
ASP.NET приложение с реализацией шаблона MVC. Модель пред- ставляет собой отдельную сборку под названием DAL и включает в себя враппер доступа к БД. Одним из требований было использова- ние именно DataReader в ADO.NET. Настройки, как это принято, хра- нятся в web.config.
Код для тестирования

41
namespace LinkCatalog.DAL
{
public
class
UserModel
{
...........
public
static
int
GetUserIdByName(string username)
{
string query = "
SELECT
ID
FROM
Users
WHERE
Login = @login;";
DB.
get
().CommandParameters.
Add
(
new
SqlParameter("@login", username));
int
id = -1;
int
.TryParse(DB.
get
().GetOneCell(query).ToString(),
out
id);
return
id;
}
}
public
class
DB
{
...........
private
static
DB instance;
public
static
DB
get
()
{
if
(instance ==
null
)
instance =
new
DB();
return
instance;
}
private SqlConnection
connection
;
private SqlDataReader reader;
public
List CommandParameters;
private DB()
{
this.
connection
=
new
SqlConnection(WebConfigurationManager.ConnectionS
trings["DBConnectionString"].ConnectionString);
this.CommandParameters =
new
List();
}
public
object
GetOneCell(string query)
{
SqlCommand sc =
new
SqlCommand(query, this.
connection
);
if
(this.CommandParameters.
Count
!= 0)
sc.
Parameters
.AddRange(this.CommandParameters.ToArray());
this.
connection
.
Open
();
object
res = sc.ExecuteScalar();
this.CommandParameters.Clear();
this.
Close
();
return
res;
}
}
}
* This source code was highlighted with Source Code Highlighter.

42
Добавляем в проект новый юнит-тест и получаем файл такого содержания
:
using
System;
using
System.Text;
using
System.Collections.Generic;
using
System.Linq;
using
Microsoft.VisualStudio.TestTools.UnitTesting;
namespace LinkCatalog.Tests
{
[TestClass]
public
class
UserModel_Tests
{
[TestMethod]
public
void TestMethod1()
{
}
}
}
* This source code was highlighted with Source Code Highlighter.

43
Атрибут [TestClass] означает, что этот класс содержит тестовые методы, а [TestMethod] – что такой метод представляет собой кон- кретный метод.
Добавляем в проект ссылку на сборку DAL и импортируем про- странство имен LinkCatalog.DAL. Подготовительные работы закон- чены, настало время писать тесты.
using
Microsoft.VisualStudio.TestTools.UnitTesting;
namespace LinkCatalog.Tests
{
using
LinkCatalog.DAL;
[TestClass]
public
class
UserModel_Tests
{
[TestMethod]
public
void GetUserById_Test()
{
Assert.AreNotEqual(UserModel.GetUserIdByName("
Admin
"), -1);
}
}
}
* This source code was highlighted with Source Code Highlighter.
У нас всегда есть администратор с таким логином и потому его иден- тификатор не может быть -1. Запускаем тест – и ошибка:
Выскочило исключение
:
Test method LinkCatalog.Tests.UserModel_Tests.GetUserById_Test threw excep-
tion:
System.NullReferenceException: Object reference not
set
to an instance of
an
object
.
LinkCatalog.DAL.DB..ctor()
in
C:\Users\Ванек\Documents\Visual Studio
2010\Projects\Practice\DAL\Database.cs: line 35
LinkCatalog.DAL.DB.
get
()
in
C:\Users\Ванек\Documents\Visual Studio
2010\Projects\Practice\DAL\Database.cs: line 17
LinkCatalog.DAL.UserModel.GetUserIdByName(
String
username)
in
C:\Users\Ванек
\Documents\Visual Studio 2010\Projects\Practice\DAL\Models\UserModel.cs:
line 63
LinkCatalog.Tests.UserModel_Tests.GetUserById_Test()
in
C:\Users\Ванек\Docum

44
ents\Visual Studio
2010\Projects\Practice\LinkCatalog.Tests\UserModel_Tests.cs: line 12
* This source code was highlighted with Source Code Highlighter.
Как видно, ошибка заключается в конструкторе класса DB – он не может найти файл конфигурации и, вследствие этого, тест завер- шается не только неудачно, но и с ошибкой.
Решение проблемы конфигурационных файлов довольно про- стое. Среда тестирования не подключит web.config автоматически.
Вместо этого каждый тест-проект создает свой файл конфигурации app.config, и все, что требуется – дописать в него необходимые на- стройки.

xml
version
="1.0"
encoding
="utf-8"
?
>
<
configuration
>
<
configSections
>
<
sec-
tion
name
="DatabaseUnitTesting"
type
="Microsoft.Data.Schema.UnitTesting.Confi
guration.DatabaseUnitTestingSection, Microsoft.Data.Schema.UnitTesting, Ver-
sion=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
/>

configSections
>
<
DatabaseUnitTesting
>
<
DataGeneration
ClearDatabase
="true"
/>
<
ExecutionContext
Provider
="System.Data.SqlClient"
ConnectionString
="Data
Source=SIRIXPC\sqlexpress;Initial Catalog=TestDB;Integrated Securi-
ty=True;Pooling=False"
CommandTimeout
="30"
/>
<
PrivilegedContext
Provider
="System.Data.SqlClient"
ConnectionString
="Data
Source=SIRIXPC\sqlexpress;Initial Catalog=TestDB;Integrated Securi-
ty=True;Pooling=False"
CommandTimeout
="30"
/>

DatabaseUnitTesting
>
<
connectionStrings
>
<
add
name
="DBConnectionString"
connectionString
="Data
Source=SIRIXPC\SQLEXPRESS;Initial Catalog=tbd;Integrated Security=True"
providerName
="System.Data.SqlClient"
/>

connectionStrings
>

configuration
>
* This source code was highlighted with Source Code Highlighter.
Теперь тест проходит успешно
:

45
Немного изменим тест
[TestMethod]
public
void
GetUserById_Test()
{
Assert.AreNotEqual(UserModel.GetUserIdByName(
"Admin"
), -1);
Assert.AreEqual(UserModel.GetUserIdByName(
"0-934723 ### 12sdf s"
), -
1);
}
* This source code was highlighted with Source Code Highlighter.
В базе гарантированно нет такого логина(логин должен быть без про- белов, за этим следят валидаторы в контроллере при регистрации), и это вторая и последняя проверка метода
.
Тест опять не проходится – смотрим детализацию:
1   2   3   4   5


написать администратору сайта