Сколько времени и усилия проект должен провести на обратной совместимости? [закрытый]

Ответ

После небольшого поиска у меня получилось следующее: Сервер:

 output$Imagen <- renderImage({
      if(ratingGiver() > 9){
        Leg <- "www/5stars.png"
      } else if (ratingGiver() > 8) {
        Leg <- "www/45stars.png"
      }else if (ratingGiver() > 7) {
        Leg <- "www/4stars.png"
      }else if (ratingGiver() > 6) {
        Leg <- "www/35stars.png"
      }else if (ratingGiver() > 5) {
        Leg <- "www/3stars.png"
      }else if (ratingGiver() > 4) {
        Leg <- "www/25stars.png"
      }else if (ratingGiver() > 3) {
        Leg <- "www/2stars.png"
      }else if (ratingGiver() > 2) {
        Leg <- "www/15stars.png"
      }else if (ratingGiver() > 1) {
        Leg <- "www/1stars.png"
      }else{
        Leg <- "www/0byebitchgone.png"
      }
      list(src=Leg, height = 90, width = 380)

    }, deleteFile = FALSE)

Тело:

imageOutput(outputId="Imagen")
8
задан Shalom Craimer 9 February 2009 в 10:53
поделиться

5 ответов

Клиентура является ключевой в определение, необходимо ли поддерживать большую проблему обратной совместимости.

В основном необходимо оценить это как любые другие нефункциональные требования, которые необходимо реализовать, и необходимо тщательно указать то, что включено в функцию "обратной совместимости":

  • Совместимость API. Это означает, что последующие версии библиотеки обеспечивают тот же API, который делают предыдущие версии, таким образом, программы, записанные против предыдущей версии, все еще смогут скомпилировать и работать с новой версией. В дополнение к фактическому разбрасыванию тех же функций это также подразумевает, что те функции, все делают то же самое в более новой версии, которую они сделали в более старых
  • Двоичный интерфейс приложений, или ABI, совместимость. Это означает, что обратная совместимость сохраняется на уровне двоичного объектного кода, произведенного при компиляции библиотеки.
    Обычно существует некоторое перекрытие между API и совместимостью ABI, но существуют важные различия. Для поддержания совместимости ABI все, что необходимо сделать, гарантируют, что программа экспортирует все те же символы.
    Это означает весь одинаковый, функции и глобально доступные объекты должны быть там, так, чтобы программы, связанные против предыдущей версии, все еще смогли работать с новой версией.
    Возможно поддержать совместимость ABI при повреждении совместимости API. В коде C оставьте символы в файлах C, но удалите их из общедоступных заголовков, таким образом, новый код, который пытается получить доступ к символам, не скомпилирует, в то время как старый код, который пользователи, скомпилированные против предыдущей версии, продолжат выполнять
  • совместимость протокола клиент-сервер. Это означает, что клиент, использующий версию сетевого протокола, предоставленного в более старых выпусках, продолжит функционировать, когда сталкивающийся с более новым сервером, и что более новые клиентские программы продолжат работать с более старым сервером.
  • совместимость формата данных. Более новые версии кода должны смочь работать с файлами данных, выписанными более старыми версиями, и наоборот. Идеально необходимо также смочь встроить некоторую прямую совместимость в форматы данных. Если Ваши обрабатывающие файл стандартные программы могут проигнорировать и сохранить нераспознанные поля, то новая функциональность может изменить форматы данных способами, которые не повреждают более старые версии. Это - один из самых критических видов совместимости, просто потому что пользователи становятся очень нарушением, когда они устанавливают новую версию программы и внезапно не могут получить доступ к их старым данным.

