An Example of a Synergistic Relationship Between Software Architecture and a Domain-Specific Language
Narraway, David (2013)
Narraway, David
Oulun seudun ammattikorkeakoulu
2013
All rights reserved
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-201305107689
https://urn.fi/URN:NBN:fi:amk-201305107689
Tiivistelmä
This Master's thesis work was carried out during a re-engineering project for NetHawk (now EXFO). The project's main aim was to replace the User Interface of NetHawk's M5 Network Analyzer, a tool used on PCs running Microsoft operating systems. An additional aim was to document the message interface used by cooperating parts of the M5. From the beginning of the project, it was clear that the lack of an explicit specification for the interface would give rise to problems when re-implementing the User Interface and the project team was required to fully document the interface. The specification was seen to have dual purpose. A human readable form of the specification was required to provide developers with a convenient reference source. A machine readable form was at least as important, if not more so, as it was intended that code generators would produce the code used to read and write the message contents.
The existing version of the M5 had been implemented using Delphi for the User Interface and C++ for the application logic. Automated and manual techniques were combined to extract information about the message structure from the codebase, producing human and machine readable documents in the process. The automated techniques included customized parsers operating directly on the codebase and also on information collected from the running M5. Those tools produced initial candidate specifications that could be manually edited into the final form.
The Software Architecture of the User Interface was designed to separate the processing of messages from the presentation of the information in the messages. This separation of concerns was a key factor in the successful outcome of the project. A suitable specification notation was developed as well as compatible code generators. Interface specifications, code generators, and Software Architecture evolved together as interface message requirements became clearer. The current version of the M5 Network Analyzer uses code generated from the specifications. Further development of the system could concentrate on separating the essential message structure from the issues related to the operating system (MS Windows) so that it could be used on other operating systems. The code generators could be developed further to produce code in different programming languages, such as C++.
The existing version of the M5 had been implemented using Delphi for the User Interface and C++ for the application logic. Automated and manual techniques were combined to extract information about the message structure from the codebase, producing human and machine readable documents in the process. The automated techniques included customized parsers operating directly on the codebase and also on information collected from the running M5. Those tools produced initial candidate specifications that could be manually edited into the final form.
The Software Architecture of the User Interface was designed to separate the processing of messages from the presentation of the information in the messages. This separation of concerns was a key factor in the successful outcome of the project. A suitable specification notation was developed as well as compatible code generators. Interface specifications, code generators, and Software Architecture evolved together as interface message requirements became clearer. The current version of the M5 Network Analyzer uses code generated from the specifications. Further development of the system could concentrate on separating the essential message structure from the issues related to the operating system (MS Windows) so that it could be used on other operating systems. The code generators could be developed further to produce code in different programming languages, such as C++.