Миграция на софтуер C -> Java.

34 отговора 0 прегледа
#1

Миграция на софтуер C -> Java.

Ситуацията е следната:

1. Софтуер писан на C, за DOS, в графичен режим.
2. Трябва да се мигрира от C на Java.
3. Мигрираният софтуер трябва да е на Java, за Android.

Предложете стратегия по която може да стане тази миграция? Какъв е вашият отпит от такова мигриране? Изключено е да се ползват автоматични средства за транслиране, тъй като кодът е доста специфичен и еквилибристиките в C (примерно с адресна аритметика) нямат добро превеждане на Java.

Моят първоначален замисъл е следният:

Фаза едно:

1. Създаване на Java клас за всеки наличен С файл.
2. Написване на всички функции от С файла, като статични функции на съответстващия Java файл.
3. Преработване на всички структори от данни, като класове с публични полета.
4. Използване на C кода, като юнит тест код.

Фаза две:

1. Капсулиране на данните.
2. Преобразуване на статичните методи в обикновени.
3. Реорганизиране на класовете и методите в тях.

Как смятате, колко време ще отнеме подобна миграция, при обем от около 400 000 реда код?

Отговор
в отговор на Гpиro #2

Re: Миграция на софтуер C -> Java.

напиши си виртуалка




NE SUTOR ULTRA CREPIDAM
Отговор
в отговор на zaphod #3

Re: Миграция на софтуер C -> Java.

+1

Отговор
в отговор на Гpиro #4

Re: Миграция на софтуер C -> Java.

Няма превеждане, има пренаписване.

Отговор
в отговор на Гpиro #5

Re: Миграция на софтуер C -> Java.

Най-добре вземете и го пренапишете... от работещ софтуер барабар с кода си е една чудесна спецификация.

Revolution, the only solution,
The armed response of an entire nation
System of a Down P.L.U.C.K.
Отговор
в отговор на Гpиro #6

Re: Миграция на софтуер C -> Java.

и аз гласувам за пренаписване, ако се пише интелигентно може да излезе доста по-малко ЛоК-а(че Ц-то е дървения) а и е добър момент :)

Отговор
в отговор на portal #7

Re: Миграция на софтуер C -> Java.

Някакво много оптимистично преджуркване на 1000 реда на ден - 400 дни :)
Идеята за виртуалка въопще не е толкова лоша :) Още повече скоро гледах емулатор на 386 написан на javascript, подкарващ линукс някъф :)

Отговор
в отговор на Cин Mapмoт #8

Re: Миграция на софтуер C -> Java.

едва ли ще излезе същия брой редове, ооп едно друго, ако има интелект може да се свие доста

Отговор
в отговор на 435 #9

Re: Миграция на софтуер C -> Java.

Да и аз така мисля... едва ли обема код ще е същия от ц към джаба... 3

Ся никога не съм работил порфесионално на Ц, но съм правил подобно нещо от АСП/ВБ към Джаба/ДжСП... всичко се пренаписа, дори се преработи базата.... просото старото се позлваше само да се извлича шпек....

Revolution, the only solution,
The armed response of an entire nation
System of a Down P.L.U.C.K.
Отговор
в отговор на 435 #10

Re: Миграция на софтуер C -> Java.

Едва ли, ама това означава преджуркване на 400000 реда + мислене :) Ако са архаични чудеса на С....

Отговор
в отговор на Cин Mapмoт #11

Re: Миграция на софтуер C -> Java.

е не, трябва някой да знае какво прави приложението, иначе ако трябва да четеш и да мигрираш вече е гърч.

Отговор
в отговор на zaphod #12

Re: Миграция на софтуер C -> Java.

Е то си има написана вече: [линк]

Но човека вика -- Java класове...

_____
The future is already here – it is just unevenly distributed
Отговор
в отговор на Гpиro #13

Re: Миграция на софтуер C -> Java.

Незнам да ти кажа... Изискваш от себе си, при над 100000 линии код да изкараш еквивалентно времево изражение по права линия... Струва ми се, че съответсвието на оценката ще е над "логаритмично"(whatever) и по скоро лавинообразно след изчитане на първите 10% от прочитането на ДОС-овската чудесия. Още повече като ми споменаваш "графичен режим" и се надигат някакви вътрешни вълнения с повръщания от типа "прекъсвания", "досовско прекъсване", "БИОС дрън дрън/ДОС дрън дрън" и прочее :) Тия Ц еквилибристики с адреси са поносими поне :) Вътрешно ще е омазан с зависимости едни с други които изглеждат като хубаво кълбенце с прежда (мрачност: +1, светлинка: -1)

Наистина, пренаписване изглежда добра идея, само "мейк шуур" че имаш самата програма (в компилиран за ДОС вид) с някакви нейни си данни и пусни един (++) джуниър да си играе със самата програма и да чете кода, докато му се изясни (и на теб) поне логиката на "View"-то на стария код... Твоята задача би трябвало да бъде да изясниш контролера паралелно в разговор с Джуниъра докато схванете View + Controller логиката на цялото чудо. Тук му е мястото да направиш първична времева/сложност оценка на транслирането на контролер+вию до новата чекия...

Веднага щом приключите с "разцъкването" на програмката, би трябвало да имате по ясна представа за "Изгледа" (гнусен?) и да кажеш детерминирано колко аджеба би ти отнело, горе-долу :)