При объединении предыдущих критериев (природа обратной совместимости) с природой клиентуры можно решить что:

  • Если Ваши клиенты являются внутренними к Вашей компании, потребность ниже, и 2.0 может повредить значительные функции.

  • Если Ваши клиенты являются внешними, 2.0 могли бы все еще повредить вещи, но Вы, возможно, должны предоставить руководство по миграции

  • На экстремальном значении, если Ваши клиенты являются всем миром, поскольку я уже упомянул в этом ТАК вопрос о Java, можно закончить тем, что обеспечили новые технические возможности, никогда не удерживая от использования старые! Или даже сохраняя ОШИБКИ Ваших старых продуктов, потому что приложения клиента зависят от тех ошибок!!


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

  • Решение является базирующимся только на числе клиентов с установленными копиями?
    Это должно быть основано на экономической модели: Ваша миграция - в случае необходимости из-за отсутствия обратной совместимости - может быть "проданной" эффективно Вашим клиентам (из-за всех новых солнечных функций, которые это приносит?)

  • Вы прилагаете активное усилие для создания форматов кода и форматов файлов, который поддерживает будущие изменения?
    Попытка предсказать "будущее изменение" может быть очень контрпродуктивной и быстро пограничной к YAGNI (Вы не Собираетесь Потребность Это): хороший набор инструментов миграции может быть намного более эффективным.

  • При разработке v1.0 Вы пытаетесь к созданному помочь v2.0 быть обратно совместимыми с v1.0? (Отъезд "зарезервированных" полей является примером.)
    Для внутренних приложений я продолжил работать, нет. Параллельное Выполнение является нашим способом гарантировать "функциональную" обратную совместимость. Но это не универсальное решение.

  • Как Вы решаете, что "нет, Мы не собираемся поддерживать это еще" на функциях?
    Снова, для внутренних приложений, процесс принятия решений может очень отличаться, чем для внешне развернутого. Если функция не приносит добавленной стоимости для бизнеса, внутренняя задача "когерентности" поставилась для сверений с любым внутренним приложением стоимость их миграции (т.е. "не использующий больше эту функцию"). Та же задача намного тяжелее относится к клиентам за пределами Вашей организации.

9
ответ дан 5 December 2019 в 13:02
поделиться

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

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

Чем больше Вашей системы имеет конкурентов, тем больше необходимо сфокусироваться на ней.

Чем больше пользователей, которые используют более старые версии, тем больше необходимо сфокусироваться на нем.

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

Если Вы не можете способствовать им на новые версии посредством привлекательной оценки, и т.д., это могло бы быть достойно рассмотрения риск для повышения всех.

Как Vista или Office 2007. Это было потрясающим в помощи мне к Apple.

2
ответ дан 5 December 2019 в 13:02
поделиться

Мое взятие на обратной совместимости программного обеспечения:

1.) Если бы это уже - широко используемый продукт многими клиентами, то я удостоверился бы, что новая версия этого продукта все еще использует тот же "основной код" (Код, который достигает основной функциональности разрабатываемого приложения). Новые возможности должны быть включены в эту кодовую базу или созданы сверх этой кодовой базы с как можно меньшим изменением, необходимым в среде выполнения этого приложения. Вы не хотите заставлять своих существующих пользователей выполнить партию изменений в их существующих установках. Таким образом, это - компромисс между поддержкой новой функциональности и модернизацией в существующем процессе установки и использования для клиента.

2.) В новом продукте, Если возможно определите все возможные функции того приложения прямо в начале даже, прежде чем v1.0 будет отсутствовать. Определите, какие функции Вы собираетесь поставить в v1.0. и которые были бы сохранены для более поздних выпусков. Везде, где возможно помните об этих "более поздних функциях времени" в то время как дизайн, реализация кода, завершая вывод из / приложения для размещения функций в будущих версиях. например, Отпуск дополнительные элементы/битовые поля в Ваших структурах данных.

- AD.

1
ответ дан 5 December 2019 в 13:02
поделиться

Много. Если Вы не хотите бесить каждых из своих лояльных клиентов!

1
ответ дан 5 December 2019 в 13:02
поделиться

Мой опыт работы со сложными системами термоусадочной упаковки с относительно небольшим (100-5000) пользователями.
Маркетинг часто требует особого отношения к обратной совместимости без полной оценки затрат на жизненный цикл. Например, экономия на устранении ошибок в вашей системе для текущей пользовательской базы может быть легко затмевалась затратами на поддержку новых пользователей в течение всего срока службы системы.

0
ответ дан 5 December 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: