9 августа 2024 1225
Как Java-методист с 15-летним опытом я решил проверить, как нейросеть ChatGPT-4 придумывает use cases, создает доменную модель и пишет программный код. Давайте посмотрим, способна ли эта большая языковая модель в ее текущей итерации заменить разработчика или, по крайней мере, упростить процесс разработки.
Привет, Хабр! Меня зовут Игорь Судакевич, я преподаватель-практик Учебного центра IBS по программированию на языке Java. В начале 2024 года мой коллега из IBS уже делился собственным опытом создания базовой программы с помощью ChatGPT. В том эксперименте использовалась бесплатная модель 3.5, и мы получили множество комментариев из серии «А вы бы тоже самое провернули на последней версии модели — она все делает в разы лучше!» Мол, и разработчики скоро будут никому не нужны.


В целом такое утверждение не лишено оснований: ChatGPT развивается по экспоненте, и каждая новая версия нейросети работает на порядок лучше предшествующей. Однако на ближайшие полгода, думаю, мы все еще можем выдохнуть — до релиза 5-й, а то и 6-й итерации. GPT-4 хоть и способна упростить жизнь разработчику, пока точно его не заменяет. Создание Java-проекта с ChatGPT — это длительный итерационный процесс проб и ошибок, уточнения запросов, пристальных проверок и исправления «галлюцинаций» нейросети. Впрочем, судите сами.

Первая фаза эксперимента: анализ предметной области и генерация UML

В рамках эксперимента мы решили создать с нуля образовательную платформу по типу условных Udemy или Coursera. Плюс ChatGPT в том, что это универсальная нейросеть, а значит, с ее помощью мы можем создать не только код, но и описать всю структуру проекта. По этой причине использовался именно ChatGPT, а не специализированный Copilot или Codex. Также сразу поясню, что эксперимент проводился в начале весны — до выхода новой модели GPT-4o.


Итак, пишу запрос ChatGPT: «Я хочу создать систему Образовательная платформа: создание системы для проведения онлайн-курсов, тестирования и отслеживания прогресса студентов. Укажи use cases для данной системы».


И получаю такой ответ:

«Для создания образовательной платформы с онлайн-курсами, тестированием и отслеживанием прогресса студентов вы можете рассмотреть следующие use cases (примеры использования):

1. Регистрация и аутентификация пользователей:

✔️ Регистрация новых пользователей (студентов и преподавателей).

✔️ Вход в систему с использованием учетных данных (логин и пароль).

✔️ Восстановление пароля.


2. Управление профилями пользователей:

✔️ Редактирование личной информации.

✔️ Изменение настроек аккаунта.

✔️ Просмотр и редактирование списка курсов, на которые подписан студент.


3. Создание и редактирование курсов:

✔️ Создание нового курса с указанием названия, описания и прочих параметров.

✔️ Редактирование существующего курса.

✔️ Добавление и редактирование модулей и уроков в рамках курса.

✔️ Назначение преподавателей для курса.


4. Управление материалами курса:

✔️ Загрузка и организация учебных материалов (тексты, видео, аудио, изображения).

✔️ Создание и редактирование тестов и заданий для студентов.

✔️ Настройка условий прохождения курса и получения сертификатов.


5. Просмотр курсов и учебных материалов:

✔️ Поиск и выбор курсов.

✔️ Просмотр уроков и изучение материалов.

✔️ Прохождение тестов и выполнение заданий.


6. Отслеживание прогресса студентов:

✔️ Просмотр своего прогресса по курсам (для студентов).

✔️ Мониторинг успеваемости и активности студентов (для преподавателей).

✔️ Формирование отчетов и статистики по курсам.


7. Взаимодействие между пользователями:

✔️ Обмен сообщениями и комментариями между студентами и преподавателями.

✔️ Уведомления о новых материалах, заданиях, событиях и т.д.


8. Управление доступом и правами пользователей:

✔️Назначение ролей и прав доступа для пользователей (администраторы, преподаватели, студенты)».


Звучит логично, переходим к визуализации требований.

Пишу следующий запрос: «Разработай UML-диаграмму в формате PlantUML для этих use cases. Уточняющий запрос: могу ли я не использовать псевдонимы UC1, UC2, и т. д.? И разместить эту диаграмму вертикально, чтобы teacher был под student?»

