LabVIEW Craft
  • Blog
  • About
  • Contact
  • Tools
  • Resources

Semantic Versioning

2/14/2017

1 Comment

 
Jon McBee
​One of the many things I can stand to improve upon is how I version my software.  I say this because throughout my career I have never adhered to a strict versioning scheme for the software I write.  This has been tolerable because my decisions typically only impacted me or at worst my team, but now that I am diving into the world of open-sourced software I think it is time to embrace a standard for software versioning.
Picture
In my research to understand what other people are doing with regard to versioning their software I came across the Semantic Versioning specification (SemVer).  I'll be honest there is nothing earth shattering here, SemVer follows the standard X.Y.Z (Major.Minor.Patch) semantics for versioning that we probably all already use.  What SemVer adds to the discussion is a very well defined standard for how/when/why the X.Y.Z versioning numbers are changed.  This is important with open source projects like Stream because if we all agree to follow this standard then we now have a common language we can use to discuss changes to the software and what impacts those changes have on our respective code bases.
SemVer is made up of a list of 11 rules that dictate how software versions are updated.  At a high level the software version number is structured as Major.Minor.Patch where the components are incremented as follows:
  • Major version is incremented when you make incompatible API changes
  • Minor version is incremented when you add functionality in a backwards-compatible manner
  • Patch version is incremented when you make backwards-compatible bug fixes

​We can see that the Patch version number identifies the number of backwards-compatible bug fixes that have been implemented under the current Minor version.  SemVer defines a bug as an "internal change that fixes incorrect behaviour".  The Minor version number identifies the number of backwards-compatible features that are added to the current Major version.  This number is also incremented when existing features have been deprecated but not yet removed from the codebase.  The Major version number identifies backwards-incompatible changes to the codebase.  This a subtely powerful feature of SemVer because it allows me to guarantee that a consumer of my open-source code can update my published package without breaking their code that depends on my package as long as the Major version does not change.
In the context of Stream I like the idea of using SemVer to explicitly define how releases are versioned.  When you decide to use a package that I publish you and I have entered into an agreement that allows you to make a few assumptions.  These assumptions include that I will maintain the code base behind the package, I will notify you when I make changes to the code base, and that I will give you the information that you need to decide if you want to adopt the new version or not.  SemVer helps to remove the risk from the assumptions by explicitly defining how my changes impact your code base.
I encourage you to take a look at the SemVer specification and would be interested to hear your thoughts on it.  I am also curious how you handle versioning your software and if you have adopted a formal defintion for your versioning semantics.  I will be using SemVer for all open-source projects that I publish on the Composed System Bitbucket page moving forward.  Hopefully this decision will make it easier for you to use and participate in our open-sourced projects.

Jon McBee is the Founder and Managing Partner at Composed Systems and is a Certified LabVIEW Architect, Certified LabVIEW Embedded Developer, Certified TestStand Developer, an NI Certified Professional Instructor, a LabVIEW Champion, and a Certified ScrumMaster
1 Comment
Christoph
9/24/2017 12:31:18 pm

Hey Jon,
I am always trying to improve by adopting better ways of software development. Semantic Versioning is one of those things I accepted to be a good thing. It's really no rocket science, as long as you are willing to do it. (And suddenly you need to write&maintain a proper changelog). Unfortunately I still have little experience since I am basically writing software for me, maintained by me, occasionally used by people who share 0% interest in theroetic software engineering topics.
What really stuck is the way semantic versioning makes me look at my software. It's all about the API. Implement clean APIs from the start and many changes later are eays to adapt.

Besides semantic versioning I have been trying to adapt oop and the actor model. This lead to questions of how to connect actors, also over network. Essentially the cool field of distributed systems. So I looked at ZMQ. Reading the ZGuide I came across the concept of reactive programming which eventually lead me to your blog. Up to then I have never heard of your "Stream" or "Stream & ZMQ".
The reason why I am blabbing about this is what's written in Chapter 1 of the ZGuide.
"[...] is the science of programming: make building blocks that people can understand and use easily [...]".
Sounds like the the core concept of semantic versioning to me.

Anyway, I am impressed how your blog seems to talk about what has been going on in my head for quite some time (did not read much so far) and I wanted to express this somewhere.

Regards
Christoph

Reply



Leave a Reply.

    RSS Feed

    Tags

    All
    Abstract Messaging
    Actor Framework
    Agile
    AI
    Asynchronous Programming
    Best Practices
    C#
    Complexity
    Continuations
    Control Values By Index
    Craftsmanship
    Dependency Inversion
    Dependency Viewer
    Futures/Promises
    Genetic Algorithm
    Liskov Substitution
    Malleable VIs
    Mediator Pattern
    .NET
    Object Oriented
    Object-Oriented
    Packed Project Library
    Parallelism
    Polymorphism
    Pub/Sub
    RawCap
    Root Loop
    Scrum
    Task Parallel Library
    TCP/IP
    TDD
    Test Engineering
    UML
    Unit Test
    VI Scripting
    VI Server
    WireShark

    Archives

    October 2019
    April 2019
    July 2018
    October 2017
    March 2017
    February 2017
    January 2017
    December 2016
    July 2016
    June 2016
    May 2016
    April 2016
    March 2016
    February 2016
    January 2016
    December 2015
    November 2015
    October 2015
    August 2015
    February 2015
    January 2015

    LabVIEW Blogs

    Eyes on VIs
    LabVIEW Hacker
    VI Shots
    LabVIEW Artisan
    Software Engineering for LabVIEW
    ​Wiresmith Techology
Picture
Powered by the Panda Ant

  • Blog
  • About
  • Contact
  • Tools
  • Resources