[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблемы с архитектурой инженерной программы
staircaseMaker
Здравствуйте, уважаемые коллеги!
Помогите, пожалуйста, советом, как решить проблему с архитектурой приложения.
Краткая предыстория проекта: мы производственная компания, занимаемся производством лестниц для частных домов по индивидуальному проекту. У нас есть система автоматизированного проектирования (сапр). Система сделанная в виде веб-приложения, 3D модель лестницы строится с использованием библиотеки three.js. Система хаотично росла из простенького онлайн калькулятора в течение нескольких лет. Разработка велась командой из 5 удаленных программистов, каждый прорабатывал свою модель лестницы. Их работу на уровне кода никто не проверял, проверялась только итоговая работа системы. В итоге сейчас система полностью написана, но на выходе каждая вторая спроектированная лестница ошибки: где-то отверстия не совпадают, где-то детали пересекаются между собой, где-то часть деталей на модели есть, а в спецификацию не попали и т.п.
На уровне кода система разделена на ядро, содержащее модули визуализации, взаимодействия с пользователем, работы с базой и т.п. и конструкторские модули, которые непосредственно создают модель лестницы (отдельный модуль для каждой серии лестниц, всего 8 серий). Проблема, которую надо решить, именно в конструкторских модулях. По-хорошему, чтобы устранить технические ошибки, надо проверить алгоритм построения модели на уровне кода. Но совокупный объем конструкторских модулей больше 300 тысяч строк, комментариев в коде нет, документации нет, везде встречаются “магические цифры”, которые непонятно откуда взяты. Кроме того, так как разные модули писались разными программистами, одна и та же задача везде решается по-разному и дублирование кода просто катастрофическое.
Система уже год эксплуатируется, но все результаты работы системы перед запуском в производство вручную проверяются и дорабатываются инженерами на производстве. Обнаруживаемые ошибки исправляются в коде, но, такое ощущение, что исправление ошибок часто порождает новые ошибки в других местах.
Мне бы хотелось получить от опытных разработчиков какие-то советы, что теперь со всем этим можно сделать, чтобы система наконец заработала нормально. Толковые детальные консультации мы готовы оплатить.
sergeiss
Цитата (staircaseMaker @ 25.02.2018 - 18:55)
Система хаотично росла из простенького онлайн калькулятора в течение нескольких лет.

Цитата (staircaseMaker @ 25.02.2018 - 18:55)
Но совокупный объем конструкторских модулей больше 300 тысяч строк, комментариев в коде нет, документации нет, везде встречаются “магические цифры”, которые непонятно откуда взяты. Кроме того, так как разные модули писались разными программистами, одна и та же задача везде решается по-разному и дублирование кода просто катастрофическое.

Извини, я понимаю, что тебе не до смеха... Но всё это описание мне очень напомнило одну "баянную" историю если бы программисты строили дома. Надо только приписать "все совпадения случайны, все люди вымышлены" smile.gif

Цитата (staircaseMaker @ 25.02.2018 - 18:55)
Мне бы хотелось получить от опытных разработчиков какие-то советы, что теперь со всем этим можно сделать, чтобы система наконец заработала нормально.


Единственное разумное, что можно сделать - силами либо этих, либо других программистов полностью переписать систему. Причем так, чтобы были и каменты, и документация, и четкое построение системы без дублирования кода. У этой команды должен обязательно быть (программный!) архитектор, который знает всё "от и до", который следит за тем, чтобы весь код правильным, чтобы была правильная модульность и т.д.
Да, это будет недешево. Но по-другому никак.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Invis1ble
Выстроить слой из прокси, покрыть их тестами и рефакторить потроха. Как-то так.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

staircaseMaker
Цитата (Invis1ble @ 25.02.2018 - 20:45)
Выстроить слой из прокси, покрыть их тестами и рефакторить потроха. Как-то так.

Тесты это отличная мысль, но я не смог придумать, как в автоматическом режиме проверять правильность модели. Большая чать ошибок имеет вот такой вид: http://joxi.ru/v294NPGu35y4Nm
а должно быть вот так http://joxi.ru/zANya0zTBRwEG2
ошибки в консоли нет, пересечения объектов нет, как отловить - не понятно. Может что-нибудь посоветуете, наверняка же есть способ тестировать такие вещи
AllesKlar
staircaseMaker
Наша дочерняя фирма пишет как раз подобное для одной известной сети мебельных магазинов.
Там не лестницы, а мебель, но смысл тот же - шарнирчики, отверстия, шурупчики, шкафчики, дверцы, ножки и т.д.
Рендерится в 3D тем же three.js все вертится, крутится, элементы добавляются, убираются, размеры меняются и т.д.

Если интересно и готовы переехать на другую платформу, то я могу с их шефом поговорить.
Единтсвенное, что это Германия, и программисты сидят тут же, следовательно, стоимость будет далеко не та же, что и у "5 удаленных программистов", но зато все как полагается - техподдержка,
ответсвенность деньгами за баги и т.д.

Альтернатива - то, что написал sergeiss

_____________
[продано копирайтерам]
staircaseMaker
Цитата (sergeiss @ 25.02.2018 - 20:24)
Единственное разумное, что можно сделать - силами либо этих, либо других программистов полностью переписать систему. Причем так, чтобы были и каменты, и документация, и четкое построение системы без дублирования кода. У этой команды должен обязательно быть (программный!) архитектор, который знает всё "от и до", который следит за тем, чтобы весь код правильным, чтобы была правильная модульность и т.д.
Да, это будет недешево. Но по-другому никак.

Вообщем-то, именно переписать все проблемные места заново я и планирую. Первую версию системы писал я сам, а дальше я выступал в роли заказчика - ставил задачи программистам, контролировал работу программы. Моя очень серьезная ошибка заключалась в том, что сам код, который пишется, я не проверял - смотрел только поведение системы. Переписать весь код своими силами сейчас я не могу, т.к. много других задач и объем уже очень большой. Вопрос в том, как правильно организовать рефакторинг, чтобы после рефакторинга не получить те же самые проблемы. Попытки переписать код силами тех же программистов, кто его писал (за деньги) ничем хорошим не увенчались. Как оказалось, из 5 человек только один вообще в состоянии писать нормальный код, а остальные скорее инженеры чем программисты. Вот, собственно, у меня и встал вопрос что делать: писать документацию, сразу переписывать код, писать тесты (по-крайней мере, фатальные ошибки можно отследить), искать консультанта, программистов, архитектора или еще кого... Посоветуйте, что в таких случаях вообще принято делать
staircaseMaker
Цитата (AllesKlar @ 25.02.2018 - 21:36)
Если интересно и готовы переехать на другую платформу, то я могу с их шефом поговорить.

Переезжать на другую платформу нет смысла, т.к. проблема именно в бизнес-логике. То есть лестницы строятся, крутятся, сохраняются, но имеют неправильную с производственной точки зрения конструкцию. Да и проблема только в одном производственном модуле. Кроме него есть еще коммерческий модуль, файловый сервер, финансы. Там все более-менее нормально
staircaseMaker
Я планирую начать с устранения дублирования и написания универсальных функций. Например, у нас есть 5 серий лестниц и каждая модель строится своим модулем. Во всех моделях есть ступени, с конструктивной сточки зрения они очень похожи (но все же не совсем одинаковые), но в каждом модуле они строятся своей функцией. При этом функции имеют разный интерфейс и выдают результат в разном виде. Как бы Вы посоветовали ввести в проект нового человека для решения такой задачи? И как организовать работу: сразу писать новую универсальную функцию, сначала отрефакторить каждую функцию и потом писать новую, сначала написать тесты, сделать документацию или еще что-то?
AllesKlar
ТЗ -> интерфейсы + документация -> тесты -> реализиция
Ну, и чтобы продакшн не убивать, мягко мигрировать.
В новом сервисе реализовали один тип, переключили в продакшене этот тип лестниц на новый сервис, остальные 4 работают со старыми.
Откатали новый сервис на одном типе, пофиксили кучу багов, приступили ко второму типу.

_____________
[продано копирайтерам]
staircaseMaker
Переосмыслив свою проблему, я пришел к выводу, что проблема у меня скорее с реализацией, чем с архитектурой. Код разбит на модули, модули на функции, только вот код функций написан плохо. Поэтому я пока склоняюсь к тому, чтобы начать с аудита самого лучшего (с моей точки зрения) модуля, чтобы получить образец, к которому надо привести остальные. Как Вы думаете, как лучше всего это организовать, чтобы польза от этого аудита была максимальной? Код написан на javascript с использованием библиотеки THREE.js, объем того модуля, который я считаю наилучшим в районе 12 тыс строк. И сколько такой аудит может стоить?
staircaseMaker
Всем спасибо за ответы, я почерпнул для себя много нового и совершенно по-другому взглянул на нашу задачу. Для решения нашей проблемы нужны 2-3 толковых программиста. Вот вакансия:
http://phpforum.su/index.php?act=ST&f=18&t=93297
Дальше пишите, пожалуйста, в ту тему
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.