Получаю такой ответ:

@startuml

actor Student as student
actor Teacher as teacher
actor Administrator as admin

left to right direction
student --> (User Registration)
student --> (User Authentication)
student --> (Password Recovery)
student --> (Profile Management)
student --> (Search & Enroll in Courses)
student --> (View Lessons & Study Materials)
student --> (Take Tests & Complete Assignments)
student --> (Monitor Student Progress)
student --> (Messaging & Comments)
student --> (Notifications)

teacher --> (User Authentication)
teacher --> (Profile Management)
teacher --> (Create/Edit Course)
teacher --> (Manage Course Materials)
teacher --> (Create/Edit Tests & Assignments)
teacher --> (Assign Teachers)
teacher --> (Monitor Student Progress)
teacher --> (Generate Reports & Statistics)
teacher --> (Messaging & Comments)
teacher --> (Notifications)

admin --> (Profile Management)
admin --> (Create/Edit Course)
admin --> (Manage Course Materials)
admin --> (Create/Edit Tests & Assignments)
admin --> (Assign Teachers)
admin --> (Assign Roles & Access Rights)
@enduml


  Сгенерированный UML-скрипт был затем визуализирован с помощью опенсорсного инструмента PlantUML:


Следующий шаг — доменная модель. Задаем такой промпт: «Разработай доменную модель для системы, описанной на use case диаграмме: <сюда подставляем UML-скрипт>».


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



Визуализируем доменную модель с помощью того же инструмента:




Модель еще сыровата, поэтому дорабатываем запрос: «Уточни поля для классов Teacher, Student, Administrator».


Вот обновленная доменная модель:





Теперь классы Teacher, Student и Administrator наследуются от базового класса User и имеют следующие дополнительные поля и связи, специфичные для каждой роли:

1. Student:

✔️ enrollments: Список записей на курсы (Enrollment) для данного студента.

✔️ testResults: Список результатов тестов (TestResult) для данного студента.

✔️ assignmentSubmissions: Список выполненных заданий (AssignmentSubmission) для данного студента.


2. Teacher:

✔️ courses: Список курсов (Course), которые ведет данный преподаватель.


3. Administrator:

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


Продолжаем уточнять запрос: «Переименуй Lesson в Module и добавь информацию по длительности для Material, Test и Assignment».


Получаем:





Теперь класс Lesson переименован в Module, а для классов Material, Test и Assignment добавлено новое поле «duration» для отражения длительности материала, теста или задания. Эта длительность может быть измерена в минутах, часах или днях в зависимости от контекста и требований системы.


Вторая фаза эксперимента: подключение и использование кодогенератора

ChatGPT — не прикладная нейросеть для разработки, она не может — пока — создавать собственно файлы и нужную нам структуру директорий, а способна лишь выдавать код в текстовом виде, малополезном без соответствующего окружения. Поэтому на данном этапе мы подключаем кодогенератор JAIG — отдельный инструмент, предназначенный для генерации кода с помощью ChatGPT API. Он поставляется в виде .jar файла и файла настроек. JAIG был создан специально для курса IBS по разработке с помощью машинного интеллекта, но вы можете использовать для тех же целей любой другой доступный «преобразователь» или даже написать собственный простой скрипт, который будет управлять отсылкой и приемом запросов в ChatGPT.


JAIG подключается как внешний инструмент. В настройках ExternalTools нужно только задать правильную конфигурацию:

Program: java

Arguments: -jar jCodeGen/jCodeGen.jar $FilePathRelativeToProjectRoot$

Working directory: $ProjectFileDir$


Для использования JAIG нужно создать папку, поместить в нее запрос в файле с расширением .txt — скажем, prompt.txt — и запустить генерацию. В запрос можно включать ссылки на уже имеющиеся файлы и папки. Обратите внимание: ссылка должна начинаться с “/” и содержать полный путь от корня проекта. Содержимое файлов автоматически подставится в полный запрос prompt-request.txt. На основе этого файла система сформирует окончательный запрос и затем получит ответ от ИИ, сохранив его в файле prompt-response.txt. Если ответ нейросети содержит код и в этом коде правильно указаны пакеты, то включается автоматический парсинг ответа: файлы .java распределяются по папкам согласно пакету. Результат парсинга записывается в папку prompt-response-parsed. Далее результат парсинга нужно скопировать в папку src, проанализировать выданный код и устранить ошибки. На основе внесенных корректив будет сформирован патч для автоматического исправления при очередной генерации кода.


