TDD и базы данных

Почему все в качестве примера TTD и баз данных приводят конкатенацию строк в качестве примера? Это самая типичная операция для базы данных? Или просто копировать всегда удобнее? Я пытался найти приятный framework для тестирования года три, если не больше. Вы думаете, я много нашел?

 

TSQLUnit

Пример:

CREATE PROCEDURE ut_testCapitalize AS
BEGIN
DECLARE @outStr VARCHAR(500)
EXEC capitalize 'a string', @outStr OUT
IF (ASCII(LEFT(@outStr,1)) <> ASCII('A')) OR @outStr IS NULL
EXEC tsu_failure 'Capitalize should make the first character uppercase'
END
 

String capitalization – самая используемая операция на сервере mssql.

 

UTPLSQL

Пример:

CREATE OR REPLACE FUNCTION betwnStr (
   string_in IN VARCHAR2,
   start_in IN INTEGER,
   end_in IN INTEGER
   )
   RETURN VARCHAR2
IS
BEGIN
   RETURN (
      SUBSTR (
         string_in,
         start_in,
         end_in - start_in + 1
         )
      );
END;
 

Проверяем работу функции SUBSTR. Конечно, самая используемая операция на сервере Oracle.

 
DBUnit
 

Еще хуже. Здесь только данные загружать можно и чистить их потом.

 
SQLUnit
 

Немного теплее:

 

<subdef name="UpsertStreetDef"
   query="{? = pk_edit_street.upsert_street(?,?)}"
   description="Definition of Upsert Street">
     <param id="1" type="INTEGER" name="rc" inout="out">
        {t}    ${streetId}
     </param>
     <param id="2" type="VARCHAR" name="street">?</param>
     <param id="3" type="VARCHAR" name="city">SFO</param>
 </subdef>
 

Хотя писать такие тесты – руки устанут.

 
DBFit
 
create or replace procedure ConcatenateStrings
(
firstString varchar2,
secondString varchar2,
concatenated out varchar2) as
begin
   concatenated:=firstString || ' ' || secondString;
end;
 

Ничего не напоминает?

Читать полностьюКомментарии отключены

Как найти копипастера?

Вам нравятся копипастеры? Мне нет. Речь не о плагиате и плагиаторах ( о них читайте на copypaster.ru), а про тех кто кодирует или программы пишет методом copy/paste.

Есть замечательная программа Simian — Similarity Analyser. Она не бесплатная, но 15 дней дней trial period хватит. (Ей можно и потом пользоваться, но это уже будет неэтично).

Все хорошо, но в Visual Studio она не встроена, да и в eclipse тоже, но об этом позже. Текстовый вывод хорошо, и анализ неплох, но хотелось все одним или двумя, на крайний случай тремя кликами всем управлять.

Решение описано здесь. НО мне не понравилось, задача, то простая, формат подменить, что бы VS понимала.

Заменить:

Found 36 duplicate lines in the following files:
Between lines 41 and 112 in D:\projects\nant-0.86-beta1\src\NAnt.VSNet\EverettSolution.cs
Between lines 41 and 112 in D:\projects\nant-0.86-beta1\src\NAnt.VSNet\Everett\Solution.cs

На:

Found 36 duplicate lines in the following files:
D:\projects\nant-0.86-beta1\src\NAnt.VSNet\EverettSolution.cs (41) 112
D:\projects\nant-0.86-beta1\src\NAnt.VSNet\Everett\Solution.cs (41) 112

Зачем программу писать, если perl по рукой.

Делаем файл simian.bat с одной строкой (двумя, двумя)

@echo off
d:\lib\simian\bin\simian-2.2.18 %1 %2 %3 %4 | perl -ne» print /Between lines (\d+) and (\d+) in (.+)/ ?  \»$3 ($1) $2\n\» : $_;»

И в visual studio делаем новый external tools. (Кому одного мало одного, по ссылке можно по ссылке выше прочитать больше.)

image

Тем у кого нет perl:

  • bat file не создаем
  • в VS меняем Command: d:\lib\simian\bin\simian.bat на simian-2.2.X.exe -formatter=vs

и все, с версии 2.2.8 есть новый формат vs.

Для eclipse был плагин — да спыл, нет его больше. Год назад я его пробовал запустить, eclipse подавился,(хотя в сумме кода не больше 6Mb)

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

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

Читать полностьюКомментарии отключены

Word2007, AIM и blogging

Word 2007 умеет публиковать заметки в блог. Это не уже новость, и обсуждалась пол-года назад. НО в windows live writer (с другими weblog клиентами я не сравниваю, смысла нет), нет возможности вставлять Smart Art, а в Word есть. Иногда полезно увидеть, а не прочитать и представить. Конечно в Word много чего нет – preview, tags, плагинов для вставки кода и т.д. и т.п. но все же.

Новая agile методика разработки софта — AIM — интересная статья, до тех пор пока не переведешь слово Insanity.

 

Update: все таки word вставил пирамиду как изображение, ожидалось что все стилями будет. Не вышло.

Читать полностьюКомментарии отключены

WHENEVER

Whenever — всякий раз.

Не всякий раз, как оказалось. Очень простая задача, ловить все ошибки (что их можно было обрабатывать) в pl/sql скрипте, и потом в bat файле обрабатывать. Пробуем:

1 WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK; 2 3 DECLARE 4 a NUMBER(23,4); 5 BEGIN 6 a := 1/0; 7 END; 8 / 9 EXIT 10 /

sqlplus -S user/pwd@server @test.sql

@echo %ERRORLEVEL%

Получаем «красивый» результат:

