АИС индексации файлов с функцией поиска с заданными критериями и ее применение при проведении криминалистических компьютерных экспертиз

Снижение трудоемкости выборки файлов; поиск текста при производстве компьютерных экспертиз. Автоматизированная индексация файлов и формализация задач; разработка инфологической, физической моделей системы с привязкой к СУБД; выбор языка программирования.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 24.09.2013
Размер файла 4,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Поддержка динамического поиска членов во время выполнения посредством ключевого слова dynamic.

Вместе с предыдущей возможностью в .NET 4.0 значительно упрощается обеспечение взаимодействия приложений на С# с унаследованными серверами СОМ, благодаря устранению зависимости от сборок взаимодействия (interop assemblies) и предоставлению поддержки необязательных аргументов ref.

Работа с обобщенными типами стала гораздо понятнее, благодаря появлению возможности легко отображать обобщенные данные на и из общих коллекций System.Object с помощью ковариантности и контравариантности.

Возможно, наиболее важным моментом, о котором следует знать, программируя на С#, является то, что с помощью этого языка можно создавать только такой код, который будет выполняться в исполняющей среде .NET (использовать С# для построения "классического" СОМ-сервера или неуправляемого приложения с вызовами API-интерфейса и кодом на С и C++ нельзя). Официально код, ориентируемый на выполнение в исполняющей среде .NET, называется управляемым кодом (managed code), двоичная единица, в которой содержится такой управляемый код -- сборкой (assembly; о сборках будет более подробно рассказываться позже в настоящей главе), а код, который не может обслуживаться непосредственно в исполняющей среде .NET -- неуправляемым кодом.

В качестве языка программирования выбран язык C#[4] как наиболее перспективный и полностью удовлетворяющий заявленным требованиям.

2.2.9 Выбор среды программирования

Для решения поставленной задачи была выбрана среда разработки Microsoft Visual Studio 2010 Express.

Microsoft Visual Studio -- линейка продуктов компании Майкрософт, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Microsoft Windows, Windows Mobile, Windows CE, .NET Framework, .NET Compact Framework и Microsoft Silverlight.

Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода (как например, Subversion и Visual SourceSafe), добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования или инструментов для прочих аспектов цикла разработки программного обеспечения (например, клиент Team Explorer для работы с Team Foundation Server).

Таким образом, выбрав Microsoft Visual Studio C# 2010, были получены следующие основные преимущества:

- Полностью объектно-ориентированная модель программирования, позволяющая существенно упростить процесс разработки приложений.

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

- Технология .NET позволяет эффективно использовать код, написанный на предыдущих (не .NET) версиях языка, включая COM(+) (Component Object Model), DNA (Distributed iNternet Architecture) и др.

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

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

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

3. Разработка базы данных системы

3.1 Инфологическое проектирование

Цель инфологического проектирования - обеспечение наиболее естественных для человека способов сбора и представления той информации, которую предполагается хранить в создаваемой базе данных. Поэтому модель данных пытаются строить по аналогии с естественным языком (последний не может быть использован в чистом виде из-за сложности компьютерной обработки текстов и неоднозначности любого естественного языка). Основными конструктивными элементами моделей являются сущности, связи между ними и их свойства (атрибуты).

Разбиение на таблицы осуществляется в соответствии с семантическим анализом предметной области, при этом, как правило, каждому объекту (сущности) предметной области ставится в соответствие таблица, атрибутам объекта соответствуют атрибуты таблицы, а идентификатору объекта соответствуют ключ таблицы.

Процесс нормализации, идущий параллельно с проектированием, включает в себя:

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

- добавление связей, представляющих поименованные отношения между сущностями;

- для каждой сущности составляется перечень сведений (атрибутов), которые нужно знать о ней;

- установить, каким образом каждое вхождение сущности можно уникально идентифицировать.

Выделим из предметной области следующие сущности:

- файл;

- тип файла;

- директория;

- группы типов файлов;

- выделенные директории.

Для разработки модели используем программное средств AllFusion ERwin Data Modeler от CA. Используем при этом логический уровень представления модели.

Исходя из условий задания, а также, основываясь на функционале существующих аналогов экспертного программного обеспечения, разработаем ER-модель базы данных (рисунок 3.1).

Рисунок 3.1 -- ER модель базы данных

Определим нормальные формы отношений.

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

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

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

3.2 Физическое проектирование базы данных

Последовательно преобразуя сущности в таблицы, получаем физическую структуру базы данных (рисунок 3.2).

Рисунок 3.2 -- Физическая структура организации БД

База данных системы состоит из 5 таблиц:

dtFiles - информация о файлах;

dtftype - информация о типах файлов;

dtfgroups - информация о группах типов файлов;

dtfolders - информация о директориях;

dtselectedfolders - информация о выделенных директориях.

Описание структуры разработанной базы данных приведено в таблицах (Таблица 3.1-Таблица 3.5).

Таблица 3.1

dtfgroups

Название

Идентификатор

Тип

Ограничения целостности

Код группы типов

idFileGroupTypes

INT

PRIMARY KEY, NOT NULL

Название

Name

VARCHAR(45)

NOT NULL

Таблица 3.2

dtftype

Название

Идентификатор

Тип

Ограничения целостности

Код типов файлов

idFileTypes

INT

PRIMARY KEY, NOT NULL

Название

Name

VARCHAR(45)

NOT NULL

Внешний ключ

idFileGroupTypes

INT

FOREIGN KEY

Таблица 3.3

dtfiles

Название

Идентификатор

Тип

Ограничения целостности

Код файла

idFile

BINARY

PRIMARY KEY, NOT NULL

Код типа файла

idFileTypes

INT

FOREIGN KEY

Код директории

idDirectory

INT

FOREIGN KEY

Имя файла

filename

VARCHAR(255)

NOT NULL

Время создания

CreatTime

DATETIME

NOT NULL

Время доступа

AccessTime

DATETIME

NOT NULL

Время изменения

ChangeTime

DATETIME

NOT NULL

Атрибут Только для чтения

Onlyread

BIT

NOT NULL

Атрибут Скрытый

Hidden

