Экспертиза процесса разработки программного обеспечения

Судебная экспертиза исходного кода на Python

Исследуем программы на Python — Django, FastAPI, Celery, pandas: соответствует ли сделанное техническому заданию, откуда в отчёте неверные цифры, почему падает сервис и полон ли переданный код.

Ориентир по стоимости экспертизы
от 100 000 ₽
Ориентир по сроку экспертизы
от 10 рабочих дней
  • Судебные экспертизы
  • Внесудебные исследования
  • Рецензирование заключений
  • Консультации и справки
01 Проверим компетенцию

До оплаты определим, относится ли задача к выбранному виду исследования.

02 Поможем подготовиться

Уточним вопросы и перечень материалов — готовый комплект не обязателен.

03 Работаем с регионами

Принимаем задачи из России, Казахстана и Беларуси. До назначения часть материалов можно передать электронно; по назначенной экспертизе порядок определяет назначивший орган.

04 Сопровождаем результат

Разъясняем методику и выводы, отвечаем на вопросы суда в пределах компетенции эксперта.

О направлении

Подробно о задачах, объектах и методиках

Материал описывает типовые задачи и вопросы. В судебной экспертизе их окончательный круг и редакцию определяет суд или иной назначивший орган, а правовую оценку обстоятельствам даёт суд.

Содержание страницы
  1. С чем обращаются
  2. Почему для Python решает окружение
  3. Что чаще всего оспаривают
  4. Чем это отличается от аудита кода
  5. Что может установить эксперт
  6. Как проверяют соответствие техническому заданию
  7. Как проверяют спорный расчёт
  8. Если передан не исходный код, а дистрибутив
  9. Какие объекты исследуются
  10. Что сохранить прямо сейчас
  11. Как передать материалы и не раскрыть лишнего
  12. Как проводится исследование
  13. Примеры вопросов на экспертизу
  14. Что вы получите и в каком формате
  15. От чего зависят стоимость и срок

В суде спор о программе обычно сводится к вопросу, соответствует ли результат техническому заданию и договору. Неверные цифры в отчёте, сбои и невыполненные задачи становятся доводами о приёмке. Одного чтения кода недостаточно: программу на Python выполняет интерпретатор, а её поведение зависит также от версий библиотек, настроек окружения и данных. Поставка может содержать исходные тексты, байт-код, контейнер или упакованное приложение. Поэтому выполнение пункта задания проверяют на конкретной версии в воспроизведённом окружении. Экспертиза исходного кода на Python — специализированное направление экспертизы процесса разработки программного обеспечения. В зависимости от формы работы результатом может быть заключение судебного эксперта либо документ внесудебного исследования.

Если спор уже начался, сначала зафиксируйте состояние системы. До изменений согласуйте, какие данные, журналы и настройки необходимо зафиксировать, и опишите порядок фиксации. Сохраните проверенную копию в неизменном виде, рассчитайте контрольные суммы и протоколируйте последующие изменения. Обслуживание возобновляют после проверки полноты фиксации, при наличии полномочий и с соблюдением процессуального порядка.

Задачу разбираем без оплаты. Для первого обращения достаточно описать ситуацию и перечислить доступные материалы. Организационный документ можно приложить сразу, если вы вправе передать его через форму; содержание исходного кода на этом этапе не изучаем.

С чем обращаются

Обращайтесь, если спор касается проверяемого состояния программы, а не только толкования договора. Заранее определите версию, стенд и период: без этого невозможно точно обозначить предмет исследования.

Чаще всего мы разбираем такие ситуации:

  • подрядчик сдал личный кабинет, портал или API-сервис на Django, Flask либо FastAPI, а вы считаете, что предусмотренное техническим заданием не выполнено;
  • стороны спорят, какие пункты задания реализованы, какие реализованы иначе, а какие не работают в описанных условиях;
  • отчёт, выгрузка или расчёт начисления содержат неверные цифры, и сторона ссылается на это как на несоответствие результата заданию;
  • ночные и фоновые задачи не отработали или отработали дважды: письма не ушли, документы задвоились, статусы разошлись;
  • сервис падает или не выдерживает нагрузку, а стороны спорят, связана ли причина с кодом, сервером или настройками;
  • при обмене с бухгалтерией, банком или партнёром часть данных теряется или искажается;
  • после изменения структуры базы данных часть записей испорчена или недоступна;
  • подрядчик прекратил работы, а переданный комплект не позволяет запустить программу либо неполон;
  • нужно проверить, не использован ли чужой код и на каких условиях подключены открытые библиотеки.

Если вопрос звучит иначе, лучше начать с соседнего исследования: о качестве кода — экспертиза качества исходного кода, о заимствовании — сравнение исходного кода, о деньгах и объёме — экспертиза объёма и стоимости выполненных работ, о готовности продукта к передаче — экспертиза степени готовности ПО. Для корпоративной системы на другой платформе есть экспертиза исходного кода на Java; для браузерной части сайта или сервера на Node.js — экспертиза исходного кода на JavaScript.

Почему для Python решает окружение

Одна программа на двух машинах может вести себя по-разному. Набор библиотек, версия интерпретатора, переменные окружения и настройки каркаса — Django с Django REST Framework, Flask или FastAPI — образуют конкретную комбинацию, на которую опирается код. Поэтому причину изменившегося расчёта нельзя установить одним чтением исходных текстов.

На результат влияют:

  • Версии библиотек фиксируют с разной точностью. requirements.txt или pyproject.toml описывает зависимости и ограничения, а файл блокировки (poetry.lock, Pipfile.lock, uv.lock) сохраняет разрешённый инструментом набор версий с учётом условий платформы. Для воспроизведения нужны также реализация и сборка интерпретатора, ОС и архитектура, источники и хеши пакетов, системные и нативные зависимости. Наиболее надёжен проверенный образ окружения; lock-файл и список пакетов рассматривают как самостоятельные источники с собственными ограничениями.
  • Проверка типов не обязательна. Проект может использовать аннотации и запускать mypy при сборке, но интерпретатор сам по себе такую проверку не выполняет. Поэтому выясняют, какие проверки действительно входили в процесс разработки и сборки.
  • Секреты могут попасть в проект. Пароли к базе и ключи внешних сервисов иногда сохраняют в настройках рядом с кодом или в истории репозитория. Это учитывают при подготовке материалов.

Помимо кода могут понадобиться реализация и версия интерпретатора, снимок установленных пакетов — вывод pip freeze, — файл блокировки, настройки стендов и входные данные спорного расчёта. Их фиксируют до переустановки окружения.

Что чаще всего оспаривают

Для трёх распространённых групп споров нужны разные материалы и методы.

  • Расчёты и отчёты. Для расчётов часто используют pandas и NumPy; исследуют код, входные данные и порядок выполнения шагов. В тетради Jupyter — документе .ipynb, где сохраняются код и вывод, — результат может не соответствовать текущему коду. Это различие проверяют отдельно.
  • Фоновые задачи. Рассылки, выгрузки и ночные пересчёты часто выполняют Celery через Redis или RabbitMQ либо RQ через Redis; применяются и другие сочетания очередей задач и брокеров. Ход конкретной задачи восстанавливают по журналам обработчика, данным брокера и хранилищу результатов, пока записи не удалены по истечении срока хранения.
  • Обмен с другими системами. Путь конкретной записи прослеживают по идентификаторам и журналам обеих сторон. Одна из возможных причин расхождения — изменившийся формат внешнего источника при слишком широком перехвате ошибок. Если обработчик except Exception не возбуждает ошибку повторно и не оставляет достаточной записи, часть данных может быть пропущена незаметно.

Кроме того, проверяют соответствие техническому заданию, полноту переданного комплекта, причины отказов и совпадения кодовых баз. Для этих задач нужны другие источники и методы.

Чем это отличается от аудита кода

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

От общей компьютерно-технической экспертизы направление отличается предметом: там исследуют технику, носители и следы действий пользователя, здесь — программу и работы по её созданию. Суд может поставить задачи в рамках комплексной экспертизы, если нужны специалисты разных специальностей.

Что может установить эксперт

Возможность ответа зависит от сохранности репозитория и журналов, сведений о версиях библиотек и доступности входных данных. Эксперт сопоставляет независимые источники и отделяет наблюдаемый факт от непроверяемого предположения.

При достаточных материалах предметом исследования могут быть:

  • состав программы и её связей, использованные каркасы — готовые основы приложения вроде Django — и библиотеки с версиями;
  • реализация конкретных требований документа в конкретной версии и достаточность переданного комплекта для самостоятельного запуска;
  • сопоставление спорного результата с повторным расчётом на сохранённых данных и возможные причины выявленного расхождения;
  • техническая причина отказа, замедления или невыполнения фоновой задачи;
  • изменения структуры базы данных за период и их связь с состоянием данных;
  • совпадения между двумя кодовыми базами, признаки переработки и состав сторонних компонентов.

«Программа работает медленно» и «отчёт неверный» не становятся техническими утверждениями, пока не названы измеримый критерий и эталон. В конфигурации с доставкой «не менее одного раза» повторное выполнение фоновой задачи возможно штатно; ожидаемое поведение определяют по настройкам брокера и обработчика. Отсутствие записи в журнале тоже не означает, что события не было: сначала выясняют, что система действительно записывала в тот период.

Техническое наблюдение не даёт правового вывода автоматически. Имя и адрес почты в истории разработчик указывает сам и может задать произвольно; дату записи тоже можно изменить вручную. Поэтому эти сведения сужают круг объяснений, но не позволяют однозначно связать изменение с человеком. Учётная запись и сетевой адрес связывают событие с техническим контекстом, но не устанавливают, кто действовал лично. Обнаруженный дефект — технический факт, а совпадение кода — не вывод о нарушении авторских прав. Правовую оценку обстоятельствам дела даёт суд или другой уполномоченный орган; он же определяет ответственность сторон и доказательственное значение заключения.

Как проверяют соответствие техническому заданию

Проверку начинают с документов. Техническое задание переводят в перечень признаков: для каждого пункта определяют критерий выполнения и способ проверки. Общие формулировки отмечают отдельно — эксперт указывает отсутствие критерия, не дополняя требование за стороны.

Дальше каждый пункт проверяют на конкретной версии программы и в воспроизведённом окружении. Если требование нельзя признать выполненным полностью, результат относят к одному из четырёх вариантов:

  • Не реализовано — в переданной версии нет ни кода, ни настроек, которые выполняли бы это требование.
  • Реализовано иначе — механизм есть, но работает не так, как описано: другой порядок, другие условия, другой состав данных.
  • Реализовано, но не работает в описанных условиях — на согласованных данных и в заявленном окружении пункт не выполняется; здесь особенно важна версия, потому что тот же код при другом наборе библиотек может вести себя иначе.
  • Проверить на представленных объектах невозможно — критерий есть, но нет материала для проверки: не передана нужная часть системы, не сохранено состояние спорного периода, утрачены журналы за нужные даты. Это самостоятельный исход, а не разновидность первого: отсутствие материала не равно отсутствию кода, и эксперт называет, чего именно не хватило для ответа.

Для технической реконструкции эксперт сопоставляет сведения из дополнительных соглашений, переписки и задач с версиями программы и выполненными изменениями. Вопрос о том, что стороны юридически согласовали, разрешает суд. Общая методика описана на странице экспертизы соответствия работ техническому заданию; здесь разобраны особенности её применения к программам на Python.

Как проверяют спорный расчёт

Методика включает два сравнения. Они отвечают на разные вопросы, и причины расхождений в них различаются:

  • Перезапуск против спорного отчёта. Ту же версию программы запускают на тех же входных данных и в том же окружении и проверяют, получается ли результат из отчёта. Это проверка воспроизводимости в заданной комбинации кода, данных и среды. Расхождение возможно, если отчёт получен другим кодом, на других данных или в другом окружении, изменён после выгрузки либо расчёт зависит от случайности, времени или порядка параллельной обработки. Совпадение показывает, что результат из отчёта воспроизводится при таких условиях, но не устанавливает его происхождение.
  • Полученный результат против эталона. Критерий берут из документа, который задаёт формулу, порядок расчёта или ожидаемые данные. Расхождение с ним — наблюдаемое несоответствие. Причину ищут в коде, данных, настройках, среде, способе получения эталона и толковании требования. При дефекте алгоритма первое сравнение может дать совпадение: программа воспроизведёт собственную ошибку.

В расчётах проверяют тип денежных величин — Decimal или float с двоичным представлением, — момент и режим округления, границы суток и часовой пояс выгрузки, обработку повторов и возвратов, действие фильтров. Для точного половинного случая round использует округление к чётному, но результат с float зависит от представления числа. Правило, точность и допустимое отклонение берут из задания, учётной политики или применимого нормативного требования. Эксперт не вводит их самостоятельно.

Для воспроизводимости фиксируют реализацию и версию интерпретатора, библиотеки, локаль, часовой пояс, формат дат, порядок суммирования и параллельную обработку. Источники случайности и их состояние по возможности восстанавливают, не меняя алгоритм; иначе ограничение описывают и проводят отдельно обозначенные контрольные опыты. Если точное окружение восстановить не удалось, вывод формулируют с учётом этого ограничения.

Если передан не исходный код, а дистрибутив

Вместо исходных текстов могут передать упакованное приложение, образ контейнера или каталог служебных файлов. Возможности исследования зависят от способа упаковки.

Возможны три ситуации:

  • Кеш байт-кода. Интерпретатор может сохранять файлы .pyc в каталоге __pycache__, чтобы не разбирать текст при каждом запуске. При разборе перечисляют инструкции и константы; восстановление похожего на исходный текста зависит от инструмента и версии. Служебная сигнатура указывает формат байт-кода и совместимые версии интерпретатора, но точную версию и происхождение файла подтверждают другими источниками.
  • Приложение, упакованное вместе с интерпретатором — например, собранное с помощью PyInstaller. Иногда из него удаётся извлечь кеш байт-кода; результат зависит от способа упаковки и защиты.
  • Перевод в машинный код — Cython или Nuitka. Восстановление исходного текста может быть неполным или практически невозможным; тогда исследуют доступную структуру и наблюдаемое поведение.

Во всех случаях действуют сходные ограничения. Комментарии автора в кеш байт-кода не попадают, а для свежей версии интерпретатора средства восстановления может не быть. Восстановленный текст — реконструкция, не исходный текст разработчика; в заключении указывают средство и его версию. Полноту комплекта оценивают по цели передачи и требованиям документов, а возможность запуска проверяют как один из признаков.

Если материалы находятся у другой стороны, вопрос об их истребовании решает суд или орган, назначивший экспертизу. До назначения мы можем помочь составить технически определённый перечень: репозиторий, ветка, версия, файл блокировки, сведения об окружении, настройки и период журналов. Достаточность полученного эксперт оценивает в установленном порядке.

Какие объекты исследуются

Набор зависит от вопроса. Для прямого сравнения кодовых баз предпочтительны исходные тексты; при их отсутствии исследуют байт-код или дистрибутив с указанными ограничениями. Для хронологии нужна история репозитория, для разбора расчёта — входные данные и сведения об окружении. Для каждого объекта фиксируют источник, версию и роль.

Код, история и окружение

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

В неё входят:

  • зеркальная копия текущих ссылок и достижимой истории каждого репозитория; если исследуют переписывание или удаление истории, дополнительно сохраняют служебный каталог репозитория либо снимок файловой системы;
  • сведения о слияниях, запросах на изменение, рецензировании кода и связанных задачах;
  • реализация и версия интерпретатора, ОС и архитектура, описание зависимостей (requirements.txt или pyproject.toml), файл блокировки (poetry.lock, Pipfile.lock, uv.lock), вывод pip freeze из рабочего окружения, дистрибутивы пакетов или их хеши и источники, системные и нативные зависимости;
  • описания сборки и упаковки, образы контейнеров, установочные комплекты и их контрольные суммы;
  • тексты условий использования библиотек и уведомления, вошедшие в поставку.

Настройки, данные и следы работы

Вторая группа помогает объяснить, почему одна версия ведёт себя на двух стендах по-разному и что происходило с данными. Без неё выводы о причинах обычно нельзя обосновать.

В неё входят:

  • файлы настроек и переменные окружения каждого стенда, описания развёртывания — settings.py у Django, файлы Docker и параметры gunicorn или uvicorn;
  • настройка протоколирования: что система записывала в спорный период, а что не записывала вовсе;
  • схема базы данных и файлы миграций — сценарии изменения схемы, а иногда и данных. У Django они находятся в каталогах migrations, а для SQLAlchemy ими управляет Alembic. Исследуют и служебную таблицу применённых изменений: django_migrations или alembic_version;
  • резервные копии и журналы базы, планы выполнения запросов, журнал долго выполняющихся запросов, если он включён, сведения о блокировках и о состоянии пула соединений;
  • входные данные спорного расчёта, полученный отчёт и документ, задающий эталон;
  • журналы приложения и сервера, записи об ошибках со стеком вызовов, сведения о задачах Celery и состоянии очередей, измеряемые показатели;
  • отчёты pytest, данные об охвате кода тестами из coverage.py и отчёты анализаторов — ruff, flake8, pylint, mypy, bandit.

Служебную таблицу миграций проверяют: она допускает правку, изменения, внесённые вручную, в неё не попадают, а некоторые инструменты позволяют отметить миграцию без фактического выполнения. Поэтому дату изменения схемы подтверждают другими источниками с учётом их пределов. Журналы базы фиксируют операции, только если их протоколирование было включено; резервные копии дают промежуток между состояниями; репозиторий датирует файл, а не применение. Отчёты и измерения, представленные в установленном порядке, оценивают по происхождению, целостности, методике и условиям получения. Самостоятельные измерения проводят лишь на воспроизводимом объекте и сопоставляют с историческими данными, не подменяя их.

Что сохранить прямо сейчас

Промышленная система меняется каждый день, а часть данных удаляется автоматически: журналы ротируются, подробность сохранённых показателей снижается, сведения о фоновых задачах со временем удаляются. Сроки хранения у каждой системы свои — проверьте настройки и зафиксируйте состояние как можно раньше.

  • согласуйте, какие объекты и данные необходимо зафиксировать, сохраните проверенный образ или копию стенда, сведения об окружении и настройках, контрольные суммы;
  • выгрузите журналы приложения и базы, показатели и сведения о фоновых задачах за исследуемый период — по возможности с реплики или готовой копии и в согласованное время;
  • сохраните резервные копии базы на нужные даты: без состояния «до» объём утраты обычно установить нельзя;
  • сохраните входные данные и полученный отчёт, о которых идёт спор, вместе с датой и версией программы;
  • сделайте полную зеркальную копию каждого репозитория спорного контура, то есть относящегося к затронутым спором системам и сервисам, а не выгрузку рабочего каталога;
  • запишите, кто, когда и от кого получал материалы и что с ними делали.

Не переписывайте историю: принудительная перезапись ветки, перебазирование и удаление веток или меток уничтожают следы. Не переустанавливайте библиотеки до фиксации окружения и не дополняйте переданный комплект своими силами, если спор касается его полноты.

Копируйте и передавайте только то, что принадлежит вам или к чему у вас есть законное право доступа. Доступ к чужим системам получают лишь в установленном законом порядке, в том числе по решению суда или другого уполномоченного органа. Снимать копии и менять настройки работающей системы можно только при наличии полномочий и согласованного плана: остановка и перезапуск меняют часть наблюдаемых данных.

Как передать материалы и не раскрыть лишнего

Для первого обращения достаточно описать задачу; организационный документ можно приложить сразу, если вы вправе передать его через форму. Перед передачей исходного кода и доступов согласуют способ, канал для пароля, круг допущенных лиц, срок хранения и порядок подтверждения удаления. По договору обычно используют зашифрованный архив, а пароль сообщают отдельно. При судебной экспертизе порядок передачи объектов, доступа к ним и возврата определяет назначивший орган.

К передаче подготовьте:

  • цель исследования, проект вопросов, точный период и часовой пояс;
  • исходные тексты или зеркальные копии репозиториев, а если их нет — дистрибутив и сведения о его происхождении;
  • реализацию и версию интерпретатора, файл блокировки и снимок установленных пакетов (pip freeze);
  • договор, техническое задание, спецификации, методику испытаний, акты и переписку о согласованных изменениях;
  • настройки стендов, схему базы, файлы миграций и резервные копии на нужные даты;
  • журналы, сведения о фоновых задачах и показатели за период;
  • входные данные и отчёты спорного расчёта;
  • процессуальный документ, если экспертиза уже назначена.

Почти каждая группа содержит данные, требующие особой защиты. Сначала сохраняют оригиналы в неизменном виде и рассчитывают их контрольные суммы. Для внесудебного исследования можно подготовить рабочие копии файлов и журналов с заменёнными секретами, описав преобразования. Ключи перевыпускают в согласованное время после фиксации, чтобы отзыв не изменил спорную конфигурацию. Персональные и платёжные данные передают лишь в необходимом объёме за нужный период; обезличивание выполняют на копии. Секреты могут оставаться в слоях и метаданных образа либо передаваться контейнеру при запуске через переменные среды, поэтому проверяют и образ, и конфигурацию развёртывания. При судебной экспертизе порядок защиты секретов, подготовки копий и передачи определяют через назначивший орган.

Действующие пароли, ключи и токены не передавайте. Для внесудебного исследования доступ к работающей системе предоставляют через именную учётную запись только на чтение, с ограниченным сроком и протоколированием, а по окончании отключают. При судебной экспертизе эксперт не принимает доступ или дополнительные материалы непосредственно от стороны: порядок доступа и передачи определяет назначивший орган.

Как проводится исследование

Сначала эксперт описывает объекты, рассчитывает контрольные суммы, проверяет целостность и полноту. Затем на изолированном стенде воспроизводит окружение и проверяет спорное поведение. Различия в версии интерпретатора, библиотеках, системе и настройках фиксируют и учитывают в выводе.

Дальше метод зависит от задачи. Для сбоев восстанавливают временную шкалу по журналам и ошибкам, сверяют часовые пояса и источники времени, затем проверяют возможные причины: код, настройки, объём данных, смежную систему, версию библиотеки. Невозможность воспроизвести условия ещё не опровергает гипотезу: эксперт указывает, чего не хватило для проверки.

Сравнение кодовых баз ведут в несколько проходов. Сначала отдельно выделяют библиотеки, автоматически созданные файлы, обязательные конструкции каркаса и типовые решения и оценивают их происхождение и значение. Автоматически созданные части миграций могут быть типовыми, а отдельные миграции — содержать пользовательскую логику; поэтому исследуют их содержание, последовательность, зависимости и имена. Правила оформления и автоформатирование тоже сближают независимо написанные фрагменты. Затем сопоставляют нормализованные последовательности лексем — единиц текста программы — и структуру; устойчивость к переименованиям зависит от метода. Значимые совпадения проверяют вручную и сопоставляют с независимыми проектами того же назначения.

Примеры вопросов на экспертизу

При судебной экспертизе окончательный круг вопросов определяет суд, а в иных предусмотренных законом процедурах — назначивший орган или лицо. Эксперт отвечает в пределах специальных знаний и представленных материалов и не изменяет вопросы по своей инициативе. Если вопрос неясен или выходит за пределы компетенции либо материалов недостаточно, эксперт сообщает об этом в установленном порядке.

До назначения экспертизы вы вправе предложить формулировки. Точно назовите репозиторий и ветку либо запись истории, версию программы, стенд, период и часовой пояс; для расчёта — входные данные, отчёт и документ с критерием. Разные задачи формулируйте отдельными вопросами:

  1. Каковы состав и структура представленной программы: модули, использованные каркасы и библиотеки с версиями, схема базы данных, точки обмена с другими системами?
  2. Реализована ли в представленной версии программы функция, описанная в указанном пункте технического задания, и в каком объёме?
  3. Достаточен ли переданный комплект исходных текстов, настроек и документации для самостоятельного запуска программы, и чего в нём не хватает?
  4. Зафиксированы ли в представленных материалах версии используемых библиотек и достаточно ли этих сведений для воспроизведения рабочего окружения программы?
  5. Воспроизводится ли представленный дистрибутив из представленных исходных текстов с указанными инструментами, зависимостями и параметрами; если нет, какие расхождения обнаруживаются?
  6. Какой результат даёт представленная версия программы при обработке представленных исходных данных в описанном окружении и соответствует ли он результату, зафиксированному в представленном отчёте?
  7. Соответствует ли результат, полученный представленной версией программы на представленных исходных данных, порядку расчёта, описанному в указанном пункте технического задания?
  8. Каковы показатели работы представленной версии программы при выполнении указанной операции на представленных данных и соответствуют ли они требованиям, названным в указанном пункте технического задания?
  9. Отражены ли в представленных журналах и сведениях об очереди факты постановки и выполнения указанных фоновых задач за заданный период?
  10. Какие изменения структуры базы данных отражены в представленной служебной таблице применённых изменений и в журналах базы за указанный период?

Эксперт отдельно оценивает, достаточно ли представленных материалов для ответа на каждый вопрос, и указывает ограничения исследования в заключении. Это оценка пригодности объектов для исследования, а не оценка достаточности доказательств по делу.

Эксперт устанавливает техническую причину отказа или расхождения, но не решает, кто отвечает за убытки и надлежаще ли исполнен договор. Он описывает совпадения кода, а вывод о нарушении исключительных прав делает суд. Эксперт может показать, что операция выполнена с использованием определённой учётной записи и имеет определённую отметку времени, но эти сведения не устанавливают личность действовавшего. Если заключение неясно, суд может допросить эксперта; неполнота и новые вопросы могут стать основанием для дополнительной экспертизы, а сомнения в обоснованности — для повторной. Основания и порядок различаются по видам судопроизводства.

Что вы получите и в каком формате

В заключении описывают объекты и их происхождение, версии интерпретатора, библиотек и среды, методы, действия, данные, проверенные версии причин, ограничения и ответы на вопросы. Временные шкалы, таблицы, перечни файлов и контрольные суммы позволяют другому специалисту повторить существенные шаги. Документ можно представить в суд или использовать в претензионной работе; его доказательственное значение определяет суд.

Формат работы выбирают по стадии спора:

  • Консультация или справка — письменный ответ после изучения материалов: что можно установить, каких источников не хватает и насколько определённым может быть вывод.
  • Внесудебное исследование проводится на основании договора со стороной и отвечает на согласованные технические вопросы.
  • Судебная экспертиза выполняется по определению суда либо постановлению следователя, дознавателя или иного уполномоченного законом лица.
  • Рецензия анализирует содержание готового заключения: описание объектов, методов и ограничений, а также связь результатов с выводами; подробнее на странице рецензирования экспертизы разработки ПО.

После назначения судебной экспертизы эксперт не принимает от одной стороны дополнительные выгрузки и не даёт ей отдельную оценку по существу поручения: вопросы, доступ и материалы передают через суд или орган расследования. Помощь с формулировками возможна только до назначения. О прежней работе специалиста для одной из сторон сообщают при рассмотрении кандидатуры; решение о назначении и отводе принимает суд или другой назначивший орган. Поэтому роли консультанта стороны и кандидата в судебные эксперты разделяют заранее.

От чего зависят стоимость и срок

Трудоёмкость зависит от числа модулей, сервисов и стендов в спорном контуре, сохранности сведений о версиях библиотек, журналов и входных данных. Отдельно учитывают восстановление окружения, воспроизведение сбоя и поиск недостающих сведений. Влияют также число и сложность вопросов, конфиденциальность и участие смежных специалистов. Ориентир для судебной экспертизы — от 100 000 ₽, срок — от 10 рабочих дней; точные условия определяют после изучения материалов.

При первом обращении опишите спор, наметьте вопросы и перечислите, что у вас есть. Небольшие доступные копии можно приложить сразу, если вы вправе передать их через форму. Позвоните по номеру 8 (800) 333-24-09 или оставьте заявку — мы проверим, относится ли задача к нашей компетенции, предложим безопасный порядок передачи материалов и скажем, каких данных не хватает для расчёта.

Проведение экспертизы по уголовному делу

Судебная экспертиза по уголовному делу производится государственными судебными экспертами и иными экспертами из числа лиц, обладающих специальными знаниями.

Согласно постановлению Пленума Верховного Суда Российской Федерации от 21 декабря 2010 г. № 28 «О судебной экспертизе по уголовным делам», негосударственными судебно-экспертными учреждениями признаются некоммерческие организации, созданные на основании Гражданского кодекса Российской Федерации и Федерального закона «О некоммерческих организациях» и ведущие судебно-экспертную деятельность согласно своим уставам.

По сведениям организации, проведение судебных экспертиз предусмотрено её уставом (см. действующую редакцию в разделе «Документы организации»). Это само по себе не означает автоматического поручения любой экспертизы. Возможность поручить конкретное исследование определяет назначающий орган.

В случаях, перечисленных пунктом 5 постановления № 28, когда экспертизу по уголовному делу назначает суд, ему следует мотивировать в определении или постановлении поручение исследования учреждению либо конкретному лицу. Пункт 5 постановления № 28 связывает выбор негосударственного учреждения с невозможностью провести исследование в государственном учреждении, обслуживающем соответствующую территорию: например, из-за отсутствия нужного специалиста, материально-технической базы или специальных условий, либо с отводом компетентных государственных учреждений. Дополнительно учитываются квалификация эксперта, основания для отвода и действующий перечень экспертиз, выполняемых только государственными судебно-экспертными организациями.

Актуализировано
Форматы работы

Стоимость и сроки

Указан предварительный ориентир. Точный расчёт зависит от вопросов, объёма материалов, количества объектов и необходимости выезда. Срок рассчитываем после получения и проверки необходимого комплекта.

По договору

Внесудебное исследование

от 100 000 ₽
от 10 рабочих дней
точная стоимость будет определена после ознакомления с объектом исследования

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

Заказать исследование
Проверка готового заключения

Рецензирование

от 80 000 ₽
10 рабочих дней
точная стоимость будет определена после ознакомления с заключением и приложениями

Итог — письменная рецензия на готовое заключение. Она проверяет исходные данные, методы и выводы, но не отменяет заключение и не заменяет новое исследование объекта.

Передать заключение на проверку
Письменный ответ эксперта

Консультация и справка

от 20 000 ₽
2–3 рабочих дня
точная стоимость будет определена после ознакомления с объектом исследования

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

Описать вопрос
Разбор задачи — без оплаты

Бесплатно определим вид исследования, проверим, нет ли явных пробелов в комплекте материалов, и назовём ориентировочные срок и стоимость. Если уже на этом этапе видно, что задачу решить нельзя, скажем об этом и не будем предлагать полное исследование. Изучение материалов по существу с письменным ответом — платная консультация; её стоимость согласуем до начала.

Получить организационный разбор
Организация исследования

Как строится работа над экспертизой

До начала исследования уточним предмет задачи, состав материалов и формат итогового документа.

  1. 01 Организационный разбор

    Проверяем компетенцию и сообщаем, можно ли провести исследование по поставленной задаче.

  2. 02 Вопросы и материалы

    Уточняем вопросы и сообщаем, каких документов или объектов не хватает.

  3. 03 Экспертное исследование

    Эксперт применяет профильные методики, фиксирует ход работы и обосновывает выводы.

  4. 04 Заключение и пояснения

    Передаём результат и при необходимости разъясняем суду применённую методику и выводы.

Документы организации

Ответы специалистов

Частые вопросы

Практические пояснения о назначении, материалах и использовании экспертного заключения.

Все вопросы по направлению
Когда нужна экспертиза исходного кода на Python?

Исследование нужно, когда спор упирается в проверяемое состояние программы, а не только в толкование договора. Типичные поводы: подрядчик сдал сервис на Django или FastAPI, а заказчик не согласен с объёмом; отчёт или выгрузка дают неверные цифры; сервис падает под нагрузкой; фоновые задачи не выполнились или выполнились дважды; после изменения структуры базы часть данных испорчена; переданный комплект не запускается; нужно проверить, не использован ли чужой код.

Если же язык разработки упомянут в документах случайно, а спор идёт о самом договоре или о работе организации в целом, задача может относиться к другому виду исследования. На разборе задачи мы сопоставляем вопросы с доступными объектами и определяем действительный предмет: важно не название технологии, а то, какие технические факты нужно установить и где могли сохраниться их следы.

Проверить это можно до заключения договора и без оплаты. Опишите ситуацию и перечислите, что у вас есть: репозитории, дистрибутивы, настройки стендов, журналы, договор и техническое задание. При желании можно приложить имеющийся документ; репозиторий, доступы и закрытые материалы передают после согласования безопасного канала.

Отдельная страница: Когда нужна экспертиза исходного кода на Python?
Какие технологии охватывает экспертиза программы на Python?

Исследование охватывает программу целиком, а не только строки кода. В проектах на Python это обычно один из каркасов — готовых основ приложения вроде Django, FastAPI или Flask, — работа с базой данных через встроенный или отдельный слой отображения объектов на таблицы, файлы миграций, фоновые задачи поверх брокера сообщений, обмен с другими системами, обработка данных и отчёты, а также окружение: версия интерпретатора, набор установленных библиотек, контейнеры и сервер приложений.

Такой охват нужен не для полноты, а потому что причина спора чаще всего лежит на стыке слоёв. Значительная часть поведения задаётся настройками и переменными окружения, поэтому одна и та же версия кода на двух стендах работает по-разному. Медленная выгрузка может объясняться не «слабым сервером», а обращениями к базе в цикле. А расхождение в расчёте нередко вызвано не кодом, а обновлением библиотеки или другими входными данными.

Поэтому в первом разговоре полезно назвать каркас, версию интерпретатора и способ развёртывания: от этого зависит, какие материалы понадобятся и на какие вопросы вообще можно ответить.

Отдельная страница: Какие технологии охватывает экспертиза программы на Python?
Подрядчик передал код на Python, но проект не запускается — что можно установить?

Невозможность запустить программу из переданного комплекта — самостоятельный технический факт. Эксперт берёт то, что вам передали, и пытается развернуть проект на изолированном стенде, фиксируя каждый шаг: чего не хватает в исходных текстах, какие модули отсутствуют, указаны ли версии библиотек, есть ли файлы миграций, описаны ли настройки и внешние сервисы, без которых программа не стартует.

Результат — перечень недостающего с объяснением, что именно из-за него невозможно. Это позволяет отделить неполноту передачи от ошибок в самом коде и от того, чего не хватало на стороне исследователя, — например, доступа к внутреннему хранилищу библиотек подрядчика. Частый для Python случай: комплект формально полон, но версии библиотек не зафиксированы файлом блокировки версий, и собранное сегодня окружение ведёт себя не так, как рабочее.

Чтобы такая проверка была возможна, сохраните переданный комплект в неизменном виде — вместе с сопроводительным письмом или актом — и не пытайтесь «дособрать» его своими силами до фиксации исходного состояния. Если экспертиза уже назначена, комплект передают через суд или орган расследования.

Отдельная страница: Подрядчик передал код на Python, но проект не запускается — что можно установить?
Сервис на Python тормозит или падает: дело в коде или в инфраструктуре?

Установить причину обычно можно, если сохранились следы события: журналы приложения и сервера gunicorn или uvicorn за нужный период, записи об ошибках со стеком вызовов, измеряемые показатели работы, сведения о нагрузке и о версии, которая работала в это время. По ним эксперт восстанавливает временную шкалу и находит, где именно уходило время или что привело к отказу.

Дальше проверяем альтернативные объяснения — это главная часть работы: код, настройки, выросший объём данных, поведение смежной системы, ограничения памяти и процессора. Со стороны базы данных смотрят планы выполнения запросов, журнал медленных запросов и блокировки. Для Python добавляется ещё одна проверка: не изменилось ли поведение из-за обновления библиотеки или версии интерпретатора, — поэтому эксперт разворачивает стенд с теми же версиями.

Учтите, что «медленно» — не техническая категория, пока не назван измеримый критерий: какая операция, при каком объёме данных, за какое время и по какому пункту требований. Если такого критерия в договоре нет, эксперт описывает фактические показатели и их причины, а вывод о нарушении обязательств делает суд.

Отдельная страница: Сервис на Python тормозит или падает: дело в коде или в инфраструктуре?
Отчёт, посчитанный программой на Python, даёт неверные цифры — можно ли это проверить?

Да, и проверка распадается на два разных сравнения. Первое — перезапуск против отчёта: мы запускаем ту же версию программы на тех же входных данных и в том же окружении и смотрим, получается ли то, что лежит в спорном отчёте. Это проверка происхождения, и расхождение здесь означает, что отчёт получен не этим кодом, не на этих данных или не в этом окружении. Второе — полученный результат против эталона из документа: формулы, пункта задания, данных бухгалтерии. Это проверка правильности, и расхождение означает уже ошибку в коде либо иначе понятое требование.

Путать их нельзя: при ошибке в коде первое сравнение как раз даст совпадение, потому что программа воспроизведёт собственную ошибку. В денежных расчётах мы отдельно смотрим типовые места — считаются ли суммы типом Decimal или дробным float, в какой момент выполняется округление, по какой границе суток и в каком часовом поясе режется период, как отсекаются повторы и возвраты.

Сохраните входные данные, полученный отчёт и снимок установленных пакетов на дату спорного расчёта: без них перезапуск ничего не докажет.

Отдельная страница: Отчёт, посчитанный программой на Python, даёт неверные цифры — можно ли это проверить?
Фоновые задачи в проекте на Python не выполнились или выполнились дважды — почему?

Обычно можно, если сохранились следы. Фоновые задачи в проектах на Python чаще всего выполняет Celery или RQ поверх брокера сообщений — Redis или RabbitMQ, — и по его журналам, состоянию очереди и хранилищу результатов эксперт устанавливает, была ли задача поставлена, взята ли в работу, завершилась ли ошибкой и запускалась ли повторно.

Две оговорки важны для выводов. Первая: настройка решает, в какой момент задача считается принятой, и в распространённых инструментах по умолчанию задача подтверждается до выполнения — значит, при аварийном завершении процесса она теряется, и это следствие настройки, а не случайность. Вторая: повторный запуск сам по себе не дефект, потому что очереди обычно гарантируют доставку «не менее одного раза»; дефектом становится отсутствие защиты от повторов, если она была нужна, — именно так возникают задвоенные письма и документы.

Выполненные задачи и их результаты хранятся ограниченное время и вычищаются автоматически, поэтому выгрузите их за спорный период как можно раньше. Если экспертиза уже назначена, порядок сбора согласуют через суд или орган расследования.

Отдельная страница: Фоновые задачи в проекте на Python не выполнились или выполнились дважды — почему?
Программа на Python теряет или искажает данные при обмене — можно ли найти, где?

Да, если сохранились следы обмена. Эксперт прослеживает путь конкретной записи от отправителя до получателя по идентификаторам, отметкам времени и журналам обеих сторон и находит этап, на котором обработка прекратилась: данные не были отправлены, не дошли, были отклонены с ошибкой, приняты, но не сохранены, или сохранены с искажением. Отдельно сверяют фактический обмен с описанным контрактом — составу полей, обработке повторов, поведению при ошибке.

Для Python характерна ещё одна причина расхождений: разбор внешнего источника, формат которого изменился. Программа продолжает работать, но получает не те значения или молча пропускает часть записей, потому что ошибки перехватываются слишком широко. Такие случаи видны при сопоставлении сохранённых входных файлов с результатом на изолированном стенде.

Действуйте быстро: журналы обмена ротируются и удаляются автоматически. Выгрузите их за спорный период и сохраните образцы входных файлов — восстановить эти записи потом обычно нельзя.

Отдельная страница: Программа на Python теряет или искажает данные при обмене — можно ли найти, где?
Данные испортились после миграции в проекте на Python — что можно установить?

Разбор начинают с миграций — пронумерованных сценариев, которыми программа сама перестраивает таблицы, — и служебной таблицы, в которой отмечено применённое: django_migrations у Django, alembic_version у Alembic. Читают её критически: таблица допускает правку, изменения, внесённые вручную, в неё вообще не попадают, а во многих инструментах предусмотрен режим, когда миграция отмечается применённой без фактического выполнения. Поэтому вывод «изменение применили тогда-то» подтверждают ещё и журналами самой базы, резервными копиями и историей репозитория, помня о пределах каждого источника.

Дальше сопоставляют состояние данных до и после и проверяют альтернативные объяснения: изменение схемы, ошибка в прикладном коде, ручное вмешательство, сбой при переносе, повторный запуск фоновой задачи. Отдельно смотрят, соответствовал ли порядок работ заявленному: обкатывали ли изменение на испытательном стенде, снимали ли резервную копию перед применением, предусматривался ли откат.

Сохраните резервные копии и журналы базы за спорный период в первую очередь: без состояния «до» объём утраты обычно установить нельзя. Учтите, что в этих копиях лежат данные ваших клиентов, поэтому состав и период выгрузки ограничивают тем, что нужно для ответа.

Отдельная страница: Данные испортились после миграции в проекте на Python — что можно установить?
Можно ли исследовать программу на Python, если переданы только скомпилированные файлы?

Зависит от того, как именно проект упаковали. Если внутри лежат файлы кеша байт-кода — переработанного представления программы, которое интерпретатор — программа, которая исполняет Python, создаёт сам, чтобы не разбирать исходник при каждом запуске, — их можно разобрать и во многом восстановить логику; заодно из служебной метки видно, какой версией интерпретатора они созданы. Если приложение упаковано вместе с интерпретатором — например, собрано PyInstaller, — обычно удаётся извлечь тот же байт-код. Если же проект переведён в машинный код через Cython или Nuitka, восстановление исходного текста в прежнем смысле невозможно, и исследование ограничивается наблюдаемым поведением и структурой.

Ограничения везде те же. Комментарии автора в кеш байт-кода не попадают, а средства восстановления заметно отстают от новых версий языка: для свежего интерпретатора подходящего инструмента может не оказаться вовсе, и это ограничение, а не вопрос точности. Сам восстановленный текст — это реконструкция, автор писал не так; в заключении это указывают.

Если исходный код существует, но сторона его не передала, эксперт отмечает это как ограничение исследования, а вопрос об истребовании материалов решает суд или лицо, назначившее экспертизу.

Отдельная страница: Можно ли исследовать программу на Python, если переданы только скомпилированные файлы?
Как установить состав библиотек и условия их использования в проекте на Python?

Состав определяют по двум источникам: перечню зависимостей в проекте — requirements.txt или pyproject.toml — и списку фактически установленных библиотек, то есть выводу pip freeze с рабочего окружения. Второй источник для Python важнее первого: перечень называет то, что просили поставить, а список — то, что действительно стоит, включая библиотеки, подтянутые не напрямую, а через другие. Их сопоставляют с текстами условий использования и с уведомлениями, вошедшими в поставку.

Отдельно проверяют, зафиксированы ли версии. По перечню без точных версий окружение не повторить: тот же файл, установленный через полгода, соберёт другой набор библиотек и другое поведение. Отсутствие файла блокировки версий — то есть файла, который закрепляет точный набор установленных библиотек, — самостоятельное техническое обстоятельство, которое отмечают в заключении. Если поставлен вопрос об уязвимостях, отмечают опубликованные записи для указанных версий, но запись об уязвимости библиотеки ещё не означает, что уязвима сама программа.

Правовую оценку эксперт не даёт: соблюдены ли условия лицензии и какие последствия из этого следуют, определяет суд. Поэтому снимите список установленных библиотек с рабочего окружения до того, как его переустановят.

Отдельная страница: Как установить состав библиотек и условия их использования в проекте на Python?
Как отличить заимствование кода на Python от совпадений из-за каркасов и оформления?

