18.8.2009 ARCHITECTURAL DESIGN DOCUMENT TEMPLATE Software Engineering Project Course Kuje Research Group University of Helsinki http://cs.helsinki.fi/group/ohtu/ Based on "HP Architecture Template for Documenting Software and Firmware Architectures" http://cs.helsinki.fi/group/kuje/misc/HP_arch_template_vers13_withexamples.pdf All parts must be constantly updated. Diagrams should be used where needed. 1. Introduction: Architectural Overview - High-level description of overall architecture - Main functionalities described in natural language 2. System Purpose: Requirements 2.1 Functional Requirements --> Bullet point list --> e.g. must be able to bill customer credit cards, must be able to insert a code snippet to customers site. etc. 2.2 Non-functional Requirements --> Bullet point list --> e.g. expected unit test ratio, expected test coverage, expected performance 3. Structure 3.1 Overview: overall structure --> Diagram of all components and their collaboration with each other 3.2 Components for each component: - description of the component - components responsibilities - interfaces that the component offers - constraints - collaboratoring components for each collaborating component: - description of the collaboration - interfaces used - constraints --> Just short listing of every component what should say, e.g. KujeProcessor is responsible for XX and YY, interfaces: removes processed data from kuje-table, inserts data for WebApp, collaborates: with KujeServer and WebApp, but KujeServer does not collaborate (directly) with WebApp. collaborates: KujeServer: takes kuje records from KujeServer database and afterwards removes them WebApp: updates the reports which are represented by WebApp for each component interface: - description of the interface - operations - constraints on the order of operation 4. Dynamic Behavior 4.1 Scenarios: main scenarios when the system is running for each scenario: - type: system operation or use case - description of the scenario - how scenario interacts with components 5 Other Views 5.1 Process: in a running system, how components are divided as processes --> e.g. There are can be multiple instances of KujeProcessor, but can there be multiple instances of KujeServer? --> Has multiple instances of KujeProcessor ever been tested? Has multiple instances of KujeServer ever been tested? 5.2 Development: Where in code the codebase components are implemented 5.3 Physical: How components are separated in the hardware level --> e.g. Division between the frontend and the backend; list also all physical dependencies between components, e.g. "KujeProcessor and WebApp must stay on the same physical server because..." 5.4 Deployment: How components are deployed and possible constraints