Кластерний аналіз
Загальний опис та порівняльна характеристика методів k-середніх і деревовидної кластеризації, умови їх ефективного використання. Алгоритм програми, її структура з описом функцій складових частин і зв'язків між ними. Принципи тестування даної програми.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 01.04.2016 |
Размер файла | 224,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Вступ
програма деревовидний алгоритм кластеризація
Курсовий проект (робота) - це самостійно виконана і відповідно оформлена творча робота студента з вирішення конкретного практичного завдання з однієї або декількох загальнотехнічних чи спеціальних дисциплін на основі набутих теоретичних знань та умінь.
Курсовий проект виконується протягом навчального семестру у відповідності з навчальним планом спеціальності
Основною метою курсового проектування є:
– навчання та набуття навиків практичного застосування теоретичних знань для вирішення конкретних практичних задач;
– розвиток творчого мислення, виявлення та формування професійних навиків студентів;
– набуття навиків конструювання виробів, виконання розрахунків, письмового викладу технічних рішень та аналізу одержаних результатів;
– закріплення, поглиблення та систематизація отриманих студентами в процесі навчання теоретичних знань з різних дисциплін;
– набуття навиків узагальнення та аналізу результатів, отриманих іншими розробниками та дослідниками;
– навчання та набуття студентами досвіду користування довідковою літературою і нормативними документами.
Мета курсового проектування з дисципліни «Основи програмування та алгоритмічні мови»:
– закріпити знання, одержані під час вивчення дисципліни «Основи програмування та алгоритмічні мови;
– засвоїти основні етапи розробки програмних виробів;
– набути навиків при оформлення документів на програмні вироби;
одержати практичні навички з розробки програм і програмних документів.
1. Опис предметної області
1.1 Метод k-середніх
Кластеризамція мемтодом k-серемдніх - популярний метод кластеризації, - впорядкування множини об'єктів в порівняно однорідні групи. Винайдений в 1950-х роках математиком Гуґо Штейнгаузом і майже одночасно Стюартом Ллойдом. Особливу популярність отримав після виходу роботи Маккуїна.
Мета методу - розділити n спостережень на k кластерів, так щоб кожне спостереження належало до кластера з найближчим до нього середнім значенням. Метод базується на мінімізації суми квадратів відстаней між кожним спостереженням та центром його кластера, тобто функції
,
де d - метрика, - і-ий об'єкт даних, а - центр кластера, якому на j-ій ітерації приписаний елемент .
Термін «k-середніх» був уперше вжитий Джеймсом МакКвіном (англ. James MacQueen) у 1967 році, хоча ідею методу вперше озвучив Гуґо Штейнгауз (англ. Hugo Steinhaus) у 1957 році. Стандартний алгоритм був вперше запропонований Стюартом Лойдом (англ. Stuart Lloyd) у 1957 р.
Опис алгоритму
Маємо масив спостережень (об'єктів), кожен з яких має певні значення по ряду ознак. Відповідно до цих значень об'єкт розташовується у багатовимірному просторі.
1. Дослідник визначає кількість кластерів, що необхідно утворити
2. Випадковим чином обирається k спостережень, які на цьому кроці вважаються центрами кластерів
3. Кожне спостереження «приписується» до одного з n кластерів - того, відстань до якого найкоротша
4. Розраховується новий центр кожного кластера як елемент, ознаки якого розраховуються як середнє арифметичне ознак об'єктів, що входять у цей кластер
5. Відбувається така кількість ітерацій (повторюються кроки 3-4), поки кластерні центри стануть стійкими (тобто при кожній ітерації в кожному кластері опинятимуться одні й ті самі об'єкти), дисперсія всередині кластера буде мінімізована, а між кластерами - максимізована
Вибір кількості кластерів відбувається на основі дослідницької гіпотези. Якщо її немає, то рекомендують створити 2 кластери, далі 3,4,5, порівнюючи отримані результати.
Принцип дії
Принцип алгоритму полягає в пошуку таких центрів кластерів та наборів елементів кожного кластера при наявності деякої функції Ф(°), що виражає якість поточного розбиття множини на k кластерів, коли сумарне квадратичне відхилення елементів кластерів від центрів цих кластерів буде найменшим:
де - число кластерів, - отримані кластери, , - центри мас векторів .
В початковий момент роботи алгоритму довільним чином обираються центри кластерів, далі для кожного елемента множини ітеративно обраховується відстань від центрів з приєднанням кожного елемента до кластера з найближчим центром. Для кожного з отриманих кластерів обчислюються нові значення центрів, намагаючись при цьому мінімізувати функцію Ф(°), після чого повторюється процедура перерозподілу елементів між кластерами.
Алгоритм методу «Кластеризація за схемою к-середніх»:
· вибрати k інформаційних точок в якості центрів кластерів поки не завершиться процес зміни центрів кластерів;
· зіставити кожну інформаційну точку з кластером, відстань до центра якого мінімальна;
· переконатися, що в кожному кластері міститься хоча б одна точка. Для цього кожний порожній кластер потрібно доповнити довільною точкою, що розташована «далеко» від центра кластера;
· центр кожного кластера замінити середнім від елементів кластера;
· кінець.
Переваги
Головні переваги методу k-середніх - його простота та швидкість виконання. Метод k-середніх більш зручний для кластеризації великої кількості спостережень, ніж метод ієрархічного кластерного аналізу (у якому дендограми стають перевантаженими і втрачають наочність).
Недоліки
Одним із недоліків простого методу є порушення умови зв'язності елементів одного кластера, тому розвиваються різні модифікації методу, а також його нечіткі аналоги (англ. fuzzy k-means methods), у яких на першій стадії алгоритму допускається приналежність одного елемента множини до декількох кластерів (із різним ступенем приналежності).
Незважаючи на очевидні переваги методу, він має суттєві недоліки:
1. Результат класифікації сильно залежить від випадкових початкових позицій кластерних центрів
2. Алгоритм чутливий до викидів, які можуть викривлювати середнє
3. Кількість кластерів повинна бути заздалегідь визначена дослідником
Застосування
Метод k-середніх є доволі простим і прозорим, тому успішно використовується у різноманітних сферах - маркетингових сегментаціях, геостатистиці, астрономії, сільському господарстві тощо.
1.2 Метод деревовидної кластеризації
Розглянемо горизонтальну деревоподібну діаграму. Діаграма починається з кожного об'єкта в класі (в лівій частині діаграми). Тепер уявімо собі, що поступово (дуже малими кроками) ви «послабляєте» ваш критерій про те, які об'єкти є унікальними, а які ні. Іншими словами, ви знижуєте поріг, що відноситься до вирішення про об'єднання двох або більше об'єктів у один кластер.
В результаті, ви пов'язуєте разом все більше і більше число об'єктів і агрегується (поєднуєте) все більше і більше кластерів, що складаються з все більше різних елементів. Остаточно, на останньому кроці всі об'єкти об'єднуються разом. На цих діаграмах горизонтальні осі представляють відстань об'єднання (в вертикальних деревовидних діаграмах вертикальні осі представляють відстань об'єднання). Так, для кожного вузла в графі (там, де формується новий кластер) ви можете бачити величину відстані, для якого відповідні елементи зв'язуються в новий єдиний кластер. Коли дані мають ясну «структуру» в термінах кластерів об'єктів, схожих між собою, тоді ця структура, швидше за все, повинна бути відображена в ієрархічному дереві різними гілками. В результаті успішного аналізу методом об'єднання з'являється можливість виявити кластери (гілки) і інтерпретувати їх.
Об'єднання або метод деревовидної кластеризації використовується при формуванні кластерів відмінності або відстані між об'єктами. Ці відстані можуть визначатися в одновимірному або багатовимірному просторі. Наприклад, якщо ви повинні кластеризувати типи їжі в кафе, то можете взяти до уваги кількість вмісту в ній калорій, ціну, суб'єктивну оцінку смаку і т.д. Найбільш прямий шлях обчислення відстаней між об'єктами в багатовимірному просторі полягає в обчисленні евклідових відстаней. Якщо ви маєте дво - або тривимірний простір, то цей метод є реальною геометричною відстанню між об'єктами в просторі (як ніби відстані між об'єктами виміряні рулеткою). Однак алгоритм об'єднання не «дбає» про те, чи є «надані» для цієї відстані справжніми або деякими іншими похідними заходами відстані, що більш значуще для дослідника; і завданням дослідників є підібрати правильний метод для специфічних застосувань.
Евклідова відстань. Це, мабуть, найбільш загальний тип відстані. Вона просто є геометричною відстанню в багатовимірному просторі і обчислюється таким чином:
відстань (х, у) = {i (xi - yi)2}1/2
Зауважимо, що евклідова відстань (і його квадрат) обчислюється по вихідних, а не за стандартизованими даними. Це звичайний спосіб його обчислення, який має певні переваги (наприклад, відстань між двома об'єктами не змінюється при введенні в аналіз нового об'єкта, який може виявитися викидом). Проте, на відстані можуть сильно впливати відмінності між осями, за координатами яких обчислюються ці відстані. Наприклад, якщо одна з осей виміряна в сантиметрах, а ви потім перекладете її в міліметри (множачи значення на 10), то остаточна евклідова відстань (або квадрат евклідової відстані), що обчислюється за координатами, сильно зміниться, і, як наслідок, результати кластерного аналізу можуть сильно відрізнятися від попередніх.
Відстань Чебишева. Це відстань може виявитися корисним, коли бажають визначити два об'єкти як «різні», якщо вони розрізняються за якоюсь однією координатою (будь-яким одним виміром). Відстань Чебишева обчислюється за формулою:
відстань (х, у) = Максимум |xi - yi|
Правила об'єднання або зв'язку
На першому кроці, коли кожен об'єкт являє собою окремий кластер, відстані між цими об'єктами визначаються обраної мірою. Однак коли зв'язуються разом декілька об'єктів, виникає питання, як слід визначити відстані між кластерами? Іншими словами, необхідне правило об'єднання або зв'язку для двох кластерів. Тут є різні можливості: наприклад, ви можете пов'язати два кластери разом, коли будь-які два об'єкти в двох кластерах ближче один до одного, ніж відповідна відстань зв'язку. Іншими словами, ви використовуєте «правило найближчого сусіда» для визначення відстані між кластерами; цей метод називається методом одиночного зв'язку. Це правило будує «волокнисті» кластери, тобто кластери, «зчеплені разом» тільки окремими елементами, випадково опинилися ближче інших один до одного. Як альтернативу ви можете використовувати сусідів в кластерах, які знаходяться далі за всіх інших пар об'єктів один від одного. Цей метод називається метод повного зв'язку. Існує також безліч інших методів об'єднання кластерів, подібних до тих, що були розглянуті.
Одиночний зв'язок (метод найближчого сусіда). Як було описано вище, в цьому методі відстань між двома кластерами визначається відстанню між двома найбільш близькими об'єктами (найближчими сусідами) в різних кластерах. Це правило повинне, в даному разі, нанизувати об'єкти разом для формування кластерів, і результуючі кластери мають тенденцію бути представленими довгими «ланцюжками».
Повний зв'язок (метод найбільш віддалених сусідів). У цьому методі відстані між кластерами визначаються найбільшою відстанню між будь-якими двома об'єктами в різних кластерах (тобто «найбільш віддаленими сусідами»). Цей метод зазвичай працює дуже добре, коли об'єкти відбуваються насправді з реально різних «гаїв». Якщо ж кластери мають в деякому роді подовжену форму або їх природний тип є «ланцюговим», то цей метод непридатний.
2. Опис логічної структури
2.1 Алгоритм програми
Для комп'ютерних програм алгоритм є списком деталізованих інструкцій, що реалізують процес обчислення, який, починаючи з початкового стану, відбувається через послідовність логічних станів, яка завершується кінцевим станом. Перехід з попереднього до наступного стану не обов'язково детермінований - деякі алгоритми можуть містити елементи випадковості.
Поняття алгоритму належить до підвалин математики. Обчислювальні процеси алгоритмічного характеру (як-то арифметичні дії над цілими числами, знаходження НСД двох чисел тощо) відомі людству з глибокої давнини. Проте, чітке поняття алгоритму сформувалося лише на початку XX ст
Наша програма повинна мати чіткий, сформований алгоритм, який дозволить швидко працювати програмі і безперебійно оброблювати вхідні і вихідні дані.
Алгоритм нашої програми виглядає наступним чином:
1. Початок роботи програми. Запуск скомпільованого нами файлу.
2. Ініціалізація об'єктів програми.
3. Задання розмірів матриці
4. Кластеризація
5. Виведення результатів
6. Завершення алгоритму
Для кращого розуміння алгоритму програми складемо його блок-схему (див. рис. 3.1.1)
.
Рис. 2.1.1. Блок-схема програми кластеризації методом к-середніх
Рис. 2.1.2. Блок-схема програми кластеризації методом деревовидної кластеризації
2.2 Методи та елементи, що використовуються
Для реалізації алгоритму програми використовуються стандартні методи середовища програмування Borland Delphi, зокрема:
1. Label
Для відображення різних написів на формі використовуються в основному компоненти Label і Panel. Перші два з цих компонентів - мітки, спеціально призначені для відображення текстів. Основне призначення панелі Panel - компоновка компонентів у вікні форми, проте можна використовувати і для виведення текстів.
Тексти, які відображаються в компонентах, визначаються значенням їх властивості Caption. Його можна встановлювати в процесі проектування або задавати і змінювати програмно під час виконання програми. Наприклад:
Label1. Caption = «Новий текст»;
Властивість Caption має тип рядка AnsiString. При присвоєнні цього типу числової інформації відбувається її автоматичне перетворення в рядок. Тому ви можете безпосередньо здійснювати подібні присвоювання. Наприклад:
Label1. Caption = 5.1;
Оператор призведе до появи в мітці напису «5,1». Але якщо ви хочете занести в мітку змішану інформацію, що складаються з рядків символів і чисел, ви повинні скористатися функціями FloatToStr і IntToStr, що переводять відповідно числа з плаваючою комою і цілі в рядок. Для формування тексту, що складається з декількох фрагментів, можна використовувати операцію «+», яка для рядків означає їх склеювання (конкатенацію). Наприклад, якщо в програмі є ціла змінна I, що відображає число співробітників деякої організації, то вивести в мітку Label1 інформацію про це можна оператором:
Label1. Caption = «Число співробітників:» + IntToStr (I);
У всіх компонентах колір фону визначається властивістю Color, а колір напису подсвойством Color властивості Font. Якщо колір спеціально не задавати, то колір фону зазвичай зливається з кольором контейнера, що містить мітку, так що фон просто не помітний.
Для мітки Label колір і шрифт - єдино доступні елементи оформлення напису. Компоненти StaticText і Panel мають крім того властивість Border - Style, визначальне рамку тексту - бордюр. При стилі sbsNone мітка StaticText по виду не відрізняється від мітки Label. Ймовірно, якщо вже використовувати бордюр, то найбільш приємний стиль sbsSunken.
Компонент Panel крім властивості BorderStyle має ще властивості Bevellnner, BevelOuter, BevelWidth, BorderWidth, які надають багаті можливості оформлення напису. Таким чином, з точки зору оформлення виведеного тексту максимальні можливості дає Panel і мінімальні Label.
Розміщення всіх текстових компонентів на формі визначається, зокрема, властивостями Top, Left, Height, Width, Aline, спільними для всіх віконних компонентів. Ці властивості, що визначають координати компонента, його розміри і їх зміну при зміні користувачем розмірів батьківського компонента.
Розмір міток Label і StaticText визначається також властивістю AutoSize. Якщо ця властивість встановлено в true, то вертикальний і горизонтальний розміри компонента визначаються розміром напису. Якщо ж AutoSize одно false, то вирівнювання тексту всередині компонента визначається властивістю Alignment, яке дозволяє вирівнювати текст по лівому краю, правому краю або центру клієнтської області мітки. У панелі Panel також є властивість AutoSize, але воно не відноситься до розмірів написи Caption. Однак властивість вирівнювання Alignment працює і для панелі.
У мітці Label є властивість WordWrap - допустимість переносу слів довгою написи, що перевищує довжину компонента, на нову сходинку. Щоб такий перенос міг здійснюватися, треба встановити властивість WordWrap в true, властивість AutoSize в false (щоб розмір компоненту не визначався розміром напису) і зробити висоту компонента такий, щоб у ньому могло поміститися кілька рядків. Якщо WordWrap не встановлено у true при AutoSize рівному false, то довгий текст, що не міститься в рамці мітки, просто обрізається.
2. StringGrid
Компонент StringGrid являє собою таблицю, що містить рядки. Дані таблиці можуть бути тільки для читання або редагування. Таблиця може мати смуги прокрутки, причому задане число перших рядків і стовпців може бути фіксованим і не прокручуватися. Таким чином, можна задати заголовки стовпців і рядків, постійно присутні у вікні компонента. Кожній клітинці таблиці може бути поставлений у відповідність деякий об'єкт.
Компонент StringGrid призначений в першу чергу для відображення таблиць текстової інформації. Однак компонент може відображати і графічну інформацію.
Всі ці властивості доступні під час виконання. Задавати тексти можна програмно або за окремими осередкам, або відразу по стовпцях і рядках за допомогою методів класу TStrings.
Властивості ColCount і RowCount визначають відповідно число стовпців і рядків, властивості FixedCols і FixedRows - число фіксованих, що не прокручуваних стовпців і рядків. Колір фону фіксованих осередків визначається властивістю FixedColor.
Властивості LeftCol і TopRow визначають відповідно індекси перший видимого на екрані в даний момент прокручуваного стовпця і першою видимою прокручуваному рядка.
Властивість ScrollBars визначає наявність в таблиці смуг прокрутки. Причому смуги прокрутки з'являються і зникають автоматично залежно від того, поміщається таблиця у відповідний розмір чи ні.
Властивість Options є множиною, визначальним багато властивостей таблиці: наявність розділових вертикальних і горизонтальних ліній у фіксованих (goFixedVertLine і goFixedHorzLine) і не фіксованих (goVertLine і goHorzLine) осередках, можливість для користувача змінювати за допомогою миші розміри стовпців і рядків (goCoISizing і goRowSizing), переміщати стовпці і рядки (goColMoving і goRowMoving) і багато іншого. Важливим елементом у властивості Options є goEditing - можливість редагувати вміст таблиці.
В основному компонент StringGrid використовується для вибору користувачем якихось значень, відображених в осередках.
Властивості Col і Row показують індекси стовпця і рядка виділеної комірки. Можливо також виділення користувачем безлічі осередків, рядків і стовпців.
Серед безлічі подій компонента StringGrid слід відзначити подію OnSelectCell, що виникає в момент вибору користувачем осередки. У обробник цієї події передаються цілі параметри ACol і ARow - стовпець і рядок виділеного осередку, і булеві параметр CanSelect - допустимість вибору.
Параметр CanSelect можна використовувати для заборони виділення комірки, задавши його значення false. А параметри ACol і ARow можуть використовуватися для якоїсь реакції програми на виділення користувача.
3. Button
Найпростішою і, мабуть, найбільш часто використовуваної кнопкою є кнопка Button, розташована на сторінці бібліотеки Standard. Рідше використовується кнопка BitBtn, знана, насамперед, можливістю відобразити на її поверхні зображення. Більшість властивостей, методів і подій у цих видів кнопок однакові.
Основне з точки зору зовнішнього вигляду властивість кнопки - Caption (напис). У написах кнопок можна передбачати використання клавіш прискореного доступу, виділяючи для цього один із символів напису. Перед символом, який повинен відповідати клавіші прискореного доступу, ставиться символ амперсанда «&». Цей символ не з'являється в написи, а наступний за ним символ виявляється підкресленим. Тоді користувач може замість клацання на кнопці натиснути в будь-який момент клавішу Alt спільно з клавішею виділеного символу.
Наприклад, якщо у вашому додатку є кнопка виконання якоїсь операції, ви можете задати її властивість Caption рівним «& Start». На кнопці цей напис буде мати вигляд «Start». І якщо користувач натисне клавіші Alt + S, то це буде еквівалентно клацанню на кнопці.
Основна подія будь кнопки - OnClick, що виникає при натисканні на ній. Саме в обробнику цієї події записуються оператори, які повинні виконуватися при клацанні користувача на кнопці. Крім цього є ще ряд подій, пов'язаних з різними маніпуляціями клавішами і кнопками миші. Писати обробник події OnClick треба, якщо ви не пов'язуєте властивістю Action дану кнопку з якимось дією.
Властивість Cancel, якщо встановити його в true, визначає, що натискання користувачем клавіші Esc буде еквівалентно клацанню на даній кнопці. Ця властивість доцільно ставити рівним true для кнопок Скасувати в різних діалогових вікнах, щоб можна було вийти з діалогу, клікнувши на цю кнопку або натиснувши клавішу Esc.
Властивість Default, якщо його встановити в true, визначає, що натискання користувачем клавіші введення Enter буде еквівалентно натисканню на дану кнопку, навіть якщо дана кнопка в цей момент не перебуває у фокусі. Правда, це спрацює, якщо у фокусі знаходиться якийсь віконний компонент. Якщо ж у момент натискання Enter у фокусі знаходиться інша кнопка, то все-таки спрацює саме кнопка у фокусі. Якщо у декількох кнопок на формі властивість Default задано рівним true, то при натисканні Enter спрацює та з них, яка знаходиться раніше в послідовності табуляції.
З методів, властивих кнопках, має сенс відзначити один - Click. Виконання цього методу еквівалентно клацанню на кнопці, тобто викликає подія кнопки OnClick. Цим можна скористатися, щоб продублювати якимись іншими діями користувача клацання на кнопці. Нехай, наприклад, ви хочете, щоб при натисканні користувачем клавіші з символом «С» або «з» в будь-який момент роботи з додатком виконувалися операції, передбачені в обробнику події OnClick кнопки Button1. Оскільки невідомо, який компонент буде натискатися у фокусі в момент цієї події, треба перехопити його на рівні форми. Такий перехоплення здійснюється, якщо встановити властивість форми KeyPreview = true. Тоді в обробнику події форми OnKeyPresss можна написати оператор:
if ((Кеу = 'С') || (Кеу = 'з'))
Button1. Click ();
Якщо користувач ввів символ «С» або «з», то в результаті буде виконаний обробник клацання кнопки Button1.
4. Edit
Компонент Edit призначений для введення тексту. Розташований він на вкладці Standard Палітри компонентів:
Основна його властивість - це Text. Воно дозволяє читати і записувати деякий текст в Edit. Зверніть увагу, що ця властивість має строковий тип (вірніше тип AnsiString, але зараз це уточнення не настільки важливо). Це означає, що якщо користувач вводить в edit деяке число, то необхідно додаткове перетворення. Робиться це пріблізітетльно так:
int z = StrToInt (Edit1. Text);
Крім функції StrToInt є обернена до неї IntToStr. Вони переводять рядок в ціле число і ціле число в рядок відповідно. Крім цієї пари функцій є пара StrToFloat і FloatToStr, котрі працюють з речовими числами.
Основна подія для edit'а - це Change. Виникає при зміні властивості Text.
Крім того, часто використовуються такі події як KeyPress (виникає при введенні кожного символу), KeyDown і KeyUp (виникають при натисканні та відпусканні клавіші).
2.3 Структура програми з описом функцій складових частин і зв'язків між ними
Структура програми являє собою набір функцій. Наша програми містить 5 функцій.
1. procedure TForm1. FormCreate (Sender:TObject)
Стандартна функція середовиша Borland Delphi. Під час виконання цієї функції відбувається створення об'єктів програми і початок відображення форми для взаємодії з користувачем.
2. procedure TForm1. Edit1-2Change (Sender: TObject)
Функція призначена для задання розмірності початкової матриці.
3. procedure TForm1. Button3Click (Sender: TObject)
Ця функція здійснює рандомне заповнення початкової матриці.
4. 4.procedure TForm1. Button1Click (Sender: TObject)
Функція здійснює кластерування методом к-середніх.
5. procedure TForm1. Button2Click (Sender: TObject)
Фукціїя кластеризує за допомогою методу деревовидної кластеризації
3. Опис і тестування програми
Після програмування нашого проекту його необхідно відкомпілювати. Для цього натискаємо клавішу F9. Якщо програма не містить помилок то компілятор видасть повідомлення про успішне завершення і запустить наш проект на виконання. Тут ми вже зможемо протестувати створену програму. Тестування повинне забезпечити перевірку працездатності функцій для всіх варіантів вхідних даних.
Тестування програмного забезпечення (англ. Software Testing) - це процес технічного дослідження, призначений для виявлення інформації про якість продукту відносно контексту, в якому він має використовуватись. Техніка тестування також включає як процес пошуку помилок або інших дефектів, так і випробування програмних складових з метою оцінки. Може оцінюватись:
· відповідність вимогам, якими керувалися проектувальники та розробники
· правильна відповідь для усіх можливих вхідних даних
· виконання функцій за прийнятний час
· практичність
· сумісність з програмним забезпеченням та операційними системами
· відповідність задачам замовника.
Оскільки число можливих тестів навіть для нескладних програмних компонент практично нескінченне, тому стратегія тестування полягає в тому, щоб провести всі можливі тести з урахуванням наявного часу та ресурсів. Як результат програмне забезпечення (ПЗ) тестується стандартним виконанням програми з метою виявлення баґів (помилок або інших дефектів).
Тестування ПЗ може надавати об'єктивну, незалежну інформацію про якість ПЗ, ризики відмови, як для користувачів так і для замовників.
Тестування може проводитись, як тільки створено виконуваний код (навіть частково завершено). Процес розробки зазвичай передбачає коли та як буде відбуватися тестування. Наприклад, при поетапному процесі, більшість тестів відбувається після визначення системних вимог і тоді вони реалізуються в тестових програмах. На противагу цьому, відповідно до вимог гнучкої розробки ПЗ, програмування і тестування часто відбувається одночасно.
Тестування - це одна з технік контролю якості, що включає в себе
· Планування робіт (Test Management)
· Проектування тестів (Test Design)
· Виконання тестування (Test Execution)
· Аналіз отриманих результатів (Test Analysis).
Верифікація (Verification) - це процес оцінки системи або її компонентів з метою визначити чи задовольняють результати поточного етапу розробки умовам, сформованим на початку цього етапу. Тобто чи виконуються цілі, терміни, завдання з розробки проекту, визначені на початку поточної фази. Валідація (Validation) - це визначення відповідності розроблюваного програмного забезпечення між очікуваннями і потребами користувача, вимогам до системи.
План Тестування (Test Plan) - це документ, що описує весь обсяг робіт з тестування, починаючи з опису об'єкта, стратегії, розкладу, критеріїв початку і закінчення тестування, до необхідного в процесі роботи обладнання, спеціальних знань, а також оцінки ризиків з варіантами їх вирішення.
Тест дизайн (Test Design) - це етап процесу тестування програмного забезпечення, на якому проектуються і створюються тестові випадки (тест кейси), відповідно до визначених раніше критеріями якості та цілями тестування.
Тестовий випадок (Test Case) - це документ, що описує сукупність кроків, конкретних умов і параметрів, необхідних для перевірки реалізації тестованої функції або її частини.
Баг / Дефект Репорт (Bug Report) - це документ, що описує ситуацію або послідовність дій (Steps), що призвела до некоректної роботи об'єкта тестування (Misbehavior), із зазначенням причин та очікуваного результату (Expected Result).
Тестове Покриття (Test Coverage) - це одна з метрик оцінки якості тестування, що представляє із себе щільність покриття тестами вимог або коду, що виконується.
Деталізація Тест Кейсів (Test Case Specification) - це рівень деталізації опису тестових кроків і необхідного результату, при якому забезпечується розумне співвідношення часу проходження до тестового покриття.
Час Проходження Тест Кейса (Test Case Pass Time) - це час від початку проходження кроків тест кейса до отримання результату тесту.
Отже перейдемо до безпосередньої перевірки нашої програми на працездатність.
Наша програма розпочинатиметься виводом на екран монітора комп'ютера головного вікна (див рис. 3.1).
Рис. 3.1. Головне вікно програми
Після відкриття головного вікна нашої програми нам потрібно задати розмірності вхідних матриць. Після введення розмірності програма відобразить матрицю з заданими розмірами (див. рис. 3.2)
Рис. 3.2. Задання розмірів
Далі ми можемо вводити дані в нашу матрицю вручну, за допомогою клавіатури або ж рандомно за допомогою кнопки Заповнити. Для прикладу скористаємось рандомним заповненням. На рисунку 3.3 зображено приклад заповнення матриць.
Рис. 3.3. Заповнення матриць
Далі ми можемо виконати два методи кластеризації. Протестуємо перший з них - метод к-середніх. Для перевірки натиснемо кнопку Вирахувати (див. Рис. 3.4.)
Рис. 3.4. Вікно кластерування першим метдом
Як видно з вище показаного рисунку програма виконала кластерування. Тепер проведемо кластерування другим методом. (див. рис. 3.5)
Рис. 3.5. Вікно кластерування другим методом
Після завершення роботи з програмою натискаємо на хрестик в правому верхньому углі робочого вікна.
Провівши тестування створеної програми можна зробити висновок, що програма працює без помилок і забезпечує повноцінну роботу при будь-яких вхідних даних. А також здійснює обробку даних без збоїв.
Висновок
В ході виконання завдання курсової роботи мною було розроблено проект програми для кластерування за допомогою двох методів.:
· Метод к-середніх
· Метод деревовидної кластеризації
Програма повноцінно працює при будь-яких вхідних даних і може бути впроваджена у виробництво і застосовуватись навчальними закладами або статистичними організаціями, для полегшення обчислень.
Список використаної літератури
1. Інформатика. Мова програмування С++. Спецкурс. 10-12 класи. Навчальний посібник / Лєхан С.А. - Шепетівка, «Аспект», 2007 - 160 с.
2. Об'єтно-орієнтоване програмування мовою С++, Навчальний посібник, Т.Є. Рак, Львів, 2011 - 401с
3. Борис Пахомов - C C++ и MS Visual С++ 2010 для начинающих - БХВ-Петербург, 2011 - 736 с.
Додаток
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
StringGrid1: TStringGrid;
GroupBox1: TGroupBox;
Memo1: TMemo;
Button1: TButton;
GroupBox2: TGroupBox;
Memo2: TMemo;
Button2: TButton;
Button3: TButton;
procedure Edit1Change (Sender: TObject);
procedure Edit2Change (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure Button1Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form1: TForm1;
i, j, k, k1, k2:integer;
klas1, klas2:string;
implementation
{$R *.dfm}
procedure TForm1. Edit1Change (Sender: TObject);
begin
StringGrid1. ColCount:=StrToInt (Edit1. Text);
for i:=1 to StringGrid1. ColCount do
StringGrid1. Cells [i - 1,0]:='X'+inttostr(i);
end;
procedure TForm1. Edit2Change (Sender: TObject);
begin
StringGrid1. RowCount:=StrToInt (Edit2. Text)+1;
end;
procedure TForm1. Button3Click (Sender: TObject);
begin
for i:=1 to StringGrid1. ColCount do
begin
for j:=1 to StringGrid1. RowCount-1 do
begin
StringGrid1. Cells [i-1, j]:=inttostr (random(10));
end;
end;
end;
procedure TForm1. Button1Click (Sender: TObject);
begin
memo1. Clear;
klas1:='';
klas2:='';
klas1:=StringGrid1. Cells [0,0];
klas2:=StringGrid1. Cells [1,0];
k:=2;
while k<StringGrid1. ColCount do
begin
for i:=1 to StringGrid1. RowCount-1 do
begin
k1:=k1+sqr (strtoint(stringGrid1. Cells [0, i]) - strtoint (stringGrid1. Cells [k, i]));
k2:=k2+sqr (strtoint(stringGrid1. Cells [1, i]) - strtoint (stringGrid1. Cells [k, i]));
end;
if (k1<k2) then
begin
klas1:=klas1+', '+StringGrid1. Cells [k, 0];
end
else
begin
klas2:=klas2+', '+StringGrid1. Cells [k, 0];
end;
k1:=0;
k2:=0;
k:=k+1;
end;
Memo1. Lines. Add ('Кластер1: '+klas1);
Memo1. Lines. Add ('Кластер2: '+klas2);
end;
procedure TForm1. Button2Click (Sender: TObject);
var kl1, kl2:real;
kls1, kls2:string;
begin
memo2. Clear;
kls1:='';
kls2:='';
kls1:=StringGrid1. Cells [0,0];
kls2:=StringGrid1. Cells [1,0];
k:=2;
while k<StringGrid1. ColCount do
begin
for i:=1 to StringGrid1. RowCount-1 do
begin
kl1:=k1+sqrt (sqr(strtoint (stringGrid1. Cells [0, i]) - strtoint (stringGrid1. Cells [k, i])));
kl2:=k2+sqrt (sqr(strtoint (stringGrid1. Cells [1, i]) - strtoint (stringGrid1. Cells [k, i])));
end;
if (kl1<kl2) then
begin
kls1:=kls1+', '+StringGrid1. Cells [k, 0];
end
else
begin
kls2:=kls2+', '+StringGrid1. Cells [k, 0];
end;
kl1:=0;
kl2:=0;
k:=k+1;
end;
Memo2. Lines. Add ('Кластер1: '+kls1);
Memo2. Lines. Add ('Кластер2: '+kls2);
end;
end.-
Размещено на Allbest.ru
Подобные документы
Методи та елементи, що використовуються для реалізації алгоритму програми. Структура додатку з описом функцій складових частин і зв'язків між ними. Типи комп'ютерів та пристроїв, що використовуються при роботі програми. Організація вхідних даних.
курсовая работа [363,2 K], добавлен 01.04.2016Структура програми з описом функцій складових частин і зв'язків між ними. Розробка програми автоматизації роботи станції, що займається продажем квитків. Відомості про використання оперативної пам'яті. Формат, описання та спосіб кодування даних.
курсовая работа [349,5 K], добавлен 01.04.2016Дослідження динамічних рядів методом найменших квадратів та ковзаючого середнього. Опис логічної структури програми. Стандартні методи та елементи середовища програмування Borland Delphi 2007. Опис функцій складових частин програми і зв'язків між ними.
курсовая работа [135,3 K], добавлен 01.04.2016Аналіз теоретичної бази методів інтерполювання функцій. Розробка алгоритмів та вибір оптимального. Приклад програми інтерполювання функції за допомогою інтерполяційного многочлена Лагранжа: інструкція користувача, опис, тестування та лістинг програми.
курсовая работа [1,0 M], добавлен 19.09.2013Мови програмування, на яких написана програма побудови замкнутих багатокутників. Функціональні обмеження на застосування. Методи та елементи, що використовуються. Структура програми з описом функцій складових частин. Зв'язок програми з іншими програмами.
курсовая работа [76,6 K], добавлен 01.04.2016Створення програми, що видає результати голосування та підсумки виборів. Алгоритм розробки програми. Опис структури даних та вимоги до них, стандартних процедур та функцій, файлів та їх призначення. Приклад тестування та результати роботи програми.
курсовая работа [1,0 M], добавлен 28.06.2012Варіантний аналіз та вибір методів розв’язування, основні поняття та визначення, особливості розробки баз даних. Описовий алгоритм головної програми та її структури, опис авторської заставки. Структура модулів та опис функцій, лістинг програми.
курсовая работа [2,6 M], добавлен 30.11.2009Огляд існуючих методів розробки компіляторів, детальний опис мови. Характеристика та специфіка процесу розробки програми компілятора на рівні блок-схем і тексту програми. Подання тексту компілятора, а також результатів тестування розробленої програми.
курсовая работа [510,2 K], добавлен 03.06.2011Загальна характеристика алгоритму та опис програми. Керівництво системного програміста. Особливості запуску програми в Linux, FreeBSD, Windows. Аналіз результатів тестування програми, що проектується, вивчення та оцінка її практичної ефективності.
курсовая работа [91,4 K], добавлен 13.06.2014- Розроблення алгоритму і програми а NASM асемблері для додавання / множення чисел з плаваючою крапкою
Розробка алгоритму роботи програми, її загальна характеристика та функціональні особливості, умови ефективного використання. Способи виклику та адреса завантаження, відомості про використання оперативної пам'яті. Посібник системного програміста.
курсовая работа [182,6 K], добавлен 07.06.2016