HeaderSIS.jpg

Difference between revisions of "IS480 Team wiki:2017T1 Ducky King Finals"

From IS480
Jump to navigation Jump to search
 
(13 intermediate revisions by 3 users not shown)
Line 49: Line 49:
 
[[File:DuckyKing Total Meetings.png|430px|center]]<br>
 
[[File:DuckyKing Total Meetings.png|430px|center]]<br>
  
[[Image:DuckyKingPoster.png|link=https://wiki.smu.edu.sg/is480/img_auth.php/a/a1/DuckyKingPosterWeb.pdf|center]]<br>
+
<center>
 
+
[[Image:DuckyKingPoster.png|link=https://wiki.smu.edu.sg/is480/img_auth.php/a/a1/DuckyKingPosterWeb.pdf]]
 +
[[Image:DuckyKing Finals Slides.png|link=/]]
 +
[[Image:DuckyKingMidtermMin.png|link=https://wiki.smu.edu.sg/is480/IS480_Team_wiki%3A2017T1_Ducky_King_Meeting_Minutes]]
 +
<br>
 +
</center>
 
====<div style="border-bottom:2px dashed #FFA30D; padding: 15px; font-weight: bold; line-height: 0.3em;  font-size:14px; text-transform: uppercase; font-family:helvetica;">Project Highlights</div><br>====
 
====<div style="border-bottom:2px dashed #FFA30D; padding: 15px; font-weight: bold; line-height: 0.3em;  font-size:14px; text-transform: uppercase; font-family:helvetica;">Project Highlights</div><br>====
 
[[File:DuckyKing Project Highlights Finals.png|600px|center]]
 
[[File:DuckyKing Project Highlights Finals.png|600px|center]]
Line 88: Line 92:
  
 
Thus, if the features are defined much earlier and clearly, the burndown chart would look like this.
 
Thus, if the features are defined much earlier and clearly, the burndown chart would look like this.
[[File:DuckyKing_ReleaseBurndownNew.JPG|900px|center]]
+
[[File:DuckyKing ReleaseBurndownNew.JPG|900px|center]]
  
 
====<div style="border-bottom:2px dashed #FFA30D; padding: 15px; font-weight: bold; line-height: 0.3em;  font-size:14px; text-transform: uppercase; font-family:helvetica;">Sprint Velocity Chart</div><br>====
 
====<div style="border-bottom:2px dashed #FFA30D; padding: 15px; font-weight: bold; line-height: 0.3em;  font-size:14px; text-transform: uppercase; font-family:helvetica;">Sprint Velocity Chart</div><br>====
Line 140: Line 144:
  
 
===<div style="background: #FF7504; padding: 15px; font-weight: bold; line-height: 0.3em; font-size:16px; font-family:helvetica"><font color= #FFFFFF>Bug Metrics</font></div>===
 
===<div style="background: #FF7504; padding: 15px; font-weight: bold; line-height: 0.3em; font-size:16px; font-family:helvetica"><font color= #FFFFFF>Bug Metrics</font></div>===
 +
====<div style="border-bottom:2px dashed #FFA30D; padding: 15px; font-weight: bold; line-height: 0.3em;  font-size:14px; text-transform: uppercase; font-family:helvetica;">Internal Testing Lifecycle</div><br>====
 +
<center>Our team has come up with the following testing lifecycle for our internal testing process. More details can be found on out internal testing wiki page [[IS480 Team wiki:2017T1 Ducky King User Testing|here]]</center>
 +
[[File:DK Test Lifecycle.png|center]]
 +
<br>
 +
<br>
 +
 +
====<div style="border-bottom:2px dashed #FFA30D; padding: 15px; font-weight: bold; line-height: 0.3em;  font-size:14px; text-transform: uppercase; font-family:helvetica;">Internal Testing</div><br>====
 
[[File:DuckyKing Bug Table.png|500px|center]]
 
[[File:DuckyKing Bug Table.png|500px|center]]
 
<center>
 
<center>
Line 161: Line 172:
 
[[File:DuckyKing Proj Risks.png|center]]
 
[[File:DuckyKing Proj Risks.png|center]]
  
==Technical Complexity==
+
==<div style="background: #FF7504; padding: 15px; font-weight: bold; line-height: 0.3em; font-size:16px; font-family:helvetica"><font color= #FFFFFF>Technical Complexity</font></div>==
 
::1. '''Deployment Architecture'''
 
::1. '''Deployment Architecture'''
 
::The following shows FlowLabs deployment architecture. We set up multiple servers to simulate how different Flow Nodes interact with each other.  
 
::The following shows FlowLabs deployment architecture. We set up multiple servers to simulate how different Flow Nodes interact with each other.  
Line 186: Line 197:
 
<br>
 
<br>
 
<br>
 
<br>
::6. '''Internal Testing'''
+
::6. '''Flow Admin'''
::Our team has come up with the following testing lifecycle for our internal testing process. More details can be found on out internal testing wiki page [[IS480 Team wiki:2017T1 Ducky King User Testing|here]]
+
[[File:Ducky King System health.PNG|800px|center]]
[[File:DK Test Lifecycle.png|center]]
+
<br>
::7. '''UAT'''
+
<br>
 +
[[File:Ducky King Notification.PNG|800px|center]]
 +
<br>
 +
<br>
 +
[[File:Ducky King Peer managment.PNG|800px|center]]
 +
<br>
 +
<br>
 +
::7. '''Logging'''
 +
[[File:Ducky King Kibana.PNG|800px|center]]
 +
<br>
 +
<br>
 +
[[File:Ducky King Logging.PNG|800px|center]]
 +
<br>
 +
<br>
 +
 
 +
 
 +
===<div style="background: #FF7504; padding: 15px; font-weight: bold; line-height: 0.3em; font-size:16px; font-family:helvetica"><font color= #FFFFFF>Quality of Product</font></div>===
 +
::1. '''Coding Standards'''
 +
::As with all freelance project, developers often take the path of least resistance and develop applications that are not compliant with industry best practices. This usually takes place because the project manager does not take a hard stance right at the start of the project about the coding standards to use. Even after setting the coding standards, there is usually no one to ensure the adherence to the standards.
 +
 
 +
::This is why we started this project differently. When we first started the project, we decided on the coding standard that we would be adhering to. We decided to follow the AirBnb JavaScript style guide as it is one of the most followed coding style guide. It is followed by the likes of Billabong, Evernote and General Electric, making it the industry standard for coding practices. The AirBnb style guide is being enforced by our Software Architect Kong Yu Jian.
 +
 
 +
::This is to ensure consistent coding styles among the developers. Such as the number of spaces, the use of double quotes, single quotes and backticks. This will allow for greater maintainability of the codes and ensures the code base remain adaptable to changes.
 +
<br>
 +
::2. '''Git Workflow'''
 +
::Our team adopts the Git Workflow. The main reason behind it is because it provides a robust framework for managing project of this scale. This is because at any point in time, there may be multiple developers working on different features at the same time. Git Workflow allows multiple feature developments to carried out in parallel.
 +
::This workflow is very similar to that of the Feature Branch Workflow. The main difference is that it assigns very specific roles to different branches and defines how and when they should interact with each other. It also uses individual branches for preparing, maintaining, and recording releases.
 +
[[File:ducky_king_git_workflow.JPG|600px|center]]
 +
<div style="text-align: center;">[https://www.atlassian.com/git/tutorials/comparing-workflows#gitflow-workflow Git Workflow]</div><br>
 +
<br>
 +
::3. '''Usage of Adapter Pattern'''
 +
::The middleware has to return responses in appropriate structure so that it is easier for the for the consuming application to extract the relevant information from the request. As described, the middleware has to communicate with other system as such the database and the ethereum node. The data used in the communication is of various format and it is the responsibility of the middleware to ensure that it conforms to the required format when communicating with other subsystems within the FlowNode. As this project is undergoing continuous development, one of the main design consideration is to ensure the design of codes is loosely coupled. One of the approach to resolve this challenge is to use Adapter pattern in designing software components.
 +
 
 +
::Adapter pattern is a software design pattern (Wrapper) that allows the interface of an existing class to be used as another interface. Through adapter pattern, we can encourage a high level of consistency of the response outputs. Furthermore, it helps to decouple the classes and allow us to reuse existing codes.
 +
[[File:ducky_king_object_adapter.png|450px|center]]
 +
<div style="text-align: center;">[https://en.wikipedia.org/wiki/Adapter_pattern Adapter Pattern]</div><br>
 +
<br>
 +
::4. '''Object Relational Mapping (ORM)'''
 +
::ORM is a programming technique that allows for the conversion of incompatible types in object-oriented programming languages, especially between a data store and programming objects.
 +
::SQL codes and related wrapper classes requires a significant amount of effort to develop. Furthermore, a prior design of the database is required as well. When using ORM libraries/tools, it will reduce the need of the database design as the tool is able to create the relational model within the database based upon the declared models within the codebase. Additionally, the query is done at the model level. ORM libraries/tools provide functional calls to allow for Create-Read-Update-Delete (CRUD) operation. This means that there is no need for any SQL codes to be written. ORM allows the queries to be done at the host object-oriented programming language level. Thus, there is no need for SQL codes to be written.
 +
::By leveraging upon ORM libraries/tools, the code based is reduced and it allows for greater degree of code reuse by leveraging upon existing ORM libraries/tools.
 +
<br>
 +
::5. '''Logging'''
 +
::Logging is the recording of implementation level events that happen as the program is running (methods get called, objects are created, etc.). From a maintenance perspective, the logs serves as an important record of events which occurred before the application encounters an error. It gives a greater degree of visibility of the workings of the application, thus, it allows errors/issues to be identified and isolated quickly.
 +
::The logs is configured to captured all domain-related events. For example, a “Create Auction” transaction is logged and stored. In the event of potential misuse or incident, the logs forms an audit trail of the sequence of events. This will greatly assist any investigation efforts for any potential breach or malicious behavior by users.
 +
<br>
 +
::6. '''UAT'''
 
::In order to ensure quality of our developed products, we have completed 3 rounds of User Acceptance Tests, which can be shown below:<br>
 
::In order to ensure quality of our developed products, we have completed 3 rounds of User Acceptance Tests, which can be shown below:<br>
 
::The UAT details for FlowLabs Middleware can be found [[IS480 Team wiki:2017T1 Ducky King User Testing 1|here]]
 
::The UAT details for FlowLabs Middleware can be found [[IS480 Team wiki:2017T1 Ducky King User Testing 1|here]]
 
::The UAT details for FlowAdmin Dashboard can be found [[IS480 Team wiki:2017T1 Ducky King User Testing 2|here]]
 
::The UAT details for FlowAdmin Dashboard can be found [[IS480 Team wiki:2017T1 Ducky King User Testing 2|here]]
  
===<div style="background: #FF7504; padding: 15px; font-weight: bold; line-height: 0.3em; font-size:16px; font-family:helvetica"><font color= #FFFFFF>Project Deliverables</font></div>===
+
 
 +
 
 +
====<div style="border-bottom:2px dashed #FFA30D; padding: 15px; font-weight: bold; line-height: 0.3em; font-size:14px; text-transform: uppercase; font-family:helvetica;">Project Deliverables</div><br>====
 
<center>
 
<center>
 
{| class="wikitable" style="background-color:white;"
 
{| class="wikitable" style="background-color:white;"

Latest revision as of 11:30, 21 November 2017

DuckyKingLogo.png


Duckyking home logo.png   HOME

 

Duckyking about us.png   ABOUT US

 

Duckyking project overview.png   PROJECT OVERVIEW

 

Duckyking project management.png   PROJECT MANAGEMENT

 

Ducky king documentation.png   DOCUMENTATION

 


DuckyKing Finals Header.png


Project Progress Summary

DuckyKing Project Progress Finals.png


DuckyKing Total Meetings.png


DuckyKingPoster.png DuckyKing Finals Slides.png DuckyKingMidtermMin.png

Project Highlights

DuckyKing Project Highlights Finals.png

X-Factor

DuckyKing Finals X-factor.png


Overall Project Scope

DuckyKingMoooon.png



DuckyKing Finals Scope.png


Project Management

Project Schedule

*Changes to our schedule have been denoted in red

DuckyKing Finals Schedule.png

Project Metrics

DuckyKing Finals ProjectOverview.JPG

The development of all functionalities has been completed. Thus, we have completed the sprint points for the final Sprint 14. However, what is left is the official handover and documentation on our solution.

Release Burndown Chart

DuckyKingReleaseBurndown.JPG

The release burndown shows the state of work burn, during the entire period. However due to the continuous request feature request, additional sprint points are continuously added to the product backlog and the sprints.

Thus, if the features are defined much earlier and clearly, the burndown chart would look like this.

DuckyKing ReleaseBurndownNew.JPG

Sprint Velocity Chart

DuckyKingVelocityCharts.JPG

Scrum Sprint Backlogs Chart

As mentioned in the earlier section, all functions has been completed. The reason why Sprint 14 still exist is because of the uncertainty of the milestone dates (Finals) and also to cater time for documentation and handover.

DuckyKing Sprint14.JPG


Bus Factor

A project’s bus factor (or truck factor) is a number equal to the number of team members who, if run over by a bus, would put the project in jeopardy. The smallest bus factor is 1. Larger numbers are preferable. In order to increase our project’s bus factor, our team has tried our best to maintain collective code ownership and ensure frequent communication among team members. Our final bus factor is 4.

BusFactorOverview.JPG

Production Ready Metrics

Production Ready Metrics is updated after every sprint. The metric also guides the team in sprint planning.


Production Ready Metrics.png


Bug Metrics

Internal Testing Lifecycle

Our team has come up with the following testing lifecycle for our internal testing process. More details can be found on out internal testing wiki page here
DK Test Lifecycle.png



Internal Testing

DuckyKing Bug Table.png

Ducky king Updated bugs found.png DuckyKing Bug Score.png Ducky king Updated total bugs.png

The Bug Found shows how many bugs there are in each sprint, the Bug Score shows the overall bug score for each sprint and the Total Test Cases shows the number of test cases that are created for testing. The testing is separated to 2 kinds of testing, automated and manual testing. The automated testing is done through testing libraries such as Mocha, Chai and Truffle. The team aims to resolve the bugs before the sprint ends and carry as few bug as possible to the next sprint. If there are unresolved bugs, the team will assess the bug's severity and resolve the bugs that are more severe first. The team will also follow the mitigation plan in place when fixing the bugs. If the bug score is 10 and below, the bugs can be fixed during the buffer time. If the score is more than 10 and less than 20, the team will use the planned debugging time in the sprint to resolve the bugs. If the bug score is higher than 20, the scrum master will allocate additional manpower to resolve the bugs immediately. The scrum master reschedules the project if necessary.

Automated Testing

Our team firmly believes that automated testing is essential in development and especially so for new technologies such as ours. As such, we used 2 automated testing, 1 for the solidity contracts and another for the middleware. For the middleware, we use Mocha and Chai, a Javascript unit testing library. For the solidity contracts, we used the Truffle unit testing library. The automated test cases allows us to easily find out where the errors are in development. Below is an example of how Mocha and Chai testing is done on the middleware.

Mochachaitesting1.PNG Mochachaitesting2.PNG

Project Risks


DuckyKing Proj Risks.png

Technical Complexity

1. Deployment Architecture
The following shows FlowLabs deployment architecture. We set up multiple servers to simulate how different Flow Nodes interact with each other.
Ducky King Deployment Architecture.PNG



2. Job Queue Mechanism
Ducky King Job Queue.PNG



3. Smart Contracts
Ducky King Smart contracts.PNG



Ducky King Technical Workaround.PNG



4. Solidity
Ducky King Solidity.PNG



5. Encryption & Privacy
Ducky King Encryption.PNG



6. Flow Admin
Ducky King System health.PNG



Ducky King Notification.PNG



Ducky King Peer managment.PNG



7. Logging
Ducky King Kibana.PNG



Ducky King Logging.PNG




Quality of Product

1. Coding Standards
As with all freelance project, developers often take the path of least resistance and develop applications that are not compliant with industry best practices. This usually takes place because the project manager does not take a hard stance right at the start of the project about the coding standards to use. Even after setting the coding standards, there is usually no one to ensure the adherence to the standards.
This is why we started this project differently. When we first started the project, we decided on the coding standard that we would be adhering to. We decided to follow the AirBnb JavaScript style guide as it is one of the most followed coding style guide. It is followed by the likes of Billabong, Evernote and General Electric, making it the industry standard for coding practices. The AirBnb style guide is being enforced by our Software Architect Kong Yu Jian.
This is to ensure consistent coding styles among the developers. Such as the number of spaces, the use of double quotes, single quotes and backticks. This will allow for greater maintainability of the codes and ensures the code base remain adaptable to changes.


2. Git Workflow
Our team adopts the Git Workflow. The main reason behind it is because it provides a robust framework for managing project of this scale. This is because at any point in time, there may be multiple developers working on different features at the same time. Git Workflow allows multiple feature developments to carried out in parallel.
This workflow is very similar to that of the Feature Branch Workflow. The main difference is that it assigns very specific roles to different branches and defines how and when they should interact with each other. It also uses individual branches for preparing, maintaining, and recording releases.
Ducky king git workflow.JPG
Git Workflow



3. Usage of Adapter Pattern
The middleware has to return responses in appropriate structure so that it is easier for the for the consuming application to extract the relevant information from the request. As described, the middleware has to communicate with other system as such the database and the ethereum node. The data used in the communication is of various format and it is the responsibility of the middleware to ensure that it conforms to the required format when communicating with other subsystems within the FlowNode. As this project is undergoing continuous development, one of the main design consideration is to ensure the design of codes is loosely coupled. One of the approach to resolve this challenge is to use Adapter pattern in designing software components.
Adapter pattern is a software design pattern (Wrapper) that allows the interface of an existing class to be used as another interface. Through adapter pattern, we can encourage a high level of consistency of the response outputs. Furthermore, it helps to decouple the classes and allow us to reuse existing codes.
Ducky king object adapter.png
Adapter Pattern



4. Object Relational Mapping (ORM)
ORM is a programming technique that allows for the conversion of incompatible types in object-oriented programming languages, especially between a data store and programming objects.
SQL codes and related wrapper classes requires a significant amount of effort to develop. Furthermore, a prior design of the database is required as well. When using ORM libraries/tools, it will reduce the need of the database design as the tool is able to create the relational model within the database based upon the declared models within the codebase. Additionally, the query is done at the model level. ORM libraries/tools provide functional calls to allow for Create-Read-Update-Delete (CRUD) operation. This means that there is no need for any SQL codes to be written. ORM allows the queries to be done at the host object-oriented programming language level. Thus, there is no need for SQL codes to be written.
By leveraging upon ORM libraries/tools, the code based is reduced and it allows for greater degree of code reuse by leveraging upon existing ORM libraries/tools.


5. Logging
Logging is the recording of implementation level events that happen as the program is running (methods get called, objects are created, etc.). From a maintenance perspective, the logs serves as an important record of events which occurred before the application encounters an error. It gives a greater degree of visibility of the workings of the application, thus, it allows errors/issues to be identified and isolated quickly.
The logs is configured to captured all domain-related events. For example, a “Create Auction” transaction is logged and stored. In the event of potential misuse or incident, the logs forms an audit trail of the sequence of events. This will greatly assist any investigation efforts for any potential breach or malicious behavior by users.


6. UAT
In order to ensure quality of our developed products, we have completed 3 rounds of User Acceptance Tests, which can be shown below:
The UAT details for FlowLabs Middleware can be found here
The UAT details for FlowAdmin Dashboard can be found here


Project Deliverables

Component Description Specification
Project Management Project Schedule Project Schedule
Meeting Minutes Meeting Minutes
Metrics Metrics
Risk Management Risk Management
Change Management Change Management
Requirements Project Overview Project Overview
Project Scope Project Scope
Analysis Personas and Scenarios Personas & Scenarios
Diagrams Diagrams
Project Implementation Technology Technology
Testing (Documents and Results) Internal Testing Internal Testing
FlowLabs Middleware User Testing FlowLabs Middleware
FlowAdmin User Testing FlowAdmin
UAT 1 (Middleware & FlowAdmin) UAT 1
UAT 2 (Middleware & FlowAdmin) UAT 2
UAT 3 (Middleware & FlowAdmin) UAT 3
Handover Documentation FlowLabs Handover Documentation Documentation

Reflections

Sponsor's Feedback

Value to sponsor DuckyKing.png


Team Reflections

TeamDuckyKing Photo.png



DuckyKing Finals Reflections.png