2015-12-02 2 views
0

Документация по SEMVER (Semantic версий):

Согласно этой site версии чисел incrememented так:Цель руководства для обнаружения semver изменения за счет автоматизации

  1. мажорной версии, когда вы делаете несовместимые изменения API,
  2. Версия MINOR, когда вы добавляете функциональность в обратную совместимость, и
  3. Версия PATCH при исправлении ошибок, совместимых с обратной связью.

MAJOR.MINOR.PATCH.BUILD

Успение мне:

Я полагаю Рослин бы сделать это «просто» достаточно, чтобы создать требуемое программное обеспечение, если я понять концепцию достаточно хорошо :

  • только изменения в частные/внутренние член: PATCH/BUILD приращение
  • дополнительных общественные/защищенные/защищенные внутренние членов и изменения в частный/в тренние Участники: МАЛЫЙ incremement
  • ранее существовавшие общественные/защищенные/защищенные внутренние элементы имеют измененную подпись или удалены: Крупное приращение

Объяснения почему вопрос изменился:

Первоначально я хотел узнать, есть ли способ обнаружения смены semver по сравнению со старым состоянием проекта (с использованием некоторого потенциально уже существующего программного обеспечения).

Однако ответы/комментарии вызвали некоторые конфликты, с которыми я мог бы воспользоваться, прежде чем писать программное обеспечение самостоятельно.

Вопрос:

ли semver используется для указания изменений на поведенческом или апи уровне?

Я хочу разрешить конфликт этой концепции, потому что необходимо иметь рабочие зависимости между пакетами.

Моя концепция в том, что она должна быть использована на уровне апи в основном по следующим причинам:

  • Представьте, что у вас версия 2.0.1 что-то.
  • Вы исправить некоторые ошибки в содержании частного метода -> 2.0.2
  • Вы исправить некоторые ошибки и расширить свой API каким-либо общедоступный метод -> 2.1.0
  • Вы исправить некоторые ошибки и удалять устаревшие методы -> 3.0.0
  • Вы исправить некоторые ошибки -> 3.0.1

И это, где мой конфликт с каким-то semver мнения возникает (поведенческий против апите точки зрения).

Представьте, что кто-то ожидает некоторую поведенческую импликацию ошибки. Исправлена ​​ошибка в 3.0.1.

  • С точки зрения API ваш следующий шаг будет 3.0.2
  • От «клиент», который построен на вершине своей ошибки ваш следующий шаг будет 4.0.0 (потому что он expectes его работать так)

С точки зрения nuget 4.0.0 было бы чушь. Ваш api не изменился - вы исправили ошибку, и он может обновляться без сбоев/сбоев зависимостей.

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

  • Если вы выбираете 3.0.2 Исправлена ​​ошибка будет решена, никаких зависимости не сломаются
  • Если вы выбираете 4.0.0 людей, которые имели ошибку не может обновить без причины (потому что их NuGet установлен сделать только незначительные обновления), несмотря на то, что ваш API полностью совместим с обратной связью.

Разное:

  • Я знаю, что это будет возможно за счет тщательного отслеживания. Однако я предпочитаю автоматизированные процессы, где требуются точные результаты.
  • Не стесняйтесь исправлять меня по моим предположениям.
+0

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

ответ

1

Вероятно, нет

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

Как мы можем сделать это

Во-первых, позволяет получить наши предположения прямо, это возможно изменить только частные/внутренних пользователей и нарушить совместимость, поэтому правильное предположение:

  1. У вас есть автоматизированный набор тестов, который проверяет API
  2. Если новая версия не работает для какого-либо теста, при тестировании предыдущих версий , обратная совместимость был разорван
  3. Новая версия может не работать (и должна) для модульных испытаний, которые проверяют внутренние компоненты программного обеспечения (они могут даже не компилироваться), но если это не удается на тестах, проверяющих поведение API, вы просто сделал несовместимое изменение, так что это критерии для MAJOR increment.

    <ол начать = «3»>
  4. Вы организуете какую-то часть вашего проекта в особенности

Допустим, у вас есть функция SquareRoot, которая возвращает только целые значения, и обновлять его для возврата значений с плавающей запятой (в C# это было бы несовместимым изменением API, но поскольку я в настоящее время не вхожу в творчество, предположим, что это было на динамически типизированном языке).

Скажите, вы исправили ошибку «SquareRoot усекает не целочисленные результаты», или вы бы сказали, что добавили функцию «SquareRoot теперь возвращает значения float»?

bug vs feature обсуждение не вычислительно разрешима так что вы должны как-то сказать, сценарий автоматизации, что вы добавили некоторые функции, это может быть в виде:

  • в папку внутри папки «Свойства», содержащий все, что вам подходит для вашей документации по функциям.
  • Испытательный класс, предполагая, что в каком-то месте вашего проекта вы добавляете тестовый класс для каждой функции.
  • Файл specflow .feature, предполагая, что вы добавите для каждой функции

Вы можете выбрать один, и использовать это в сценарии автоматизации, чтобы обновить второстепенное значение

Значение PATCH будет увеличиваться, когда предыдущих значений не было.

Сложите

Учитывая, что процесс автоматизации будет тесно связан с вашей организацией вашего проекта, я не думаю, что будет какой-либо инструмент вокруг, и я не первым утверждать, что human decisions must be present in this process

+0

Меня особенно интересует обнаружение необходимости смены семестра на уровне API, а не с точки зрения функции. Это противоречит вашему утверждению: «можно изменять только частные/внутренние члены и прерывать совместимость». что кажется правдой только для перспективы функции, но не для перспективы API. Особенно важно обеспечить точность на уровне API, чтобы иметь рабочие зависимости nuget. Вот почему я придумал этот вопрос. Или я не понимаю тебя? – Dbl

+0

Если вы замените тело всех своих частных функций на «throw new NotImplementedException()», я уверен, что почти все ваши вызовы API будут терпеть неудачу, даже если никакие подписи не изменились, на практике это означает, что введение новых ошибок и валидации может привести к обратному совместимость –

+0

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

Смежные вопросы