7. Why do we need version
numbers?
• Label unique states of software
applications for future reference
• Introduce continuity for history of
software changes
• Track progress of software development
• Establish dependencies between
modules, libraries, applications, APIs, etc
8. Problem: version numbering is
broken
• Ambiguous. Same version number often
used to refer to different entities (e.g.
builds and branches)
• Unpredictable/inconsistent: 1.0 -> 1.1 -
> 1.2 -> 2.0 -> 2.1 -> 3.1
• Not formalized
• Cannot be used to serve its purpose
(reliable reference, continuity, tracking
progress, establishing dependencies)
9. Problem: version numbering is
broken
Inconsistent version numbering practices:
• Undermine possibilities of development
process automation
• Increase need of communication
• Become one of the causes of poor software
quality
• Cause many problems related to software
maintenance and support
16. It is possible to come up with two
different entities with the same number:
Automatic document sections
numbering cannot be applied to
software history
1.1 1.1.1
1.2 1.2.1 1.2.2 1.2.3
?
1.2.1.1 1.2.1.2
17. It is possible to come up with two
different entities with the same number:
Automatic document sections
numbering cannot be applied to
software history
1.1 1.1.1
1.2 1.2.1 1.2.2 1.2.3
1.2.2
1.2.1.1 1.2.1.2
18. It is possible to come up with two
different entities with the same number:
Automatic document sections
numbering cannot be applied to
software history
1.1 1.1.1
1.2 1.2.1 1.2.2 1.2.3
1.2.3
1.2.1.1 1.2.1.2
19. It is possible to come up with two
different entities with the same number:
Automatic document sections
numbering cannot be applied to
software history
1.1 1.1.1
1.2 1.2.1 1.2.2 1.2.3
1.2.1.1
1.2.1.1 1.2.1.2
20. It is possible to come up with two
different entities with the same number:
Automatic document sections
numbering cannot be applied to
software history
1.1 1.1.1
1.2 1.2.1 1.2.2 1.2.3
1.2.1.2
1.2.1.1 1.2.1.2
21. It is possible to come up with two
different entities with the same number:
Automatic document sections
numbering cannot be applied to
software history
1.1 1.1.1
1.2 1.2.1 1.2.2 1.2.3
1.2.4
1.2.1.1 1.2.1.2
22. It is possible to come up with two
different entities with the same number:
Automatic document sections
numbering cannot be applied to
software history
1.1 1.1.1
1.2 1.2.1 1.2.2 1.2.3
1.2.1.3
1.2.1.1 1.2.1.2
24. There are other problems …
variation
variant
#1 #2 #3 #N…
version Maturity
Platform
OS
Localizatio
n
Build type
…
25. There are other problems …
HTC_Touch_Diamond2_WM6.5_RUU_Topaz_S_HT
C_RUS_2.16.411.2_Radio_Sign_Topaz_61.44
tc.25.32_4.49.25.17_Ship.exe
Real world example:
26. There are other problems …
HTC_Touch_Diamond2_WM6.5_RUU_Topaz_S_HT
C_RUS_2.16.411.2_Radio_Sign_Topaz_61.44
tc.25.32_4.49.25.17_Ship.exe
Real world example:
Where is version?
27. There are other problems …
HTC_Touch_Diamond2_WM6.5_RUU_Topaz_S_HT
C_RUS_2.16.411.2_Radio_Sign_Topaz_61.44
tc.25.32_4.49.25.17_Ship.exe
Real world example:
Where is version?
28. There are other problems …
HTC_Touch_Diamond2_WM6.5_RUU_Topaz_S_HT
C_RUS_2.16.411.2_Radio_Sign_Topaz_61.44
tc.25.32_4.49.25.17_Ship.exe
Real world example:
Where is version?
29. There are other problems …
HTC_Touch_Diamond2_WM6.5_RUU_Topaz_S_HT
C_RUS_2.16.411.2_Radio_Sign_Topaz_61.44
tc.25.32_4.49.25.17_Ship.exe
Real world example:
Where is version?
30. There are other problems …
HTC_Touch_Diamond2_WM6.5_RUU_Topaz_S_HT
C_RUS_2.16.411.2_Radio_Sign_Topaz_61.44
tc.25.32_4.49.25.17_Ship.exe
Real world example:
Where is version?
35. Suggested solution
1. Take “section numbering”
approach
2. Formalize it
3. Show that it is possible to
perform basic operations
using suggested
formalization
4. Extend formalization to
solve problems of software
version numbering
5. Provide mapping from “old
style” to “new style”
approach
38. Formalization of “sections
numbering” approach
Nat
o 0, 1, 2, …
_._ ⊆ Nat × Nat × … × Nat
o 0.1, 1.4, 45.23
o 1.0.0, 45.2.0, 34.89.9
o 3.5.20.11, 2.4.99.85.34.2
…
Num = N1.N2. … .Nk
_<_ ⊆ Num × Num
o 0 < 1, 2 < 9, 3 < 90
o 1.1 < 1.2, 1.3 < 1.5, 4.1 < 6.8
o 2.1.1 < 4.69.78.2 , 2 < 3.8.2.3
…
Section numbering
39. Formalization of “sections
numbering” approach
next : Num -> Nat-> Num
o next 1 {1} -> 2
o next 1.0 1 -> 2.0
o next 1.0 2 -> 1.1
o next 3.4.5.6 3 -> 3.4.6.6
…
NumTree : NumTree (Num NumTree)
nTree = NumTree
nTree =>
o 1
1.1
1.1.1
1.2
1.2.1
1.2.2
1.2.3
Section numbering
43. Extension of “sections numbering”
approach
Nat
o 0, 1, 2, …
_._ ⊆ Nat × Nat × … × Nat
o 0.1, 1.4, 45.23
o 1.0.0, 45.2.0, 34.89.9
o 3.5.20.11, 2.4.99.85.34.2
…
Num = N1.N2. … .Nk
_<_ ⊆ Num × Num
o 0 < 1, 2 < 9, 3 < 90
o 1.1 < 1.2, 1.3 < 1.5, 4.1 < 6.8
o 2.1.1 < 4.69.78.2 , 2 < 3.8.2.3
…
Section numbering
Nat
o 0, 1, 2, …
X : Set
VC ::= Nat
| X
_._ ⊆ VC × VC × … × VC
o 0.1, 1.4, 45.23
o 1.0.0, 45.2.0, 34.89.9
o 3.5.20.11, 2.4.99.85.34.2,
o X , X.X , X.X.X , X.X.X.X , X. … .X
o X.1, X.2, X.3, X.4, … X.n
o X.X.2, X.5.X, 6.X.X, 6.5.X, X.23.10
Num = N1.N2. … .Nk
_<_ ⊆ Num × Num
o 0 < 1, 2 < 9, 3 < 90
o 1.1 < 1.2, 1.3 < 1.5, 4.1 < 6.8
o 2.1.1 < 4.69.78.2 , 2 < 3.8.2.3
o X.0 < X.1
o 1.X.14 < 1.X.25
o 2.3.X < 3.8.X
o X < 0
o 1.X.X < 1.0.X
Version numbering
44. Extension of “sections numbering”
approach
next : Num -> Num -> Num
o next 1 {1} -> 2
o next 1.0 1 -> 2.0
o next 1.0 2 -> 1.1
o next 3.4.5.6 3 -> 3.4.6.6
…
NumTree : NumTree (Num NumTree)
nTree = NumTree
nTree =>
o 1
1.1
1.1.1
1.2
1.2.1
1.2.2
1.2.3
next : Num -> Num
o next 1 -> 2
o next 1.0 -> 1.1
o next 3.4.5.6 -> 3.4.5.7
o next 1.X -> 2.X
o next 3.X.X -> 4.X.X
o next X.6 -> X.7
o next 1.0.X -> 1.1.X
o next 1.X.13 -> 1.X.14
…
NumTree : NumTree (Num NumTree)
nTree = NumTree
nTree =>
o X.X.X
1.X.X
1.0.X
1.1.X
o 1.1.0
o 1.1.1
1.2.X
o 1.2.0
o 1.2.1
o 1.2.2
o 1.2.3
Section numbering Version numbering
45. Extension of “sections numbering”
approach
appendNext : NumTree -> Nat -> NumTree
appendNext vTree 1 =>
o 1
1.1
1.1.1
1.2
1.2.1
1.2.2
1.2.3
o 2
appendNext vTree 2 =>
o 1
1.1
1.1.1
1.2
1.2.1
1.2.2
1.2.3
1.3
Section numbering
appendNext : NumTree -> Nat -> NumTree
appendNext nTree 1 =>
o X.X.X
1.X.X
1.0.X
1.1.X
o 1.1.0
o 1.1.1
1.2.X
o 1.2.0
o 1.2.1
o 1.2.2
o 1.2.3
2.X.X
appendNext nTree 2 =>
o X.X.X
1.X.X
1.0.X
1.1.X
o 1.1.0
o 1.1.1
1.2.X
o 1.2.0
o 1.2.1
o 1.2.2
o 1.2.3
1.3.X
Version numbering
46. Extension of “sections numbering”
approach
Section numbering
appendNext nTree 3 =>
o 1
1.1
1.1.1
1.2
1.2.1
1.2.2
1.2.3
1.2.4
appendNext nTree 3 =>
o X.X.X
1.X.X
1.0.X
1.1.X
o 1.1.0
o 1.1.1
1.2.X
o 1.2.0
o 1.2.1
o 1.2.2
o 1.2.3
o 1.2.4
Version numbering
47. Extension of “sections numbering”
approach
Version numbering
_↓_
o X ↓ 1, X ↓ 2, X ↓ 3, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 0.X , X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
_==_
o X.6.8 == 6.8
o X.1 == 1
o X.X.1 == 1
o X.X.k == k
o X.2.6 == 2.6
o X.1.X == 1.X
o X.X.X = X
o X. … .X = X
…
Copy
Equivalence
49. Extension of “sections numbering”
approach: visual representation
Version numbering
_↓_
o X ↓ 1, X ↓ 2, X ↓ 3, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 0.X , X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
_==_
o X.6.8 == 6.8
o X.1 == 1
o X.X.1 == 1
o X.X.k == k
o X.2.6 == 2.6
o X.1.X == 1.X
o X.X.X = X
o X. … .X = X
…
1 2 3 k…
X
50. Extension of “sections numbering”
approach: visual representation
Version numbering
_↓_
o X ↓ 1, X ↓ 2, X ↓ 3, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
_==_
o X.6.8 == 6.8
o X.1 == 1
o X.X.1 == 1
o X.X.k == k
o X.2.6 == 2.6
o X.1.X == 1.X
o X.X.X = X
o X. … .X = X
…
1 2 3 k…
X
X.X
/1.X
1.0 1.1 1.2
X.1 X.2 X.3 X.k…
1.k…
…
/2.X /m.X
51. Extension of “sections numbering”
approach: visual representation
Version numbering
_↓_
o X ↓ 1, X ↓ 2, X ↓ 3, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
_==_
o X.6.8 == 6.8
o X.1 == 1
o X.X.1 == 1
o X.X.k == k
o X.2.6 == 2.6
o X.1.X == 1.X
o X.X.X = X
o X. … .X = X
…
1 2 3 k…
X
X.X
/1.X
1.0 1.1 1.2
X.1 X.2 X.3 X.k…
1.k…
…
/2.X /m.X
52. Extension of “sections numbering”
approach: visual representation
Version numbering
_↓_
o X ↓ 1, X ↓ 2, X ↓ 3, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
_==_
o X.6.8 == 6.8
o X.1 == 1
o X.X.1 == 1
o X.X.k == k
o X.2.6 == 2.6
o X.1.X == 1.X
o X.X.X = X
o X. … .X = X
…
1 2 3 k…
X
X.X
/1.X
1.0 1.1 1.2
X.1 X.2 X.3 X.k…
1.k…
…
/2.X /m.X
53. Extension of “sections numbering”
approach: visual representation
Version numbering
_↓_
o X ↓ 1, X ↓ 2, X ↓ 3, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
_==_
o X.6.8 == 6.8
o X.1 == 1
o X.X.1 == 1
o X.X.k == k
o X.2.6 == 2.6
o X.1.X == 1.X
o X.X.X = X
o X. … .X = X
…
1 2 3 k…
X
X.X
/1.X
1.0 1.1 1.2
X.1 X.2 X.3 X.k…
1.k…
…
/2.X /m.X
54. Extension of “sections numbering”
approach: visual representation
1.x.x
1.0.x
x.x.x
x.x.1 x.x.2 x.x.3
1.x.0 1.x.1 1.x.k
1.0.0 1.0.1 1.0.k…
…
n.x.x
1.1.x
1.m.x
n.x.0 n.x.1 n.x.k…
…
…
2.x.x
x.x.4 x.x.5 x.x.6 x.x.k…
_↓_
o X ↓ 0, X ↓ 1, X ↓ 2, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
55. Extension of “sections numbering”
approach: visual representation
1.x.x
1.0.x
x.x.x
x.x.1 x.x.2 x.x.3
1.x.0 1.x.1 1.x.k
1.0.0 1.0.1 1.0.k…
…
n.x.x
1.1.x
1.m.x
n.x.0 n.x.1 n.x.k…
…
…
2.x.x
x.x.4 x.x.5 x.x.6 x.x.k…
_↓_
o X ↓ 0, X ↓ 1, X ↓ 2, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
56. Extension of “sections numbering”
approach: visual representation
1.x.x
1.0.x
x.x.x
x.x.1 x.x.2 x.x.3
1.x.0 1.x.1 1.x.k
1.0.0 1.0.1 1.0.k…
…
n.x.x
1.1.x
1.m.x
n.x.0 n.x.1 n.x.k…
…
…
2.x.x
x.x.4 x.x.5 x.x.6 x.x.k…
_↓_
o X ↓ 0, X ↓ 1, X ↓ 2, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
57. Extension of “sections numbering”
approach: visual representation
1.x.x
1.0.x
x.x.x
x.x.1 x.x.2 x.x.3
1.x.0 1.x.1 1.x.k
1.0.0 1.0.1 1.0.k…
…
n.x.x
1.1.x
1.m.x
n.x.0 n.x.1 n.x.k…
…
…
2.x.x
x.x.4 x.x.5 x.x.6 x.x.k…
_↓_
o X ↓ 0, X ↓ 1, X ↓ 2, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
58. Extension of “sections numbering”
approach: visual representation
1.x.x
1.0.x
x.x.x
x.x.1 x.x.2 x.x.3
1.x.0 1.x.1 1.x.k
1.0.0 1.0.1 1.0.k…
…
n.x.x
1.1.x
1.m.x
n.x.0 n.x.1 n.x.k…
…
…
2.x.x
x.x.4 x.x.5 x.x.6 x.x.k…
_↓_
o X ↓ 0, X ↓ 1, X ↓ 2, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
59. Extension of “sections numbering”
approach: visual representation
1.x.x
1.0.x
x.x.x
x.x.1 x.x.2 x.x.3
1.x.0 1.x.1 1.x.k
1.0.0 1.0.1 1.0.k…
…
n.x.x
1.1.x
1.m.x
n.x.0 n.x.1 n.x.k…
…
…
2.x.x
x.x.4 x.x.5 x.x.6 x.x.k…
1 2 k…
x
3 4 5 6
== == == == == == ==
_==_
o X.6.8 == 6.8
o X.1 == 1
o X.X.1 == 1
o X.X.k == k
o X.2.6 == 2.6
o X.1.X == 1.X
o X.X.X = X
o X. … .X = X
60. Extension of “sections numbering”
approach: visual representation
x.x.x
x.x.x
x.x.x
x.x.x
x.x.x
x.x.x
…
x.x.x
_↓_
o X ↓ 0, X ↓ 1, X ↓ 2, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
x.x.x
x.x.x
x.x.x
…
_==_
o X.6.8 == 6.8
o X.1 == 1
o X.X.1 == 1
o X.X.k == k
o X.2.6 == 2.6
o X.1.X == 1.X
o X.X.X = X
o X. … .X = X
61. Extension of “sections numbering”
approach: visual representation
x.x
x.x
x.x
x.x
x.x
x.x
…
x.x
_↓_
o X ↓ 0, X ↓ 1, X ↓ 2, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
x.x
x.x
x.x
…
_==_
o X.6.8 == 6.8
o X.1 == 1
o X.X.1 == 1
o X.X.k == k
o X.2.6 == 2.6
o X.1.X == 1.X
o X.X.X = X
o X. … .X = X
62. Extension of “sections numbering”
approach: visual representation
x
x
x
x
x
x
…
x
_↓_
o X ↓ 0, X ↓ 1, X ↓ 2, … X ↓ k
o X.X ↓ X.1 , X.X ↓ X.2 , … , X.X ↓ X.k
o X.X ↓ 1.X , X.X ↓ 2.X , … , X.X ↓ m.X
o 1.X ↓ 1.0 , 1.X ↓ 1.1 , 1.X ↓ 1.2 , … , 1.X ↓ 1.k
o X.X.X ↓ 1.X.X , X.X.X ↓ 2.X.X, … , X.X.X ↓ n.X.X
o 1.X.X ↓ 1.0.X , 1.X.X ↓ 1.1.X, … , 1.X.X ↓ 1.m.X
o 1.X.X ↓ 1.X.0 , 1.X.X ↓ 1.X.1, … , 1.X.X ↓ 1.X.k
o 1.0.X ↓ 1.0.0 , 1.0.X ↓ 1.0.1, … , 1.0.X ↓ 1.0.k
o X.X.X ↓ X.X.X , X.X ↓ X.X , X ↓ X
…
x
x
x
…
_==_
o X.6.8 == 6.8
o X.1 == 1
o X.X.1 == 1
o X.X.k == k
o X.2.6 == 2.6
o X.1.X == 1.X
o X.X.X = X
o X. … .X = X
73. x
x
x
x
Revisions: 1, 2, 3, … , 2131, …
Mapping from “old style” to “new
style”
x
x
x
x
x
x
x
8 10
1
7
2 3 5
2.1 2.2
1.1 1.2 1.3 1.4
1.3.2.1
x
9
1.3.2.2
4
1.3.1.1
6
1.3.1.2
74. Semantics of version
numbering
1.0.x
1.x.x
x.1.x x.2.x
x.x.x
1.0.x
1.x.x
x.x.x
1.0.x
1.1.x
2.x.x
x.x.x
1.x.x
1.0.x
1.1.x
1.x.x
x.x.x
x
x
x
x
There are many
different ways to
decompose the same
history of versions.
Which one should we
choose?
We need to learn
about semantics of
76. Semantics of “old” version
numbering
[major].[minor].[build]
1.2.3
ITERATIONS
ARCHITECTURE
CONCEPTS
PORTING
MARKETING
BUILD
PATCH
http://semver.org/
77. Semantics of “new” version
numbering
x.x.x
N.M.K
mutable
immutable
Creation of
immutable
artifact
compatible
incompatible
Definition of
compatibility
scope
all changes
Fixed set of
features
Feature freeze
81. Mapping from “old style” to “new
style”
1.0.x
1.x.x
x.1.x x.2.x
x.x.x
1.0.x
1.x.x
x.x.x
1.0.x
1.1.x
2.x.x
x.x.x
1.x.x
1.0.x
1.1.x
1.x.x
x.x.x
x
x
x
x
?
?
?
?
?
82. Mapping from “old style” to “new
style”
• Way of versions history decomposition depends on
WHY certain versions were created:
• Purpose of tagging, branching, etc
• Actual content of tag, branch, etc
• It is difficult to refactor existing history of versions
because of insufficient information about purpose and
content of certain artifacts.
• It is easier to follow rules of version numbering
semantics at early stages of software projects.
• It is even more easy to follow rules if there is a special
tool that helps with version numbering.
88. Hierarchy of version numbers
x.x
x.KM.x
M.K
x
K
x.x.x
x.x.KN.x.x
N.M.K
x.M.x
x.M.KN.M.x N.x.K
X.X.X ↓ X.M.X
X.X.X ↓ N.X.X
X.X.X ↓ X.X.K
N.X.X ↓ N.M.X
N.X.X ↓ N.X.K
X.M.X ↓ X.M.K
N.M.X ↓ N.M.K
X.X ↓ M.X
X.X ↓ X.K
M.X ↓ M.K
M.X ↓ M.K
X ↓ K
It is possible to establish hierarchy of version
numbers using copy operation:
102. Conclusion
• Version != variation
• Versions and variations are complementary and always go
side by side in software development
• Necessity of software configuration management practices
arises because of high variability of software
• Both formalized version numbering and variations can help
to understand nature of changes better
• If formalized, versions can provide context for variations
and choices of alternative implementations
• Proper version numbering must be introduced into software
projects as early as possible to avoid problems with version
numbering.
• Formalized version numbering and variations are stepping
stone for better software tools.