Имя: Пароль:
1C
 
Автоматизированное тестирование 1с
,
0 Adept
 
27.04.17
19:26
Вот, задумал свою нетленку написать. С нуля. И всякие мне мысли в голову лезут про MVC, про юнит тестирование и прочие правильные вещи.
По сути надо разделять функции обработки данных , функции записи, и функции чтения данных. Что бы можно было протестировать отдельно стоящую функцию "рассчитать ндс по строке" данные в нее должны поступать параметрами, и не вытягиваться из базы (например ставка ндс по справочнику, ставок ндс), и  так далее. Кто занимался подобными вещами, поделитесь опытом, как разделяли модули, стремились ли функции сделать "чистыми" (не зависящими от состояния БД, а только оь входных параметров), и т.д.
1 quest
 
27.04.17
19:34
2 totparen
 
27.04.17
19:49
(1) Ни прибавить, ни отнять.
3 Fragster
 
гуру
27.04.17
20:36
еще есть вот: http://test1c.com/
4 Лефмихалыч
 
27.04.17
20:41
(0) эти все влажные мечты разобьются об требования к быстродействию.
5 Fragster
 
гуру
27.04.17
20:48
(4) да пусть себе по ночам тестирует и отчет шлет...
6 Fragster
 
гуру
27.04.17
20:48
онлайн тесты всегда лажа на крупных проетах
7 Волшебник
 
модератор
27.04.17
20:48
Тестирование очень важно!
8 Лефмихалыч
 
27.04.17
20:50
(5) я не об этом, а о том, что "разделять функции обработки данных , функции записи, и функции чтения данных" хорошо только, когда умничаешь в баре за кружкой пива. В реальной работе тебе по любому понадобятся процедуры, которые на вход получают ссылку на документ, а на выходе делают таблицу движений и при этом, и чатают, и пишут данные и еще чорт хнает что там хреновертят по дороге. Делить на отдельные-то их, конечно, можно, но в результате у тебя вместо одного пакетного запроса будет 9000 запросов поменьше и быстродействие у тебя будет в глубокой жопе
9 Лефмихалыч
 
27.04.17
20:53
против тестирования ни чего не имею, но не видел реальных примеров их настоящего применения.
Всё, что мало-мальски чего-то стоит, в какой-то момент начинается с метода куяк-куяк и в продакшн, а, когда оно перерастает этот метод, оно по сути перестает развиваться.
10 Волшебник
 
модератор
27.04.17
20:58
(9) Ты мало видел. По сути все страдают от недостатка тестирования, вся ИТ-отрасль. Даже космические и военные технологии страдают, хотя там уровень покрытия кода тестами должен быть 100%, но нет, филонят.
11 Fragster
 
гуру
27.04.17
21:00
(8) см (3)
12 Волшебник
 
модератор
27.04.17
21:01
(9) Приведу пример. Есть движок SQLiteDatabase, встроен во все смартфоны и даже 1С (журнал регистрации). Покрытие кода тестами 100%. Работает немного медленно, но стабильно и правильно всегда!
14 Лефмихалыч
 
27.04.17
21:08
(12) узкий круг решаемых задач позволяет этому софту работать стабильно и правильно. Шило вот тоже работает всегда стабильно и правильно, но не всегда быстро. Зато шуруп им не закрутишь, гвоздь не забьешь, бетон не продырявишь - оно только дырки делать может и только в мягких тканях.

на (3) попробую посмотреть пристальнее. Пока смысла и - в чем профит, не вижу.
16 b_ru
 
28.04.17
04:51
Вот SQLite реализует строго детерминированные операции над данными, команды принимает на языке SQL, имеющем строгую грамматику и математическую модель.
А прикладное решение на 1С обычно реализует безумные хотелки малограмотных манагеров или вовсе сумасшедших законодателей, входные данные принимает от сверхэнтропийной мариванны, не имеющей царя в голове.

Не в этом ли дело?
17 mgtrwwzi
 
28.04.17
05:14
(16)Абсолютно точно не в этом. Ты как то странно сравнял требования заказчика с одной стороны и архитектуру приложения с другой. Это связанные, но разные вещи.
18 Adept
 
28.04.17
11:09
(1),(3) Знаем, :), спасибо. Но так это ж инструмент. Про проектирование структуры.
(4) Как? На оборот если в функции нет выборки данных, а данные приходят параметром, то гарантировано, запрос  будет один. Что часто не соблюдается.

Просто если речь идет о тиражном решении, даже с небольшим тиражом, то имеет смысл максимально обезопасить свой код, что бы потом все время на  суппорт не потратить.
19 Adept
 