BIT

NOT NULL

Атрибут Зашифрованный

Encrypted

BIT

NOT NULL

Размер файла

Size

BIGINT

NOT NULL

Содержимое файла

Body

TEXT

NOT NULL

Таблица 3.4

dtfolders

Название

Идентификатор

Тип

Ограничения целостности

Код директории

ID

INT

PRIMARY KEY, NOT NULL

Название

Dir

VARCHAR(255)

NOT NULL

Время создания

CreationTime

DATETIME

NOT NULL

Время доступа

AccessTime

DATETIME

NOT NULL

Время последней записи

LastWriteTime

DATETIME

NOT NULL

Атрибут Только для чтения

ReadOnly

INT

NOT NULL

Атрибут Скрытая

Hidden

BIT

NOT NULL

Атрибут Зашифрованная

Encrypted

BIT

NOT NULL

Код выбранной директории

idSelectedDirs

INT

FOREIGN KEY

Таблица 3.5

dtselectedfolders

Название

Идентификатор

Тип

Ограничения целостности

Код выбранной директории

idSelectedDirs

INT

PRIMARY KEY, NOT NULL

Название

Dir

VARCHAR(255)

NOT NULL

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

Рассматриваемая схема базы данных дает возможность полного копирования данных (или выборкой sql-команды) в кэш данных класса dataset в памяти компьютера. Что позволяет работать с виртуальной копией данных, переходить от таблицы к таблице и вносить необходимые изменения, удаления или вставки, а в завершении отправить измененные данные обратно в хранилище. В результате получается очень масштабируемое, быстрое и надежное приложение [4].

3.3 Поддержка целостности данных

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

Ограничение целостности - это механизм, используемый СУБД для предотвращения ввода некорректных данных в базовые таблицы базы данных. Если любые из результатов выполнения предложения DML нарушают ограничение целостности, это предложение откатывается, и возвращается ошибка.

Опишем преимущества, которыми обладают ограничения целостности.

1) Легкость объявления.

Поскольку ограничения целостности определяются с помощью команд SQL, при определении или изменении таблицы, то они не требуют программирования. Поэтому их легко составлять, исправлять ошибки, а их работа контролируется СУБД. По этим причинам декларативные ограничения целостности предпочтительнее триггеров базы данных и запрограммированных в приложениях правил.

2) Централизованные правила.

Ограничения целостности определяются для таблиц (а не для приложений), и хранятся в словаре данных. Поэтому данные, вводимые любыми приложениями, автоматически подчиняются одним и тем же ограничениям целостности, ассоциированным с таблицей.

3) Максимальная продуктивность разработки приложений.

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

4) Немедленная обратная связь с пользователем.

Так как специфическая информация о каждом ограничении целостности хранится в словаре данных, приложения базы данных можно разрабатывать так, чтобы они использовали эту информацию и обеспечивали немедленное информирование пользователя о нарушении ограничений целостности, даже до того, как предложение SQL будет выполнено и проверено СУБД.

5) Высшая производительность.

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

6) Гибкость при загрузке данных и идентификации нарушений.

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

Перечислим используемые ограничения целостности БД.

Ограничения целостности PRIMARY KEY.

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

Реализация ограничения целостности PRIMARY KEY в СУБД гарантирует, что оба следующих утверждения истинны:

- никакие две строки в таблице не имеют совпадающих значений в указанном столбце (или группе столбцов);

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

Ссылочная целостность и ограничения целостности FOREIGN KEY.

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

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

По умолчанию, все столбцы в таблице допускают пустые значения (т.е. отсутствие значения). Ограничение NOT NULL требует, чтобы для столбца таблицы всегда предоставлялось (непустое) значение.

Ограничение целостности UNIQUE требует, чтобы никакие две строки таблицы не имели совпадающих значений в указанном столбце или группе столбцов.

3.4 Оценка возможностей проектируемой программной среды

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

- выборка по имени файла/каталога;

- выборка по типу/расширению;

- выборка по диапазону даты создания/изменения/доступа;

- выборка по атрибутам (скрытый/только чтение/зашифрован);

- выборка по содержанию (текст, бинарный набор, или др);

- поиск ключевых слов в файлах (ФИО, название правообладателя, серийный номер, и т.д.);

- группировка файлов по дате с заданным интервалом;

- комбинации приведенных выше вариантов.

Рассмотрим пример из экспертной практики: «подозреваемый Н., находясь дома 17.09.11 г. с 11:00 до 13:00 за своим компьютером, осуществлял выход в сеть Интернет, используя имя и пароль потерпевшего М. В свою очередь потерпевший М. в указанный промежуток времени не мог осуществить подключение и выход в сеть Интернет. Таким образом, Н. осуществлял блокирование доступа».

Экспертом требуется установить: «Подключался ли к сети Интернет подозреваемый Н. 17.09.11 г. с 11:00 до 13:00?», «Имеется ли на накопителе информации, изъятом у подозреваемого, информация о логине и пароле («MaximPerepilica/password1») потерпевшего М.?»

Для решения поставленных вопросов потребуется произвести всего два-три действия:

Выбрать файлы с датой создания/изменения/доступа в указанный период. Указать тип файлов - гипертекстовый.

Выбрать файлы, в которых встречаются слова MaximPerepilica и password1.

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

4. Разработка программного обеспечения

4.1 Функциональное проектирование

Язык UML (Unified Modeling Language - унифицированный язык моделирования). UML - это графический язык описания архитектуры системы.

Программа на UML не кодируется, а описывается при помощи диаграмм. Диаграммы UML состоят из объектов и связей между ними или из этапов процесса.

Наиболее распространена Unified (унифицированная) нотация. Именно ее и будем использовать в данном проекте.

Для построения диаграмм будем использовать программное средство Enterprise Architect фирмы Sparx Systems.

Функциональность системы опишем с помощью модели Use Case Model (Модель вариантов использования). Модель описывает, как проект выглядит с точки зрения его использования. Кто и куда вводит данные, что после этого делает программа и кому передает результат, т.е. определяет функциональность программы в терминах актеров и вариантов использования.

