История одного реинжиниринга или RNAInSpace v.1.3. Demo

в 3:30, , рубрики: биоинформатика, кибернетика, Проектирование и рефакторинг, реинжиниринг, сворачивание рнк, теория игр, Фолдинг белков, метки: , , , , ,

Тут недавно был такой пост Правила разработки сложных систем. История одного проекта, где автор описывает как он удачно «копался» в одном проекте, а потом все выкинул и переписал с нуля.

Я попробую рассказать обратную историю. Тут около месяца назад я не удачно попытался представить демо версию одной своей разработки (см. Часть №7. RNAInSpace — программное обеспечение для полуавтоматического конструирования РНК в пространстве).

Оказалось, что у скачивающих не работает один модуль, ответственный за показ графики. В двух словах проект RNAInSpace — это программное обеспечение для полуавтоматического конструирования РНК в пространстве. Обеспечивает 3D визуализацию структуры РНК, позволяет её изменять и с помощью связи с модулем RNAWorld позволяет автоматизировать некоторые этапы сворачивания РНК.

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

Но эту статью можно обсуждать и не зная предметной области, кстати заодно проверим можно ли судить о качестве ПО не зная семантики предметной области (я утверждаю, что можно).

Так вот эта 3D визуализация (модуль RNAInSpaceDisplay) и не работала на некоторых компьютерах. Для реализации графики я использовал существующий проект VMD 1.8.7.

Ниже история о том как я адаптировал VMD 1.8.7 под свои нужды.

Вначале давайте проверим работает ли у вас этот проект, скачать его можно тут . Комментарии как его использовать описаны в статье Часть №7. RNAInSpace — программное обеспечение для полуавтоматического конструирования РНК в пространстве. Единственно, добавилась директория RNAInSpaceDisplay, где находится .exe. Если графика у вас не запустилась, то запустите этот .exe — мне важно знать или дело в связи C# с С++, или дело в графике. Только предупреждаю RNAInSpaceDisplay.exe не имеет выхода (снимаем задачу через диспетчер задач).

Для интересующихся темой — давайте тут же и подискутируем о развитии этого ПО и проекта в целом.

А ниже я расскажу немного только о модуле графики.

Изначально VMD 1.8.7 написан на С++ и содержит порядка 85000 строк чистого кода (без пустых строк, комментариев и прочего). После моей адаптации код содержит 25000 строк (порядка 100 файлов) — в общем тоже не мало.

Адаптировал я во многом машинально — выкидывал весь пользовательский интерфейс от VMD (который достаточно убогий), кроме окна графики, убирал ветки для операционок кроме Windows (другие поддерживать не собираюсь), ну и все что тянуло. Надо сказать код там ужасный, с бородой, написан в общем в ООП, но все сильно переплетено, и завязано на пользовательский интерфейс от VMD.

В общем качество кода VMD, а писали его в University of Illinois, плохое. Но у него один жирный плюс — работает и компилится под Windows без особых проблем.

Конечно надо было при адаптации привести в «божеский вид» — засунуть в проект Microsoft Visual C++ 2010, написать класс-оболочку для вызова всего нужного, и сделать .dll, которую потом использую из C#.

Реинжиниринг занял где-то неделю в первой версии, и еще неделю недавно. Причем 50% времени я форматировал код (пробелы заменял на табы — это полуавтоматически делал сам редактор, мне же приходилось расставлять скобочки, т.к. не перевариваю стиль, когда скобки не находятся одна под другой).

Вообще-то я так и не понял, почему на ряде машин не работает. Я с тех времен пересел на Windows7 x64, с WindowsVista x32. Теперь протестировал на этих двух операционках — у меня все работает.

Но походу дела я составил UML диаграмму связей классов. Её то и предоставляю для обсуждения.

История одного реинжиниринга или RNAInSpace v.1.3. Demo

Здесь в большом разрешении, чтобы можно разглядеть детали

Это то лучшие, что получилось после реинжиниринга :) было много хуже. Но как видим — и так достаточно ужасно. Почему и как это исправить? Давайте на эту тему и подискутируем. Но главное (!) все это не повод выкидывать и переписывать с нуля.

Автор: tac


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js