Clean Architecture: A Craftsman's Guide to Software Structure and Design by Robert C. Martin
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
Levels of code organization
Expressions, Statements, and Blocks
At various levels of the software structure (bundles, packages, types, and methods) the responsibilities and constraints of that structure is documented using Javadoc. 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.
ISO 25010 Software Quality Diagram Quality attributes in Software Architecture
     Def: Process/Workflow control of managing data      - Depends on Define
     Def: Generic capabilities/editors of managing content      - Does NOT depend on ATS      - Traceability      - Publishing      - Reporting      - Generic Editors      - Rendering      - Templates      - Word everything
     - Server only      - Art, Attr, Rel, Appl, Branch
     - Client only      - Art, Attr, Rel, Appl, Branch
     - framework.ui.skynet should be rolled into define.ide
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 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.
 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)
[bundle.id]   org.eclipse.osee.framework.resource.management.ResourceManager  enabled [component.id] [unsatisfied reference] info {component.id}
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 based IDE. The OSEE Server is built utilizing the Eclipse Equinox OSGi framework. 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, and utilizes the OSGi framework to manage the component bundles. Capabilities provided by 3rd party libraries and exposed in the Base Level API include:
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.
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.
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:
The object management provides the core building blocks for the centralized data model. The core building block for the data model consists of:
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.
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 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 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 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.)
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 and version management, the following list of properties applies. Requirements in OSEE:
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.
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:
The OTE Test Server provides:
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 to separate the user interface from the component capabilities. There are three cases that are important to understand.
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.
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.
Multi-Application Server deployment should be considered if:
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.
Images were created using Inkscape <!--and saved in a Scalable Vector Graphics format >