28.04.17
11:12
Вообще в чем сложность тестирования типовых. Все компоненты очень связаны. Тестировать модульно очень трудно. Конечно есть вариант из (3), но его лучше совмещать с вариантом из (0), а для этого надо спроектировать конфигурацию так, что бы отдельные куски отвечали за получение данных, отдельные за запись, что бы их можно было изолированно тестировать.
20 Лефмихалыч
 
28.04.17
11:12
(18) я говорю о том, что в настоящей продуктивной системе, которой пользуются люди, ты будешь вынужден делать методы, которые и читаю, и пишут, и руками машут.
21 Adept
 
28.04.17
11:15
(20) Это я понял, я не понял почему, любой метод
СделатьЧтоТо()

Можно разделить на
Данные = СделатьЧтоТо_ПД();
СделатьЧтоТо_ОД(Данные);
22 Вафель
 
28.04.17
11:16
Самая поддерживаемая система тестирования xUnit1C
23 Вафель
 
28.04.17
11:16
я пишу на ней
24 Вафель
 
28.04.17
11:17
Ну и тестироание никак не помогает создать структуру.
А вот зарефакторить ее, очень даже
25 Adept
 
28.04.17
11:17
(22) В типовой или в своей?
26 Вафель
 
28.04.17
11:19
тестирую свои доработки для ЕРП. Чтоб приобновлении не утерять
27 Вафель
 
28.04.17
11:19
ну и плюс пару тестов на типовой вфункционал
28 Вафель
 
28.04.17
11:20
ну и тестирование нужно только для 1 цели.
Чтоб очередной коммит не сломал то что уже работало нормально
29 Adept
 
28.04.17
11:21
(26) А на какие функции в своих доработках пишешь тесты?
30 Вафель
 
28.04.17
11:22
доработка форм, заполнения всякие, печ формы
31 Вафель
 
28.04.17
11:23
но я пишу не юнит тесты, а интеграционные
32 Вафель
 
28.04.17
11:23
33 Adept
 
28.04.17
11:30
(32) Спасибо
(31) Вот, а речь про проектирование конфигурации для удобного модульного тестирования
34 Mort
 
28.04.17
11:33
MVC это кузница уродских интерфейсов.
35 Adept
 
28.04.17
11:37
(33) о каких интерфейсах идет речь? пользовательских, программных , аппаратных ? :)
36 Mort
 
28.04.17
11:38
А 100% покрытие тестами это миф. То что тест проскакивает на тестовых данных, говорит только о том что на этих данных не будет ошибок.

(35) Пользовательских, конечно.
37 Лефмихалыч
 
28.04.17
11:38
(33) проектировать конфигурацию надо, чтобы она решала задачи и чтобы удобно было пользователям.
38 Вафель
 
28.04.17
11:41
(37) одно другому не мешает.
Можно документ заполнять по кнопке на форме и тут же все запросы писать.
А можно функции получения данных запихать в модуль менеджера.

Кстати 1С в полсденее время стало придерживаться такого разделения. Ну кроме зупа
39 Adept
 
28.04.17
12:36
(36) а как оно влияет?
40 Вафель
 
28.04.17
12:38
(36) 100% покрытие не означает, что сам код покрывает 100% ситуаций
41 Adept
 
28.04.17
12:42
(40) О том и речь, что функция, которая не чистая функция, а связана с данными, он  по сути, конечный автомат, если бы все функции были чистыми, то 100% покрытие кода, означало бы 100% правильность работы, ну и типы конечно в языках с динамической типизацией.
42 Вафель
 
28.04.17
12:44
Вообще 100% покрытие экономически не выгодно.
Изменения вносить слишком сложно. слишком много тестов будет падать
43 Adept
 
28.04.17
12:49
(42) Наверное зависит от количества пользователей твоего продукта. Если он один то да, а если один миллион, то лучше что бы ошибок было поменьше. Тем более в той сфере в которой работает 1с
44 Вафель
 
28.04.17
12:52
45 lamina
 
17.05.17
18:20
(22) неправда, тестер тоже хорошо поддерживается
46 ejikbeznojek
 
17.05.17
23:52
Не знаю как у вас, а у меня обычно сроки не позволяют сделать структуру как описывает ТС.
Точнее позволяют, но этож тогда придётся работать весь день. А я так могу работать только 2-3 дня подряд.
Обычно сил хватает часов на 6-7.
Пожалуй Лефмихалыч прав.
47 lamina
 
18.05.17
00:16
а ТС что такое?
48 Злопчинский
 
18.05.17
00:35
(47) ТопикСтартер = нулевой пост ветки
49 lamina
 
18.05.17
00:46
ТС хочет структуру под тестирование, но ведь инструменты разные, и такая структура не обязательна
50 sFAQer
 
18.05.17
04:23
(3) А что делать если у тебя УПП?