Ако имаш 400К код на досовска система, туй дето движи мишката и приема/забранява клавишите сигурно е или някаква световно неизвестна "библиотека" с огромен обем или някаква ад-хок система на самия създател, също с огромен обем... После идва адът на чертаенето и плюенето на битмапи по екрана, би трябвало за досовска програма да е също малък ад. Бози данни по това време има сносни, така че техния "модел" може да е "архаичен", но сигурно няма да отнема много време и код да го оцениш и преведеш.

Нека приемем, че контролер/вию комбото заема около 70% програмен код (юзър/програма, програма/юзър интеракция + чертаене по екрана), значи разцъкването му (ползването му) би трябвало да не отнеме много време, имайки в предвид че това заема около 200К еквивалентен код... Туй би трябвало ДРАСТИЧНО да се смали в андроид системата ако вярваме на НаучноТехническияПрогрес(тм)... Оцени си в проценти свиването на кода, спрямо доверието ти в НТП(тм), и ще можеш да кажеш дума някаква. Модела би трябвало да не подлежи на "компресия" твърде много, ончебончето подсказва нещо като СЯЛ + някаква финна библиотечка за локъл бузъ данни + допълнително лепилце/дъктейп за да не се срути...

Ако има някакъв нетворк код можеш спокойно да го дисмиснеш като аутдейтед и да "слухтите" САМО за вию код при оценката.

Стария модел с логическата персистентна схема (тм) на програмата можеш и да го захвърлиш с лека ръка, като само го ползваш за уточнение и нещо като реферънс поинт за новия, чистак-бърсак Модел(тм) на Андроидската програма. С една дума, "бутончетата", кутийките и положението им в пронстранството е най-важното в крайна сметка... :)

После, като се свърши тази черна и неблагодарна фаза, можеш ти (и джуниъра като "съветник" с ограничени правомощия ;)) да се превключите на съзидателност и да "ъпгрейднете" (омажете?) резултантния мутант, почвайки от модела на първо място :)

Не знам каква точно е схемата на Андроидската Джава (предполагам, че се "разбира" с МъВъЦъ-то доста добре), но май си спомням, че беше МобилеЖДК + Свинг? Свинга май имаше изградени, въплътени концепции от МъВъЦъ-то така, че няма да ти е кой знае колко трудно да мутираш стария код... просто прекъсванията там и каквото друго беше, трябва да се преведат до концепцията Ъбзървър и вместо "прекъсване" ще имаш Observable + Observer за интеракцията м/у Контролер и Вю... нещо такова...

Мда, контролера май ще ти е най-гаден и гнусен за превеждане (усещам го в левия ташак някакси :))
Хепи хънтинг :)

REALITY CHECKS NEVER BOUNCE!
Отговор
в отговор на 2биpи #14

Re: Миграция на софтуер C -> Java.

Пропускаш лекият момент, че двата ОС-а са коренно различни и много малко от наличния код ще става за пряко използване.

Отговор
в отговор на Гойко #15

Re: Миграция на софтуер C -> Java.

Колко ще става зависи от кода. Но в случая с пълно пренаписване нищо няма да става и ще има една огромна дупка от време, в която нищо няма да работи. Никой нормален давач на заплати не би допуснал такъв сляп момент, ако има избор.

_____
The future is already here – it is just unevenly distributed
Отговор
в отговор на 2биpи #16

Re: Миграция на софтуер C -> Java.

Това пак зависи от продукта... в моя случай се радели на "релийзи"... верно то кота 0 до база 1 :) няма нищо.... но после релийзче след релийзче... се стигна до финалания... къдеот имаше пълна функционалност на старото + някой друг нов фийчър... енивей... та и по този път и давачите на пари се успокоиха и клиентите им малко по малко започнаха да позлват новото и преминаха селд това изцяло на него...

Revolution, the only solution,
The armed response of an entire nation
System of a Down P.L.U.C.K.
Отговор
в отговор на 2биpи #17

Re: Миграция на софтуер C -> Java.

има една огромна дупка от време, в която нищо няма да работи

няма 100 лв за машина с дос докато е готова нова версия?

People just don't make sense anymore
Отговор
в отговор на 2биpи #18

Re: Миграция на софтуер C -> Java.

Принципно, ако софта му е достатъчно разделен от платформата (малко вероятно), може директно да компилира по-важните (и сложни) модули и да ги върже през jni с апликейшъна. Но това не е работа за всеки = струва мноо кинти.

Отговор
в отговор на portal #19

Re: Миграция на софтуер C -> Java.

Ако работиш с нормално интелигентни хора всичко е лесно -- и на възложителя можеш да обясниш какво ще се случи, и екипа можете да си планирате всичко, както си трябва. Но не винаги случая е такъв. Примерно доста хора ще се демотивират ако пишат нещо 3 месеца и нямат абсолютно никакъв резултат...

_____
The future is already here – it is just unevenly distributed
Отговор
в отговор на 2биpи #20

Re: Миграция на софтуер C -> Java.

Андроида много се различава от начина на работа на ДОС. Не вярвам, че въобще ще е възможно да се транслира директно.

При писане от нулата има друг проблем, трябва да си някакъв гении за да успееш да изградиш сам цяла система, та дори и да имаш демонстрационна версия на друг ОС.

Отговор