Перейти к содержимому

Фотография

Подходы к тестированию сортировок


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 16

#1 Akeem

Akeem

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • ФИО:Зозуленко Алексей Николаевич
  • Город:Kiev/Ukraine

Отправлено 05 июня 2009 - 10:07

Задача:
Есть набор данных в таблице. Сотрировка данных возможна по разным полям. Нужно проверить правильность сортирования данных в таблице.


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

Спасибо. :acute:
  • 0
Главное находиться в гармонии с собой...

#2 Boltick

Boltick

    Специалист

  • Members
  • PipPipPipPipPip
  • 596 сообщений
  • ФИО:Алексей
  • Город:планета Земля

Отправлено 05 июня 2009 - 10:58

Задача:
Есть набор данных в таблице. Сотрировка данных возможна по разным полям. Нужно проверить правильность сортирования данных в таблице.


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

Спасибо. :acute:

Добрый день,

1. Заливаете весь список себе
2. Сортируете список в приложении
3. Сортируете список в сохраненной копии
4. Сравниваете результат.

Алгоритм очень простой. Реализация не всегда так проста. Если интересны подробности реализации могу на примере показать:

- допустим есть список:
Name, Position, Start Date

- создаете объект, к примеру, UserData с полями name, position, startDate
- создаете список, элементами которого будут объекты UserData

Далее вам надо просто реализовать сортировку этого листа по конкретным полям (name, position, startDate)

Ну и потом проводите сравнение списков отсортированных приложением и вами...

Вот...
  • 0
Алексей Булат
Про Тестинг

#3 Alfa

Alfa

    Специалист

  • Members
  • PipPipPipPipPip
  • 553 сообщений
  • Город:Moscow

Отправлено 05 июня 2009 - 11:14

1. Заливаете весь список себе
2. Сортируете список в приложении
3. Сортируете список в сохраненной копии
4. Сравниваете результат.

Алгоритм очень простой.

Еще проще!
1. Сортируете список в приложении
2. Проверяете, что он отсортирован
3. Профит! (не могу не добавить)
  • 0

Чубака — это вуки с планеты Киши, но живет Чубака на планете Эндо, а теперь вдумайтесь:
в этом же нет смысла. С какой стати Чубаке, вуки высотой два с половиной метра,
жить среди эвоков, которые чуть выше полуметра. В этом нет абсолютно никакого смысла.


#4 Akeem

Akeem

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • ФИО:Зозуленко Алексей Николаевич
  • Город:Kiev/Ukraine

Отправлено 09 июня 2009 - 05:56

Это все я реализовал, но процедура грабинга данных с приложения очень долгая. И хотелось как-то это оптимизировать.
Так-же это плохо работает если у тебя есть таблица которая должна все сортироватся (наподобии сортировки в БД)
-----------------------------------------------------------------------

ем:

Далее вам надо просто реализовать сортировку этого листа по конкретным полям (name, position, startDate)

Ну и потом проводите сравнение списков отсортированных приложением и вами...

не представляю как это реализовать...
  • 0
Главное находиться в гармонии с собой...

#5 Akeem

Akeem

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • ФИО:Зозуленко Алексей Николаевич
  • Город:Kiev/Ukraine

Отправлено 09 июня 2009 - 06:03

Еще проще!
1. Сортируете список в приложении
2. Проверяете, что он отсортирован
3. Профит! (не могу не добавить)


Работаю с селениумом. Функция isOrdered lkz для проверки отсортированости не подходит. Тогда возникает вопрос как проверять что список отсортирован?
  • 0
Главное находиться в гармонии с собой...

#6 Boltick

Boltick

    Специалист

  • Members
  • PipPipPipPipPip
  • 596 сообщений
  • ФИО:Алексей
  • Город:планета Земля

Отправлено 09 июня 2009 - 07:39

Это все я реализовал, но процедура грабинга данных с приложения очень долгая. И хотелось как-то это оптимизировать.
Так-же это плохо работает если у тебя есть таблица которая должна все сортироватся (наподобии сортировки в БД)

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

Далее вам надо просто реализовать сортировку этого листа по конкретным полям (name, position, startDate)

Ну и потом проводите сравнение списков отсортированных приложением и вами...

не представляю как это реализовать...


Вы не знаете как реализовать сравнение двух списков? (Проще всего делать это поэлементно в цикле :) .)
  • 0
Алексей Булат
Про Тестинг

#7 Boltick

Boltick

    Специалист

  • Members
  • PipPipPipPipPip
  • 596 сообщений
  • ФИО:Алексей
  • Город:планета Земля

Отправлено 09 июня 2009 - 07:45

Еще проще!
1. Сортируете список в приложении
2. Проверяете, что он отсортирован
3. Профит! (не могу не добавить)


Работаю с селениумом. Функция isOrdered lkz для проверки отсортированости не подходит. Тогда возникает вопрос как проверять что список отсортирован?