UML Use Case диаграмма представлена на рисунке 4.1.

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

Овалом отображается вариант использования - заданная функциональность.

Тип диаграммы Use Case предназначен для создания списка операций, которые выполняет система, и часто его называют диаграммой функций, потому что на основе набора таких диаграмм строится набор функций, выполняемых системой, и описываются сценарии поведения объектов, которые взаимодействуют с системой.

Рисунок 4.1 -- UML Use Case диаграмма системы «Эксперт-поиск»

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

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

Аналогично вариант использования «Поиск файла» имеет связь «расширяет».

4.2 Структура программного обеспечения

Структуру системы опишем диаграммой классов (Class diagram). Это основная диаграмма для создания кода приложения [3]. При помощи диаграммы классов создается внутренняя структура системы, описывается наследование и взаимное положение классов друг относительно друга. Здесь описывается логическое представление системы. Именно логическое, так как классы -- это лишь заготовки для создания объектов, на основе которых затем будут определены физические объекты.

Диаграмма классов включает в себя следующие классы (рисунок 4.2):

SelectHost - служит для выбора хоста базы данных, возможности его изменения, подключения к БД. Данный класс находится в состоянии ассоциации с классами DAL и setup.

Класс имеет методы:

- SelectHost() - публичный метод (public, т.е. полностью открытый) для инициализации объектов формы путем вызова приватного метода InitializeComponent().

- SelectHost_Load(object, EventArgs) - приватный метод (private, позволяет вызывать себя только в контексте собственного объекта), вызываемый при загрузки формы (по событию Load формы), для загрузки списка хостов из конфигурационного файла Hosts.cfg.

DAL - класс интерфейс, уровня доступа к базе данных (Data Access Layer). Данный класс реализует все операции по работе с базой данных. Таким образом, все операции по работе с базой данных сводятся к выполнению методов данного класса.

Класс содержит следующие public методы:

AddIndex(string, string) - создание нового индекса и соответственно базы данных;

AddSelecteddir(string, string) - добавление данных по выбранной области поиска в БД;

Checkconnection() - проверка подключения к БД;

CreateDataSet() - подготавливает структуру данных таблиц файлов и каталогов;

Рисунок 4.2 -- Диаграмма классов системы «Эксперт-поиск»

- DeleteIndex() - удаление индекса, т.е. базы данных с указанным именем;

- GeDirSrez - создание среза файлов;

- GeFilesSrez - создание среза каталогов;

- GetBody - получение данных при полнотекстовом поиске;

- GetDiapazons - получение данных при временном поиске;

- GetFilesInDiapazon - получение данных по файлу при временном поиске;

- GetSelecteddirs(string) - получение данных по выбранной области поиска;

- GetSelecteddirs_S(string) - получение данных по выбранной области поиска в виде списка;

- LoadConfig() - загрузка данных по имеющимся индексам из БД config, либо создание БД config, в случае ее отсутствия;

- MySql_no_result_query(string, MySqlConnection) - выполнение SQL запроса;

- PrepareTables(string) - подготовка таблиц в БД;

- Refreshlists(string) - обновление списка типов файлов;

- SaveDirArray(string) - сохранение массива каталогов;

- SaveFilesArray(string) - сохранение массива файлов;

- SeachText(string, string) - поиск текста при полнотекстовом поиске;

- UpdateConfig() - обновление индекса.

Класс DAL имеет одно приватное поле Config_CS для хранения данных для подключения к СУБД.

MainForm - класс для визуального отображения основной формы и ее взаимодействия.

Класс содержит следующие методы:

- MainForm() - public метод для инициализации компонентов формы;

- Form1_Load() - private метод по событию Load формы для загрузки начальных установок;

- Refresh() - private метод для обновления списка индексов;

- MainForm_FormClosing() - private метод по событию FormClosing формы, осуществляющий очистку индекса при закрытии окна.

New_index - класс создания индекса.

Класс содержит следующие методы:

- GetDirectories - приватный метод;

- New_index() - публичный метод для инициализации объектов формы путем вызова приватного метода InitializeComponent();

- New_index_Load() - private метод, вызываемый при загрузки формы (по событию Load формы) для загрузки начальных установок;

- PopulateTreeView(string) - private метод формирующий структуру диска для отображения в качестве области индексации;

- PrintRecursive - private метод рекурсивно записывающий в файл.

SearchForm - класс, реализующий поиск по различным критериям.

Класс содержит следующие методы:

- SeachForm_Load - private метод, вызываемый при загрузке формы (по событию Load формы) для формирования списка типов файлов при выборе параметров поиска;

- SeachForm() - публичный метод для инициализации объектов формы путем вызова приватного метода InitializeComponent().

Scanner - класс для переиндексации данных.

Класс содержит следующие методы:

- Scanner() - публичный метод для инициализации объектов формы путем вызова приватного метода InitializeComponent();

- Scanner_Load() - private метод, вызываемый при загрузке формы (по событию Load формы) для формирования списка типов файлов при выборочной индексации;

- TraverseTree - private метод сканирования дерева каталогов.

TypeDetect - класс, определяющий тип файла по расширению или содержимому, содержащий единственный public метод Detect().

Extract - класс хранения данных.

Класс содержит следующие методы:

- CleanString - public метод;

- ext - public метод;

- extDoc - public метод;

- extExcel - public метод;

- exttxt - public метод;

- releaseObject - private метод.

Global - класс для хранения глобального набора данных.

Ftype - класс для хранения данных типов файлов.

Класс содержит следующие public методы:

- Ftype - запись полей класса значениями;

- GetGroup - получение значения поля groupid.

Класс содержит следующие public поля:

- Description - описание типа файла;

- Groupid - id группы;

- Id - уникальный идентификатор (id) типа файла;

- Name - название типа файла.

FGType - класс для хранения групп типов файлов.

Класс содержит следующие public методы:

- FGtype - запись полей класса значениями.

Класс содержит следующие public поля:

- Description - описание типа файла;

- Id - уникальный идентификатор (id) группы типа файла;

- Name - название группы типа файла.

PreView - класс для просмотра текстового содержимого файла.

