Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Качество ПО (Ответы и примеры).docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
84.26 Кб
Скачать

8. Этапы цикла построения по на примере Hudson

Hudson – это как бы сервер CI (Continuous Integration). Hudson доступен в виде пакета, поэтому его установка довольно проста. Кроме того, всю свою конфигурацию Hudson хранит в файлах, в виду чего не требует интеграции с какой-либо БД. Архитектура Hudson построена на основе плагинов. То есть по сути работа Hudson сводится к хранению настроек проектов/плагинов и сборке проекта. В свою очередь сборка проекта заключается в запуске в определённом порядке установленных плагинов, включённых в настройках проекта. Плагины можно разделить на несколько условных групп, образующих цикл сборки проекта именуемый также как «pipeline»: 1) Управление исходным кодом (получение/обновление кода проекта из репозитория), 2) Триггеры сборки (настройка времени автозапуска для сборки проекта), 3) Среда сборки (настройка среды сборки проекта), 4) Сборка (основной этап: запуск плагинов, осуществляющих логику сборки, интеграции и тестирования), 5) Послесборочные операции (формирование/публикация отчётов, нотификация). К сожалению, Hudson позволяет изменять только порядок выполнения плагинов, входящих в группу «сборка» (порядок выполнения остальных плагинов в рамках своей группы определяется на основе значений аннотации @Execution коде плагинов). Поэтому, необходимо реализовать свой сценарий сборки, для которого не достаточно набора стандартных плагинов из группы «Сборка», можно пойти тремя путями: 1) Вызвать любой внешний исполняемый скрипт, реализующий этот сценарий (пункт ”Execute Shell” из меню ”Add build step”), 2) Подключить плагин системы сборки проекта (Phing, Ant, Maven) и указать необходимую цель, 3) Написать свой плагин. Этапы цикла построения ПО: 1) Создание репозитория, 2) Установка Ant (К примеру, однако есть и другие инструменты, которыми можно автоматизировать процесс сборки ПО (Phing, Maven)), 3) Создание Ant скрипта (Скрипт пишется в формате Xml, позволяет задать установки для сборки), 4) Создание новых задач (Создание новых проектов/задач, указывая его имя и настройки для соответствующих плагинов: URL в репозитории SVN и команду для сборки), 5) Создание рабочей копии, 6) Создание кода, 7) Коммит.

Пример организации теста с помощью FEST

package fest;

import org.fest.swing.annotation.GUITest;

import org.fest.swing.fixture.FrameFixture;

import org.fest.swing.junit.v4_5.runner.GUITestRunner;

import org.junit.*;

import static org.junit.Assert.*;

import org.junit.runner.RunWith;

@RunWith(GUITestRunner.class)

public class MainFormTest {

private FrameFixture frameFixture;

@Before

public void setUp() {

frameFixture = new FrameFixture(new MainForm("Main form"));

frameFixture.show();

}

@After

public void tearDown() {

frameFixture.cleanUp();

}

@GUITest

@Test

public void mainFormTest(){

frameFixture.radioButton("RB1").click();

assertEquals(frameFixture.list("List").contents().length, 1);

frameFixture.radioButton("RB2").click();

assertEquals(frameFixture.list("List").contents().length, 2);

frameFixture.radioButton("RB3").click();

assertEquals(frameFixture.list("List").contents().length, 3);

frameFixture.radioButton("RB4").click();

assertEquals(frameFixture.list("List").contents().length, 4);

frameFixture.radioButton("RB5").click();

assertEquals(frameFixture.list("List").contents().length, 5);

frameFixture.checkBox("CB").click();

frameFixture.textBox("TB").requireText("Текст");

frameFixture.checkBox("CB").click();

frameFixture.textBox("TB").requireText("");

frameFixture.radioButton("RB4").click();

assertEquals(frameFixture.list("List").contents().length, 4);

frameFixture.radioButton("RB3").click();

assertEquals(frameFixture.list("List").contents().length, 3);

frameFixture.radioButton("RB2").click();

assertEquals(frameFixture.list("List").contents().length, 2);

frameFixture.radioButton("RB1").click();

assertEquals(frameFixture.list("List").contents().length, 1);

}

}

Пример организации теста с помощью NUnitForms

using System;

using System.Collections.Generic;

using System.Text;

using NUnit.Framework;

using NUnit.Extensions.Forms;

namespace ForUITest

{

[TestFixture]

class TestClass

{

[Test]

public void TestButton()

{

Form1 form = new Form1();

form.Show();

ButtonTester buttonTest = new ButtonTester("button1");

buttonTest.Click();

TextBoxTester tbt = new TextBoxTester("textBox1");

Assert.AreEqual(tbt["Text"], "pressButton");

form.Close();

}

[Test]

public void TestRadioOne()

{

Form1 form = new Form1();

form.Show();

RadioButtonTester rbt = new RadioButtonTester("radioButton1");

rbt.Click();

TextBoxTester tbt = new TextBoxTester("textBox1");

Assert.AreEqual(tbt["Text"], "pressRadioButtonOne");

form.Close();

}

[Test]

public void TestRadioTwo()

{

Form1 form = new Form1();

form.Show();

RadioButtonTester rbt = new RadioButtonTester("radioButton2");

rbt.Click();

TextBoxTester tbt = new TextBoxTester("textBox1");

Assert.AreEqual(tbt["Text"], "pressRadioButtonTwo");

form.Close();

}

[Test]

public void TestCheckBox()

{

Form1 form = new Form1();

form.Show();

CheckBoxTester cbt = new CheckBoxTester("checkBox1");

cbt.Click();

TextBoxTester tbt = new TextBoxTester("textBox1");

Assert.AreEqual(tbt["Text"], "pressCheckBox");

form.Close();

}

}

}