Каждый следующий элемент должен быть меньше, равен или больше (зависит от типа сортировки) предыдущего. Это самый примитивный способ. Если же на сортировку будут влиять несколько ключей, то все будет сложнее, НО как говорится "безвыходных положений не бывает"
  • 0
Алексей Булат
Про Тестинг

#8 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 09 июня 2009 - 08:42

Еще проще!
1. Сортируете список в приложении
2. Проверяете, что он отсортирован
3. Профит! (не могу не добавить)


Работаю с селениумом. Функция isOrdered lkz для проверки отсортированости не подходит. Тогда возникает вопрос как проверять что список отсортирован?

Код на JScript пишете?
Есть возможность создавать свои функции?
  • 0

#9 Akeem

Akeem

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • ФИО:Зозуленко Алексей Николаевич
  • Город:Kiev/Ukraine

Отправлено 09 июня 2009 - 12:42

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

Доступа к Бд нет.

Вы не знаете как реализовать сравнение двух списков? (Проще всего делать это поэлементно в цикле :) .)

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

Каждый следующий элемент должен быть меньше, равен или больше (зависит от типа сортировки) предыдущего. Это самый примитивный способ. Если же на сортировку будут влиять несколько ключей, то все будет сложнее, НО как говорится "безвыходных положений не бывает"

Реализовано :)

Код на JScript пишете?
Есть возможность создавать свои функции?

Код на Java так что возможности добавлять свои функции хоть отбавляй. :)

------------------------------------------------------------------------
повторяюсь: я не знаю как реализовать сортировку по определенным полям.
  • 0
Главное находиться в гармонии с собой...

#10 Boltick

Boltick

    Специалист

  • Members
  • PipPipPipPipPip
  • 596 сообщений
  • ФИО:Алексей
  • Город:планета Земля

Отправлено 09 июня 2009 - 13:22

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


Ваша задача это задача на сравнение двух объектов с перестановкой. Как подсказку могу предложить вот такой JAVA интерфейс java.util.Comparator

имплементите его, и теперь вы можете сравнивать ваши объекты... остальное - дело техники...
  • 0
Алексей Булат
Про Тестинг

#11 Boltick

Boltick

    Специалист

  • Members
  • PipPipPipPipPip
  • 596 сообщений
  • ФИО:Алексей
  • Город:планета Земля

Отправлено 09 июня 2009 - 13:43

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


Ваша задача это задача на сравнение двух объектов с перестановкой. Как подсказку могу предложить вот такой JAVA интерфейс java.util.Comparator

имплементите его, и теперь вы можете сравнивать ваши объекты... остальное - дело техники...

Вот пример без конкретики:

Есть Класс
public class User {
	private String name;
	private int positionID;

	public User(String name, int positionID) {
		this.name = name;
		this.positionID = positionID;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPositionID() {
		return positionID;
	}
	public void setPositionID(int positionID) {
		this.positionID = positionID;
	}
}


Надо отсортировать лист объектов этого класса:

ArrayList list = new ArrayList();
User userA = new User("userA", 1);
User userB = new User("userB", 1);
list.add(userB);
list.add(userA);
Collections.sort(list);

В результате получаем Exception: User cannot be cast to java.lang.Comparable


Имплементируете интерфейс Comparable в класс User и реализуете метод compareTo

public class User implements Comparable {
	private String name;
	private int positionID;

