Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 целостность репортов  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4257
Товарищи - как вы гарантируете целостность репортов, особенно после рефакторинга?

Пока что придумал следующее.

SET QUOTED_IDENTIFIER ON
SET NOCOUNT ON

IF OBJECT_ID('tempdb..#result') IS NOT NULL
    DROP TABLE #result
GO

declare @startPoint datetime2 = (SELECT MAX(slnxjob_postingtime) FROM slnx_job)
declare @start datetime2 = DATEADD( month,-1, @startPoint);
declare @end datetime2 = @startPoint;

CREATE table #result (id int not null identity(1,1) PRIMARY KEY, category sysname, report sysname, name sysname, cnt int, tmsec int, chk int, stamp time not null default getdate())
declare @counter datetime2 = getdate();

--------------------------------------------------------------------------------------------------------------------------------------- Device Reports
-----------------------------------------------------------------
BEGIN
    DECLARE @xml varbinary(MAX) = CAST(N'<root>'+(SELECT * from 
    dbo.fn_device_reports(null , null , null) 
    ORDER BY 1, 2 ASC FOR XML RAW)+N'</root>' AS varbinary(MAX));
    WITH cte AS ( SELECT X.C.value(N'fn:local-name(.)', N'nvarchar(255)') as name FROM (SELECT CAST(@xml AS XML) AS XML_DATA) DATA CROSS APPLY DATA.XML_DATA.nodes(N'//*') as X(C) ) 
        INSERT INTO #result (category, report, name, cnt, chk) SELECT 'Device Reports', 'Device List', 'fn_device_reports', COUNT(*), CHECKSUM(@xml) from cte
    UPDATE #result SET tmsec = DATEDIFF(second, @counter, getdate() ) WHERE id= (SELECT MAX(id) FROM #result);SET @counter = getdate();
END

BEGIN
    DECLARE @xml1 varbinary(MAX) = CAST(N'<root>'+(SELECT * from 
    dbo.fn_device_category_reports(null , null , null, null) 
    ORDER BY 1, 2 ASC FOR XML RAW)+'</root>' AS varbinary(MAX));
    WITH cte AS ( SELECT X.C.value(N'fn:local-name(.)', N'nvarchar(255)') as name FROM (SELECT CAST(@xml1 AS XML) AS XML_DATA) DATA CROSS APPLY DATA.XML_DATA.nodes(N'//*') as X(C) ) 
        INSERT INTO #result (category, report, name, cnt, chk) SELECT 'Device Reports', 'Device Configuration by Group', 'fn_device_category_reports', COUNT(*), CHECKSUM(@xml1) from cte
    UPDATE #result SET tmsec = DATEDIFF(second, @counter, getdate() ) WHERE id= (SELECT MAX(id) FROM #result);SET @counter = getdate();
END

----..................  hundreds reports are here

INSERT INTO #result (category, report, name, cnt, tmsec, chk) SELECT 'Total', 'Total', 'Total', (SELECT SUM(cnt) FROM #result), (SELECT DATEDIFF(second, (SELECT MIN(stamp)
 FROm #result), (SELECT MAX(stamp) FROM #result))), (SELECT CHECKSUM_AGG(COALESCE(chk, 0)) FROM #result)

SELECT id, LEFT(name, 64), cnt, tmsec, chk FROM #result ORDER BY id ASC
GO


запускается все как :

sqlcmd -E -d mysuperbaza -i %1 -s: -o result.txt

далее парсится питоном и сравнивается с предидущими результатами, если производительность не просела и чексумма не поменялась.
28 май 19, 21:24    [21896074]     Ответить | Цитировать Сообщить модератору
 Re: целостность репортов  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Lepsik,

Msg 208, Level 16, State 1, Line 8
Invalid object name 'slnx_job'.

Msg 208, Level 16, State 1, Line 18
Invalid object name 'dbo.fn_device_reports'.
29 май 19, 00:44    [21896151]     Ответить | Цитировать Сообщить модератору
 Re: целостность репортов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
Мы просто сразу избавились от всемирно известных slnx_job, fn_device_reports, fn_device_category_reports, hundreds of reports that were there, mysuperbaza, а рефакторинг делаем коду в основном тому, что тестами покрыт.

И все у нас хорошо.

Сообщение было отредактировано: 29 май 19, 00:59
29 май 19, 00:59    [21896156]     Ответить | Цитировать Сообщить модератору
 Re: целостность репортов  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4257
Mind
Lepsik,

Msg 208, Level 16, State 1, Line 8
Invalid object name 'slnx_job'.

