| - |
| The primary purpose of architecture is to support the life cycle of |
| the system. Good architecture makes the system easy to understand, |
| easy to develop, easy to maintain, and easy to deploy. The ultimate |
| goal is to minimize the lifetime cost of the system and to maximize |
| programmer productivity. |
| |
| [Clean Architecture: A Craftsman's Guide to Software Structure and |
| Design](https://learning.oreilly.com/library/view/clean-architecture-a/9780134494272/) |
| by Robert C. Martin |
| |
| ## System Overview |
| |
| The Open System Engineering Environment (OSEE) is an integrated, |
| extensible tool environment for large engineering projects. OSEE is more |
| than an integrated development environment (IDE), but is an integrated |
| product life-cycle development environment. The system captures project |
| data into a common user-defined data model providing bidirectional |
| traceability, project health reporting, status, and metrics which |
| seamlessly combine to form a coherent, accurate view of a project in |
| real-time. By building on top of a central data model, OSEE provides an |
| integrated configuration management, requirements management, |
| implementation, testing, validation, and project management system. All |
| of the components work together to help an organization achieve lean |
| objectives by reducing management activities, eliminating data |
| duplication, reducing cycle-time through streamlined processes, and |
| improving overall product quality through work flow standardization and |
| early defect detection.  OSEE is customizable to meet the needs of the |
| project. The teams working on the project, the roles they perform, and |
| the processes they follow are all configurable within OSEE. Traceability |
| is maintained from requirements through acceptance testing. The OSEE |
| High Level System Overview diagram illustrates the range of users and |
| the roles they may perform, which encompasses the entire product |
| life-cycle |
| |
| - Requirements Engineer can create, manage, track requirements |
| - Implementation Engineer may design, implement, integrate, unit test |
| the product from software to hardware. |
| - Test Engineer may perform different levels of integration or |
| acceptance testing, and provide comprehensive test reporting. |
| - Project Manager can track the progress of the product and gather |
| customized metrics in order to best gain insight into the project |
| status. |
| - System Administrator manages the user accounts and IT needs. |
| - Support Engineer can trace progress on customer issues |
| - Maintenance Engineer can run validation, verification, or diagnostic |
| tests on the target environment. |
| |
| ## Java Software Structures |
| |
| Levels of code organization |
| |
| - bundles contain packages |
| - packages contain types (classes and interfaces) |
| - classes contain methods |
| - methods contain blocks |
| - blocks contain statements |
| - statements contain expressions |
| |
| [Expressions, Statements, and |
| Blocks](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html) |
| |
| - bundle |
| explicitly declare the packages they use (their external |
| dependencies) and the packages they export for use by other bundles |
| - packages |
| are organized hierarchically and provide a namespace for the types |
| they contain |
| - classes |
| define objects and how they are created |
| - methods |
| defines the parameters it accepts and the type of value it returns |
| (or void) |
| - statements |
| forms a complete unit of execution |
| - expression statements - Assignment, method invocation, object |
| creation |
| - declaration statements - type variableName = value; i.e. int |
| daysInWeek= 7; |
| - control flow statements - decision making, looping, and |
| branching, enabling conditional execution of blocks of code |
| - decision-making statements (if-then, if-then-else, switch) |
| - looping statements (for, while, do-while) |
| - branching statements (break, continue, return) |
| |
| [Control Flow |
| Statements](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html) |
| |
| ### Responsibilities and Constraints |
| |
| At various levels of the software structure (bundles, packages, types, |
| and methods) the responsibilities and constraints of that structure is |
| documented using |
| [Javadoc](https://docs.oracle.com/javase/1.5.0/docs/tooldocs/solaris/javadoc.html#javadoctags). |
| For bundles, this information is in the package-info.java file in the |
| top level package of the bundle. For packages see the package-info.java |
| file in the corresponding package. For classes and methods their Javadoc |
| is at the top of the class or method. |
| |
| ## Quality Attributes in Software Architecture |
| |
| - Availability - part of reliability and is expressed as the ratio of |
| the available system time to the total working time |
| - Extensibility - The services/components provided with OSEE will be |
| reusable and/or extendable. |
| - Flexibility - The tailoring of OSEE for a specific project can be |
| accomplished through dynamic configuration. |
| - Interoperability - facilitates integration with third-party systems |
| - Maintainability - easily change to meet new business requirements; |
| easily change to meet non-functional requirements |
| - Openness - OSEE uses open standards to enable quality, standardized, |
| and well thought-through interfaces. |
| - Performance - low latency for individual requests |
| - Reliability - system's ability to continue to operate in the face of |
| various adverse conditions |
| - Reusability - |
| - Scalability - The system will scale to handle large numbers of |
| simultaneous events and managed projects. |
| - Security - prevent inappropriate access to information and other |
| malicious actions |
| - Supportability - support diagnosis of issues health checking |
| - Testability - the system allows performing automated tests with high |
| percentage of code coverage |
| - Usability - intuitive interface that is discoverable and minimizes |
| the overall effort required by the user |
| |
| [ISO 25010 Software Quality |
| Diagram](https://iso25000.com/index.php/en/iso-25000-standards/iso-25010) |
| [Quality attributes in Software |
| Architecture](https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732) |
| |
| ## OSEE Bundle Architecture |
| |
| - ats.api - Models and Interfaces (ide/server) |
| - ats.core - Business logic, implementation of interfaces (ide/server) |
| - ats.core.test - Junit (does not require server and db) |
| - ats.ide - Eclipse / Windows user interface; Implementation of client |
| specific interfaces |
| - ats.ide.demo - Demon Database business logic |
| - ats.ide.demo.feature - List of bundles that are needed for demo |
| - ats.ide.help.ui - Help User Interface - Generated from wiki |
| - ats.ide.integration.tests - AtsIde_Integration_TestSuite - Demo Db |
| Init and Integration tests (requires server/db) |
| - ats.rest - Integration of Interfaces specific to server; REST |
| implementations (should be renamed to ats.server) |
| - ats.rest.test - Tests for Server specific implementations (should be |
| renamed to ats.server.test) |
| - Anything with "rest" == server |
| - Anything with "integration" == integration tests require server/db; |
| run with launch configs |
| - Anything with ".test" (not integration) == Pure Java JUnit test |
| - Anything with "ide" == Eclipse bundles w/ OS User Interfaces |
| - Anything with "api" or "core" = shared client and server |
| |
| ## OSEE Bundle Structure/Layering |
| |
| - ATS - Configuration Management |
| |
| ` Def: Process/Workflow control of managing data` |
| ` - Depends on Define` |
| |
| - Define - Content Management |
| |
| ` Def: Generic capabilities/editors of managing content` |
| ` - Does NOT depend on ATS` |
| ` - Traceability` |
| ` - Publishing` |
| ` - Reporting` |
| ` - Generic Editors` |
| ` - Rendering` |
| ` - Templates` |
| ` - Word everything` |
| |
| - Orcs - Revision Control System including all things Data Model |
| |
| ` - Server only` |
| ` - Art, Attr, Rel, Appl, Branch` |
| |
| - Framework.skynet |
| |
| ` - Client only` |
| ` - Art, Attr, Rel, Appl, Branch` |
| |
| - Next Steps |
| |
| ` - framework.ui.skynet should be rolled into define.ide` |
| |
| ## OSEE is built upon Open Standards and Open Source |
| |
| - [OSGi Service Platform Core Specification Release 4, |
| Version 4.3](https://osgi.org/download/r4v43/osgi.core-4.3.0.pdf) |
| - [SQL:2003 |
| ISO/IEC 9075-2:2003](https://en.wikipedia.org/wiki/SQL:2003) |
| - [The Java Language Specification, Java SE 11 |
| Edition](https://docs.oracle.com/javase/specs/jls/se11/html/index.html) |
| - [Angular](https://angular.io) |
| - [Angular Material](https://material.angular.io) |
| - [JSON](https://www.json.org) |
| - [Java API for RESTful Web Services |
| (JAX-RS)](https://github.com/eclipse-ee4j/jaxrs-api) |
| |
| ## OSGi Declarative Services |
| |
| OSGi is the Dynamic Module System for Java. Its services model enables |
| application and infrastructure modules to communicate locally and |
| distributed across the network. |
| |
| OSGi Declarative Services are explained well here [Getting Started with |
| OSGi Declarative |
| Services](http://blog.vogella.com/2016/06/21/getting-started-with-osgi-declarative-services) |
| which is summarized below: |
| |
| ` OSGi services use a publish-find-bind mechanism.` |
| ` A bundle can provide/publish a service implementation of a given interface (type) for other bundles to consume.` |
| ` With declarative services, services are not registered or consumed programmatically.` |
| ` Instead, a Service Component is declared via a Component Description in an XML file in the OSGI-INF folder.` |
| ` The Component Description is processed by a Service Component Runtime (SCR), e.g. Equinox DS or Felix SCR) when a bundle is activated.` |
| |
| - Service API |
| - Service Provider |
| - Service Consumer |
| |
| ` OSGi services are dynamic so, the service consumer must react to life cycle events.` |
| ` Service Components have their own lifecycle, which is contained in the life cycle of a bundle.` |
| ` OSGi service retrieval is type-safe since it is done based on an interface (type)` |
| |
| ### OSGi Bundle Diagnostics Console Commands |
| |
| - lb or ss - to list bundles and their states |
| - bundle {bundleId} - |
| - diag (try with no arguments) |
| - help |
| |
| ### OSGi Component Diagnostics Console Commands |
| |
| - list | grep unsatisfied |
| |
| `[bundle.id] org.eclipse.osee.framework.resource.management.ResourceManager enabled` |
| `[component.id] [unsatisfied reference]` |
| `info {component.id}` |
| |
| - list {bundle.id} |
| - list | grep {component.name} |
| - info {component.id} |
| - inspect capability service |
| - services |
| |
| ### OSGi best practices |
| |
| - use declarative services and no Activators. |
| - Bundle-ActivationPolicy lazy |
| - Don't specify a Component name. Per [OSGi Compendium |
| Release 7 112.13.4.1](https://osgi.org/specification/osgi.cmpn/7.0.0/service.component.html#org.osgi.service.component.annotations.Component), |
| if not specified, the name of a Component is the fully qualified |
| type name of the class being annotated. |
| |
| ## OSEE Components |
| |
| OSEE follows a client server architecture with a thin client and one to |
| N servers. The client can exist in two different forms: One, a web |
| browser client; Two, an [Eclipse](http://wiki.eclipse.org/Main_Page) |
| based IDE. The OSEE Server is built utilizing the [Eclipse |
| Equinox](http://www.eclipse.org/equinox/) [OSGi |
| framework](http://www.osgi.org/Technology/WhatIsOSGi). All instances of |
| the server attach to a single centralized data repository. |
|  |
| |
| At the core of OSEE Application Server is the Object Revision Control |
| System Framework. On top of the framework sits four core components: |
| Action Tracking System (ATS), Define, Coverage, and Open System |
| Engineering Test Environment (OTE). The User Management component, which |
| allows for user authentication, verification and role based access |
| control (RBAC), is used by all of the OSEE components. |
|  OSEE is built on top of |
| [Eclipse](http://wiki.eclipse.org/Main_Page), and utilizes the [OSGi |
| framework](http://www.osgi.org/Technology/WhatIsOSGi) to manage the |
| component bundles. Capabilities provided by 3rd party libraries and |
| exposed in the Base Level API include: |
| |
| - Logging - Provide a consistent logging mechanism |
| - Console - User ability to issue command line operations on the |
| server |
| - [JAX-RS](http://en.wikipedia.org/wiki/Java_API_for_RESTful_Web_Services) |
| - Java REST API for web services |
| - Event Management - [ActiveMQ](http://activemq.apache.org/) is used |
| for event messaging |
| |
| ### OSEE Framework |
| |
| #### OSGi Framework |
| |
| The OSGi Framework Linked above provides the underlying support for the |
| OSEE Framework. The Eclipse implementation of OSGi is called Equinox. |
| The Equinox framework supports Extensions, Services, Declarative |
| Services and Spring-OSGi. Since OSEE is built on top of this extendable |
| foundation, it inherits these capabilities. OSEE developers have |
| primarily taken advantage of Declarative Services. |
| |
| #### Extensibility |
| |
| The layered approach provides extensibility to OSEE. The IDE Client is |
| extended through the use of Eclipse Extension Points. The OSEE |
| Application Server is extended through Declarative Services. As |
| described in the following sections, the data model is abstracted one |
| level up, so that a broad variety of specific data can be expressed in |
| the data model. The database interface complies with standard SQL-2003 |
| ("with" clause and row_number() is used), so relational databases |
| providing SQL-2003 compliance can be substituted in through the use of |
| JSON configuration files provided in OSEE. |
| |
| #### Object Revision Control System |
| |
| The heart of the OSEE Framework is the Object Revision Control System |
| (ORCS). ORCS provides the foundation the rest of the components are |
| built on top of. The key capabilities provided by ORCS are: |
| |
| - Object Management - The definition and persistence of any object of |
| any simple or complex type can be managed, and type safety is |
| ensured on all operations. |
| - Data Model - the underlying data model is configurable per project |
| - Version management - baselines and branching for a project are |
| managed |
| - Generic UI editor framework - customized editors can be created |
| - Searching/Indexing |
| - Transaction Management |
| - Administration |
| - Data Import/Export - external systems can supply or consume data |
| |
| #### Data Model |
| |
| The object management provides the core building blocks for the |
| centralized data model. The core building block for the data model |
| consists of: |
| |
| - **Artifact** - The fundamental object in OSEE. All data objects |
| stored within OSEE are artifacts. Artifacts are strongly typed and |
| can store any data throughout the systems engineering lifecycle. |
| Artifacts have a Description, Type, and set of 1..n Attributes. Any |
| type of data can be stored as an artifact; not only systems |
| engineering data (such as processes and requirements), but also |
| anything from meeting minutes to architecture diagrams. |
| - **Attribute** - A specific piece of data attached to an Artifact. |
| Attribute consists of Description, Type, default value (optional), |
| Min occurrences in an artifact, Max occurrences in an artifact. An |
| Attribute can be a basic type or a more complex type like another |
| Artifact. |
| - **Relation** - Defines the relationship (link) between two |
| artifacts. The relation is strongly typed, which means it can only |
| be used to link the specified artifact types. The relation allows |
| the multiplicity between the two types to be specified as: 1..1, |
| 1..\*, \*..1, \*..\* |
| |
|  |
| |
| #### Version Management |
| |
| Version management allows for the parallel development of different |
| variations of a product, as well as the sharing of common information |
| across similar products. Changes made to one version baseline can be |
| merged to another version baseline in order to maintain commonality as |
| desired.  |
| |
| ### Action Tracking System ([Details](/docs/OSEE/Architecture/ATS_Details.md "wikilink")) |
| |
| The Action Tracking System (ATS) is a tightly integrated tracking system |
| that manages changes throughout the different aspects of a product's |
| lifecycle. ATS provides integrated change management to all OSEE |
| applications through customizable work processes (workflows) and ensures |
| traceability from start to completion. ATS utilizes the core |
| capabilities provided by the [ORCS](#OSEE_Framework "wikilink") layer. |
| |
| ATS is highly configurable and can be configured to meet any project's |
| work tracking needs. The level of detail of work items, team |
| organization, and process to complete work item types are all |
| configurable for a project. The configuration is realized through the |
| use of the [data model](#Data_Model "wikilink") to create the core |
| building blocks of ATS: Action, Actionable Item, Team Definition, |
| Workflow Definition, Task, and Version. |
| |
| At the highest level, an item of work to be completed is referred to as |
| an Action. Actions are created as work is needed for a project. |
| |
| A project can specify a work hierarchy for the different kinds of work |
| tasks that need to be performed and tracked. Each defined work category |
| is referred to as an Actionable Item (AI). An Action can be composed of |
| a single or multiple AIs. |
|  |
| |
| A team can be assigned to work on an AI. The team definition is similar |
| to an organization chart, or a logical grouping of teams that perform |
| certain types of work. |
|  |
| |
| Each Team Definition has a Workflow Definition (or state machine) that |
| defines the process that team uses to track and complete the work. Each |
| state of the workflow can have configured conditions or fields that are |
| required to transition. A Review can be attached to a state and can |
| block the transition until successfully completed. |
|  A Task is the lowest level of work, |
| and is used to allocate the work to individuals. A Task can be |
| associated with a particular state or a state can have multiple tasks |
| that need completing before the workflow can advance to the next state. |
|  |
| |
| A Version is used to group a set of Actions together into a "build", |
| "release", "edition", etc. A common set of actions can apply to more |
| than one version enabling data sharing across similar or variant |
| projects. The version capability relies on the [version |
| management](#Version_Management "wikilink") framework. |
| |
| Status data associated with tasks can be used to create metrics that |
| roll-up to the Workflow, which can roll up to the Team, which can |
| roll-up to the Action, which roll-up to the project. Metrics can be |
| obtained for any specified grouping within the project (e.g. Team, |
| Version, etc.) |
| |
| [ATS Architecture Details](/docs/OSEE/Architecture/ATS_Details.md "wikilink") |
| |
| ### Define |
| |
| Define is the requirements management component of OSEE. Define provides |
| support for concurrent and distributed requirements development. |
| Requirements can be imported from other sources to provide comprehensive |
| and coherent requirements management across the product life-cycle. |
| |
| Since Define uses the OSEE [data |
| model](/docs/OSEE/Architecture.md#Data_Model "wikilink") and [version |
| management](/docs/OSEE/Architecture.md#Version_Management "wikilink"), the |
| following list of properties applies. Requirements in OSEE: |
| |
| - can be hierarchical |
| - can be integrated into the processes and workflows |
| - will have bidirectional traceability from beginning to end of the |
| product life-cycle |
| - will have meaningful review metrics |
| - can support parallel project development |
| |
| ### Coverage |
| |
| Coverage provides for the configuration management and tracking of |
| coverage disposition efforts throughout a project. OSEE allows for the |
| configuration of what is tracked for verification and validation on the |
| project. For example, in a software project the lines of code in the |
| software can be exercised through software tests, and tools can |
| determine how many of the software lines of code where executed during |
| the tests. A report is generated and can be imported by Coverage and a |
| complete coverage report generated. |
|  The |
| Coverage is configurable through the creation of a Coverage Package. The |
| Coverage Package configuration includes all the inputs (unit tests, test |
| scripts, coverage test report imports), traceability (results to tests, |
| tests to requirements) and outputs (reports, metrics) desired. The |
| Coverage Package will also allow for checking the differences between |
| test runs by comparing different instances of test result imports. |
| |
| ### Open System Engineering Test Environment |
| |
| The Open System Engineering Test Environment (OTE) is an integrated |
| approach to product testing, and follows a client/server architecture. |
| The OTE client is part of the OSEE client, while the OTE Server is |
| separate from the OSEE Application Server. |
| |
| The OTE Client provides: |
| |
| - Test Manager for configuration of tests and test environment |
| - Automated test execution |
| - An API to create simulated test components (models) |
| - Managing of tests (unit tests, scripts, etc.) |
| - Real-time test result monitoring, recording, and playback |
| - Test result reporting and |
| [coverage](/docs/OSEE/Architecture.md#Coverage "wikilink") |
| |
| The OTE Test Server provides: |
| |
| - A test execution manager |
| - A simulated test environment that manages/executes test models |
| - Managing I/O connections to the target test environment |
| - Managing the test environment resources |
| - Relay real-time test data to client |
| |
|  |
| |
| ## OSEE Functional Use Cases |
| |
| ## OSEE Deployment |
| |
| OSEE is designed to work in a collaborative environment, supporting many |
| developers working on the same data. One of the many considerations to |
| help accomplish this is the use of a multi-tier architecture to maintain |
| a common set of underlying data for all. Specifically, OSEE utilizes a |
| [three tier |
| paradigm](https://en.wikipedia.org/wiki/Multitier_architecture) to |
| separate the user interface from the component capabilities. There are |
| three cases that are important to understand. |
| |
| ### Single User Deployment |
| |
| This is the default deployment if you download OSEE from the web. The |
| embedded HSQL database will be automatically created when the server is |
| run in a command shell. The client is configured to connect to the local |
| server by default.  |
| |
| ### Multi-User, Single Application Server Deployment |
| |
| The multi-user deployment can be achieved by installing OSEE clients on |
| separate machines that have network access to the server machine. The |
| client .ini file needs to be configured to connect to the Application |
| Server machine. A more robust database can be configured for the |
| Application Server via the database [JOSN configuration |
| file](/docs/OSEE/Developers_Guide.md#Server_OSGi_properties "wikilink"). |
| |
|  |
| |
| ### Multi-User, Multi-Application Server Deployment |
| |
| Multi-Application Server deployment should be considered if: |
| |
| - higher availability for the application server is required |
| - the Application Server becomes over burdened, impacting server |
| response time |
| |
| In these cases, load balancing across multiple application servers is |
| encouraged. OSEE Application servers are designed to support load |
| balancing, and do not require the client to connect to a specific |
| application server, and do not maintain lists of the clients they |
| service. The load balancer is allowed to distribute client requests |
| according to its configured distribution scheme. |
|  |
| |
| ## Links |
| |
| Images were created using [Inkscape](http://inkscape.org/) \<\!--and |
| saved in a [Scalable Vector |
| Graphics](http://en.wikipedia.org/wiki/Scalable_Vector_Graphics) format |
| \> |