То есть цикл разработки приложения с помощью ChatGPT и JAIG выглядит так:





Третья фаза эксперимента: реализация доменной модели на Java

Генерация доменной модели на Java на основе UML-диаграммы


В корне проекта создаем папку requests и в ней подпапку 01_PlantUML_to_domain_model. В подпапку кладем plain-ASCII-файл 01_PlantUML_to_domain_model.txt с таким запросом:

/task/requirements.txt

/task/plant-uml.txt


Cгенерируй классы доменной модели на Java. Укажи все необходимые поля.

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

/task/requirements.txt

Ниже приведены все классы доменной модели:

/requests/01_PlantUML_to_domain_model-response.txt

Разбей все классы по пакетам, если базовый пакет ru.ibs.eduplatform.model.

Каждый пакет должен содержать не более 5 классов.

ИИ предлагает разбивку по пакетам с учетом функциональности:



Просим нейросеть разбить классы по пакетам и добавить Lombok-аннотации:

/requests/01_PlantUML_to_domain_model-response.txt

/requests/02_packages-response.txt

Добавь аннотации Lombok @Data, @NoArgsConstructor для всех классов доменной модели.

Добавь @AllArgsConstructor для всех классов доменной модели кроме унаследованных.

Используй ru.ibs.eduplatform.model в качестве базового пакета.

Убедись, что все импорты корректны и соответствуют созданным пакетам.

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

Для каждого класса должен быть указан пакет.

Убедись, что в результатах есть все классы.


В результате у нас сгенерированы все классы доменной модели. Теперь необходимо распарсить ответ, то есть выполнить семантический анализ сгенерированного кода. Предварительный парсинг выполняется автоматически. Для всех классов были правильно указаны их пакеты, поэтому через 5 секунд кодогенератор самостоятельно разложил классы по папкам согласно их пакетам и записал результат в подпапку prompt-response-parsed.


Проверка доменной модели путем заполнения тестовыми данными

Пишем очередной запрос:

