|
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 27
|
|
Архитектурой инженерной программы25.02.2018, 17:35. Показов 1810. Ответов 29
Метки нет (Все метки)
Здравствуйте, уважаемые коллеги!
Помогите, пожалуйста, советом, как решить проблему с архитектурой приложения. Краткая предыстория проекта: мы производственная компания, занимаемся производством лестниц для частных домов по индивидуальному проекту. У нас есть система автоматизированного проектирования (сапр). Система сделанная в виде веб-приложения, 3D модель лестницы строится с использованием библиотеки three.js. Система хаотично росла из простенького онлайн калькулятора в течение нескольких лет. Разработка велась командой из 5 удаленных программистов, каждый прорабатывал свою модель лестницы. Их работу на уровне кода никто не проверял, проверялась только итоговая работа системы. В итоге сейчас система полностью написана, но на выходе каждая вторая спроектированная лестница ошибки: где-то отверстия не совпадают, где-то детали пересекаются между собой, где-то часть деталей на модели есть, а в спецификацию не попали и т.п. На уровне кода система разделена на ядро, содержащее модули визуализации, взаимодействия с пользователем, работы с базой и т.п. и конструкторские модули, которые непосредственно создают модель лестницы (отдельный модуль для каждой серии лестниц, всего 8 серий). Проблема, которую надо решить, именно в конструкторских модулях. По-хорошему, чтобы устранить технические ошибки, надо проверить алгоритм построения модели на уровне кода. Но совокупный объем конструкторских модулей больше 300 тысяч строк, комментариев в коде нет, документации нет, везде встречаются “магические цифры”, которые непонятно откуда взяты. Кроме того, так как разные модули писались разными программистами, одна и та же задача везде решается по-разному и дублирование кода просто катастрофическое. Система уже год эксплуатируется, но все результаты работы системы перед запуском в производство вручную проверяются и дорабатываются инженерами на производстве. Обнаруживаемые ошибки исправляются в коде, но, такое ощущение, что исправление ошибок часто порождает новые ошибки в других местах. Мне бы хотелось получить от опытных разработчиков какие-то советы, что теперь со всем этим можно сделать, чтобы система наконец заработала нормально. Толковые детальные консультации мы готовы оплатить.
0
|
|
| 25.02.2018, 17:35 | |
|
Ответы с готовыми решениями:
29
задача по инженерной графике Является ли специальность радиофизика инженерной? Функция разбора вещественного числа в инженерной форме |
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||
| 25.02.2018, 18:06 | |||
|
В посте обозначено две задачи/проблемы:
После достаточного покрытия тестами у разработчика сформируется некоторое общее представление о системе, и дальше уже можно будет четче сформулировать, какие проблемы есть в коде. Составить конкретный список багов, определить, какие из них — частные ошибки, а какие — системные проблемы, которые нужно решать на уровне архитектуры. Серебряной пули нет. Нужно набраться терпения и методично разгребать эти авгиевы конюшни.
0
|
|||
|
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 27
|
|
| 25.02.2018, 18:32 [ТС] | |
|
Идея с тестами очень хороша, но я не смог придумать, как ее применить к нашей системе. Суть ошибок, как правило, заключается в неправильном (с производственной точки зрения) построении модели. Вот пример ошибки:
а правильно вот так При этом ошибок в консоли нет, пересечения объектов нет и как именно программным путем можно определить, что здесь есть ошибка, не понятно. Вообщем-то, первую версию системы писал я сам, а дальше я выступал в роли заказчика - ставил задачи программистам, контролировал работу программы. Моя очень серьезная ошибка заключалась в том, что сам код, который пишется, я не проверял - смотрел только поведение системы. Переписать весь код своими силами сейчас я не могу, т.к. много других задач. Вопрос в том, как правильно организовать рефакторинг, чтобы после рефакторинга не получить те же самые проблемы.
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||
| 25.02.2018, 18:54 | |||
|
Пока что проблема сформулирована как «код неподдерживаемый и содержит ошибки». Это слишком общая постановка, чтобы были конкретные рекомендации. Желательно, чтобы с кодом работал человек не со стороны — хоть какая-то надежность. И гарантий никто не даст. Отсутствие проблем после рефакторинга зависит от запущенности проекта, квалификации специалиста, внешних факторов (в сжатые сроки из-под палки результат редко получается качественным) и еще каких-нибудь факторов, которые я не учел.
0
|
|||
|
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 27
|
||
| 25.02.2018, 20:57 [ТС] | ||
|
Попытки переписать код силами тех же программистов, кто его писал (за деньги) ничем хорошим не увенчались. Как оказалось, из 5 человек только один вообще в состоянии писать нормальный код, а остальные скорее инженеры чем программисты.
0
|
||
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
|||
| 26.02.2018, 15:09 | |||
|
Что из себя представляет интерфейс модулей?
0
|
|||
|
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 27
|
||
| 26.02.2018, 18:46 [ТС] | ||
Модули написаны на javascript в функциональном стиле. Код построен по принципу множества условий, в зависимости от которых детали лестницы строятся определенным образом. Проблемы возникают от того, что либо нужное условие не срабатывает, либо нужного условия вообще нет. Лестница строится на основе параметров и не меняется от действий пользователя (у модели нет никакого поведения, она статична). В среднем, в зависимости от модели, лестница определяется 350-400 параметрами. Часть параметров непрерывные (например, ширина ступени может быть любой в диапазоне от 100 до 400), часть дискретные (выбор направления поворота (2 варианта), типа ограждения (8 вариантов) и т.п.) Проверять надо модель, которая строится браузером через three.js. В зависимости от сложности, модель строится до 5 секунд на компьютере средней производительности. Проблемная часть полностью клиентская, на сервере нет технической логики. Сейчас тестирование происходит так: в базу сохранены несколько сотен конфигураций. Инженер их последовательно открывает и визуально проверяет модель. Как бы Вы посоветовали организовать автоматические тесты?
0
|
||
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
|||||
| 26.02.2018, 19:06 | |||||
|
0
|
|||||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||
| 26.02.2018, 19:27 | |||
|
Архитектура уже есть, поскольку есть разбиение на модули. Качество же интерфейсов вскроется при покрытии тестами — неудачные интерфейсы покрывать тестами будет совсем сложно или невозможно. Например, если функция модуля вызывается только ради вычислений и побочного эффекта (отображения результата), то можно не тратить время на покрытие тестами, а рефакторить, разделяя данные и представление. Повторюсь: чтобы это обнаружить, нужно начать делать. Или хотя бы вдумчиво прочитать интерфейсы. Еще процессный момент: у вас есть багтрекер? Если нет, то нужно завести. И пусть все, кто обнаруживает баги, репортит их в формате «Шаги для воспроизведения, ожидаемое поведение, фактическое». Когда наберется список багов, их можно будет приоритезировать, определить самые критичные — с них и начать исправления. К этому моменту тесты уже должны быть. Или же исправление каждого бага должно сопровождаться написанием теста, покрывающего случай. Пока идет этот процесс, новых людей к проекту лучше не подключать — будут только задерживать. Спустя какое-то время у задействованного разработчика сформируется общее видение системы и понимание: какие есть системные проблемы, а какие проблемы — частные. Когда системные проблемы будут решены, а проект будет в том состоянии, в котором понятно, как в нем писать более качественный код, можно подключать других разработчиков, на этом этапе вероятность ошибки будет меньше. Под «как писать код» я понимаю либо набор продуманных интерфейсов, либо набор базовых библиотек, использование которых позволит разработчикам говорить на одном языке и переиспользовать код, либо, в крайнем случае, образец «как надо».
0
|
|||
|
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 27
|
||||||
| 27.02.2018, 13:49 [ТС] | ||||||
|
0
|
||||||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|||
| 27.02.2018, 14:38 | |||
|
Подсказать относительно того, какие проверки реализовать в тестах, сейчас не смогу. Сам разрабатывал систему, в которой для точной проверки результата фактически нужно было реализовать алгоритм получения этого результата. На первой итерации работали с набором эталонных результатов. Все, как и сказал выше — подготовка стартового набора тестов заняла относительно немного времени, но поддержка была сложной. Тем не менее, тесты оказались полезны и спасали некоторое время. Потом написали более честные проверки.
0
|
|||
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
|||
| 27.02.2018, 15:01 | |||
|
Затем для каждой детали, начиная с самых мелких, написать отдельную функцию. И для этой функции хотя бы несколько тестов, которые проверяют, что при неких фиксированных параметрах получаются правильные объекты. У меня сложилось впечатление (хотя информации недостаточно), что написать эту подсистему (конструкторские модули) с нуля будет дешевле, чем исправлять уже существующую. Плюс в том, что можно это начать делать, не затрагивая работоспособность системы в целом (добавить ещё один конструкторский модуль). Сначала написать сверху-вниз вызовы функций заглушек (опираясь на знания предметной области и структуру модели на выходе). Затем идти снизу-вверх, реализуя функции и сразу покрывая их модульными тестами (предположительно что-нибудь типа QUnit). В процессе, возможно, будут копироваться некоторые куски существующего кода. Главное избегать в дублирования кода в пределах нового модуля. По возможности избегать вложенных if. Стараться, чтобы любая функция отвечала за что-нибудь одно и умещалась на 1-2 экрана. Добавлено через 4 минуты
0
|
|||
|
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 27
|
||
| 27.02.2018, 15:38 [ТС] | ||
|
По поводу моего основного вопроса: я пока склоняюсь к тому, чтобы начать с аудита самого лучшего (с моей точки зрения) модуля, чтобы получить образец, к которому надо привести остальные. Как Вы думаете, как лучше всего это организовать, чтобы польза от этого аудита была максимальной? Код написан на javascript с использованием библиотеки THREE.js, объем того модуля, который я считаю наилучшим в районе 12 тыс строк. Добавлено через 14 минут И сколько может стоить такой аудит?
0
|
||
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
|||
| 27.02.2018, 15:40 | |||
|
Видимо, существует какая-то информация, которая является для Вас привычной и поэтому кажется Вам очевидной. А мне не хватает этой информации, чтобы понять причину проблемы.
0
|
|||
|
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 27
|
|||
| 27.02.2018, 15:59 [ТС] | |||
|
И таких условий огромное количество и не все они заранее известны. То есть надо сначала написать модуль, поиграться с ним при разных параметрах, выцепить сочетания параметров, при которых появляются косяки (в примере со ступенями это вылезание уголка из под ступени) и добавить в код условия, не допускающие возникновения этих косяков. Проще говоря, сложная и заранее не формализованная бизнес-логика. А если учесть еще и то, что все эти модели лестниц мы разрабатываем сами и идет постоянный процесс улучшения конструкции, поддерживаемость кода становится очень важной
0
|
|||
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
||||
| 27.02.2018, 18:09 | ||||
|
Функцию желательно написать без вложенных if (часто вложенность можно уменьшить за счёт инвертирования условия и/или изменения порядка проверки условий). Размер уголка выбирается без if - поиском по массиву пар. Возможно, потребуются различные функции для создания уголков различных типов. Возможно, специальная функция для отображения типов ступеней на типы уголков. И так далее.
0
|
||||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 05.03.2018, 20:29 | |
|
staircaseMaker, Вариант решения задачи средствами промышленных САПР - т.е. параметризируемых типовых элементов/сборок c заданием исходных данных и выводом результатов через API не рассматривали? Если рассматривали то почему не подошел?
0
|
|
|
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 27
|
||
| 06.03.2018, 09:50 [ТС] | ||
|
Мы сначала пытались реализовать нашу задачу на платформе автокада, писали библиотеки и макросы для построения моделей из деталей этих библиотек (lisp). Но, во-первых, сам автоад стоит 1000$ на каждую машину (а нам надо 20 пользователей), очень геморная работа с базой данных на сервере, колоссальные проблемы с пользовательским интерфейсом (убогие dcl окна несравнимы с возможностями html+css), да и сам ископаемый autoLisp несравнимо более убогий чем javascript И, что самое главное, использование автокадовской оболочки не дает в нашем случае вообще никаких преимуществ перед нашей собственной оболочкой написанной на three.js, т.к. все проектирование выполняется полностью автоматически и пользователю не надо что-либо чертить. Зато веб-приложение обладает целой массой преимуществ при развертывании и поддержке перед десктопным
0
|
||
|
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 06.03.2018, 12:24 | |||
|
которые помещаются в объем кода порядка 10 тыс строк. Т.е. насколько вижу наиболее логичный вариант - солид или его аналог на сервере, конструкторская часть и мост с WEB посредством API и WEB интерфейс у пользователей. При этом проблем с 5-ю сырыми геометрическими движками, делающими одно и то же, точно не будет, а соответственно упростится и реализация каждого типа лестницы.
0
|
|||
|
0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 27
|
|||
| 06.03.2018, 14:11 [ТС] | |||
|
Да и зачем вообще может быть нужна для подобной задачи cad система (ну, конечно, если нет задачи освоить как можно больший бюджет)?
0
|
|||
| 06.03.2018, 14:11 | |
|
Помогаю со студенческими работами здесь
20
Разобраться с Архитектурой Головоломка с архитектурой приложения История создания и развития умных домов и АСУ инженерной инфраструктуры Контроллеры с фон неймановской архитектурой
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|