Класс содержит единственный публичный метод PreView () для инициализации объектов формы путем вызова приватного метода InitializeComponent() и отображает содержимое файла.

Program - управляющий класс, содержащий метод main() - точку входа в программу.

Содержит единственный приватный метод Main() для запуска приложения.

Setup - класс для хранения данных директорий приложения.

Класс содержит следующие public поля:

- AppDir - директория приложения;

- DataDir - директория данных;

- TmpDir - временная директория;

- TmpFile - временный файл;

- Version - версия.

4.3 Разработка алгоритмов работы

Поведение системы в динамике опишем диаграммой кооперации Collaboration Diagram (рисунок 4.43).

Рисунок 4.3 -- Диаграмма кооперации системы «Эксперт-поиск»

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

Блок схема алгоритма работы системы «Эксперт-поиск» (рисунок 4.4).

Работа программы начинается с запроса на выбор источника данных (форма SelectHost). После выбора адреса источника данных, либо ввода нового значения IP адреса выполняется проверка на подключение к БД по указанному адресу. В случае ошибки подключения выводится информационное сообщение с возможностью повторного ввода данных.

При успешном подключении к БД по указанному адресу осуществляется вывод главной формы (MainForm), позволяющей производить основные операции: поиск, создание индекса, перестройка индекса, удаление индекса, выбор индекса и области поиска.

При создании индекса отображается форма New_index с запросом имени БД создаваемого индекса и области индексации. Результат сохраняется в БД как данные по индексам.

При перестройке индекса отображается форма Scanner и производится запрос типа индексации. Результат сохраняется в БД как данные по индексам.

При выполнении процесса сканирования меняется текстовая информация об активном процессе (textBox1.Text), выполняется метод подготовки таблиц в БД (dal.PrepareTables), формируется массив данных по выбранной области поиска в виде списка (dal.GetSelecteddirs_S), производится запись в БД списка каталогов (dal.SaveDirArray) с расчетом и отображение времени выполнения данной операции (DateTime). Далее производится запись в БД списка файлов (dal.SaveFilesArray) и обновление списка типов файлов (dal.refreshlists). После чего происходит обновление таблицы индексов на главной форме (global.dsconfig.Tables…) и очистка памяти (global.dtfiles.Clear() и global.dtfolders.Clear()).

Рисунок 4.4 -- Блок-схема алгоритма работы системы «Эксперт-поиск»

Процедура перестройки индекса:

private void button2_Click(object sender, EventArgs e)

