Какие успешные преобразования/переписывания программного обеспечения вы совершили?

StackOverflow https://stackoverflow.com/questions/592350

  •  09-09-2019
  •  | 
  •  

Вопрос

Какие успешные преобразования/переписывания программного обеспечения вы совершили?Какие языки и фреймворки задействованы в этом процессе?Насколько большим было рассматриваемое программное обеспечение?Наконец, чему вы научились больше всего, участвуя в этом процессе?

Это связано с этим вопрос

Это было полезно?

Решение

Здесь я буду использовать слово «самый заумный»:

  • Перенсил симулятор 8080, написанный в Fortran 77 от Decsystem-10, работающего Tops-10 до мэйнфрейма IBM 4381, работающего с VM/CMS.

Другие советы

Я переписал 20 000 строк Perl, чтобы использовать «use strict» в каждом файле.Пришлось добавлять «мой» везде, где нужно, и исправлять ошибки, обнаруженные в процессе.

Самый важный урок, который я извлек из этого: «Это всегда занимает больше времени, чем вы думаете».

Мне пришлось сделать все сразу за одну ночь, чтобы другие программисты не писали одновременно новый, нефиксированный код.Я думал, что все пройдет быстро, но этого не произошло, и я все еще работал над этим в 6 утра следующего дня.

Однако я завершил его и проверил до того, как все остальные приступили к работе!

Я переписал большое веб-приложение Java в приложение ASP.Net для риэлторской компании по разным причинам.

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

Это главная причина, по которой переписывание так сложно:клиенту это кажется таким простым («Просто переделай то, что у меня уже есть, и добавь кое-что»).

Самым крутым для меня, я думаю, был порт MAME на iPod.Это был отличный опыт изучения встроенного оборудования, и мне пришлось работать со многими замечательными людьми. Официальный сайт.

Я переписываю систему управления внутренними проектами на более стандартную модель MVC.Он находится в стеке LAMP (PHP), и я близок к первой вехе.

В настоящее время я извлек из этого урок: насколько простой кажется программа вначале, и я старался не усложнять ее до тех пор, пока в этом не возникнет необходимость.

Пример: сначала я запрограммировал все функции (как будто я был администратором), а затем, когда с этим разобрались, добавил сложность наличия ограничений (уровни пользователей и т. д.).

Я портировал, перепроектировал и переписал программу MS-DOS C++ объемом 30 000 строк в программу Java Swing аналогичной длины, но гораздо более полнофункциональную и удобную.

Я научился никогда не соглашаться на другую работу, связанную с C++ или Java.

Я портировал клиент-серверное приложение Powerbuilder размером в пару сотен экранов в приложение ASP.NET (C#).

Из-за проблем с производительностью и удобством обслуживания за предыдущий год мне пришлось переместить тонну встроенного SQL из сценариев Powerbuilder в хранимые процедуры.

Хотя это заставило бы многих из вас поморщиться, наличие большого количества бизнес-логики в базе данных означает, что приложение Powerbuilder было относительно «легким», и когда мы создавали интерфейс .Net, оно могло использовать преимущества кодовой базы SQL и иметь множество функций уже построено и протестировано.

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

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

Мы хотели использовать файлы данных XML вместо структурированных текстовых файлов.Исходный код был довольно устаревшим, и его было сложно поддерживать.Мы заменили этот инструмент комбинацией сценариев XSLT и служебной библиотеки.Для библиотеки утилит мы могли бы использовать некоторый код из старого инструмента.

В результате все 20 приложений теперь могли использовать либо устаревший текстовый формат файлов, либо новый формат на основе XML.Мы также предоставили инструмент для преобразования старых файлов данных в новые файлы данных XML.

После выпуска одной или двух версий мы решили, что больше не будем поддерживать старый текстовый формат, и каждый сможет конвертировать свои данные в XML.

Нам почти не пришлось выполнять преобразования вручную,

Основное приложение компании преобразовано из предстандартного C++ в стандартный C++.У нас была сделка на несколько миллионов долларов при условии, что она заработает на AIX, и, изучив ее, мы решили, что переход на стандартный C++ будет таким же простым, как переход на традиционный C++ от IBM.

Я не знаю количества строк, но исходный код занимал сотни мегабайт.

Для этого мы использовали стандартные инструменты Unix, включая vi и различные компиляторы.

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

Я думаю, что мой главный вывод был:Не слишком умничайте с кодом на языке, который еще не стандартизирован или который может измениться неожиданным образом.Нам пришлось немало покопаться в некоторых хитроумных адаптациях/злоупотреблениях потоками C++.

Десять лет назад я руководил командой, которая конвертировала CAD-систему из DOS в Windows.Используемая версия DOS библиотеки домашнего пивоварения для рисования графики версия Windows использовала MFC.На момент преобразования программное обеспечение содержало около 70 000 строк кода C.Самое важное, что мы узнали в процессе, — это сила абстракции.Все непереносимые процедуры, специфичные для конкретного устройства, были изолированы в нескольких файлах.Поэтому было относительно легко заменить вызовы библиотеки на базе DOS, которая выполнялась бы путем прямого доступа к буферу кадра, вызовами Windows API.Аналогично, для ввода мы просто заменили цикл событий, проверяющий события клавиатуры и мыши, на соответствующий цикл событий Windows.Мы продолжили нашу политику изоляции непереносимого кода (на этот раз Windows) от остальной части системы, но пока не считаем это особенно полезным.Возможно, однажды мы перенесем систему на Mac OS X и снова будем благодарны.

Несколько.Но я упоминаю один.

Это был инструмент моделирования производительности.Частично Delphi 1, частично Turbo Pascal.Его нужно было переписать, иначе он не выживет.Итак, мы начали как команда из двух человек, но до конца дожил только я.И я был готов раньше срока ;-).