/src/main/java/ru/ibs/eduplatform/model/**

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

Создай 2-3 студентов, добавь 2 курса и несколько материалов,

2 теста с 2-3 вопросами, запиши студентов на курс.

Выведи информацию о всех курсах.

Для каждого курса выводи список студентов (имя, фамилия, email), список материалов и список тестов.

Ответ должен содержать только код.

В качестве пакета используй ru.ibs.eduplatform.


Нейросеть забыла добавить конструкторы для унаследованных классов, пришлось доработать запрос:

/src/main/java/ru/ibs/eduplatform/model/**

Для классов доменной модели, унаследованных от User, добавь конструкторы с использованием super() и вызовом конструктора суперкласса.

Выведи только код классов, в которые добавлены конструкторы.


Генерация пользовательского интерфейса

С конструкторами разобрались, переходим к внешнему виду приложения:

/src/main/java/ru/ibs/eduplatform/model/**

Модель данных представлена выше.

Сгенерируй код Java-программы с пользовательским интерфейсом командной строки, которая покажет меню со следующими элементами:

Добавить слушателя (должен позволять вводить данные студента)

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

Записать слушателя на курс (должен позволить найти курс по имени и фамилии студента, добавить этого студента на курс и создать Enrollment, добавив его в enrollments студента)

Добавить курс (должна позволять ввести данные курса)

Найти курс (должен находить курс по имени и выводить все данные курса и список записавшихся студентов)

Интерфейс должен быть на русском языке.

Ответ должен содержать только код.


На выходе получаем файл UI.java с первой версией кода.



Третья фаза эксперимента: обеспечение персистентности и работа над ошибками

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


Как это исправить:

✔️ поправить код вручную; например, добавить недостающий импорт из определенного класса, конструктура или пакета;

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

✔️ добавить уточнение требования в запрос;

✔️ изменить температуру, чтобы получить другой ответ;
✔️ разбить запрос на несколько запросов, чтобы упростить задачу нейросети.


Генерация пользовательского интерфейса

Уточнение для ChatGPT:



  ИИ генерирует новый пользовательский интерфейс в UI.java.


Поддержка базы данных

Пишем очередной запрос:

Добавь поддержку JPA, объявления пакетов и импортов для каждого сгенерированного класса.

Используй в импортах пакет jakarta.persistence вместо javax.persistence.

Сгенерируй конструкторы без идентификатора (id должен быть сгенерирован автоматически).

/src/main/java/ru/ibs/eduplatform/model/**

Добавь полностью квалифицированные импорты для всех импортов из всех классов.


Прекрасно, теперь все доменные объекты имеют поддержку JPA.


Чтобы сгенерировать репозитории Spring Data, пишем почти идентичный запрос:

Добавь поддержку JPA, объявления пакетов и импортов для каждого сгенерированного класса.

Используй в импортах пакет jakarta.persistence вместо javax.persistence.

/src/main/java/ru/ibs/eduplatform/model/**

Добавь полностью квалифицированные импорты для всех импортов из всех классов.


Запрос по поддержке базы данных для интерфейса:

/src/main/java/ru/ibs/eduplatform/model/**

/src/main/java/ru/ibs/eduplatform/repositories/**

Используй модель данных и репозитории для обновления класса UI.

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

Модифицируй класс UI, чтобы он использовал репозитории.

/src/main/java/ru/ibs/eduplatform/UI.java


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

Дополнение: вывод всех слушателей и курсов

Запрос:

/src/main/java/ru/ibs/eduplatform/repositories/**

/src/main/java/ru/ibs/eduplatform/EduplatformUIApplication.java

Добавь в меню пункты показать всех студентов и все курсы


Система сгенерировала новый класс EduplatformUIApplication, включающий пункты о выводе студентов и курсов:

case 6:

    showAllStudents();

    break;

case 7:

    showAllCourses();

    break;


Работа над ошибками: LazyInitializationException

Без ошибок, конечно, не обошлось. После добавления курса при попытке поиска курса программа выдала исключение LazyInitializationException. Эта ошибка возникает, когда Hibernate пытается загрузить данные из связанных сущностей после закрытия сессии. В данном случае при вызове метода `findCourse()` сессия уже закрыта, и Hibernate не может загрузить данные из связанных сущностей.


В ответ на жалобу GPT предложил поставить аннотацию `@Transactional` для метода `findCourse()`:

@Transactional

public void findCourse(Scanner scanner) {

    // ...

}

При этом машинный интеллект также пояснил, что такое решение должно позволить Hibernate открывать новую сессию при выполнения метода `findCourse()`и загружать данные из связанных сущностей.


Но это в теории. А на практике программа снова выдала исключение. Выяснилось, что аннотация не работает, потому что мы вызываем этот метод внутри того же класса. В Spring аннотация `@Transactional` работает через прокси, и, когда мы пытаемся вызвать метод внутри того же класса, прокси не используется и транзакция не начинается.


Чтобы решить эту проблему, GhatGPT посоветовал вынести метод `findCourse` в отдельный сервисный класс и добавить к нему аннотацию `@Transactional`. Затем внедрить этот сервисный класс в `EduplatformUIApplication` и вызвать метод `findCourse` через этот сервисный класс:

@Service

public class CourseService {

    @Transactional

    public void findCourse(Scanner scanner) {

        // ваш код метода findCourse

    }

}

Проблема решена.


Рефакторинг: вынос бизнес-логики в сервисы

Запрос:

Обнови класс UI с использованием шаблона проектирования Command.

/src/main/java/ru/ibs/eduplatform/UI.java

При использовании паттерна проектирования Command добавление и работа с командами становится более простой в поддержке и модификации.


Персистентность базы данных

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


Чтобы сделать базу данных персистентной, ChatGPT предложил изменить настройки H2 в файле `application.properties`:

```

spring.datasource.url=jdbc:h2:file:./data/db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE

spring.datasource.driverClassName=org.h2.Driver

spring.datasource.username=sa

spring.datasource.password=

spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

spring.jpa.hibernate.ddl-auto=update

```

Параметры `DB_CLOSE_DELAY=-1` и `DB_CLOSE_ON_EXIT=FALSE` указывают, что база данных должна оставаться открытой и не закрываться при завершении работы приложения.


Исправление: завершение работы сервера

Следующая ошибка — при выборе «Выйти» в меню сервер продолжал работу.

Чтобы завершить работу приложения и сервера, ChatGPT предложил добавить вызов `System.exit(0)` после `scanner.close()` в методе `run`. Вот обновленный код:

@Override

public void run(String... args) throws Exception {

    ...

    scanner.close();

    System.exit(0); // Завершаем работу сервера

}


Исправление: не добавлять курс, если он уже существует

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

Для того чтобы не добавлять курс, если курс с таким же именем уже существует, ChatGPT посоветовал внести следующие изменения в метод `addCourse` в классе `CourseServiceImpl`:

@Override

public void addCourse(String name, String description) {

    Course existingCourse = courseRepository.findByName(name);

    if (existingCourse != null) {

        System.out.println("Курс с таким названием уже существует.");

        return;

    }

    Course course = new Course(name, description);

    courseRepository.save(course);

    System.out.println("Курс успешно добавлен.");

}


Четвертая фаза эксперимента: реализация REST API и разработка естественно-языкового интерфейса

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

Далее мы сгенерировали REST-запросы, контроллеры и сервисы, протестировали код с помощью автосгенерированных модульных тестов и, наконец, сформировали Swagger-документацию.


Результат получился следующим:




В рамках одной небольшой статьи невозможно рассказать обо всех наших попытках «прикрутить» машинный интеллект к разработке кода, поэтому давайте просто конспективно перечислим то, где действительно удалось добиться приемлемых результатов:
✔️ составление запросов со ссылками на исходники и другие документы;
✔️ отправка запросов через ChatGPT API (автоматически или вручную);
✔️ удобная интеграция со средой разработки (IDEA);
✔️ просмотр запросов в процессе генерации, подсветка кода;
✔️ парсинг результатов генерации, раскладывание исходников по файлам и пакетам;
✔️ запись сгенерированных файлов в требуемую папку (например, в канонические Maven-фолдеры src/main/java и src/test/java);
✔️ гибкие настройки генерации, в том числе выбор модели (gpt3/gpt4 и др.) и температуры, глобально или для каждого отдельного запроса;
✔️ создание и «автонакатывание» патчей для изменений в коде;
✔️ генерация серии запросов из шаблонов (на базе фреймворка Apache Velocity);
✔️ выполнение запросов единым пакетом (batch-файлы);
✔️ библиотечка промптов, например для рефакторинга выбранного фрагмента, генерации javadoc-комментариев, разъяснения того или иного сниппета, для выявления уязвимостей и антипаттернов, и пр.;
✔️ откат изменений в коде (rollbacks).


Эксперимент: выводы

Четвертая итерация ChatGPT работает заметно лучше версии 3.5. В нашем прошлом эксперименте на «пляски» с нейросетью у коллеги ушло в общей сложности 10 дней. При этом ручное написание кода заняло бы один рабочий день. ChatGPT 4.0, напротив, сокращает, а не затягивает процесс разработки. Благодаря переходу на «четверку» в наших экспериментах наблюдалась устойчивая тенденция к экономии времени на разработку не менее 20-25%. Однако сгенерированный код все еще требует серьезных доработок, а модель периодически допускает довольно нелепые ошибки. Посмотрим, какой будет ChatGPT 5.0.


Мы также надеемся, что появится API-доступ к большим языковым моделям других вендоров, показывающим интересные результаты именно для кодогенерации, — например, Llama или Vicuna.


  P. S. JAIG, который-то и оказался ключом к общению с машинным интеллектом, представляет собой опенсорсный инструмент и доступен по ссылке.

Оригинал статьи размещен на Хабре

В нашей новой программе «Java разработчик. Middle Developer» целый модуль посвящен тому, как ИИ может ускорить разработку стандартных проектов, позволяя создавать работающие прототипы приложений в кратчайшие сроки. Участники изучат различные этапы разработки приложения Spring промышленного уровня с использованием инструментов ChatGPT. Прием заявок на программу уже открыт.

Последние статьи в блоге

5 курсов июля со скидкой 30%

Друзья, у нас остались последние места на курсах, которые стартуют в июле. Сейчас есть возможность записаться на обучение со скидкой 30%!

Новости
04 июля 2025

Карьерный трек аналитика: от базы к экспертизе

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

27 июня 2025

Почему именно сейчас стоит учиться на бизнес-аналитика уровня Middle. «Руководство BABOK» в подарок участникам программы!

Вы в ИТ, вам за 30. Вроде бы всё хорошо — есть работа, скиллы, стабильность. Но в воздухе — тревожность. Проекты замораживаются. Бизнес урезает бюджеты. От ИТ ждут не просто задач, а конкретного влияния на прибыль.

25 июня 2025

Уничтожит ли ИИ-генератор кода профессию разработчика?

С появлением ИИ-инструментов, а также в связи недавним анонсом Canva Code, который генерирует код за пару кликов, многие задумались: не станут ли такие инструмент угрозой для разработчиков? Давайте разберемся, есть ли здесь реальные риски, или это все же преувеличения.

23 июня 2025

Проектное резюме консультанта 1С: карьерный инструмент, чтобы выделиться среди других кандидатов

Рассказываем о продвинутой альтернативе привычного резюме для консультантов 1C и других специалистов с проектной занятостью.

Новости
19 июня 2025

Выбор карьеры: Менеджер бизнес-процессов или Бизнес-аналитик уровня Middle?

В мире цифровой трансформации пути развития аналитиков и менеджеров проектов все чаще расходятся: кому-то ближе работа с требованиями и API, а кому-то — выстраивание системной эффективности на уровне всей компании. Какой путь выбрать лично вам?

Новости
18 июня 2025

В Учебном центре IBS планируется запуск курсов по продуктам TData

Читайте о стратегическом соглашении TData и IBS и наших новых курсах

11 июня 2025

Компетенции бизнес-аналитиков: Junior и Middle в сравнении

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

Новости
05 июня 2025

Лимит на сбои. Как понять, что система перегружена, а не просто плохо сделана?

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

Новости
03 июня 2025

Кто такой аналитик 1С?

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

Новости
28 мая 2025

Разбор задачи: UML-диаграмма классов для системы регистрации на курсы

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

22 мая 2025

Бизнес-аналитик и системный аналитик в ИТ: кто есть кто и в чем разница

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

21 мая 2025

5 распространенных ошибок в работе системных аналитиков

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

20 мая 2025

Итоги работы Центра сертификации IBS

Центр сертификации IBS начал свою работу в апреле 2023 года, поэтому мы традиционно подводим итоги работы в апреле-мае. Прошедший год стал для нас периодом важных изменений. В 2024 году произошло несколько знаковых событий: наша команда обновила программы сертификации системных аналитиков и Java-разработчиков, подготовила к запуску сертификацию бизнес-аналитиков, получила аккредитацию от АПКИТ и стала обладателем Гран-при премии «Смарт пирамида». Рассказываем подробнее, каких результатов мы достигли в уходящем году и как это отразилось на нашей работе.

Новости
19 мая 2025

Какой метод тестирования выбрать: черный, белый или серый ящики?

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

14 мая 2025

Удостоверение, диплом и сертификат: в чем разница и что выбрать

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

12 мая 2025

Выгодный май — на курсы залетай!

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

05 мая 2025

Кейс: кастомизация курса по Jira

Кейс по проведению кастомизированного курса «Основы Jira» для крупной российской компании, занимающейся производством цифровой техники.

05 мая 2025

Зачем специалистам по 1С изучать системный анализ и архитектуру ПО

Как системный анализ и архитектура ПО помогают эффективнее работать в 1С.

29 апреля 2025

Банка Nutella, IT, ESG — что общего?

Когда вы читали этикетку на продукте не из-за состава, а из-за ESG-маркировки?

25 апреля 2025

Не нашли, что искали? — Просто напишите, и мы поможем

Корпоративное обучение Оценка персонала Сертификация О нас Стань тренером Блог
Пользователь только что записался на курс ""
Спасибо!
Форма отправлена успешно.