DECLARE

*

ERROR at line 1:

ORA-01476: divisor is equal to zero

ORA-06512: at line 5

1476

Замечательно. Теперь еще надо это записать (для потомков).

1 WHENEVER SQLERROR EXIT SQL.SQLCODE; 2 3 DECLARE 4 a NUMBER(23,4); 5 BEGIN 6 a := 1/0; 7 EXCEPTION 8 WHEN OTHERS THEN 9 dbms_output.put_line('error'); 10 END; 11 / 12 EXIT 13 /
Запускаем опять:
sqlplus -S user/pwd@server @test.sql@echo %ERRORLEVEL%
 

PL/SQL procedure successfully completed.

0

Не совсем то что я ожидал. Что бы sqlplus все-таки вернул ошибку — его надо об этом попросить — добавить raise.

1 WHENEVER SQLERROR EXIT SQL.SQLCODE; 2 3 DECLARE 4 a NUMBER(23,4); 5 BEGIN 6 a := 1/0; 7 EXCEPTION 8 WHEN OTHERS THEN 9 dbms_output.put_line('write something'); 10 RAISE; 11 END; 12 / 13 EXIT 14 /

Теперь ошибка возвращается.

DECLARE

*

ERROR at line 1:

ORA-01476: divisor is equal to zero

ORA-06512: at line 11

1476

(Мне эта ошибка дорогого стоила.)

Читать полностьюКомментарии отключены

Schema spy — поиск аномалий в базах данных

SchemaSpy — анализатор схемы базы данных и генератор визульного представления о схеме или базы данных. Очень полезный инструмент для ознакомления или анализа схемы. Умеет представить всю схему в виде XML, и составить порядок таблиц при загрузке данных (бывает очень нужно) и порядок удаления (конечно drop user <username> cascade или drop database спасет, но если надо очистить только данные — самое то).

Поддерживаемые базы данных:

db2, firebird, hsqldb, oracle, mssql, mysql, sybase, PostgreSQL

Находит следующие аномалии:

· Columns whose name and type imply a relationship to another table’s primary key

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

· Tables without indexes

Здесь все ясно. Если из базы данных что-то надо извлекать (искать) то наличие индексов ускорит этот процесс.

· Columns that are flagged as both ‘nullable’ and ‘must be unique’

Колонка объявленная как Nullable, но при этом имеет ограничение (constraint) уникальности (или первичный ключ).

· Tables that contain a single column

Таблицы только с одной колонкой. Зачем они нужны? Иногда нужны. Для построения динамических списков (диапазонов) с последующим соединением с другой таблицой или создание списка со значением по умолчанию. Что бы использовать к примеру один insert и один select, а не делать вставку в цикле. Хотя для этой цели можно использовать определенную системную таблицу, зная что в ней достаточно записей для построения требуемого диапазона.

· Tables with incrementing column names, potentially indicating denormalization
Таблицы в которых есть колонки с именем, отличающимся только последними цифрами, то есть Col1, Col2 .. Coln.

· Columns whose default value is the word ‘NULL’ or ‘null’, but the SQL NULL value may have been intended

Колонки со значениями NULL или null (интересная аномалия).

я бы добавил в анализ аномалий:

  • Таблицы без записей,
  • Таблицы в которых количество полей больше 20, 35, 30 .. n
  • Колонки которые можно сделать not null
  • Колонки которые можно сделать unique
  • Индексы которые не могут при выборках (когда диапазон значений очень маленький, а записей очеь много)

 

Интерфейс к командной строке (GUI)

SchemaSpyGUI — что бы легче было составить командную строку (только с 15-ой попытки заполнил все правильно для oracle, и с 5-ой для mysql)

Требования:

· Jdbc драйвера.

· GraphViz – опционально, для построения графического представления. Под windows я так и не добился его работы.

 

Technorati Tags: ,
Читать полностьюКомментарии отключены

Обновление windows и office offline

Проект AutoPatcher прекратился в конце августе, по «просьбе» Microsoft, сейчас возродился. Я попробовал новую версию — не понравилось и нормально не заработало.

Но мир не без добрых людей. Нашел другой проект СTUpdate — offline update. Понравился гораздо больше по сравнению с AutoPatcher (старым), с новым сравнивать нет смысла.

clip_image001clip_image002[6]

Можно получить обновления для операционных систем — Windows 2000, XP, 2003 и Vista.

Для Microsoft Office 2000, XP, 2003, 2007.

После закачивания всех необходимых обновлений сие творение создание ISO image (у Вас есть выбор как именно). Теперь просто залив на болванку, или используя эмулятор cd/dvd, или просто распаковав ISO image можно поставить все обновления, правда, будут поставлены все обновления, выбрать, какие ставить, какие нет, я не нашел.

Радует, что не надо скачивать эти обновления n-раз. Достаточно скачать их один раз и потом запускать эту программу раз в неделю (или если так уж необходимо  — чаще) и иметь все обновления offline.

Экономию трафика считайте сами.

Читать полностьюКомментарии отключены

ILMerge и interop.*.dll

Microsoft все таки удовлетворила  просьбу Joel Spolsky и предоставила пусть и не линкер, но средство которое соберет все сборки в один файл. Меня просто достало что при любом использовании COM из .Net генерируется отдельная dll. Зачем?

ILMerge позволит скомпоновать эту dll в Ваш выполняемый файл.

Сам ILMerge плюс Gilma тем кому лень разбираться с командной строкой.

Правда я попробовал собрать NAnt в один файл и результата не дождался.

Читать полностьюКомментарии отключены
Страница 18 из 19« ...10...1516171819