21 May, 2010

Удаление различных диакритических символов из строки

Возникла проблема - каким образом заменить в строке символы из национальных кодировок на соответствующие им из латиницы.

Например, из строки explicación получить explicacion.

package com.blogspot.atamanenko;

import java.text.Normalizer;
import java.text.Normalizer.Form;

public class StringNormalizer {

    public static String normalize(String string) {
        return Normalizer.normalize(string, Form.NFD)
            .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
    }
}

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

Создание больших объёмов тестовых данных с помощью Databene Benerator

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

Изучая данный вопрос я наткнулся на замечательный фреймворк - Databene Benerator, основной целью создания которого как раз и является создание правдоподобных тестовых данных для проведения различных видов тестирования.

Установка

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

Установка под Maven

Для использования Databene benerator в проектах, использующих для сборки Apache Maven необходимо добавить в зависимости databene-benerator и сконфигурировать его.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.myorganization</groupId>
  <artifactId>databene-benerator-test</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>
  <name>data generation project</name>
  <dependencies>
    <dependency>
      <groupId>org.databene</groupId>
      <artifactId>databene-benerator</artifactId>
      <version>0.5.9</version>
    </dependency>
    <dependency>
      <groupId>org.databene</groupId>
      <artifactId>databene-webdecs</artifactId>
      <version>0.4.9</version>
    </dependency>
    <dependency>
      <groupId>org.databene</groupId>
      <artifactId>databene-commons</artifactId>
      <version>0.4.9</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
    </dependency>
  </dependencies>
  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <encoding>UTF-8</encoding>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.databene</groupId>
        <artifactId>maven-benerator-plugin</artifactId>
        <version>0.5.9</version>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptor>src/main/resources/benerator.ben.xml</descriptor>
          <encoding>UTF-8</encoding>
          <validate>true</validate>
          <dbUrl>jdbc:mysql://localhost:3306/hrtool?useUnicode=true&characterEncoding=UTF-8</dbUrl>
          <dbDriver>com.mysql.jdbc.Driver</dbDriver>
          <dbSchema>database</dbSchema>
          <dbUser>user</dbUser>
          <dbPassword>password</dbPassword>
        </configuration>
        <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.13</version>
            <scope>runtime</scope>
          </dependency>
          <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.5-beta5</version>
            <scope>runtime</scope>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>
</project>

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

  1. dbUrl - строка подключения к базе данных в формате JDBC
  2. dbDriver - используемый драйвер базы данных
  3. dbSchema - имя схемы базы данных
  4. dbUser - имя пользователя, под которым подключаемся к базе данных
  5. dbPassword - пароль пользователя для подключения к базе данных

Кроме использования файла pom.xml databene поддерживает возможность указания параметров в файле benerator.properties, что может быть удобно.

Databene benerator обладает следующими возможностями:

  1. Решение проблемы создания данных в общем виде. На данный момент поддерживаются XML и реляционные базы данных, но не за горами поддержка веб-сервисов, SAP и любых других систем через механизм расширений.
  2. Юзабилити. Databene-benerator позволяет упростить создание тестовых данных для сложной модели прикладной области.
  3. Обработка больших объёмов данных.
  4. Высокая производительность.
  5. Поддержка доменных областей.
  6. Качество данных. Фреймворк поддерживает проверку ограничений модели прикладной области.
  7. Компонентная, легкорасширяемая архитектура.
  8. Широкие возможности изменения и настройки генерации тестовых данных
  9. Создание тестовых данных с нуля.
  10. Импорт и анонимизация реальных данных.

В комплекте идёт толковая, но, к сожалению, неполная документация по возможностям.