Msg 208, Level 16, State 1, Line 18
Invalid object name 'dbo.fn_device_reports'.


declare @startPoint datetime2 = getdate(). -- просто дата последней транзакции
29 май 19, 05:23    [21896199]     Ответить | Цитировать Сообщить модератору
 Re: целостность репортов  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4257
create function dbo.fn_device_reports( @p1 int, @p2 int, @p3 int)
RETURNS TABLE
WITH SCHEMABINDING
RETURN
SELECT  1 as col, 2 as num, 3 as val
union all
SELECT  4, 5, 6
GO

create function dbo.fn_device_category_reports( @p1 int, @p2 int, @p3 int, @p4 int)
RETURNS TABLE
WITH SCHEMABINDING
RETURN
SELECT  1 as col, 2 as num, 3 as val, 4 as [desc]
union all
SELECT  4, 5, 6, 7
GO
29 май 19, 05:28    [21896203]     Ответить | Цитировать Сообщить модератору
 Re: целостность репортов  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4257
Гавриленко Сергей Алексеевич
Мы просто сразу избавились от всемирно известных slnx_job, fn_device_reports, fn_device_category_reports, hundreds of reports that were there, mysuperbaza, а рефакторинг делаем коду в основном тому, что тестами покрыт.

И все у нас хорошо.



В репорте может быть 3-4 уровня уровня зависимостей и сотня полей.

И unit тестами покрыть жизни не хватит все комбинации охватить.

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

Можно конечно Балабановскую спичечную фабрику подинамить, а международную корпорацию из Форбс-500 я конечно злить не стану, но и давать непроверенные решения тоже не могу.
29 май 19, 05:39    [21896206]     Ответить | Цитировать Сообщить модератору
 Re: целостность репортов  [new]
aleks222
Member

Откуда:
Сообщений: 852
[quot Lepsik]
Гавриленко Сергей Алексеевич
A потом выйдет какой-нибудь GDPR нежданно и придет все перелопачивать.
Или в архитектуре настойчивый клиент захочет в малозначимый атрибут клиента не сотню - другую значений добавлять, а сотню - другую миллионов.


А ты пиши сразу на сотню - другую миллионов. И будет тебе щастье... и клиенту тоже.

ЗЫ. Но, глядя на твои экзкрсисы, слабо верится в счастье клиента.
29 май 19, 05:55    [21896209]     Ответить | Цитировать Сообщить модератору
 Re: целостность репортов  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
Lepsik,

надо же тестами покрывать не все, что на ум пришло, а требования к отчету.
29 май 19, 12:44    [21896616]     Ответить | Цитировать Сообщить модератору
 Re: целостность репортов  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4257
Владислав Колосов,

Я так и делаю, мегобайты тестов есть. Но вот Г.С.А. говорит все надо покрывать, а ему не верю.

Но вот функциональное покрытие позволяет гарантировать целостность результатов репортов.

Потому и спрашиваю как народ это делает. Оказалось никак.
А у коробочного продукта все должно быть подтянуто.
29 май 19, 22:35    [21897269]     Ответить | Цитировать Сообщить модератору
 Re: целостность репортов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36694
Lepsik,

Проконсультируйтесь с тестировщиками, они вам накидают вариантов.
29 май 19, 22:53    [21897278]     Ответить | Цитировать Сообщить модератору
 Re: целостность репортов  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4257
Гавриленко Сергей Алексеевич
Lepsik,

Проконсультируйтесь с тестировщиками, они вам накидают вариантов.


Я в школе математику учил и представляют сколько тестов надо к типовому репорту для покрытия всех вариантов.

5 входных параметров с проверкой NULL, MIN, MAX, good pass.

Уже 4^5. + 10 таблиц в каждой 10 полей имеющих минимум 4 полезных значения.

Ну вы поняли - для полного покрытия всех тестировщиков планеты Земля не хватит.

Или вы про унит тесты? Их у меня есть - но они гарантируют целостность логики, но этого нe достаточно в полноценном software development.
30 май 19, 17:39    [21897912]     Ответить | Цитировать Сообщить модератору
 Re: целостность репортов  [new]
Wlr-l
Member

Откуда:
Сообщений: 512
Тестирование может найти ошибку, но не докажет отсутствие ошибок.
31 май 19, 10:38    [21898320]     Ответить | Цитировать Сообщить модератору
 Re: целостность репортов  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
Lepsik,

забыл добавить, еще проверяют поведение при граничных значениях параметров, Например, не указан или указан полный набор. В итоге набор тестов оказывается конечным :)
31 май 19, 15:14    [21898853]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить