1. Introduction and Goals
Our goal is to create DeChat, a descentralized chat app based on the solid specifications. This project will be developed by a team of five members.
1.1. Requirements Overview
1.2. Quality Goals
1.3. Stakeholders
2. Architecture Constraints
Constraint | Explanation |
---|---|
Project budget |
Not having a budget for the project limits the resources available for its realization |
Documentation |
The documentation must follow the structure defined in the arc42 template |
Time limit |
The project must be completed by April 30, 2019, and there must be a small functional prototype by March 12, 2019 |
Decentralized architecture |
The system will be based on a decentralized architecture where data storage is separated from the application |
SOLID technology |
Data decentralization should be done using Inrupt’s SOLID technology, whereby data is stored on personal PODs |
Language |
Due to the requirement to use SOLID, the preferred programming language for application development is Javascript, along with the HTML and CSS languages |
Version Control |
Version control must be performed with Git, using the repository hosted in the GitHub service. |
3. System Scope and Context
3.1. Business Context
3.2. Technical Context
4. Solution Strategy
4.1. Technological decisions and reaching the quality goals
4.2. Design Patterns
4.3. Organizational decisions
5. Runtime View
Here we can find a general view of the full process of a user jorney:
6. Deployment View
In the following table it is described the way it is related the technical infraestructure with the environment, the hardware given, processors, channels and so, as well as the mapping of software building blocks to that infraestructure elements:
Node/Element | Description |
---|---|
User workspace |
The computer which the user is going to chat from as well as their environment. |
Browser |
Any recent browser to access the DeChat page application. Almost every single browser, such as Chrome, Firefox, Safari, Opera or Edge should work. |
SOLID (environment) |
The SOLID server which the user interacts with. Here the user is allowed to access the inbox of his SOLID POD as well as his friend’s one, and in the same way the main user has no permission to enter to the private folder of the friend’s POD, though he does for his own. |
7. Cross-cutting Concepts
Here we find a diagram about the cross-cutting elements about the environment of the chat:
8. Design Decisions
9. Quality Requirements
As a way of sumarizing in a graphical form the requirements of the system with less priority, which is, those ones that will not create high risks if they are not fully achieved is the following kind of quality tree:
9.1. Quality Scenarios
10. Risks and Technical Debts
Problem | Reason | Possible solution |
---|---|---|
Poor knowledge of JavaScript, Angular, React… |
More comfort with other environments (e.g. Java) |
Read documentation and perform small tests with these tools and languages |
Low level of knowledge about Solid |
Inexperience with this environment |
Read documentation about Solid to learn more about the environment |
Problems creating pods with Solid to decentralize the application instead of creating a unified database |
Almost all the code implemented by the memebers of the group to manage data has been done through a centralized database |
Perform small tests with a Solid pod |
Inexperience to realize a project without a recommended architecture |
In great part of the projects realized by the members of the team we were indicated more or less the tools to use |
To find the best tools to speed up the process of codification |
Github |
Inexperience in working on a repository with several branches |
Read documentation about Github and be careful |
11. Glossary
The most important domain and technical terms used in the system itself. Order alphabetically A-Z.
Term | Definition |
---|---|
Angular |
TypeScript based open source web application framework. |
Arc42 |
Template for architecture communication and documentation. |
Code Coverage |
A measure (percentage) in software tests that measures the degree to which a program’s source code has been tested. It serves to determine the quality of the test that is performed. |
Cucumber |
Is a software tool used by computer programmers for testing other software. It runs automated acceptance tests written in a behavior-driven development (BDD) style. |
Decentralized |
To keep data with yourself and not in an external server. |
Integration Testing |
Is a level of software testing where individual units are combined and tested as a group. The purpose of this level of testing is to expose faults in the interaction between integrated units. |
Inrupt |
The company risponsible of the Solid project, launched by Tim Berners-Lee. |
Jasmine |
Is a javascript testing framework that supports a software development practice called Behaviour Driven Development, or BDD for short. It’s a specific flavour of Test Driven Development (TDD). |
Karma |
Is a tool which lets us spawn browsers and run jasmine tests inside of them all from the command line. The results of the tests are also displayed on the command line. |
Node.js |
Open source, JavaScript runtime environment that executes JavaScript code outside of a browser. |
Solid POD |
[Personal Own Data] Personal storage space which you can give people as well as apps access to write or read data from. |
Protractor |
Protractor is an end-to-end test framework for Angular and AngularJS applications. Protractor runs tests against your application running in a real browser, interacting with it as a user would. |
RDF |
[Resource Description Framework] Is a standard model for data interchange on the Web. |
rdflib.js |
Javascript RDF library for browsers and Node.js. |
React |
JavaScript library for bulding user interfaces. |
Solid |
[Social Linked Data] Web decentralization project led by Tim Berners-Lee, the inventor of the World Wide Web. |
Stakeholders |
All the people that, for certain reasons, are interested in a project. |
Software Architecture |
High level structures of a software system and the discipline of creating such structures and systems. |
Travis CI |
It is a distributed and hosted continuous integration service that is used to create and test software projects hosted on GitHub. |
TypeScript |
A free and open source programming language developed and maintained by Microsoft. It is a superset of JavaScript, which has added optional types to JavaScript that support tools for large-scale JavaScript applications for any browser, for any host, on any OS |
WebID |
Is a method for internet services and members to know who they are communicating with. |
About arc42
arc42, the Template for documentation of software and system architecture.
By Dr. Gernot Starke, Dr. Peter Hruschka and contributors.
Template Revision: 7.0 EN (based on asciidoc), January 2017
© We acknowledge that this document uses material from the arc 42 architecture template, http://www.arc42.de. Created by Dr. Peter Hruschka & Dr. Gernot Starke.