{

DateTime timestart = DateTime.Now; DateTime timeend;

Button2.Visible = false; button1.Text = "Завершить";

this.Text = "Индексирую:" + @global.SelectedDB_FileName;

textBox1.Text = "Сканирование выбранных каталогов";

dal.PrepareTables(@global.SelectedDB_FileName);

ArrayList Maindirs =

dal.GetSelecteddirs_S(@global.SelectedDB_FileName);

foreach (string result in Maindirs)

TraverseTree(result);

DateTime t1, t2; TimeSpan t;

textBox1.Text = "Запись в базу списка каталогов"; textBox2.Text = "";

t1 = DateTime.Now;

dal.SaveDirArray(@global.SelectedDB_FileName);

t2 = DateTime.Now;

t = t2 - t1;

listBox1.Items.Add("Запись в базу информации о " +

global.dtfolders.Rows.Count + " каталогов выполнена за:" + t.Seconds + "

секунд");

textBox1.Text = "Запись в базу списка файлов"; textBox2.Text = "";

t1 = DateTime.Now;

dal.SaveFilesArray(@global.SelectedDB_FileName);

t2 = DateTime.Now;

t = t2 - t1;

listBox1.Items.Add("Запись в базу информации о " +

global.dtfiles.Rows.Count + " файлах выполнена за:" + t.Seconds + "

секунд");

dal.refreshlists(@global.SelectedDB_FileName);

timeend = DateTime.Now; t = timeend - timestart;

textBox1.Text = "Индексация завершена"; listBox1.Items.Add("Общее

время процесса индексации: " + t.Minutes + " минут");

listBox1.SelectedIndex = listBox1.Items.Count - 1;

global.IndexDate = DateTime.Now;

global.FilesCount = global.dtfiles.Rows.Count;

global.dsconfig.Tables["Indexes"].Rows[global.CurrentRow]["FilesSize"] =

global.FilesSize / 1048576 / 1024;

global.dsconfig.Tables["Indexes"].Rows[global.CurrentRow]["FilesCount"]

= global.FilesCount;

global.dsconfig.Tables["Indexes"].Rows[global.CurrentRow]["LastIndex"]

= global.IndexDate;

global.dtfiles.Clear();

global.dtfolders.Clear();

}

При удалении индекса отображается запрос на подтверждение удаления данных. Результат сохраняется в БД как данные по индексам.

Процедура удаления индекса:

private void button4_Click(object sender, EventArgs e)

{

DialogResult Ask = MessageBox.Show("Вы уверены, что хотите удалить

индекс:\n" + dgv_indexes.CurrentRow.Cells["Name"].Value.ToString(),

"Внимание!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

if (Ask == DialogResult.Yes)

{

try

{

dal.DeleteIndex(dgv_indexes.CurrentRow.Cells["DBNAME"].Value.ToStri

ng());

dgv_indexes.Rows.RemoveAt(dgv_indexes.CurrentRow.Index);

dal.UpdateConfig();

}

finally

{

MessageBox.Show("Операция выполнена успешно");

}

}

refresh();

}

Из кода видим, что при выборе положительного ответа на запрос (Ask == DialogResult.Yes) и успешного удаления (dal.DeleteIndex) индекса и обновления (dal.UpdateConfig) выводится информационное сообщение (MessageBox.Show("Операция выполнена успешно")). После чего выполняется метод обновления формы (refresh).

При поиске данных отображается форма SearchForm с запросом типа поиска и параметров поиска. По результатам поиска производится их обработка: визуальный анализ или экспорт в формат Excel или txt. Для визуального анализа выводится форма PreView. Для поиска используются индексированные данные из БД.

Реализация метода при типе поиска «Создание среза файлов»:

public void GeFilesSrez(string dbname,

Boolean CheckIncludeMask, string mask1,

Boolean CheckExcludeMask, string mask2,

Boolean CheckCreation, DateTime Cr_start, DateTime Cr_End,

Boolean CheckAccess, DateTime Ac_start, DateTime Ac_End,

Boolean CheckChange, DateTime Ch_start, DateTime Ch_End,

Boolean CheckHidden,

Boolean CheckOnlyRead,

Boolean CheckEncrypt,

Boolean CheckMinSize, string minsize,

Boolean CheckMaxSize, string maxsize,

Boolean CheckExtension, string Ext,

Boolean CheckTypes, int Gtype

)

{

string CS = "Database = '" + dbname + "';Data Source=" +

global.mysql_host + ";User Id=" + global.mysql_user + ";Password=" +

global.mysql_pass;

MySqlConnection con = new MySqlConnection(CS);

string sql ="Select "+

"ft.TYPE, " +

"fo.Dir, " +

"fi.Name, "+

"fi.Extension, " +

"fi.Size, " +

"fi.CreationTime, " +

"fi.LastAccessTime, " +

"fi.LastWriteTime, " +

"fi.ReadOnly, " +

"fi.Hidden, " +

"fi.Encrypted, " +

"fi.ID " +

" from folders as fo, files as fi, FTYPES AS FT where fi.dir_id = fo.id and

FI.Type = ft.ID AND ";

if (CheckIncludeMask) sql += "fi.NAME LIKE '%" + mask1 + "%' AND ";

if (CheckExcludeMask) sql += "fi.NAME NOT LIKE '%" + mask2 + "%'

AND ";

if (CheckCreation) sql += " fi.CreationTime between @date1 and @date2

AND";

if (CheckAccess) sql += " fi.LastAccessTime between @date3 and @date4

AND";

if (CheckChange) sql += " fi.LastWriteTime between @date5 and @date6

AND";

if (CheckOnlyRead) sql += " fi.ReadOnly = 1 AND";

if (CheckHidden) sql += " fi.Hidden = 1 AND";

if (CheckEncrypt) sql += " fi.Encrypted = 1 AND";

if (CheckMinSize) sql += " fi.Size >= " + minsize + " AND ";

if (CheckMaxSize) sql += " fi.Size <= " + maxsize + " AND ";

if (CheckExtension) sql += " fi.Extension LIKE '." + Ext + "' AND ";

if (!CheckTypes) sql += "ft.GroupID =" + Gtype + " AND ";

sql += " 1=1;";

MySqlCommand com = new MySqlCommand(sql, con);

MySqlDataAdapter da = new MySqlDataAdapter();

com.Parameters.Add("@date1", MySqlDbType.DateTime, 8).Value =

Cr_start; com.Parameters.Add("@date2", MySqlDbType.DateTime,

8).Value = Cr_End;

com.Parameters.Add("@date3", MySqlDbType.DateTime, 8).Value =

Ac_start; com.Parameters.Add("@date4", MySqlDbType.DateTime,

8).Value = Ac_End;

com.Parameters.Add("@date5", MySqlDbType.DateTime, 8).Value =

Ch_start; com.Parameters.Add("@date6", MySqlDbType.DateTime,

8).Value = Ch_End;

try

{

da.SelectCommand = com;

da.Fill(global.dtFsrez);

}

catch (Exception ex)

{

MessageBox.Show("GetFilesSrez\n" + ex.ToString()+"\nСодержимое

запроса\n\n"+sql);

}

}

Реализация метода при типе поиска «Создание среза каталогов»:

public void GeDirSrez(string dbname,

Boolean CheckIncludeMask, string mask1,

Boolean CheckExcludeMask, string mask2,

Boolean CheckCreation, DateTime Cr_start, DateTime Cr_End,

Boolean CheckAccess, DateTime Ac_start, DateTime Ac_End,

Boolean CheckChange, DateTime Ch_start, DateTime Ch_End,

Boolean CheckHidden,

Boolean CheckOnlyRead,

Boolean CheckEncrypt

)

{

string CS = "Database = '" + dbname + "';Data Source=" +

global.mysql_host + ";User Id=" + global.mysql_user + ";Password=" +

global.mysql_pass + ";Charset=" + global.mysql_CharSet;

MySqlConnection con = new MySqlConnection(CS);

string sql = "Select Dir, " +

"CreationTime, " +

"LastAccessTime, " +

"LastWriteTime, " +

"ReadOnly, " +

"Hidden, " +

"Encrypted " +

" from folders where ";

if (CheckIncludeMask) sql += "Dir LIKE '%" + mask1 + "%' AND ";

if (CheckExcludeMask) sql += "Dir NOT LIKE '%" + mask2 + "%' AND ";

if (CheckCreation) sql += " CreationTime between @date1 and @date2

AND";

if (CheckAccess) sql += " LastAccessTime between @date3 and @date4

AND";

if (CheckChange) sql += " LastWriteTime between @date5 and @date6

AND";

if (CheckOnlyRead) sql += " ReadOnly = 1 AND";

if (CheckHidden) sql += " Hidden = 1 AND";

if (CheckEncrypt) sql += " Encrypted = 1 AND";

sql += " 1=1";

MySqlCommand com = new MySqlCommand(sql, con);

MySqlDataAdapter da = new MySqlDataAdapter();

com.Parameters.Add("@date1", MySqlDbType.DateTime, 8).Value =

Cr_start; com.Parameters.Add("@date2", MySqlDbType.DateTime,

8).Value = Cr_End;

com.Parameters.Add("@date3", MySqlDbType.DateTime, 8).Value =

Ac_start; com.Parameters.Add("@date4", MySqlDbType.DateTime,

8).Value = Ac_End;

com.Parameters.Add("@date5", MySqlDbType.DateTime, 8).Value =

Ch_start; com.Parameters.Add("@date6", MySqlDbType.DateTime,

8).Value = Ch_End;

try

{

da.SelectCommand = com;

da.Fill(global.dtDsrez);

}

catch (Exception ex)

{

MessageBox.Show("GetDirSrez\n" + ex.ToString() + "\nСодержимое

запроса\n\n" + sql);

}

}

Реализация метода при типе поиска «Полнотекстовый поиск»:

public Boolean SeachText(string dbname, string Text)

{

string CS = "Database = '" + dbname + "';Data Source=" +

global.mysql_host + ";User Id=" + global.mysql_user + ";Password=" +

global.mysql_pass + ";Charset=" + global.mysql_CharSet;

MySqlConnection con = new MySqlConnection(CS);

string sql = "Select fo.Dir, " +

"fi.Name, " +

"fi.Extension, " +

"fi.Size, " +

"fi.CreationTime, " +

"fi.LastAccessTime, " +

"fi.LastWriteTime, " +

"fi.ReadOnly, " +

"fi.Hidden, " +

"fi.Encrypted, " +

"fi.ID, " +

"MATCH (Name, Extension, Body) AGAINST ('" + Text + "' IN

BOOLEAN MODE) AS REL"+

" from folders as fo, files as fi where fi.dir_id = fo.id and MATCH (Name,

Extension, Body) AGAINST ('" + Text + "' IN BOOLEAN MODE) " +

"ORDER BY REL;";

MySqlCommand com = new MySqlCommand(sql, con);

MySqlDataAdapter da = new MySqlDataAdapter();

try

{

da.SelectCommand = com;

da.Fill(global.dtFsrez);

}

catch (Exception ex)

{

MessageBox.Show("GetFilesSrez\n" + ex.ToString() + "\nСодержимое

запроса\n\n" + sql);

}

return true;

}

Реализация метода при типе поиска «Временные диапазоны»:

public void GetDiapazons(string dbname,

Boolean CheckCreation,

Boolean CheckAccess,

Boolean CheckChange,

DateTime StartTime, DateTime EndTime )

{

string CS = "Database = '" + dbname + "';Data Source=" +

global.mysql_host + ";User Id=" + global.mysql_user + ";Password=" +

global.mysql_pass;

MySqlConnection con = new MySqlConnection(CS);

string sql = "";

if (CheckCreation) sql += "Select CreationTime as date from files where

CreationTime between @date1 and @date2 ";

if (CheckAccess==true && sql!="") sql += " UNION Select

LastAccessTime as date from files where LastAccessTime between @date1

and @date2 ";

else if (CheckAccess)sql += "Select LastAccessTime as date from files

where LastAccessTime between @date1 and @date2 ";

if (CheckChange==true && sql!="") sql += " UNION Select LastWriteTime

as date from files where LastWriteTime between @date1 and @date2 ";

else if(CheckChange)sql += "Select LastWriteTime as date from files where

LastWriteTime between @date1 and @date2 ";

if (sql == "") return;

MySqlCommand com = new MySqlCommand(sql, con);

MySqlDataAdapter da = new MySqlDataAdapter();

com.Parameters.Add("@date1", MySqlDbType.DateTime, 8).Value =

StartTime;

com.Parameters.Add("@date2", MySqlDbType.DateTime, 8).Value =

EndTime;

try

{

da.SelectCommand = com;

da.Fill(global.dtdates);

}

catch (Exception ex)

{

MessageBox.Show("GetFilesSrez\n" + ex.ToString() + "\nСодержимое

запроса\n\n" + sql);

}

}

Для представления общей конфигурации и топологии распределенной программной системы в UML предназначены диаграммы развертывания.

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

Диаграмма развертывания Deployment Model приведена на рисунке 4.5

Рисунок 4.5 -- Диаграмма развертывания Deployment Model системы «Эксперт-поиск»

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

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

- определить распределение компонентов системы по ее физическим узлам;

- показать физические связи между всеми узлами реализации системы на этапе ее исполнения;

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

Из данной диаграммы видно, что развертывание приложения на рабочих местах осуществляется с помощью манифеста развертывания приложения “ Эксперт-поиск.application” инсталлятора .NET. Развертывание БД на сервере осуществляется установкой СУБД MySQL и запуском SQL скрипта создания БД.

4.4 Разработка интерфейса пользователя

Интерфейс пользователя, должен использовать стандартные, привычные пользователям элементы, и обеспечивать максимальное удобство. Всё это, в конечном счете, определяется таким критерием как эффективность интерфейса - максимальный результат с минимальными усилиями.

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

- “Прозрачность интерфейса”. Интерфейс пользователя должен быть интуитивно понятным, простым для освоения, и не создавать для пользователя проблем, которые он вынужден будет преодолевать в процессе работы. Для этого используем стандартные, без излишнего украшательства компоненты, и будем применять привычные, используемые аналогичными программами приёмы управления.

- Пренебрежение интеллектуальными способностями пользователей. Часто пользователи не только не умеют работать за компьютером, но и просто боятся предпринять что-либо самостоятельно. Поэтому интерфейс пользователя должен быть максимально дружественным.

- Необходимо создавать программу с максимально возможными "умственными" способностями.

Для взаимодействия с пользователем разработаем следующие формы:

- MainForm - главная форма приложения, отправная точка для поиска и индексации;

- New_index - форма создания индекса;

- Scanner - форма переиндексации данных;

- SeachForm - форма поиска;

- PreView - форма просмотра содержимого файла;

- SelectHost - форма выбора хоста для подключения к БД.

Форма SelectHost служит для выбора источника данных и запускается первой при старте программы (рисунок 4.6).

Рисунок 4.6 -- Форма выбора источника данных (SelectHost)

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

Для отображения всплывающих подсказок при загрузке окна выполняется следующий код:

buttonToolTip.SetToolTip(button1, "Продолжить работу с выбранным

источником данных");

buttonToolTip.SetToolTip(button2, "Завершить работу программы");

buttonToolTip.SetToolTip(button3, "Нажмите, чтобы удалить выбранный

источник данных");

buttonToolTip.SetToolTip(textBox1,"Введите адрес источника данных в

тектовом формате или IP");

Главная форма приложения (MainForm) служит выполнения основных действия с системой: поиск, создания индекса, перестройка индекса, удаление индекса, выбора индекса и области поиска при поиске (рисунок 4.7).

Рисунок 4.7 -- Главная форма приложения (MainForm)

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

Для отображения всплывающих подсказок при загрузке окна выполняется следующий код:

компьютерный экспертиза автоматизированный файл

buttonToolTip.SetToolTip(button1, "Продолжить работу с выбранной

базой");

buttonToolTip.SetToolTip(button2, "Cоздание нового индекса");

buttonToolTip.SetToolTip(button4, "Удалить выбранную базу");

buttonToolTip.SetToolTip(button5, "Завершить работу программы");

buttonToolTip.SetToolTip(button6, "Перестроение индексной базы");

Форма создания нового индекса (New_index) служит для выбора области индексации, указания имени БД и ее описания и сохранения этих данных в БД (рисунок 4.8).

Рисунок 4.8 -- Форма создания индекса (New_index)

Форма имеет стандартный интерфейс с возможностью сворачивания, разворачивания и закрытия окна. Вверху формы отображены текстовые поля для ввода имени БД и ее названия (описание). Слева наглядно отображены носители информации доступные в системе. Справа в виде дерева отображена структура выбранного источника данных. Таким образом, выбор области индексации становится очень простым и наглядным.

Для отображения всплывающих подсказок при загрузке окна выполняется следующий код:

buttonToolTip.SetToolTip(button1, "Завершить создание индекса");

buttonToolTip.SetToolTip(button2, "Отменить операцию");

buttonToolTip.SetToolTip(textBox1, "Краткое описание индексной

базы");

buttonToolTip.SetToolTip(textBox2, "Имя индексной базы для СУБД");

Форма переиндексации (Scanner) служит для переиндексации данных с выбором его типа (рисунок 4.9).

Форма имеет стандартный интерфейс с возможностью сворачивания, разворачивания и закрытия окна. Имеется три типа индексации:

- полная;

- срез файлов;

- выборочная.

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

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

Рисунок 4.9 -- Форма переиндексации (Scanner)

Для отображения всплывающих подсказок при загрузке окна выполняется следующий код:

buttonToolTip.SetToolTip(Button2, "Приступить к индексированию

файлов");

buttonToolTip.SetToolTip(button1, "Отменить операцию и вернуться на

главную форму");

Форма поиска (SearchForm) служит для различных типов поиска данных по различным критериям и экспорта результата поиска в Excel и txt форматы (рисунок 4.10).

Форма имеет стандартный интерфейс с возможностью сворачивания, разворачивания и закрытия окна. Форма имеет отдельные вкладки для различных типов поиска:

- Создание среза файлов;

- Создание среза каталогов;

- Полнотекстовый поиск;

- Временные диапазоны.

Рисунок 4.10 -- Форма поиска (SearchForm)

Вкладка «Создание среза файлов» содержит отдельные вкладки для типа среза файлов:

- Типы и расширения;

- Параметры;

- Атрибуты.

При поиске по типу и расширению, возможно выбрать критерий поиска из списка типов файлов либо указать расширение в соответствующем поле.

При поиске по параметрам имеется возможность указать временные рамки и размер данных для поиска, а также маски включения и выключения (рисунок 4.11).

При поиске по атрибутам имеется возможность указать атрибуты поиска (рисунок 4.12).

Рисунок 4.11 -- Форма поиска по параметрам (SearchForm)

Рисунок 4.12 -- Форма поиска по атрибутам (SearchForm)

Результаты поиска отображаются в нижней части формы в наглядном виде в таблице с подробным указанием основных параметров (рисунок 4.10).

Рисунок 4.13 -- Создание среза каталогов

При типе поиска «Создание среза каталогов» имеется возможность указать временные рамки, атрибуты и маски включения и выключения данных для поиска (рисунок 4.13)

При варианте поиска «Полнотекстовый поиск» в верхней части формы отображено текстовое поле ввода для поиска (рисунок 4.14).

Рисунок 4.14 -- Вариант поиска «Полнотекстовый поиск»

Рисунок 4.15 -- Вариант поиска «Временные диапазоны»

При варианте поиска «Временные диапазоны» в верхней части формы отображены элементы выбора временных критериев поиска по различным параметрам (рисунок 4.15).

Для экспорта результатов поиска предусмотрены кнопки экспорта в нижней части формы «Экспорт в Excel» и «Сохранить как текст».

Для отображения всплывающих подсказок при загрузке окна выполняется следующий код:

buttonToolTip.SetToolTip(button1, "Завершить работу");

buttonToolTip.SetToolTip(button2, "Нажмите, чтобы получить срез

файлов");

buttonToolTip.SetToolTip(button3, "Нажмите, чтобы увидеть текстовое

содержимое файла");

buttonToolTip.SetToolTip(button4, "Нажмите, чтобы сохранить список в

текстовый файл");

buttonToolTip.SetToolTip(button5, "Нажмите, чтобы экспортировать

список в Excel");

buttonToolTip.SetToolTip(button6, "Нажмите, чтобы получить срез

каталогов");

buttonToolTip.SetToolTip(button7, "Нажмите, чтобы осуществить

полнотекстовый поиск");

buttonToolTip.SetToolTip(button8, "Нажмите, чтобы сгенерировать

список временных диапазонов");

buttonToolTip.SetToolTip(button9, "Нажмите, чтобы экспортировать

список в Excel");

buttonToolTip.SetToolTip(button10, "Нажмите, чтобы получить список

файлов, входящий в выбранный диапазон");

buttonToolTip.SetToolTip(button11, "Нажмите, чтобы сохранить список

диапазонов в текстовом файле");

buttonToolTip.SetToolTip(button12, "Нажмите, чтобы копировать

выделенные файлы в папку");

4.5 Руководство пользователя

Руководство пользователя приведено в приложении Б. Оно включает в себя разделы:

- Аннотация;

- Назначение и условия выполнения программы;

- Работа с системой.

5. Тестирование программного обеспечения

5.1 План тестирования

Тестирование (testing) это процесс выполнения программы (или части программы) с намерением (или целью) найти ошибки.

Существует несколько основных методов тестирования ПО:

- восходящее тестирование;

- нисходящее тестирование;

- модифицированный нисходящий;

- метод большого скачка;

- модифицированный метод сандвича;

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

- функциональные возможности;

- практичность;

- навигацию;

- форму;

- содержимое.

5.2 Результаты тестирования

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

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

- формы;

- временные рабочие окна.

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

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

- использование клавиши табулятора для проверки того, что форма проходит по полям в положенном порядке как вперед, так и назад;

- тестирование граничных значений;

- проверка корректного отлавливания формами неверных данных, в особенности форматов даты и числовых форматов;

- проверка правильного обновления формами информации.

Результаты тестирования форм приведены в таблицах (Таблица 5.1-Таблица 5.6).

Таблица 5.1

Тестирование формы «MainForm» (Главная форма)

ID тестового примера

Описание входных данных

Входные данные

Ожидаемые результаты

Реальные результаты

1

2

3

4

5

W-1

1. Запустить «Эксперт-поиск»

2. Открыть главную форму

3. Осуществить переход между полями по клавише Tab

Окно поиска MainForm

1. Циклический последовательный переход по полям

1. Циклический последовательный переход по полям

W-2

1. Запустить «Эксперт-поиск»

2. Открыть главную форму

3. Осуществить создание индекса

Окно поиска MainForm

1. Появление нового индекса в списке

1. Появление нового индекса в списке

W-3

1. Запустить «Эксперт-поиск»

2. Открыть главную форму

3. Осуществить удаление

Окно поиска MainForm

1. Исчезновение индекса из списка

1. Исчезновение индекса из списка

W-4

1. Запустить «Эксперт-поиск»

2. Открыть главную форму

3. Осуществить перемещение между индексами

Окно поиска MainForm

1. Изменение списка области поиска

1. Изменение списка области поиска

Таблица 5.2

Тестирование формы «New_index» (Создание индекса)

ID тестового примера

Описание входных данных

Входные данные

Ожидаемые результаты

Реальные результаты

1

2

3

4

5

W-1

1. Запустить «Эксперт-поиск»

2. Открыть форму создания индекса

3. Осуществить переход между полями по клавише Tab

Окно поиска New_index

1. Циклический последовательный переход по полям

1. Циклический последовательный переход по полям

W-2

1. Запустить «Эксперт-поиск»

2. Открыть форму создания индекса

3. Осуществить создание индекса с именем Index1

Окно поиска New_index;

Имя индекса Index1

1. Успешное создание индекса

2. Запись данных в БД

1. Успешное создание индекса

2. Запись данных в БД

W-3

1. Запустить «Эксперт-поиск»

2. Открыть форму создания индекса

3. Осуществить создание индекса с именем 555

Окно поиска New_index;

Имя индекса 555

1. Сообщение об ошибке

2. Запись данных в БД не производится

1. Сообщение об ошибке

2. Запись данных в БД не производится

W-4

1. Запустить «Эксперт-поиск»

2. Открыть форму создания индекса

3. Осуществить создание индекса с именем Index2 по частичной области посика

Окно поиска New_index;

Имя индекса Index2

1. Успешное создание индекса

2. Запись данных в БД

1. Успешное создание индекса

2. Запись данных в БД

Таблица 5.3

Тестирование формы «PreView» (Предпросмотр)

ID тестового примера

Описание входных данных

Входные данные

Ожидаемые результаты

Реальные результаты

1

2

3

4

5

W-1

1. Запустить «Эксперт-поиск»

2. Открыть форму предпросмотра

3. Осуществить переход между полями по клавише Tab


Подобные документы

  • Особенности работы "поисковика" дублирующихся файлов на диске. Выбор среды программирования. Разработка программного продукта. Основные требования, предъявляемые к программе, производящей поиск дублирующихся файлов на диске. Отображение скрытых файлов.

    курсовая работа [1,8 M], добавлен 28.03.2015

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

    дипломная работа [883,5 K], добавлен 12.08.2017

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

    курсовая работа [3,3 M], добавлен 10.11.2010

  • Проектирование программного обеспечения. Схема начального формирования каталога файлов, вывода на экран каталога файлов, удаления файлов, сортировки файлов по имени, дате создания и размеру методом прямого выбора. Управление каталогом в файловой системе.

    курсовая работа [804,0 K], добавлен 08.01.2014

  • Исследование проблемы сравнения звуковых файлов и определение степени их схожести. Сравнение файлов с использованием метода нечеткого поиска, основанного на метрике (расстоянии) Левенштейна. Сравнение MIDI-файлов и реализация алгоритмов считывания.

    курсовая работа [2,0 M], добавлен 14.07.2012

  • Обзор особенностей работы с программой Total Commander. Создание папок, копирование файлов на флеш-карту. Вызов контекстного меню. Определение структуры файлов. Переименование группы файлов. Помещение файлов в архив. Разделение архива на несколько частей.

    лабораторная работа [1,9 M], добавлен 08.04.2014

  • Web content, usage mining. Современные средства анализа лог-файлов. Требования к создаваемой системе, выбор инструментов реализации, описание общей архитектуры. Конвенции программирования, разработки Firebird. Кроссплатформленость, работа с Еxсel.

    дипломная работа [1,5 M], добавлен 09.10.2013

  • Изучение понятия и основных задач стеганографии - науки, изучающей способы и методы сокрытия информации. Характеристика метода замены наименее значащих битов для bmp файлов. Реализация метода замены НЗБ для bmp файлов на языке программирования Java.

    курсовая работа [149,2 K], добавлен 13.02.2013

  • Изучение основных этапов программирования на ассемблере, который является символическим представлением машинного языка, то есть каждой машинной команде соответствует команда ассемблера. Реализация алгоритма выполнения программы для просмотра bmp файлов.

    курсовая работа [248,0 K], добавлен 25.12.2012

  • Принципы создания последовательных и файлов произвольного доступа. Формирование файлов, в одном из которых помещены фамилии пяти знакомых, а в другой номера их телефонов. Составление программы, которая по фамилии знакомого определяет номер его телефона.

    контрольная работа [17,9 K], добавлен 25.12.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.