	public User(String name, int positionID) {
		this.name = name;
		this.positionID = positionID;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getPositionID() {
		return positionID;
	}
	public void setPositionID(int positionID) {
		this.positionID = positionID;
	}
	public int compareTo(Object o) {
		// КОД СРАВНЕНИЯ ПИСАТЬ ТУТ
		// не забываем читать javadoc на метод compareTo: 
		// @return  a negative integer, zero, or a positive integer as this object 
		// is less than, equal to, or greater than the specified object.
		return 0;
	}
}
Запускаете сортировку листа еще раз - работает!


Идея понятна?
  • 0
Алексей Булат
Про Тестинг

#12 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 09 июня 2009 - 13:45

Код на Java так что возможности добавлять свои функции хоть отбавляй. :)

------------------------------------------------------------------------
повторяюсь: я не знаю как реализовать сортировку по определенным полям.

Грабите данные из интерфейса в двумерный массив.
Далее google в помощь

вот код, найденный по первой ссылке из поискового запроса "2d array sort java example":

Here's an example of sorting a 2D String array by each column in turn, and printing out the results:

import java.util.Arrays;import java.util.Comparator;/*** Created by IntelliJ IDEA.* User: Dave* Date: 11-Nov-2003* Time: 21:07:52*/public class ArraySortDemoApp {    public static void main(String[] args) {            // This is the array to be sorted        String[][] strings2D = { { "Fred ", "Cat ", "Orange " },        { "Bill ", "Dog ", "Lemon " },        { "Harry ", "Fish ", "Apple " },        { "Mike ", "Horse ", "Banana " },        { "Terry ", "Pig ", "Grape " } };                // Sort by column 0 and print results        // (see bottom for ArrayColumnComparator definition)        Arrays.sort(strings2D, new ArrayColumnComparator(0));        print(strings2D);                // Sort by column 1 and print results        Arrays.sort(strings2D, new ArrayColumnComparator(1));        print(strings2D);                // Sort by column 2 and print results        Arrays.sort(strings2D, new ArrayColumnComparator(2));        print(strings2D);    }        // Print out 2D array    private static void print(String[][] strings2D) {        String NEW_LINE = System.getProperty("line.separator");                for (int i = 0; i < strings2D.length; i++) {            String[] strings = strings2D[ i ];                        for (int j = 0; j < strings.length; j++) {                            System.out.print(strings[ j ]);            }            System.out.println(NEW_LINE);        }        System.out.println(NEW_LINE);    }}// Class that tells the sort method the result of comparing 2 rowsclass ArrayColumnComparator implements Comparator {    private int columnToSortOn = 0;        // Constructor takes & stores the column to use for sorting    ArrayColumnComparator(int columnToSortOn) {        this.columnToSortOn = columnToSortOn;    }        // Return the result of comparing the two row arrays    public int compare(Object o1, Object o2) {            // cast the object args back to string arrays        String[] row1 = (String[])o1;        String[] row2 = (String[])o2;                // compare the desired column values & return result        return row1[columnToSortOn].compareTo(row2[columnToSortOn]);    }}
If you take some time to understand what this does and how (follow the links too), you may see how something similar could help in sorting your 2D array.


Или требуется какой-то другой подход к сортировке?
  • 0

#13 Akeem

Akeem

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • ФИО:Зозуленко Алексей Николаевич
  • Город:Kiev/Ukraine

Отправлено 09 июня 2009 - 14:59

Boltick, ch_ip

Спасибо. Попробуем.

Масив будет Н-мерный, так что буду юзать структуру.
  • 0
Главное находиться в гармонии с собой...

#14 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 09 июня 2009 - 15:42

Масив будет Н-мерный, так что буду юзать структуру.

Не совсем понятно, зачем для сортировки таблицы использовать Н-мерный массив :shok:.
Сортировку трехмерного массива я еще могу себе представить, но вот дальше - уже мозги закипаются и плавтся :focus: ,
а главное, совершенно неясно, как это может выглядеть в интерфейсе :unknw:
  • 0

#15 rlabs

rlabs

    Специалист

  • Members
  • PipPipPipPipPip
  • 660 сообщений
  • Город:Россия, Санкт-Петербург

Отправлено 09 июня 2009 - 20:03

Я, конечно, извиняюсь, не очень понял проблему автора,

но, как правило, в таких ситуациях нужны две вещи: а) тестовые данные, б) оракул для определения корректности.

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

Чисто теоретически, если не углубляться в код, это достаточно простая задача, задаваемая на собеседованиях.
  • 0

#16 Akeem

Akeem

    Новый участник

  • Members
  • Pip
  • 51 сообщений
  • ФИО:Зозуленко Алексей Николаевич
  • Город:Kiev/Ukraine

Отправлено 10 июня 2009 - 05:47

Масив будет Н-мерный, так что буду юзать структуру.

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

Имеется ввиду, что НхМ :)

Флуд: *По аналогии с трех мерным можно представить 4х мерный и тд. :unknw:



Я, конечно, извиняюсь, не очень понял проблему автора,

но, как правило, в таких ситуациях нужны две вещи: а) тестовые данные, б) оракул для определения корректности.

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

Чисто теоретически, если не углубляться в код, это достаточно простая задача, задаваемая на собеседованиях.


Чисто теоретически задача легкая, так как надо только сравнить два масива.
Моя задача стостоит с том чтобы представить данные приложения некоторой структурой с Н полями и далее работать с этой структурой сортируя только по определенным полям.
Часть решения здесь уже приводится, за что спасибо.
  • 0
Главное находиться в гармонии с собой...

#17 JimR

JimR

    Опытный участник

  • Members
  • PipPipPipPip
  • 253 сообщений
  • ФИО:Ручко Дмитрий Иванович
  • Город:Москва

Отправлено 10 июня 2009 - 06:51

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

Если нет необходимости проверять корректность отображения полученных строк после сортировки по сравнению с изначальным списком, то всё предельно просто. Boltick уже об этом ранее писал: берёте итоговый список, критерий сортировки (по возрастанию или убыванию) и проверяете что каждый следующий элемент не больше предыдущего (для убывания) или не меньше (для возрастания).
Можно, в принципе, проверить, что количество элементов в итоговом списке совпадает с количеством элементов в изначальном.
  • 0
Дмитрий Ручко
InfoTeCS


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных