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

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

Исследуем корпоративные системы на Java — Spring, Hibernate, очереди, обмен с другими системами: что сделано по договору, почему система падает или теряет документы, полон ли переданный код.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Когда нужна экспертиза системы на Java

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

Исследование помогает в таких случаях:

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

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

Чем это отличается от аудита кода и от общей компьютерной экспертизы

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

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

Из чего состоит корпоративная система на Java

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

В типичной системе отдельно исследуют:

  • Прикладной каркас — чаще всего Spring и Spring Boot; встречаются также приложения Jakarta EE на WildFly и веб-приложения в контейнере сервлетов Tomcat. Значительная часть поведения задаётся не строками кода, а конфигурацией: профилями окружений, файлами настроек, условиями включения отдельных механизмов. Одна и та же сборка на двух стендах — то есть на двух отдельных площадках, где система развёрнута, — может работать по-разному, поэтому конфигурацию исследуют вместе с кодом.
  • Работа с базой данных — Hibernate или другая реализация JPA, отображающая объекты программы на таблицы, и пул соединений вроде HikariCP. Часть дефектов видна уже при чтении отображений и на небольшом стенде: лишние обращения к базе при обходе связанных объектов, неверные границы транзакций, каскадные удаления, расхождение схемы и отображения. На промышленных объёмах последствия становятся серьёзнее: то, что незаметно на сотне записей, останавливает работу на миллионах.
  • Изменения структуры базы данных — сценарии миграций Liquibase или Flyway и служебная таблица, в которой инструмент отмечает применённые изменения: DATABASECHANGELOG или flyway_schema_history. По ним восстанавливают, что и когда меняли в схеме.
  • Обмен сообщениями — Kafka, RabbitMQ и подобные. Исследуют устройство очередей, работу потребителей и значения смещений — отметок о том, до какого места потребитель дочитал поток сообщений. Проверяют также повторную обработку и очередь недоставленных сообщений — отдельное место, куда складывают то, что обработать не удалось, если такая очередь предусмотрена.
  • Обмен с другими системами — бухгалтерскими, банковскими, государственными, партнёрскими. Проверяют соответствие фактического обмена описанному контракту, обработку повторов и ошибок, согласование версий.
  • Среда выполнения — сервер приложений или контейнеры Docker под управлением Kubernetes, ограничения по памяти и процессору, параметры виртуальной машины Java. Несогласованность ограничений среды и настроек виртуальной машины — обычная причина перезапусков, которую ошибочно приписывают коду.
  • Наблюдаемость — журналы приложения через Logback или Log4j, измеряемые показатели работы, сквозные идентификаторы запросов, журналы сборки мусора, записи Java Flight Recorder, дампы потоков и кучи. Это основные материалы для исследования сбоев и деградации.

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

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

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

Задачи обычно распадаются на три группы:

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

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

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

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

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

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

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

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

Если исходный код вам не передали или он неполон

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

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

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

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

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

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

Исходный код и история репозитория

Основной объект — не отдельные присланные файлы, а проект целиком вместе с историей. Архив рабочего каталога сохраняет только последнее состояние, поэтому для вопросов о датах и последовательности работ он не подходит.

Исследуются такие материалы:

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

Сборка, артефакты и байт-код

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

К этой группе относятся:

  • файлы описания сборки для Maven или Gradle — pom.xml и build.gradle, — включая многомодульные проекты и общее управление версиями библиотек через BOM;
  • архивы JAR, WAR, EAR, служебные записи внутри них, образы контейнеров и установочные комплекты;
  • class-файлы и их разбор штатной утилитой javap: по номеру формата видно, для какой версии платформы предназначен каждый класс;
  • отладочная информация — таблицы номеров строк и имён переменных, от которых зависит, насколько подробно можно прочитать восстановленный текст;
  • сведения из внутреннего хранилища артефактов — Nexus или Artifactory: что и когда публиковалось и загружалось.

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

Конфигурация, база данных и данные

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

Сюда входят:

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

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

Журналы, сообщения, показатели и дампы

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

Сюда входят:

  • журналы приложения и сервера, сообщения об ошибках вместе с цепочкой вызовов, сквозные идентификаторы запросов;
  • выгрузки сообщений, сведения о смещениях потребителей и об очереди недоставленных сообщений, если она настроена;
  • измеряемые показатели работы, записи сквозной трассировки, то есть прослеживания запроса через все сервисы, и журналы сборки мусора;
  • дамп потоков, снятый через jstack, — снимок того, чем были заняты потоки программы, и дамп кучи из jmap — снимок объектов, которые программа держала в памяти;
  • отчёты тестов JUnit и интеграционных прогонов на Testcontainers, данные об охвате кода из JaCoCo, отчёты анализаторов — SonarQube, Checkstyle, SpotBugs, PMD, Error Prone — и результаты нагрузочных испытаний;
  • журналы сборочной системы, отметки о развёртывании и результаты приёмочных проверок.

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

Как сохранить материалы для исследования

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

До передачи материалов эксперту сделайте следующее:

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

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

Что передавать и как защитить данные

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

Когда дойдёт до передачи, подготовьте из перечисленного выше то, что относится к вашему вопросу:

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

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

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

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

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

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

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

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

Java-код мобильных приложений исследуют с учётом их формата; подробнее об этом — на странице экспертизы мобильных приложений.

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

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

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

  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 Заключение и пояснения

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

Выполненные исследования

Практика по этому направлению

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

Все примеры по направлению
Опубликованный пример
Завершена в июне 2014 года

Экспертиза программ и базы автовокзала в Перми №2528

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

Арбитражный суд Пермского краяДело №А50-16993/2013
Участники: ПКГУП "Автовокзал", ООО "Комплексные автоматизированные распределительные системы"
Открыть описание
В открытом доступе представлена часть выполненных исследований по разным объектам и судебным делам. Сведения, защищённые законом или условиями конфиденциальности, не раскрываются. Чтобы проверить возможность исследования по вашей ситуации, опишите задачу.

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

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

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

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

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

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

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

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

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

Исследование охватывает систему целиком, а не только строки кода. В корпоративных проектах на Java это обычно Spring и Spring Boot как прикладной каркас, Hibernate или другая реализация JPA для работы с базой данных, сценарии изменения структуры базы, очереди сообщений вроде Kafka или RabbitMQ, обмен с бухгалтерскими, банковскими и государственными системами, сборка через Maven или Gradle, запуск в контейнерах и средства наблюдения — журналы, измеряемые показатели работы, прослеживание запроса через все сервисы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Это зависит от того, как устроен обмен и что сохранилось. В системах вроде Kafka сообщения лежат в потоке ограниченное время — обычно около недели, но срок настраивается, — и их можно выгрузить повторно; читать их следует отдельным потребителем, чтобы не сдвинуть отметку прочитанного у рабочего. В классических очередях вроде RabbitMQ сообщение исчезает, как только его забрал получатель, поэтому «выгрузить очередь задним числом» там нельзя, и картину восстанавливают по журналам отправителя и получателя.

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

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

Отдельная страница: Можно ли установить потерю сообщений в очереди?
Данные испортились после изменения структуры базы — что можно установить?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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