|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
Здравствуйте, уважаемые знатоки! У нас в компании сложилась нехорошая ситуация, с которой надо что-то делать... Хотелось бы услышать мнения людей, сталкивающихся с подобным. Но обо всем по порядку... Я работаю программистом в маленькой компании по разработке ПО. Мы пишем различные программные модули (финансовый, складской и т.д.) для организации и планирования бизнеса (что-то типа 1С, Галактика). Клиентов немного - всего 4. 2 из них крупные, которым нужно постоянно дорабатывать софт, а 2 других - мелкие (ну или можно сказать средние), для которых апгрейд софта требуется, но ЗНАЧИТЕЛЬНО реже. Так вот, суть проблемы заключается в следующем (реальный пример из жизни)... Для одного из маленьких клиентов мы сделали складской модуль. Установили, работает. Затем складской модуль также понадобился и одному из наших крупных клиентов. Но там все не так просто, и его пришлось дорабатывать, чтобы заточить под нужды заказчика (он до сих пор в разработке). Изначально предполагалось, что складской модуль (как впрочем и все остальные) будет один на всех. Соответственно БД тоже должны быть спроектированы по одной схеме. НО! Через пару месяцев звонит маленький клиент (у которого мы склад поставили первым) и просит добавить в один из отчетов доп. поле. Делов-то, как говориться, на копейку, НО! Разработка склада ушла уже далеко вперед! Т.е. изменился не только сам модуль, но и БД (ведь все эти пару месяцев мы вели доработку модуля под нужды другого заказчика). Т.о. нам приходилось каждый раз, когда один клиент хочет изменения в модуле, накатывать ему все изменения БД, которые были сделаны для других, и обновлять exe. И все для того чтобы добавить какое-то поле в отчет (например)! При таком подходе есть ОЧЕНЬ серьезные недостатки: 1. Клиенты боялись обновлений как огня, т.к. накаты базы и обновление exe влекли за собой неотловленные баги. Плюс к этому мог запросто где-то поменяться интерфейс и т.п. Вобщем был просто кошмар! 2. Почему собственно клиент должен получать бесплатно (вместе с новым exe) те же самые дополнительные фишки, которые мы делали для другого клиента, который за них платит? Как-то это неправильно. Он ведь за них платить не будет. И правильно - он ведь их не заказывал. Он хотел только доп. поле в отчете, за которое и заплатит 100р (условно). А у нас порой на накат и связанные с ним проблемы могло уйти пара дней! А кто за них заплатит??? Вобщем, чтобы решить данные проблемы мы решили разделить исходники и БД, которые были бы индивидуальны для каждого заказчика. Это решает проблему пунктов 1 и 2, НО! Появляется новая головная боль! Опять по пунктам: 1. Исправлять найденные ошибки (например, в справочнике товаров) нужно теперь в нескольких местах (сколько копий исходников). 2. Внешний вид одних и тех же модулей может ОЧЕНЬ отличаться для разных заказчиков. Тогда новому заказчику какой демострировать? Непонятно... Вобщем и в том и в том подходах есть минусы. Хотелось услышать ваше мнение по этому вопросу. Как же все-таки более правильно организовывать апгрейд и поддержку софта для нескольких клиентов? P.S.: Интерфейс мы пишем на Delphi, а БД - Oracle. Правда смотрим уже в сторону .NET. Может она чем поможет... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2007, 04:47 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
Как варианты, в очень крупную клетку: модули вынести в DLL и подгружать их с сервера в рабочий каталог с exe. При обращении к этой DLL, проверять версию и заменять старую при необходимости. Каждому юзеру с БД определить только свои DLL. Exe при этом меняется крайне редко, необходимые обновления происходят автоматом. Аналогично можно оставить только один exe, версию менять аналогично, запускается другая прога, сравнивает версию exe с БД, при необходимости её перед запуском заменяет. В зависимости от юзера, включать только необходимые функции. Всё это можно прописать в БД, а в проге например при запуске можно показывать пункты меню. Видел в работе эти два варианта. Первый хорошо подходит для проектов где работает коллектив программистов, код которого формирует свою DLL, да и exe приходится менять крайне редко. Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2007, 10:51 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
mlitkin Интерфейс мы пишем на Delphi, а БД - Oracle. Правда смотрим уже в сторону .NET. Может она чем поможет... чем смена, практически, языка программирования по Вашему может помочь? У Вас отсутствует инфраструктура поддержки жизненного цикла приложений, а Вы шило на мыло меняете. Каждому клиенту нужно только его решение, за которое он заплатил. То, что Вы их начинаете причесывать в едином стиле, естественно, вызывает у них законное недовольство. Прежде чем увеличивать число клиентов нужно заняться все же апгрейдом внутренней структуры разработки, так сказать - своей собственной платформой, которая позволит Вам без лишних хлопот поддерживать множество вариантов приложений. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2007, 11:19 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
Вам нужно ставить процесс управления изменениями и конфигурациями, а также релизами. Посмотрите в сторону ITIL... А также почитайте о таких продуктах как Rational ClearQuest/ClearCase или Borland StarTeam... Borland StarTeam IBM Rational ClearCase 7 IBM Rational ClearQuest 7 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2007, 14:10 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
В ClearCase и StarTeam есть возможность так называемого "бранчевания" программных модулей, то есть разветвления версий одного и того же ПО (как раз ваш вариант с несколькими заказчиками), и также при необходимости - слияния версий и т.д. и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2007, 14:14 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
Big17В ClearCase и StarTeam есть возможность так называемого "бранчевания" программных модулей, то есть разветвления версий одного и того же ПО (как раз ваш вариант с несколькими заказчиками), и также при необходимости - слияния версий и т.д. и т.п. А разве есть системы контроля версий, где нет такой возможности? Если уж подобные системы у автора не используются, то это совсем клинический случай. Но похоже тут в первую очередь организационно-идеологическая проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2007, 14:30 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
Subversion, четыре ветки кода и простенький багтракер. На полдня работы, включая установку и конфигурирование. Это как нужно не любить себя и заказчиков, чтобы пользовать Oracle, но при этом не иметь системы контроля версий... УжОс... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2007, 14:33 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
Александр Гoлдун А разве есть системы контроля версий, где нет такой возможности? Уже, наверное, нет :) Александр Гoлдун Если уж подобные системы у автора не используются, то это совсем клинический случай. Но похоже тут в первую очередь организационно-идеологическая проблема. Да, проблема похоже именно в этом. Но главное - осознана потребность в становлении данных процессов. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2007, 14:54 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
прибавьте к системам версионного контроля механизм автоматической сборки и тестирования проектов (DUnit + ant + cruisecontrol) и значительно облегчите себе жизнь не только в плане управления изменениями, но и отлова ошибок. С другой стороны, вести отдельный бранч по каждому из, допустим, 15 клиентов - уже не очень просто. Согласен с постом автор Прежде чем увеличивать число клиентов нужно заняться все же апгрейдом внутренней структуры разработки, так сказать - своей собственной платформой, которая позволит Вам без лишних хлопот поддерживать множество вариантов приложений. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2007, 18:41 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
Alex_Tomsмодули вынести в DLL Мы так в свое время и собирались сделать, но тогда возникла какая-то проблема с передачей сессии БД в DLL (а сессия у нас одна на все приложение) и пришлось все делать в одном exe. Правда с проблемой я лично не разбирался, т.к. в то время еще не работал в этой компании. iscrafmчем смена, практически, языка программирования по Вашему может помочь? Тем, что C# изначально спроектирован так, что там просто необходимо писать модульно. А поскольку мы периодически переписываем наш софт с нуля (где-то раз в 2-3 года), то можно было бы переписать его уже под .NET. Кроме того есть необходимость в доступе к данным по интернету, в чем может помочь ASP.NET. Плюс нужно еще писать софт для Windows CE. guest_20040621Это как нужно не любить себя и заказчиков, чтобы пользовать Oracle, но при этом не иметь системы контроля версий... А причем здесь система контроля версий и Оракл? Система контроля версий контролирует исходники Delphi (или др. языка), а сервер БД то здесь причем? Вообще, для контроля версий мы используем FreeVCS. Правда опцией Branch projects мы никогда не пользовались... И все же я никак не могу понять чем может помочь разделение проектов на ветки... Вот к примеру ситуация: один из заказчиков захотел новый вид справочника товаров (зеленый фон грида вместо clWindow), другим естественно это не надо... Что мы делаем? Отделяем файл исходников с главной формой справочника в отдельную папку (т.е. ветвь) и делаем там зеленый грид. Затем, к примеру, мы обнаруживаем, что запрос на выборку товаров неоптимален и меняем его. Но менять уже придется и в основном юните товаров, и в каждой ветке. Так? Двойной edit не есть хорошо. Или я чего-то не понимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2007, 07:00 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
Alex_TomsКак варианты, в очень крупную клетку: модули вынести в DLL и подгружать их с сервера в рабочий каталог с exe.Это всё полумеры. Нужно просто вести разные ветки проектов для разных клиентов. Продукт у mlitkin не тиражный, заказной, поэтому это вполне оправдано. Для тиражного собирают пожелания от клиентов и делают следующую версию, их учитывающую, для всех. mlitkinА причем здесь система контроля версий и Оракл? Система контроля версий контролирует исходники Delphi (или др. языка), а сервер БД то здесь причем?А сервер БД система контроля версий не контролирует??? Это очень плохо. Даже если не нужно плодить ветки для разных клиентов, работать с VCS удобно. mlitkinИ все же я никак не могу понять чем может помочь разделение проектов на ветки... Вот к примеру ситуация: один из заказчиков захотел новый вид справочника товаров (зеленый фон грида вместо clWindow), другим естественно это не надо... Что мы делаем? Отделяем файл исходников с главной формой справочника в отдельную папку (т.е. ветвь) и делаем там зеленый грид. Затем, к примеру, мы обнаруживаем, что запрос на выборку товаров неоптимален и меняем его. Но менять уже придется и в основном юните товаров, и в каждой ветке. Так? Двойной edit не есть хорошо. Или я чего-то не понимаю?Если деление на файлы достаточно мелкое, то отделяете вы только визуализацию, а выборка остаётся нетронутой. И вообще, надеюсь, у вас запросы прямо в коде дельфей не прописаны??? mlitkinЧто мы делаем? Отделяем файл исходников с главной формой справочника в отдельную папку (т.е. ветвь) и делаем там зеленый грид.Нормальные VCS-системы, вообще-то, поддерживают не только бранч, но и собственно деление на ветки (варианты, версии) проектов. Это делается для: 1. поддержки нескольких клиентов 2. поддержки плавного внедрения версий К примеру, что вы делаете, если нужно срочно, немедленно, отправить клиенту(там) фикс, а файлы, где он должен быть, находятся в процессе изменения для новой версии? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2007, 10:05 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
alexeyvgА сервер БД система контроля версий не контролирует??? Это очень плохо. Дело в том, что у нас 1 человек занимается всей базой, поэтому система контроля версий для скриптов базы не нужна. alexeyvgИ вообще, надеюсь, у вас запросы прямо в коде дельфей не прописаны??? Ээээ... Ну вообще-то да. Как раз в dfm и pas-файлах запросы хранятся... А что это очень плохо? Сейчас так уже никто не делает? :) alexeyvgНормальные VCS-системы, вообще-то, поддерживают не только бранч, но и собственно деление на ветки (варианты, версии) проектов Т.е. бранч и деление на ветки - это не одно и то же? Что-то я толком не пойму тогда, что это за "бранч" такой и как он физически функционирует? Надо будет почитать об этой функции VCS-систем... alexeyvgК примеру, что вы делаете, если нужно срочно, немедленно, отправить клиенту(там) фикс, а файлы, где он должен быть, находятся в процессе изменения для новой версии? Вот и приходится доводить все сначала до логического завершения, а потом только отправлять фикс уже в целом новом exe. Это конечно бред, сам понимаю... Потому и обратился сюда за советом как лучше организовать процесс разработки и поддержки ПО. Может кто что посоветует почитать по этому вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2007, 10:36 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
mlitkinДело в том, что у нас 1 человек занимается всей базой, поэтому система контроля версий для скриптов базы не нужна.Система контроля версий нужна не только для разделения проекта между людьми, но и просто, как ни банально, для контроля версий :-) mlitkinЭэээ... Ну вообще-то да. Как раз в dfm и pas-файлах запросы хранятся... А что это очень плохо? Сейчас так уже никто не делает? :)Ну, вроде лучьше, IMHO, делать запросы в процедурах, а в клиенте только их вызовы оставить. mlitkinТ.е. бранч и деление на ветки - это не одно и то же? Что-то я толком не пойму тогда, что это за "бранч" такой и как он физически функционирует? Надо будет почитать об этой функции VCS-систем...бранч - это просто копия файла в другое место. А ветка - это копия файла в том-же месте, отмеченая специальным признаком. К примеру, у вас есть текущая стабильная версия 2.1 Вы начали делать версию 2.2 Если клиенту нужно отправить фикс, делаете ветку нужного файла с названием 2.1 (fix1), и при сборке собираете билд из версии 2.1 с перекрытием 2.1 (fix1). А над версией 2.2 люди продолжают работать. Может быть, FreeVCS это не поддерживает, но системы типа Subversion должны. MS VSS это не поддерживает, вот мы тоже мучаемся :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2007, 11:38 |
|
Как организовать поддержку ПО?
|
|||
---|---|---|---|
#18+
mlitkin И все же я никак не могу понять чем может помочь разделение проектов на ветки... Вот к примеру ситуация: один из заказчиков захотел новый вид справочника товаров (зеленый фон грида вместо clWindow), другим естественно это не надо... Что мы делаем? Отделяем файл исходников с главной формой справочника в отдельную папку (т.е. ветвь) и делаем там зеленый грид. Затем, к примеру, мы обнаруживаем, что запрос на выборку товаров неоптимален и меняем его. Но менять уже придется и в основном юните товаров, и в каждой ветке. Так? Двойной edit не есть хорошо. Или я чего-то не понимаю? Все правильно. Вы делаете бранч (ветвление) только одного модуля (pas+dfm) и поддерживаете две ветки - в одной делаете зеленый фон, в другом - пусть ничего не делаем. Затем оказывается, что "запрос на выборку товаров неоптимален и нужно поменять его"... Делаете это в любой из веток данного модуля (например, где у вас зеленый грид). А затем делаете слияние (Merge) этих веток. После чего получиться следующая ситуация: модуль с зеленым гридом остался тем же, а второй модуль изменился и получил следующий номер бранч-версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2007, 11:45 |
|
|
start [/forum/topic.php?fid=37&fpage=13&tid=1555722]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 247ms |
total: | 374ms |
0 / 0 |