Science and Technology:

Software engineering, Agile,

UML, MODELING and more . . .

Tuesday, November 1, 2011

Automatic requirements numbering



Some time ago I was working for Airbus as Product Leader Deputy.

Among all my duties, I was responsible for writing the high level requirement specification; link it to the stakeholders’ requirements and to the technical specification.

Quality constraints in Airbus are very strict concerning the traceability, the coverage and the impact analysis.

A correct link between all the documents allows us to evaluate the progress of our project, the remaining work and impact of evolutions or bug correction.

Fortunately, there are many tools allowing us to manage these issues.

Reqtify is a very useful software used in order to create, manage and visualize the relationships between artifacts in different documents, in other words, traceability. In a previous post I have explained the "Benefits of requirements traceability"; in that post I describe how to link all the documents into a coherent structure by using a tool called Reqtify.

However, this powerful traceability requires the specification document to be written by following strict naming rules so they can be correctly traced.

Indeed, non-unique or non-homogeneous requirements IDs prevent the traceability software to find a requirement.

Under these circumstances, an automatic numbering tool perfectly prevents human errors.

Such numbering tool shall allow the writer to call it in a very easy and non-intrusive way; i.e. no pop-up or any other kind of external windows.

Airbus provided a MS Word macro called “CARE.dot”. This macro provides an automatic requirement numbering. However, the code of this macro is private, then I decided to create my own macro for requirement numbering.

Word Macro for a Functional requirements template

The configuration of this macro is very simple and its utilization very comfortable.

Hereafter the code explained


Sub AutomaticReqNumbering()
'David GARDUNO
'24/08/2011
'This macro insert automatic requirements number based on document's properties
'Define a doc property "REQ-ID", for example CMPNY-PRJ-REQ-A-
'Define a doc property "REQ-Nmbr", for example 1
'The macro will generate requirement numbers as follows
'CMPNY-PRJ-REQ-A-001-1
'CMPNY-PRJ-REQ-A-003-1
'CMPNY-PRJ-REQ-A-004-1
'CMPNY-PRJ-REQ-A-005-1

'reqnb stores the value of the reqNbrProperty property
Dim reqnb As Integer
'reqID stores the value of the reqIDProperty property
Dim reqID As String
'reqNbrProperty stores the "REQ-Nmbr" document's property
Dim reqNbrProperty  As DocumentProperty
'reqIDProperty stores the "REQ-ID" document's property
Dim reqIDProperty  As DocumentProperty

    'get the "REQ-Nmbr" document's property
    Set reNbrProperty = ActiveDocument.CustomDocumentProperties("REQ-Nmbr")
    ' get the value of the reqNbrProperty property
    reqnb = reqNbrProperty.Value
    'get the value of "REQ-ID" document's property
    reqID = ActiveDocument.CustomDocumentProperties("REQ-ID")

    'go to the beginning of the line
    Selection.HomeKey Unit:=wdLine
    'type the reqID (for example CMPNY-PRJ-REQ-A-)
    Selection.TypeText reqID
    'start typing the ID number
    If reqnb < 10 Then
        'Type one 0
        Selection.TypeText "0"
    End If

    If reqnb < 100 Then
        type a second 0
Selection.TypeText "0"
    End If

    'Type the reference number
    Selection.TypeText reqnb
    'Type the version number
    Selection.TypeText "-1 "

    'Set the last blank space as bold = false
    Selection.Font.Bold = False
    Selection.MoveLeft Unit:=wdCharacter, Count:=1

    'Select the reference number
    Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
    'Set the text as bold
    Selection.Font.Bold = True
    'Go to the begining of the line
    Selection.HomeKey Unit:=wdLine

    'increment the reference document's property
    reqNbrProperty.Value = reqnb + 1



End Sub


Sub AutomaticReferenceNbr()
'David GARDUNO
'24/08/2011
'This macro insert automatic reference number based on document's properties
'Define a doc property "REF-ID", for example CMPNY-PRJ-REF-A-
'Define a doc property "REF-Nmbr", for example 1
'The macro will generate reference numbers as follows
'CMPNY-PRJ-REF-A-001-1
'CMPNY-PRJ-REF-A-003-1
'CMPNY-PRJ-REF-A-004-1
'CMPNY-PRJ-REF-A-005-1

    'refnb stores the value of the refnbProperty property
    Dim refnb As Integer
    'refID stores the value of the refIDProperty property
    Dim refID As String
    'refnbProperty stores the "REF-Nmbr" document's property
    Dim refnbProperty  As DocumentProperty
    'refIDProperty stores the "REF-ID" document's property
    Dim refIDProperty  As DocumentProperty

     'get the "REF-Nmbr" document's property
    Set refnbProperty = ActiveDocument.CustomDocumentProperties("REF-Nmbr")
    ' get the value of the refnbProperty property
    refnb = refnbProperty.Value
    'get the value of "REF-ID" document's property
    refID = ActiveDocument.CustomDocumentProperties("REF-ID")


    'go to the beginning of the line
    Selection.HomeKey Unit:=wdLine
     'type the refID (eg. CMPNY-PRJ-REF-A-)
    Selection.TypeText refID
    'start typing the ID number
    If refnb < 10 Then
        'Type one 0
        Selection.TypeText "0"
    End If

    If refnb < 100 Then
        'Type a second 0
        Selection.TypeText "0"
    End If

    'Type the reference number
    Selection.TypeText refnb
    'Type the version number
    Selection.TypeText "-1 "

    'Set the last blank space as bold = false
    Selection.Font.Bold = False
    Selection.MoveLeft Unit:=wdCharacter, Count:=1

    'Select the reference number
    Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
    'Set the text as bold
    Selection.Font.Bold = True
    'Go to the begining of the line
    Selection.HomeKey Unit:=wdLine

    'increment the reference document's property
    refnbProperty.Value = refnb + 1