Несколько вещей, которые мы сделали:

  • Сделайте его мультимодельным.В оригинале было много глобальных переменных.Я удалил их все, и мультимодель было легко адаптировать.
  • Расширенные сообщения об ошибках.Нажмите на сообщение и получите помощь.
  • Множество графиков и диаграмм.Все кликабельно, можно развернуть.
  • Моделирование.Меняйте параметры с течением времени и посмотрите, на сколько хватит текущей конфигурации.

Мы действительно сделали это чисто, и в конце концов это окупилось сторицей.Такой большой опыт обучения.

Переписал систему для компании, которая обрабатывает юридические счета — исходная система представляла собой чудовище VB, не имевшее представления о хороших принципах ОО — все перемешалось.HTML выполнял SQL, а SQL писал HTML.Большая его часть представляла собой механизм настраиваемых правил, который использовал для правил что-то вроде XML.

Две команды переписали проект, что заняло около 9 месяцев.Одна команда занималась веб-интерфейсом и внутренним рабочим процессом, а другая команда (в которой я работал) переписала механизм правил.Новая система была написана на C# и сначала прошла тестирование.Когда мы закончили, добавить новые правила в систему было очень просто, и все это можно было протестировать.Попутно мы делали такие вещи, как перевод компании с VSS на SVN, реализацию непрерывной интеграции, автоматизацию развертывания и обучение других разработчиков TDD и другим практикам Scrum/XP.

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

Сочетание крупномасштабных (сквозных) тестов с комплексными модульными и интеграционными тестами очень помогло.

vBulletin, написанный на PHP, преобразован в C#/Asp.NET.Я хорошо знаком с обоими языками, но PHP, несомненно, является победителем в создании этого программного обеспечения.Самой большой проблемой была необходимость создать C#-эквивалент PHP eval() для вызова шаблонов.

Это была моя первая попытка совершить конверсию.Я понял, что мне нужно больше опыта работы с C# и что написать его с нуля иногда проще.

Я преобразовал динамический процесс сборки, полностью написанный на Perl, в решение C#/.Net, используя механизм рабочего процесса, разработанный моим коллегой (который все еще находился в бета-версии, поэтому мне пришлось внести некоторые усовершенствования).Это дало мне возможность добавить в процесс сборки функции отказоустойчивости и аварийного переключения.

Прежде чем вы спросите: нет, Microsoft Workflow-Foundation нельзя использовать, поскольку вы не можете динамически изменять процесс во время его выполнения.

Что я выучил:

  • ненавидеть Perl-разработчика
  • оптимизация процессов с использованием wf-движка
  • стратегии отказоустойчивости и аварийного переключения
  • некоторые настройки C# ;)

В итоге было охвачено около 5-6 тысяч (включая wf-движок) источников LoC из 3 200 LoC Perl-файлов.Но это было весело – и в итоге намного лучше ;)

Преобразование теоретически переносимого кода C в теоретически переносимый код C для разных архитектур для поддержки замены оборудования, которая экономит компании X долларов на единицу.

Размер варьируется — это обычная потребность, я делал как маленькие, так и большие проекты.

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

Модель, написанную на Fortran 77 (несмотря на то, что она была написана в 90-е годы), перенесена на C/Java, поскольку оригинал работал только с небольшими наборами данных.Я научился любить обозначение большой буквы О после того, как несколько раз объяснял, почему простое перемещение всей таблицы данных в память в начале программы не приведет к масштабированию.

Миграция программного обеспечения миссии бомбардировщика-невидимки B-2 с JOVIAL на C. 100% полностью автоматизированное преобразование.Серьезно!

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

Видеть Набор инструментов для реинжиниринга программного обеспечения DMS.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top