powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / целостность репортов
13 сообщений из 13, страница 1 из 1
целостность репортов
    #39819508
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи - как вы гарантируете целостность репортов, особенно после рефакторинга?

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
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

далее парсится питоном и сравнивается с предидущими результатами, если производительность не просела и чексумма не поменялась.
...
Рейтинг: 0 / 0
целостность репортов
    #39819554
Фотография 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'.
...
Рейтинг: 0 / 0
целостность репортов
    #39819558
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы просто сразу избавились от всемирно известных slnx_job, fn_device_reports, fn_device_category_reports, hundreds of reports that were there, mysuperbaza, а рефакторинг делаем коду в основном тому, что тестами покрыт.

И все у нас хорошо.
...
Рейтинг: 0 / 0
целостность репортов
    #39819577
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindLepsik,

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(). -- просто дата последней транзакции
...
Рейтинг: 0 / 0
целостность репортов
    #39819578
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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
...
Рейтинг: 0 / 0
целостность репортов
    #39819579
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичМы просто сразу избавились от всемирно известных slnx_job, fn_device_reports, fn_device_category_reports, hundreds of reports that were there, mysuperbaza, а рефакторинг делаем коду в основном тому, что тестами покрыт.

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


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

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

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

Можно конечно Балабановскую спичечную фабрику подинамить, а международную корпорацию из Форбс-500 я конечно злить не стану, но и давать непроверенные решения тоже не могу.
...
Рейтинг: 0 / 0
целостность репортов
    #39819581
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Lepsik]Гавриленко Сергей АлексеевичA потом выйдет какой-нибудь GDPR нежданно и придет все перелопачивать.
Или в архитектуре настойчивый клиент захочет в малозначимый атрибут клиента не сотню - другую значений добавлять, а сотню - другую миллионов.

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

ЗЫ. Но, глядя на твои экзкрсисы, слабо верится в счастье клиента.
...
Рейтинг: 0 / 0
целостность репортов
    #39819776
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik,

надо же тестами покрывать не все, что на ум пришло, а требования к отчету.
...
Рейтинг: 0 / 0
целостность репортов
    #39820085
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

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

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

Потому и спрашиваю как народ это делает. Оказалось никак.
А у коробочного продукта все должно быть подтянуто.
...
Рейтинг: 0 / 0
целостность репортов
    #39820090
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik,

Проконсультируйтесь с тестировщиками, они вам накидают вариантов.
...
Рейтинг: 0 / 0
целостность репортов
    #39820444
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичLepsik,

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

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

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

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

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

Или вы про унит тесты? Их у меня есть - но они гарантируют целостность логики, но этого нe достаточно в полноценном software development.
...
Рейтинг: 0 / 0
целостность репортов
    #39820613
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тестирование может найти ошибку, но не докажет отсутствие ошибок.
...
Рейтинг: 0 / 0
целостность репортов
    #39820813
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik,

забыл добавить, еще проверяют поведение при граничных значениях параметров, Например, не указан или указан полный набор. В итоге набор тестов оказывается конечным :)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / целостность репортов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]