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

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

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

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

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

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

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

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

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

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

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

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

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

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

Содержание страницы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • Прикладной каркас — чаще всего Spring и Spring Boot, реже Jakarta EE на сервере приложений Tomcat или WildFly. Значительная часть поведения задаётся не строками кода, а конфигурацией: профилями окружений, файлами настроек, признаками включения отдельных механизмов. Одна и та же сборка на двух стендах — то есть на двух отдельных площадках, где система развёрнута, — может работать по-разному, поэтому конфигурацию исследуют вместе с кодом.
    • Работа с базой данных — 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, переменные среды и описания развёртывания;
    • настройка протоколирования: какие события система записывала в спорный период и какие не записывала вовсе;
    • схема базы данных, отображение объектов на таблицы, индексы, ограничения, хранимые процедуры и триггеры;
    • сценарии изменения структуры базы и служебная таблица применённых миграций;
    • резервные копии и журналы самой базы данных, планы выполнения запросов, журнал медленных запросов, сведения о блокировках и о состоянии пула соединений;
    • справочные и настроечные данные, определяющие поведение прикладной логики, и описания контрактов обмена.

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

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

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

    Сюда входят:

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

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

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

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

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

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

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

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

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

    Когда до передачи дойдёт, подготовьте:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Форматы работы

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

    Доступны такие форматы:

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

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

    Что вы получите и как использовать результат

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

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

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

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

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

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

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

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

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

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

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

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

    По договору

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

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

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

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

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

    от 40 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?
    Обращение в организацию

    Отправьте материалы на предварительную оценку

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

    Отправить материалы