summaryrefslogtreecommitdiff
path: root/docs/SDL.SDD.Template.dox
diff options
context:
space:
mode:
Diffstat (limited to 'docs/SDL.SDD.Template.dox')
-rw-r--r--docs/SDL.SDD.Template.dox355
1 files changed, 355 insertions, 0 deletions
diff --git a/docs/SDL.SDD.Template.dox b/docs/SDL.SDD.Template.dox
new file mode 100644
index 0000000000..435da665db
--- /dev/null
+++ b/docs/SDL.SDD.Template.dox
@@ -0,0 +1,355 @@
+/**
+\cond FALSE
+------ Design document template explanation -------
+This is a SW Detailed Design template for each SDl component update.
+The original QCA template with more detail description is available at Luxoft portal
+https://adc.luxoft.com/confluence/display/PORTAL/Software+Detailed+Design+Template
+
+---------------------- HOWTO -----------------------
+For adding new component documentation please follow this steps:
+1. Copy this document to the 'doc' subdirectory in the Component working directory with a new name
+ - Example:
+ + src/components/transport_manager/docs/SDL.SDD.TM.dox
+ + src/components/utils/docs/SDL.SDD.Utils.dox
+ - https://adc.luxoft.com/confluence/display/PORTAL/Documentation+Control+Guideline#DocumentationControlGuideline-DocumentNaming
+2. Replace <!Component Name> with a correct naming according to SAD naming
+ - Name examples:
+ Application Manager, Connection Handler
+ - Replace examples:
+ ~ sed -i 's/<!Component Name>/Utils/g' SDL.SDD.Utils.dox
+3. Replace <!Component_Id> with a shot unique name
+ - Something like app_manage, connection_handler, policy
+ - It shall be one word without spaces and special symbols except '_'
+ - Replace examples:
+ ~ sed -i 's/<!Component_Id>/connection_handler/g' SDL.SDD.Utils.dox
+ Note: After that step all Doxygen tags becomes working well and IDE could be used
+4. Add reference in mainpage.dox Table of Content using <!Component_Id> used in p.3
+5. Replace blocks marked as following with a content according to instructions in these blocks
+ - Each block starts as <!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+ - Each block ends as <!!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!!>
+ - If chapter content is not applicable for a Component update it with "Not applicable, since/because of <Reason>."
+6. Update source code doxygen comments for mentioning entities in the following SDD chapter:
+ - Public and private interfaces from chapter 3
+ - Data types from chapter 4.2
+7. Update project Doxygen file with path to new images
+ * IMAGE_PATH parameter
+8. Remove this template explanation from cond to endcond tags
+
+General notes/reminders:
+- Commit both: images and them source to the git repository
+- SDD file extension shall be 'dox'
+- the preferable path for SDD is src/components/COMPONENT/docs
+- the preferable path for SDD images is src/components/COMPONENT/docs/assets
+
+For more information, please follow:
+- Doxygen documentation
+ http://www.stack.nl/~dimitri/doxygen/manual/index.html
+- Markdown support by doxygen
+ http://www.stack.nl/~dimitri/doxygen/manual/markdown.html
+- Text-base UML tool
+ http://plantuml.com/
+- Article "Providing design documentation with code changes"
+ https://github.com/smartdevicelink/sdl_core/wiki/Providing-design-documentation-with-code-changes
+
+---------------------------------------------
+\endcond
+\page <!Component_Id> <!Component Name> Detailed Design
+## Table of contents
+- \subpage <!Component_Id>_intoduction
+ + \ref <!Component_Id>_rationale "1.1 Rationale"
+ + \ref <!Component_Id>_scope "1.2 Scope"
+ + \ref <!Component_Id>_abbreviations "1.3 Abbreviations"
+- \subpage <!Component_Id>_detail_design
+ + \ref <!Component_Id>_design_solutions "2.1 Design solutions"
+ + \ref <!Component_Id>_class_structure "2.2 Class Structure"
+ + \ref <!Component_Id>_sequence_diagram "2.3 Sequence diagram"
+ + \ref <!Component_Id>_state_chart "2.4 State chart diagram"
+- \subpage <!Component_Id>_interfaces
+ + \ref <!Component_Id>_public_interfaces "3.1 Public interfaces description"
+ + \ref <!Component_Id>_internal_interfaces "3.2 Internal interfaces description"
+ + \ref <!Component_Id>_derived_interfaces "3.3 Derived interfaces and dependencies"
+- \subpage <!Component_Id>_data_structure_resources
+ + \ref <!Component_Id>_data_structure "4.1 Element Data Structure"
+ + \ref <!Component_Id>_resources "4.2 Resource usage"
+- \subpage <!Component_Id>_references_and_history
+ + \ref <!Component_Id>_references "5.1 References"
+ + \ref <!Component_Id>_history "5.2 Document history change and approve"
+*/
+//-----------------------------------------------------------
+/**
+\page <!Component_Id>_intoduction 1. Introduction
+The document is intended to support software developers,
+maintenance and integration engineers with sufficient,
+detailed information concerning the design, development and
+deployment concepts, to accomplish their respective tasks without reliance on the authors.
+
+\anchor <!Component_Id>_rationale
+## 1.1 Rationale
+<!Component Name> implements SDL Architectural Solution according to:
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be a link SAD Components View and Requirements if applicable)
+Example:
+ https://smartdevicelink.com/en/guides/core/software-architecture-document/components-view/#hmi-message-handler
+<!!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!!>
+
+\anchor <!Component_Id>_scope
+## 1.2 Scope
+<!Component Name> extracted as a separate component for
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added a reason and short description of the components functionality
+Example:
+ Security Manager component extracted as a separate module for
+ SDL channel data protection.
+ This components is used to :
+ - Provide security communications
+ - Protect income and outcome business layer data from interception
+ - Verify the relation between a mobile application certificate and its owner
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+\anchor <!Component_Id>_abbreviations
+## 1.3 Abbreviations
+Abbreviations used in this document please find in the table below.
+| Abbreviation | Expansion |
+|------------------|----------------------------------|
+| | |
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added all component-specific terms, as
+| TA | Transport Adapter |
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+Definitions used in this document are in the table below.
+
+| Definition | Description |
+|------------------|-----------------------------------|
+| | |
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added all component-specific terms, as
+| WebSocket | a protocol providing full-duplex communication channels over a single TCP connection |
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+*/
+//-----------------------------------------------------------
+/**
+\page <!Component_Id>_detail_design 2. Component detail design
+\anchor <!Component_Id>_design_solutions
+### 2.1 Design solutions
+The following design approaches and pattern was used for <!Component Name>:
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added GoF (or other) SW design patterns,
+technologies and approaches with short description
+Example:
+ - Command design pattern is used to treat requests as an object that provides
+ possibility to add new request without existing code modification
+ - Factory method pattern design used for SSLContext objects creation
+ + It also guaranty correctness of SSLContext destruction by the
+ same Compiled SecurityManger object
+ - All database reading are cached by CacheManager class, which
+ guaranty meeting timing contrariness
+ - SQLite database was chosen as a lightweight, embedded, transactional SQL database engine
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+\anchor <!Component_Id>_class_structure
+### 2.2 Class Structure
+The following UML class diagram shows the component classes structure.
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added class diagram
+Example:
+ ![Security Manager class diagram](sm_class_diagram.png)
+For adding images in MD format follow https://www.stack.nl/~dimitri/doxygen/manual/markdown.html#md_images
+As a tool for image preparing could be used Gliffy diagram
+https://adc.luxoft.com/confluence/pages/createpage.action?showGliffyMacro=true&fromCreateDialog=true&spaceKey=APPLINK
+OR plantuml diagram
+http://plantuml.com/classes.html
+Note: Source files of diagram and output images need to be also committed to git.
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+For more information about class diagram follow:
+- http://www.uml-diagrams.org/class-diagrams-overview.html
+- https://sourcemaking.com/uml/modeling-it-systems/structural-view/class-diagram
+
+\anchor <!Component_Id>_sequence_diagram
+### 2.3 Sequence diagram
+The following UML sequence diagram shows how objects operate with one another and in what order.
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added sequence diagram
+Example:
+ Short description
+ ![Connection](connection.png)
+ ![job](job.png)
+ ![disconnection](disconnection.png)
+For adding images in MD format follow https://www.stack.nl/~dimitri/doxygen/manual/markdown.html#md_images
+As a tool for image preparing could be used Gliffy diagram
+https://adc.luxoft.com/confluence/pages/createpage.action?showGliffyMacro=true&fromCreateDialog=true&spaceKey=APPLINK
+OR plantuml diagram
+http://plantuml.com/sequence.html
+Note: Source files of diagram and output images need to be also committed to git.
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+For more information about sequence diagram follow:
+- http://www.uml-diagrams.org/sequence-diagrams.html
+- https://sourcemaking.com/uml/modeling-it-systems/external-view/use-case-sequence-diagram
+
+\anchor <!Component_Id>_state_chart
+### 2.4 State chart diagram
+The following UML state diagram shows the component life cycle states.
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added state diagram
+Example:
+ ![StateControllerImpl state](state_contoroller_states.png)
+For adding images in MD format follow https://www.stack.nl/~dimitri/doxygen/manual/markdown.html#md_images
+As a tool for image preparing could be used Gliffy diagram
+https://adc.luxoft.com/confluence/pages/createpage.action?showGliffyMacro=true&fromCreateDialog=true&spaceKey=APPLINK
+OR plantuml diagram
+http://plantuml.com/state.html
+Note: Source files of diagram and output images need to be also committed to git.
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+For more information about class diagram follow:
+- http://www.uml-diagrams.org/state-machine-diagrams.html
+*/
+//-----------------------------------------------------------
+/**
+\page <!Component_Id>_interfaces 3. Component Interfaces
+\anchor <!Component_Id>_public_interfaces
+### 3.1 Public interfaces description
+<!Component Name> provides functionality with following interfaces:
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added a list of external interfaces
+Example:
+ - security_manager::SecurityManager
+ - security_manager::SecurityManagerListener
+ - security_manager::SSLContext
+(!) All link will be auto-added by doxygen
+For more auto-linking follow - https://www.stack.nl/~dimitri/doxygen/manual/autolink.html#linkclass
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+\anchor <!Component_Id>_internal_interfaces
+### 3.2 Internal interfaces description
+The following interfaces are provided by component for internal usage only:
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added a list of internal interfaces
+Example:
+ - security_manager::CryptoManager
+ - security_manager::CryptoManagerSettings
+ - security_manager::SecurityQuery
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+\anchor <!Component_Id>_derived_interfaces
+### 3.3 Derived interfaces and dependencies
+<!Component Name> required following 3d-party libraries:
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added a list of libraries
+Example:
+ - OpenSSL library v 1.0.1g and higher to meet TLS cipher restricts
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+The following interfaces are required by component:
+- \ref src/components/include/utils Utils
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added a list of external interfaces
+Example:
+ - protocol_handler::ProtocolObserver for getting Protocol notifications
+ - implements protocol_handler::SessionObserver for providing SSLContext object managing
+ - [OpenSSL API](https://www.openssl.org/docs/manmaster/ssl/) :
+ + SSL_library_init() - registers the available SSL/TLS ciphers and digests.
+All link will be auto-added by doxygen
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+*/
+//-----------------------------------------------------------
+/**
+\page <!Component_Id>_data_structure_resources 4. Component data and resources
+\anchor <!Component_Id>_data_structure
+### 4.1 Element Data Structure
+The following data types are used by the Component:
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added a list of component data types
+Example:
+ - security_manager::SecurityQuery
+ - protocol_handler::ProtocolPacket
+All link will be auto-added by doxygen
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+The format of processing/saving/loading data is:
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added a list of formats
+Example:
+ - Json data according to APPLINK-19421
+ - Binary data array according to SDL Protocol Specification
+ + https://github.com/smartdevicelink/protocol_spec
+ - PEM certificates according to APPLINK-21512
+All link will be auto-added by doxygen
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+\anchor <!Component_Id>_resources
+### 4.2 Resource usage
+The following system resources are used by the Component:
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added all resource-related information
+All file, database or network reading
+An amount of processing by component data
+Example:
+ Resumption uses QBD/JSON database with configurable limitation 10 Mb
+ Request Controller Handle a configured amount of RPCs:
+ - A XXX count of messages from application in NONE level
+ + <LINK_TO_REQURMENT_XXX>
+ - A YYY count of messages per second for each application
+ + <LINK_TO_REQURMENT_YYY>
+ (!) In case of no such restrict it need to be clarified (!)
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+*/
+//-----------------------------------------------------------
+/**
+\page <!Component_Id>_references_and_history 5. References and history
+\anchor <!Component_Id>_references
+### 5.1 References
+- [Software Architecture Document](https://smartdevicelink.com/en/docs/sdl-core/master/software-architecture-document/table-of-contents/)
+
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Here need to be added a list of all related to component functionality
+references, including 3d-party libraries, documentation, requirements
+Example:
+ - [OpenSSL API](https://www.openssl.org/docs/manmaster/ssl/)
+ - [SQLite Documents](https://www.sqlite.org/docs.html)
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+\anchor <!Component_Id>_history
+### 5.2 Document history
+Document change history
+
+| Version | Data | Author/Editor | Change description |
+|-------------|------------|-----------------------------|---------------------|
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Example:
+| 0.1 | MM/DD/YYYY | [Name](Github account link) | Initially created |
+For more details follow
+https://adc.luxoft.com/confluence/display/PORTAL/Documentation+Control+Guideline#DocumentationControlGuideline-DocumentVersion
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+Document approve history
+
+| Version | Data | Author/Editor | Change description |
+|-------------|------------|-----------------------------|---------------------|
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Example:
+| 0.1 | MM/DD/YYYY | [Name](Github account link) | Initially created |
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+
+For more precise document change history follow github history -
+<!!!!!!!!!!!BEGIN_INSTRUCTION!!!!!!!!!!!!!>
+Example for this template:
+- https://github.com/smartdevicelink/sdl_core/commits/master/docs/SDL.SDD.Template.dox
+- https://github.com/smartdevicelink/sdl_core/commits/develop/docs/SDL.SDD.Template.dox
+<!!!!!!!!!!!END_INSTRUCTION!!!!!!!!!!!!!>
+*/ \ No newline at end of file