End Sub





I have also created a template in the form of a .dot MS-Word file.



The file is named "automatic numbering.dot" . You can download the template in Zip here  or Word format here.



How to add a macro to word 

In order to activate it in Word 2003:
  • Save the attached file
  • Open a word document
  • Menu: Outils > Modèles et compléments (Eng: Tools > Models and complements)
  • Tab "Modèles", click on "Ajouter" (Eng: Tab "Models", click on "Add"
  • Select the .dot file then accept
  • Define a doc properrty "REF-ID", for example "CMPNY-PRJ-REF-A-" (menu Fichier > proprietés > personalisation)(Eng: menu File > properties > personalisation)
  • Define a doc property "REF-Nmbr", for example 1
  • Define a doc property "REQ-ID", for example "CMPNY-PRJ-REQ-A-"
  • Define a doc property "REQ-Nmbr", for example 1

Observe that the .dot added a new menu "Auto Req Number"



In order to use the macro you need to put the prompt in the line concerning the ne menu, then select the "New req" or "New ref" options in the "Auto Req Number" menu


This macro will generate ID's as follows
  • CMPNY-PRJ-REF-A-001
  • CMPNY-PRJ-REF-A-002
  • CMPNY-PRJ-REF-A-003
  • CMPNY-PRJ-REF-A-004
  • CMPNY-PRJ-REQ-A-001
  • CMPNY-PRJ-REQ-A-002
  • CMPNY-PRJ-REQ-A-003
  • CMPNY-PRJ-REQ-A-004

How to easily access the macro in word

You can also create a shortkey

  • Menu: Outils -> Personalisation ->Commandes (Eng: menu Tools > Personalization > commands)
  • Click on "clavier" (Eng: keyboard)
  • In the window "categories" select "macro"
  • In the window "macros" select one of the numbering macros, for example "req numbering"
  • In the line "enregistrer dans" (Eng: "Save in") select your working document
  • In the line "nouvelle touche de raccourci" (Eng: "New shortkey") type your shortkey, for example Ctrl+shift+Q for requirements and Ctrl+shift+F for references

Observe that the .dot has also added a "Coller comme hyperlien" (Eng: "Paste as hyperlink") button in the toolbar.



This button will allow you to easily create links to your requirements. Fro example, there  are two requirements (007 and 010).

C264CT-BoardsConf-REQ-007 Blah blah blah

C264CT-BoardsConf-REQ-010 Blah blah blah

Now, you want to create a reference to requirement 010 in requirement 007.

  • Copy the entire requirement C264CT-BoardsConf-REQ-010, then go to requirement 007 and type "See ", then click on the button "Paste as a link". Your new requirement will look like

C264CT-BoardsConf-REQ-007 Blah blah blah. See C264CT-BoardsConf-REQ-010

Now, you can navigate within your document: Ctrl+click on the new link


Finally observe that two navigation buttons were also added by the .dot to the toolbar. These buttons allow you to easily go forward and backward your links as in any regular web page.



Enjoy and comment !


***Note. It seams that the “Paste as hyperlink” option is deactivated for some Word versions


7 comments:

  1. This is exactly what I need, it will save me some time learning how to write word macros.

    Would you consider licencing the code in some form (e.g. GPL / BSD)?

    ReplyDelete
  2. I'm glad that it will help you !

    Concerning your question, I'm not licencing the code, but you can use it and feel free to modify and to post any improvement to it

    ReplyDelete
  3. Thanks, good work! would be a killer project if the macro could automatically generate and more essentially update a table of requirements.

    For example, the requirements are
    Req-1. Text of req-1
    Req-2. Text of req-2
    ...
    Req-n. Text of req-n

    Insert Table of reqs can generate a table with
    Req 1, Req 2, .. Req N in the 1st column
    Text of reqs 1-n in the second
    a configurable number of columns which can be updated by user (Comments, cross ref, random text, etc.)

    Update the Table:
    Should update the text in existing reqs, remove rows for deleted reqs, insert new rows for new reqs

    You can even charge for that macro ;)

    ReplyDelete
    Replies
    1. Thank you for your comment.

      It's a very good Idea!

      I have a comment about removing deleted requirements. For long-term specifications, it could be interesting to keep a trace about deleted requirements, when was it removed, by whom, etc

      I've found this kind of need when testing an ancient version of the software.

      I'll seriously think about your ideas of macro: requirements updating/reporting

      Delete
  4. Hi. I work with requirements documents all the time. I have written a routine somewhat similar to the above, but which has a table focus, where each requirement is a separate row. The tool allows renumbering using a range of styles including prefixes, sub requriements and the ability to extend the numbering across a range of rows. The lools allow quick insertion of new rows and removal of empty, unwanted rows. Once the requirements are benchmarked, you can lock the numbers so they dont change. The code is a bit long for this forum, but you can download for free from documentproductivity at blogspot dot com

    ReplyDelete
    Replies
    1. Thanks a lot for your comment Martin.

      I'll take a look to the tool you mention, it could be very useful!

      Delete