Совпадения в проектах на Python возникают постоянно и по естественным причинам. Значительная часть кода — подключённые библиотеки, файлы, созданные инструментами каркаса автоматически, и обязательные конструкции: описания моделей, маршрутов, миграций. Добавьте к этому принятые в языке правила оформления и повсеместное автоформатирование — и независимо написанные фрагменты станут выглядеть похоже. Поэтому первый шаг исследования — исключить всё это из сравнения; иначе схожими окажутся любые два проекта.

После такой подготовки эксперт сравнивает оставшееся по последовательностям лексем и по структуре программы, а затем проверяет каждое значимое совпадение вручную: каков его объём, есть ли во фрагменте индивидуальные решения, повторяются ли вместе с кодом характерные особенности — редкие имена, опечатки, необычный порядок операций, унаследованные недостатки. Отдельно проверяется альтернатива: не восходят ли оба фрагмента к общедоступному источнику, которых для Python особенно много.

Итогом становится описание характера и объёма совпадений и признаков переработки кода. Вывод о нарушении прав из этого автоматически не следует — такую оценку даёт суд. Подробнее о задаче рассказано на странице сравнения исходного кода.

Отдельная страница: Как отличить заимствование кода на Python от совпадений из-за каркасов и оформления?
По каким критериям оценивается качество кода на Python?

Универсального «качества кода» не существует, поэтому исследование опирается на названный критерий: требования технического задания, согласованный стандарт оформления, отраслевой стандарт или условия договора о приёмке. Внутри этих рамок эксперт проверяет измеримые характеристики. Это соответствие принятым в проекте правилам оформления (PEP 8), замечания анализаторов ruff, flake8 или pylint и средства проверки типов mypy, охват кода автоматическими тестами и результаты их прогона, структура модулей, обработка ошибок, документированность.

У Python есть особенность, которую приходится учитывать: объявлять типы не обязательно, а поведение объекта определяется во время выполнения, поэтому статический анализ видит меньше, чем в языках со строгой проверкой на этапе компиляции. Значимая часть выводов о качестве опирается на прогон тестов и на поведение программы на стенде, а не только на чтение кода. Срабатывание правила анализатора при этом остаётся поводом проверить фрагмент вручную, а не готовым дефектом.

Если требований к качеству в договоре нет, эксперт описывает фактическое состояние кода и отклонения от общепринятой практики. Подробнее эта задача разобрана на странице экспертизы качества исходного кода.

Отдельная страница: По каким критериям оценивается качество кода на Python?
Можно ли по истории репозитория установить, когда написан код на Python?

История репозитория показывает заявленную последовательность изменений, но её отметки времени сами по себе не доказывают дату. Разработчик настраивает имя, адрес почты и дату произвольно. У каждой записи две отметки — авторская и отметка фиксации; при перезаписи истории обновляется вторая, а первая обычно сохраняется, и расхождение между ними само становится следом такой операции.

Есть довод сильнее. Идентификатор записи вычисляется по её содержимому вместе с датами и всей цепочкой предшествующих записей, поэтому если идентификатор был зафиксирован независимым источником — письмом, журналом сборки, отметкой в системе задач, — вся предшествующая история оказывается закреплена этой отметкой. Поэтому хронологию восстанавливают по совокупности: журналам развёртывания, отметкам публикации пакетов, записям систем задач и рецензирования, переписке и актам.

Если сохранилась только выгрузка репозитория, эксперт описывает, что в ней отражено, и прямо указывает, что подтвердить эти данные независимыми источниками не удалось. Отдельная задача — установить сроки этапов разработки в целом; ей посвящена экспертиза сроков и хронологии разработки.

Отдельная страница: Можно ли по истории репозитория установить, когда написан код на Python?
Можно ли установить, кто написал код на Python?

Технические источники показывают, от чьего имени сделаны записи в истории, с какой учётной записи запускались развёртывания и какие адреса и сеансы отражены в журналах. Но имя и адрес почты разработчик указывает сам и настраивает произвольно, учётной записью могут пользоваться несколько человек, а подпись записи связывает изменение с ключом, но не с его владельцем. Такие данные сужают круг возможных объяснений, но не отождествляют код с конкретным человеком.

Сравнение по устойчивым особенностям оформления возможно, если есть достаточный по объёму образец кода достоверно известного авторства. Для Python его возможности особенно ограничены: автоформатирование приводит код разных людей к одному виду, а принятые в языке правила оформления стирают часть индивидуальных признаков. Совместная разработка, рецензирование и подсказки среды разработки смешивают их ещё сильнее, поэтому вывод носит вероятный характер и служит версией для проверки другими данными.

Кто автор произведения в правовом смысле и кому принадлежат исключительные права, определяет суд: эксперт устанавливает технические обстоятельства.

Отдельная страница: Можно ли установить, кто написал код на Python?
Какие материалы нужны для экспертизы программы на Python?

Состав зависит от вопроса, но обычно нужны пять групп. Первая — код: зеркальные копии репозиториев, то есть хранилищ исходных текстов вместе со всей историей правок, либо, если исходных текстов нет, переданный дистрибутив со сведениями о происхождении. Вторая — окружение: версия интерпретатора, перечень зависимостей, файл блокировки версий и список фактически установленных библиотек. Третья — настройки и база: конфигурация стендов, схема, файлы миграций, резервные копии на нужные даты. Четвёртая — следы работы: журналы, сведения о фоновых задачах, показатели, а для споров о расчётах — входные данные и полученный отчёт. Пятая — документы: договор, техническое задание, акты, переписка.

К материалам добавьте цель исследования, проект вопросов, точный период и часовой пояс. Чем точнее назван объект — конкретный модуль, версия, стенд, файл данных, — тем определённее будет ответ.

Для первого разговора всего этого не требуется: достаточно описания ситуации и перечня доступных источников. Действующие пароли, ключи и токены не передавайте вообще; файлы настроек присылайте с заменёнными значениями. Если экспертиза уже назначена, материалы направляют через суд или орган расследования, а не напрямую эксперту.

Отдельная страница: Какие материалы нужны для экспертизы программы на Python?
Как передать репозиторий проекта на Python, чтобы сохранить историю изменений?

Репозиторий — это хранилище исходных текстов, в котором сохраняется каждая правка. Передавать нужно его полную зеркальную копию, а не архив рабочего каталога. Архив сохраняет только последнее состояние файлов: истории, веток, меток и сведений о слияниях в нём нет, поэтому вопросы о датах остаются без ответа. Зеркальная копия создаётся штатными средствами одной командой.

До копирования важно ничего не «прибирать»: не выполнять принудительную перезапись веток, перебазирование, удаление веток и меток. Такие операции уничтожают именно те следы, которые предстоит исследовать. Это относится и к секретам: в проектах на Python пароли и ключи нередко попадают в историю вместе с файлами настроек, но вычищать их оттуда не нужно — правильное решение отозвать эти ключи и выпустить заново, завершив перевыпуск до передачи материалов, а историю оставить нетронутой. Учтите, что зеркальная копия переносит не всё: локальный журнал перемещений веток и удалённые из истории объекты в неё не попадают.

Вместе с копией передайте контрольные суммы и сведения о том, откуда, когда и кем она выгружена. Если экспертиза уже назначена, материалы идут не напрямую эксперту, а через суд или орган расследования.

Отдельная страница: Как передать репозиторий проекта на Python, чтобы сохранить историю изменений?
Можно ли заранее оценить перспективу экспертизы программы на Python?

Да. Сначала мы бесплатно разбираем задачу: относится ли она к нашей компетенции, что за программа, какие материалы есть и чего не хватает. Письменный ответ эксперта по существу — что вообще можно установить по вашим материалам, применим ли метод и насколько определённым окажется вывод — оформляется как консультация или справка, отдельной услугой; её условия и стоимость согласуют заранее.

Ответ бывает и неутешительным. Если исходные тексты переданы не полностью, версии библиотек нигде не зафиксированы, входные данные спорного расчёта утрачены, а журналы за нужный период уже удалены по сроку хранения, честнее узнать об этом до заключения договора, чем получить заключение, которое не поможет в споре. После полного исследования оценка может измениться: появляются новые материалы или обнаруживаются дополнительные технические ограничения.

Если судебная экспертиза уже назначена, порядок другой: назначенный эксперт не даёт одной стороне частный прогноз по переданному объекту и не принимает от неё материалы напрямую — вопросы и объекты идут через суд или орган расследования. Поэтому за оценкой перспективы обращайтесь до назначения.

Отдельная страница: Можно ли заранее оценить перспективу экспертизы программы на Python?
Какие вопросы ставят эксперту по программе на Python?

Окончательный круг вопросов судебной экспертизы определяет суд, а в иных предусмотренных законом процедурах — орган или лицо, назначившие экспертизу. До назначения стороны вправе предложить свои формулировки, и от их точности заметно зависит польза заключения; после назначения вопросы уточняются только через назначивший орган.

Хороший технический вопрос называет объект и критерий. Для программы на Python объект — это репозиторий и ветка либо конкретная запись истории, версия программы, стенд, период и часовой пояс; для спора о расчёте добавляют файл входных данных и отчёт, который проверяется. Критерий обычно берут из пункта технического задания. Разные задачи разводят по отдельным вопросам: соответствие требованиям, воспроизведение расчёта, причины отказа, судьба фоновых задач, состав библиотек и совпадения кодовых баз исследуются разными методами. Формулировки вроде «нарушены ли авторские права» или «надлежаще ли исполнен договор» эксперту не адресуют — это правовые вопросы.

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

Отдельная страница: Какие вопросы ставят эксперту по программе на Python?
Чем судебная экспертиза программы на Python отличается от внесудебного исследования?

Различаются основание, порядок и статус эксперта. Судебная экспертиза проводится по определению суда либо постановлению следователя, дознавателя или иного уполномоченного законом лица: этот же орган определяет круг вопросов и направляет объекты. Внесудебное исследование выполняется по договору со стороной — обычно до обращения в суд, чтобы понять перспективу спора или обосновать претензию.

Ключевое различие — предупреждение эксперта об уголовной ответственности за заведомо ложное заключение. При судебной экспертизе оно обязательно, а порядок зависит от вида судопроизводства и от того, кому поручено исследование: в одних случаях подписку отбирает назначивший орган, в других — руководитель экспертной организации; она приобщается к заключению. Во внесудебном исследовании такого предупреждения нет вовсе, и это учитывают при оценке документа. Содержание работы по программе в обоих случаях совпадает: те же объекты, методы и требования к проверяемости.

Если спор ещё не в суде, обычно начинают с внесудебного исследования или консультации. Учтите: специалиста, который до этого работал на сторону, при последующем назначении экспертизы раскрывают, и вопрос о его кандидатуре и об отводе решает суд, — поэтому роли консультанта и кандидата в эксперты разумно разделить заранее.

Отдельная страница: Чем судебная экспертиза программы на Python отличается от внесудебного исследования?
Можно ли провести экспертизу кода на Python дистанционно и сохранить конфиденциальность?

Да, большинство задач по коду решается дистанционно: материалы передают в электронном виде, а исследование ведут на изолированном стенде эксперта. Выезд нужен редко — например, когда объект невозможно корректно скопировать удалённо или фиксацию требуется провести в присутствии сторон.

Порядок обращения с материалами согласуют до передачи: защищённый канал, объём доступа, круг допущенных лиц, срок хранения и порядок удаления по окончании работ. Это порядок для работы по договору; при назначенной судом экспертизе объекты и доступ идут через назначивший орган. Часто достаточно сокращённой выгрузки. Для Python стоит помнить об одной особенности: пароли и ключи нередко лежат прямо в исходных текстах и в файлах настроек, поэтому перед передачей значения заменяют, а настоящие ключи отзывают и выпускают заново.

У соглашения о конфиденциальности есть важная граница: оно связывает эксперта, но не участников дела. Материалы, поступившие в суд, и само заключение становятся доступны другой стороне — а в споре о разработке это нередко конкурент. Поэтому объём передаваемого продумывают заранее, а вопрос о защите охраняемой тайны в процессе решается ходатайством стороны; удовлетворить его или нет, определяет суд.

Отдельная страница: Можно ли провести экспертизу кода на Python дистанционно и сохранить конфиденциальность?
От чего зависят стоимость и срок экспертизы программы на Python?

Расчёт зависит прежде всего от размера спорного контура: сколько модулей и сервисов в него входит, сколько репозиториев и стендов нужно разобрать. Затем: зафиксированы ли версии библиотек, сохранились ли журналы за нужный период, есть ли входные данные спорного расчёта. Отдельно считают работу, которой могло бы не быть: подбор окружения, когда версии не зафиксированы, воспроизведение сбоя, поиск недостающих сведений.

Сроки складываются похожим образом. Быстрее выполняются задачи с точно названным объектом и одним техническим вопросом; дольше — разбор проекта без зафиксированных версий, воспроизведение расчётов на больших данных и восстановление хронологии по нескольким источникам. Ориентир для судебной экспертизы — от 100 000 ₽, ориентировочный срок — от 10 рабочих дней.

Точные условия называют после просмотра материалов: пока не видно объёма и состояния объектов, любая цифра — гадание. Разбор задачи и перечня материалов проводится без оплаты и не требует передавать код, журналы и доступы.

Отдельная страница: От чего зависят стоимость и срок экспертизы программы на Python?
Как проверить или оспорить заключение по программе на Python?

Готовое заключение проверяют по тем же признакам, по которым оценивают любое техническое исследование. Смотрят, что было объектом: исходные тексты или восстановленный из байт-кода текст, полный проект или отдельные файлы, откуда материалы получены и зафиксированы ли контрольные суммы. Для Python отдельно проверяют, названы ли версия интерпретатора и версии библиотек, на которых работал автор заключения: без них воспроизвести его наблюдения нельзя, а расхождение в поведении легко объясняется другим окружением.

Затем смотрят, исключил ли автор из сравнения библиотеки, сгенерированный и типовой для каркаса код; разобрал ли альтернативные причины — входные данные, настройки, обновление библиотеки, смежную систему; можно ли повторить описанные действия. Отдельно оценивают связь результатов с выводами: подтверждается ли каждый вывод наблюдениями, разделены ли наблюдение и толкование, указаны ли ограничения. Частая ошибка — выводы за пределами специальных знаний: о нарушении прав, о вине, о надлежащем исполнении договора.

Результат проверки — рецензия: она описывает методические дефекты, но не отменяет заключение и не решает за суд вопрос о его доказательственном значении. Подробнее — на странице рецензирования экспертизы разработки ПО.

Отдельная страница: Как проверить или оспорить заключение по программе на Python?
Обращение в организацию

Сначала опишите задачу и имеющиеся материалы

Для первого обращения достаточно описания. Небольшой доступный документ можно приложить, если вы вправе передать его через форму; конфиденциальный исходный код и доступы передают согласованным способом. Бесплатно уточним профиль и комплект, не анализируя код.

Описать задачу