За последние 24 часа нас посетили 20265 программистов и 1082 робота. Сейчас ищут 754 программиста ...

Проблемы с архитектурой инженерной программы

Тема в разделе "Вопросы от блондинок", создана пользователем staircaseMaker, 25 фев 2018.

  1. staircaseMaker

    staircaseMaker Новичок

    С нами с:
    25 фев 2018
    Сообщения:
    17
    Симпатии:
    1
    Здравствуйте, уважаемые коллеги!

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

    Краткая предыстория проекта: мы производственная компания, занимаемся производством лестниц для частных домов по индивидуальному проекту. У нас есть система автоматизированного проектирования (сапр). Система сделанная в виде веб-приложения, 3D модель лестницы строится с использованием библиотеки three.js. Система хаотично росла из простенького онлайн калькулятора в течение нескольких лет. Разработка велась командой из 5 удаленных программистов, каждый прорабатывал свою модель лестницы. Их работу на уровне кода никто не проверял, проверялась только итоговая работа системы. В итоге сейчас система полностью написана, но на выходе каждая вторая спроектированная лестница ошибки: где-то отверстия не совпадают, где-то детали пересекаются между собой, где-то часть деталей на модели есть, а в спецификацию не попали и т.п.

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

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

    Мне бы хотелось получить от опытных разработчиков какие-то советы, что теперь со всем этим можно сделать, чтобы система наконец заработала нормально. Толковые детальные консультации мы готовы оплатить.
     
  2. acho

    acho Активный пользователь

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    Судя по тому, что вы сказали, вам бы взять дополнительно отдельного разработчика. И прям очень хорошего. Для начала - это полный рефакторинг кода. Денег меньше - рефакторинг каждой лестницы отдельно. Не жалеть денег - приведение кода всех разработчиков к единому решению. После рефакторинга можно заняться исправлением ошибок (а точнее многие ошибки могут быть исправлены уже во время рефакторинг а, и большинство разработчик будет просто знать). И разумеется заняться комментариями и докой
     
  3. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    Возникновение ошибок - нормальная часть рабочего процесса.
    И Ваша ситуация вполне нормальная и часто встречается.

    Код Ваш нужно делить и документировать.

    И лучше всего с этим справятся Ваши разработчики.
     
  4. staircaseMaker

    staircaseMaker Новичок

    С нами с:
    25 фев 2018
    Сообщения:
    17
    Симпатии:
    1
    Спасибо за советы!
    Вообщем-то, именно переписать все проблемные места заново я и планирую. Первую версию системы писал я сам, а дальше я выступал в роли заказчика - ставил задачи программистам, контролировал работу программы. Моя очень серьезная ошибка заключалась в том, что сам код, который пишется, я не проверял - смотрел только поведение системы. Переписать весь код своими силами сейчас я не могу, т.к. много других задач и объем уже очень большой. Вопрос в том, как правильно организовать рефакторинг, чтобы после рефакторинга не получить те же самые проблемы. Попытки переписать код силами тех же программистов, кто его писал (за деньги) ничем хорошим не увенчались. Как оказалось, из 5 человек только один вообще в состоянии писать нормальный код, а остальные скорее инженеры чем программисты.
    Я планирую начать с устранения дублирования и написания универсальных функций. Например, у нас есть 5 серий лестниц и каждая модель строится своим модулем. Во всех моделях есть ступени, с конструктивной сточки зрения они очень похожи (но все же не совсем одинаковые), но в каждом модуле они строятся своей функцией. При этом функции имеют разный интерфейс и выдают результат в разном виде. Как бы Вы посоветовали ввести в проект нового человека для решения такой задачи? И как организовать работу: сразу писать новую универсальную функцию, сначала отрефакторить каждую функцию и потом писать новую, сначала написать тесты, сделать документацию или еще что-то?
     
  5. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    Это я и подразумевал под "делить".
    Когда код разбит на функции, тогда знаешь где искать корни ошибки. Переписывать с нуля ничего не нужно.
     
  6. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    Изучите модели, паттерны, подберите то что вам понятно, сформируйте каркас какой-то абстрактной лестницы код в которой универсален и не должен дублироваться и модули этой лестницы должны принимать аргументы для построения пользовательской лестницы.
     
  7. staircaseMaker

    staircaseMaker Новичок

    С нами с:
    25 фев 2018
    Сообщения:
    17
    Симпатии:
    1
    Переосмыслив свою проблему, я пришел к выводу, что проблема у меня скорее с реализацией, чем с архитектурой. Код разбит на модули, модули на функции, только вот код функций написан плохо. Поэтому я пока склоняюсь к тому, чтобы начать с аудита самого лучшего (с моей точки зрения) модуля, чтобы получить образец, к которому надо привести остальные. Как Вы думаете, как лучше всего это организовать, чтобы польза от этого аудита была максимальной? Код написан на javascript с использованием библиотеки THREE.js, объем того модуля, который я считаю наилучшим в районе 12 тыс строк. И сколько такой аудит может стоить?
     
  8. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Немного сложно представлять что у вас за решение, если честно, как и причину его появления.
    Также представляю производственную компанию в т.ч. стройматериалов (только из топ-100 компаний по шарику), могу сказать, что с объектами (простыми и сложными) у нас работают инженеры в автокадах и 3D-максе, реализуя на выходе не просто 3д-модель, а бим-объект изделия из которого строятся более сложные объекты, и целые здания (в европе только в таком формате принимаются заявки на тендеры, визуализируя таким образом сразу в 3D всей подряды на объект, и все элементы создаваемые разными подрядчиками) . Самому объекту без разницы где он рендерится: это может быть и JS, и что угодно. Судя по тому, что вы описали, у вас реализован сам конструктор моделей на JS и при выпуске изделия на производстве образуются нестыковки?
    --- Добавлено ---
    Вы не знаете сколько он будет стоить и никто это вам тут не назовет. Все что у вас есть, — это цели перед проектной командой. По этому я бы рекомендовал организовать аджайл команду из специалистов, поставить перед командой цели, и самому выступить в роли владельца продукта. Будете двигаться итерациями, на которые попилит процесс лидер команды, разбирая, рефакторя и документируя весь функционал. Главное — это четко проработать цели с вашей стороны и не ошибится с выбором команды и методологии её работы, которой, судя по всему, вы не уделяли должного внимания.
     
  9. staircaseMaker

    staircaseMaker Новичок

    С нами с:
    25 фев 2018
    Сообщения:
    17
    Симпатии:
    1
    CAD программы это упрощение работы конструктора, а не замена человека машиной. Когда мы начинали разработку, ставилась цель полного отказа от ручного проектирования типовых лестниц и полной замены инженеров программой. То есть после того, как подписан договор и с заказчиком согласованы все параметры его лестницы, детали автоматически становятся в очередь на обрабатывающие центры с чпу, куда уже загрузилась автоматически сгенерированная управляющая программа. Но, к сожалению, пока этого достичь не удалось - все проекты приходится проверять человеку перед запуском из-за наличия в них ошибок. Чтобы отказаться от ручной проверки нам надо добиться надежности не менее 99% (сейчас в районе 60%) и, честно говоря, я уже начинаю сомневаться в достижимости такого показателя. А с автокада и солидворкса мы начинали, делали там параметрические модели, даже лиспы (чертовы скобки!!!) писали
     
  10. staircaseMaker

    staircaseMaker Новичок

    С нами с:
    25 фев 2018
    Сообщения:
    17
    Симпатии:
    1
    Всем спасибо за ответы, я почерпнул для себя много нового и совершенно по-другому взглянул на нашу задачу. Для решения нашей проблемы нужны 2-3 толковых программиста. Вот вакансия:
    https://php.ru/forum/threads/ischem-programmista-javascript-udalennaja-rabota-na-polnyj-den.69434/
    Дальше пишите, пожалуйста, в ту тему