MAJOR PROJECT PROPOSAL relating to IT networking security

profileA00876864
GF-Proposal-2020.pdf

Online Typing Training Application COMP8045 – Major Project

- - – A00000000 1-26-2019

Page 1 of 23 - - – A00000000

Table of Contents 1. Student Background .............................................................................................................................. 3

1.1. Education ...................................................................................................................................... 3

1.2. Work Experience ........................................................................................................................... 3

2. Project Description ................................................................................................................................ 3

3. Problem Statement and Background .................................................................................................... 4

4. Complexity ............................................................................................................................................ 7

5. Scope and Depth ................................................................................................................................... 8

6. Test Plan ................................................................................................................................................ 8

6.1 Unit testing…………………………………………………………………………………………………………………………………8

6.2 Regression testing………………………………………………………………………………………………………….……………9

6.3 Integration testing………………………………………………………………………………………………………………………9

6.3.1 User registration…………………………………………………………………………………………………………………9

6.3.2 Typing practice…………………………………………………………………………………………………………………10

6.4 System testing………………………………………………………………………………………………………………………..…10

6.5 Acceptance testing………………………………………………………………………………………….….…………………….10

7. Methodology…………………………………………………………………………………………………………………………………11

7.1 Methodology & Approach….…………………………………………………………….….…………………………………..11

7.2 Technologies Involved………………………………………………………………………………………………………………11

7.2.1 Project management.…………………………………………………………………………………….…………………11

7.2.2 Development……………………………………………………………………………………………………………………11

7.2.3 Deployment…………………………………………………………………………………………………………………..…13

8.1 Client……………………………………………………………………………………………………………………………………..…13

8.2 Server………………………………………………………………………………………………………………………………….……14

8.3 Database………………………………………………………………………………………………………………………….….……14

9. Innovation .......................................................................................................................................... .14

10. Technical Challenges ........................................................................................................................... 16

11. Development Schedule and Milestones ............................................................................................. 20

12. Deliverables ......................................................................................................................................... 22

13. Conclusion and Expertise Development ............................................................................................. 22

Page 2 of 23 - - – A00000000

14. References .......................................................................................................................................... 22

15. Change Log…………………………………………………………………………………………………………………………………….23

Page 3 of 23 - - – A00000000

1. Student Background My name is - -. I decided to change my career in 2012. I quit my previous chemistry lab job to attend BCIT CST program in September 2013 as a full-time student, then got my diploma at the end of 2015.

Then I found a software support and develop job in Schneider Electric. I support and develop web

application and databases. Since September 2016, I started my BTECH program as a part time student. I

am in both wireless and mobile and human computer interaction major. So far, I only have one elective

course and this project left to get the bachelor’s degree. I

1.1 Education BCIT BTECH part time, Sep 2016 to present

BCIT CST full time, Sep 2013 to Dec 2015

Kwantlen College Sep 1999 – April 2001

North Delta Senior Secondary May 1997 – June 1998

1.2 Work Experience Schneider Electric, Burnaby, BC Canada, software developer and support, Dec 2015 to present

AeroInfo, IT support, Richmond BC Canada, May 2014 to Dec 2014 (BCIT Co-op)

Acme Lab, Vancouver BC Canada, Nov 2010 – Aug 2013

Bestbuy customer service call center, Surrey Canada, 2008 – Oct 2010

Wesco Industries, Shipper Receiver, Burnaby, BC Canada, 2007 - 2008

Startec, telemarketing, Vancouver BC Canada, 2005 – 2007

2 Project Description This project is for BCIT BTECH’s project course COMP8045. This is my individual project from proposal,

design, implementation, test and deployment.

The goal of this project is to create a free online typing software to let users, especially elementary

school students to practice their typing skills. This project will mainly consist of a web site client which

can be access from both PC and mobile devices, a Microsoft .Net Core web server and an SQLite

database.

Page 4 of 23 - - – A00000000

Database

Web Server

Smart Phone

3 Problem Statement and Background The problem my application will solve is that users can customize the text they use to practice typing,

and more importantly, this application can act like a smart typing coach which can provide the most

efficient practice according to user’s recent typing performance.

When I teach my daughter typing, I think it is a good idea to choose some sample essays online to let her

type, so she can read good essays during learning typing. There are many software for learning typing,

free or paid. I spent a lot of time to search an app to allow me to upload an essay to let my daughter

type, but I did not find any. My daughter is in elementary school. she is learning writing. At home,

English is not our primary language, so I always want my daughter to do more reading. I believe if she

reads more good essays written by native English-speaking students, she can gradually learn the way

how native English speakers express their meaning in written and improve her writing skills.

I found many school kids’ sample essays online, I told my daughter to type them in Microsoft word while

she’s reading original essay text from another web page. However, it is difficult to check what she types

is right or wrong. My daughter also told me that it is hard for her to switch attention between two

windows during typing.

The following screenshot shows what I need for my daughter’s typing software (green shows correct,

red shows wrong), but users should be able to upload text to practice, not just use the static practice

words design by the website.

The first problem I want to solve is that I think all users should be able to upload text under their

accounts and type what they want to practice. Users, especially school kids can combine typing and

reading to make learning more efficient, so that they can gradually improve all of their typing and

writing skills.

Page 5 of 23 - - – A00000000

One reason that kids do not want to learn is that they do not see the learning is useful. Youth education

is different from adult education. Kids expect to see positive feedback much faster than adult, otherwise

kids will lose patient. If I tell my daughter that good typing skill is very helpful for your high school and

college study, and even for your future work, then she may say that, why do I have to learn it now? I

design this typing application to give my daughter and other school kids as potential users a much faster

reward not only for their typing but also for their writing skill. It will encourage them to learn more. This

is my education rational behind the project.

The typing application I am going to develop does not have any grammar checking functions. All essays

that teachers select to store in this application have no grammar mistakes. As a developer, I assume the

typing trainers or teachers should read all essays before uploading them. Student users will only get

good sample essays.

For example, this is a sentence in an essay. “I went to a park with my parents last week.” The grammar is

correct, and this is what students will see when they open this sample essay. When they type this

sentence, they also read it, so they will read correct grammar. It is much better than typing a lot of

unrelated words, for instance “happy train goose we sky run … ...” Students can still use these unrelated

words for learning typing, but they waste the opportunity to read good English at the same time.

Let go back to the good sentence example “I went to a park with my parents last week.” When a student

types this sentence, the typing application will not check grammar. It only checks the typing. If the

student types “I went to a psrk with my psrents last week.”, then the application will detect two “a”s

were typed wrong, and it will show “I went to a park with my parents last week.” The mistyped letters

will turn red. The following shows how it works.

Before typing, what the student will see words are in grey:

I went to a park with my parents last week.

When they type, they will see the following after each letter entered. (I omit the space character in this

example)

I went to a park with my parents last week.

I went to a park with my parents last week.

I went to a park with my parents last week.

I went to a park with my parents last week.

I went to a park with my parents last week.

I went to a park with my parents last week.

… …

I went to a park with my parents last week. (Student enters “a” wrong)

I went to a park with my parents last week.

I went to a park with my parents last week.

Page 6 of 23 - - – A00000000

… …

I went to a park with my parents last week. (Student enters “a” wrong)

I went to a park with my parents last week.

I went to a park with my parents last week.

… …

Finally, the student will see

I went to a park with my parents last week.

As what it shows above, this is not an essay typing software as Microsoft Word. This is a typing training

application. It does not check and fix grammar mistakes. It checks the key pressed against the practice

text and highlights mistakes. The practice texts can be prepared and uploaded by users, so all users do

not have to use the same practice texts provided by the typing training application.

The second problem I want to solve is the user typing statistics. Many typing software provide general

typing result score such as word per minutes, and accuracy rate. What I want my daughter to focus is

where she often makes mistakes. As a user, my daughter needs a more detailed report to show recently,

for example a week, which letters she types wrong and the mistake percentage of each letter. For

example, in recent 10 practices, 15% of her mistakes is about letter “w”, 10% is about letter “o” etc.

Then I can target train her letter “w” and “o”. I will select words with more “w” and “o” to let her

practice. My learning rational is that learners should spend more time on what they are not good at

rather than repeating what they have already known very well. Keep typing the pre-selected text

repeatedly in hope to correct some habitual mistake is very inefficient. When I collect enough words

with “w” and “o”, I will upload all these words into my daughter’s account, which is the first problem I

am going to solve, so she can focus on this customized practice.

The third problem I want to solve is based on the solution of the previous two problems. If users have

many saved texts in their accounts, my typing training software can suggest them which saved text is the

most efficient practice to improve their typing skill according to the type errors they made recently

(Users can set the time range). I will develop an algorithm to analyze, calculate and suggest the best

practice text based on users’ detailed typing reports. For example, I have saved many essays to practice

typing in my account, then the typing software can suggest me to practice an essay because this essay

have more letters that I typed wrong recently.

Overall speaking, I believe that each person’s learning experience is different. A general typing

application with the same pre-selected text or designed lessons for all learns are not efficient. Each

learner should have his or her own training practices according to the problem they encounter during

learning. These three problems I am going to solve in my application are based on long time observation

of my daughter’s learning process. It distinguishes my typing software from others. After I finish this

project, I will design a specific typing training for her by using this application. Other parents or school

teachers can also use my typing application to design unique training practice for kids. I also plan to

contact my daughter’s school if the school needs a free typing software and if they have specific

requirements, so I can keep developing a school version.

Page 7 of 23 - - – A00000000

My typing application has its own limitation. It is for users who have already know the basic typing such

as which fingers control which keys. My typing application does not include the most basic typing

lessons because there are many online typing websites provide these features. My application will focus

on customized typing training to improve typing skills more efficiently, and use typing to help students

to improve essay writing skill.

4 Complexity The technical complexity of this project consists of the follows:

Web server API: The Web API should handle the user authentication according to different roles.

Code first database control: it should handle multiple database schemas, for example there is a schema

for user and role information, and another schema for users’ typing record related data. The Object

Relational Mapping (ORM) used in this project is Microsoft Entity Framework Core, which is not the

same as what I used previous pure Windows version Entity Framework.

User experience: this is another difficult part. The user interface should be attractive and intuitive,

otherwise school kids won’t like it. The front web site must be responsive to both PC and mobile

devices. Users can use mobile devices to login and see their typing reports. I need to learn Angular

before start implementing this project.

Typing records analysis algorithm: This algorithm should efficiently calculate and produce a report for

each individual user about the specific errors they typed and search existing stored text to suggest the

best practice which target users’ weaknesses.

The management complexity of this project consists of the follows:

Risk management: There are some technologies I need to learn before using, for example Karma, the

front-end unit test framework. I plan to use Angular Animation for the web interface. I also need to

learn it first. Another risk is that this is an individual project, so I do not have teammates to discuss if I

encounter difficulties and there will be no code peer review to find potential bugs.

Schedule management: This is the first time I develop such a big application individually. Some

technologies I must learn. Some technologies I used before in my full-time job are based on senior co-

workers’ setup and configuration, so I might encounter many troubleshooting problems to delay the

progress. My plan to solve this issue is to create some small test projects first to try these technologies,

then start my major project.

Diploma students cannot solve this problem because they do not have the knowledge to individually

manage and develop a project with such a scope and requirements. In BTECH’s Technical Issues in

Software Development and Management Issues in Software Development courses, I learned Agile

methodology and what to do to prepare the risks before and during the development process.

Diploma students mostly focus on implementing the functionalities, but they do not have enough

knowledge to think in detail about the software maintainability and development progress

Page 8 of 23 - - – A00000000

management. I graduated from CST program, so I know what I could do at that time. BTECH students

can see the project from a high-level management point of view, for example use Agile Scrum

methodology to keep delivering workable software. In one of my specialties, User Computer Interaction,

we learned not just user interface (UI) design, but also user experience (UX) design principles.

Sometimes a better user experience can make a software more competitive than just providing more

functionalities. I also learned about SQLite, client-server access and responsive design in wireless and

mobile course. These knowledges will be used in this typing software.

Diploma student do not pay too much attention to unit test in their projects. Most projects, at least in

the CST program I took, students mostly use manual test. BTECH students can do much better in

automated test to make the software more robust.

5 Scope and Depth The minimum scope of the project is to create an online typing software which allows users to upload

text into their accounts to type and then generate reports to show the error percentage according to

each key on the keyboard.

The depth of this project includes the follows:

• The web site is responsive to both PC and mobile devices, so users can review their typing

reports from difference devices. Users can also upload text from mobile devices.

• A user friendly and intuitive interface.

• Sophisticated algorithm to analyze the weak point of a user’s typing skill according to the typing

records and then suggest exercises which target their weak points from pre-saved text.

• Include different roles of users, for example teacher and student, because this application is

potentially can be used in elementary school education.

• Teachers should be able to assign typing tasks to students and then receive students’ typing

report, so teachers can also manually assign students target exercised according to their typing

records.

6 Test Plan 6.1 Unit testing

The back-end web server will use “MSTest” to do unit testing. An “MSTest” project will be created for

each project under the entire solution. (Note that “project” here means a project under Microsoft Visual

Studio solution. The solution which contain all source code of both front-end and back-end will have

multiple projects).

Page 9 of 23 - - – A00000000

In MSTest project, Moq will be used for mocking dependencies.

All Web API controllers, services and repositories will have at least one unit testing method associate

with.

The front-end unit testing will use Karma. I need to learn Karma first. When the front-end component in

Angular framework is created, each component has its own HTML, CSS, TypeScript file for logic and

another TypeScript file for unit testing.

Unit testing will be run after each method implementation.

6.2 Regression testing

Regression testing will be handled by unit testing and manual testing. Each time before committing code

to version control, both unit testing and manual testing must pass.

6.3 Integration testing

Integration testing is based on all unit tests pass and no other error found in manual testing. Integration

testing will run after one entire use case is finished. For instance, a user types one minute and the type

record is sent to web server and then saved into database. This user case includes front-end operation

to the back-end logic. After each layer’s component is done (controller, service, repository) for the

entire use case process, an integration test will run to test different cases.

6.3.1 User registration

A user provides an email and a valid password

1. A user pending activation record is created in User table in the database

2. A confirmation email is sent to user’s email to get confirmation.

Page 10 of 23 - - – A00000000

A user clicks the link which sent from this online typing application

1. This user’s pending activation record is active in the database

2. User gets a message on the web page to show this account is active.

6.3.2 Typing practice

A registered user signs in the online typing web site

1. This user can practice typing in this application

2. This user can save customized text under this user’s account

An unregistered user opens the online typing web site

1. This user can also practice typing in this application

2. This user cannot save customized text so the text will be lost after closing the web page

A registered user finishes a typing practice

1. A simple report which shows this practice result on the web page

2. The typing record will be saved into database for this user

An anonymous user finishes a typing practice

1. A simple report which shows this practice result on the web page

User successfully uploads text

1. The text is saved into database. User gets acknowledgement.

2. The practice text will have correct number of “checked character” counted

3. Each searched character will have a correct percentage field calculated

4. Foreign key relation is established

User failed uploads text

1. The text is not saved into database. User gets error message about the fail reason.

User enters a period to load typing report

1. The overall typing record will display on the web page

2. A suggested of practice text title will show to the user

6.4 System testing

The application will be deployed to Microsoft Azure. The test will be on Azure and with both PC and

mobile device to see the performance and user experience.

6.5 Acceptance testing

When I almost finish the project implementation, I will invite the first user of my application, my

daughter to start using it. I will get feedback from her about user experience, or bug found by her, and

then add tasks into the project backlog.

Page 11 of 23 - - – A00000000

7 Methodology 7.1 Methodologies and Approach

I am going to use Agile Scrum approach to develop my typing application. The reason to choose this

methodology is that Agile Scrum is good to making changes during development. The user typing

experience is the most important thing in my application. I plan to let my daughter be my first test user.

I am going to collect feedback from her to improve my design, so my application should be adapted to

change during development. Another reason is that in the development of this application, I plan to

provide the first workable version with the very basic typing functionality as soon as possible, so that I

can start getting feedback from users as early as possible. If I use the traditional waterfall approach, I

will design everything include all details, then after I complete the database design and creation, after

the full back end feature implementation, then finish the front-end, finally I will let users to test. It is too

late and possibly very difficult to modify a finished application. Therefore, Agile Scrum will let me keep

testing during development and keep changing according to users’ feedback.

I will add the most important and basic tasks into project backlog. I plan use two weeks as a

development cycle (sprint). Before each sprint I will select tasks that I plan to finish from backlog into

this sprint. During and after the sprint, I will keep adding new tasks into the backlog when necessary,

because it is difficult to design every detail at the very beginning of the project. Developers tend to

gradually deepen the understanding of the software during the development process. After I finish a

sprint, I will go over the tasks in the backlog and rearrange them according to their levels of importance,

then select what I think I can finish into the next sprint from the top of the backlog list.

By using Agile Scrum, I can easily track the progress and tasks. Even though there is no dedicated Scrum

Master, I believe this approach will make my development process more organized and efficient.

7.2 Technologies Involved

This project will only use the newest and popular technologies which are also widely used in industries.

All technologies used will also make sure this application is always free to use.

7.2.1 Project management

Atlassian Jira: used to track software development tasks and issues. Jira is fully compatible with Agile

Scrum approach

Atlassian Bitbucket: used for version control

Sourcetree: used as a Windows client of Bitbucket

Visio 2016: used to draw design diagrams

7.2.2 Development

Visual Studio 2017: used for back-end coding, debugging and unit testing

Visual Studio Code: used for front-end coding and unit testing

Page 12 of 23 - - – A00000000

Chrome: used for front-end test and debugging

Microsoft .Net Core Web API: Framework for HTTP services to communicate with client to handle CRUD

operations

Microsoft Entity Framework Core 2.0: used as an object-relational mapper (ORM) to control and query

database from C# code

AutoMapper: used as a C# object mapping tool

MSTest: used as back-end unit testing framework

MOQ: used as a mocking framework for C# to isolate testing class with its dependencies

Angular 7.0: used as the front-end web page development framework for both mobile and desktop

TypeScript: An Object-Oriented front-end script language which is a super set of JavaScript

Npm: this is a runtime JavaScript package manager

Karma: used for front-end unit test with Angular framework

Bootstrap 4: used for front-end UI format development

SQLite 3.26: used as a database of this application

7.2.3 Deployment

Microsoft Azure: used to host my application online

Page 13 of 23 - - – A00000000

8 System/Software Architecture Diagram The following is the system architecture diagram. It shows the overall components and the relation

between them.

HTTP access layer(TypeScript)

Services layer (TypeScript)

Web interface layer (HTML, CSS , TypeScri pt)

Web API controller layer (C#)

Repository layer (Entity framework C#)

Services layer (C#)

Database

Client side (Angular 7)

Server side (.Net core)

request & response

query & data

System boundry

The overall system will have three main parts:

8.1 Client

The client side will be developed by using Google’s Angular 7. All the dependency packages are managed

by NPM.

Web interface layer: The entire web site pages will be divided into self-contained Angular “component”.

Each component is a collection of HTML, CSS and TypeScript file which contains data for its HTML page.

The TypeScript file only has basic operations of data process. Angular routing will manage the relation

between pages. This web interface layer will accept requests from users and display data to users. This

layer is also where users practice typing.

Service layer: This layer will perform more complex data process for web interface layer and call HTTP

layer to send requests to web server. These services will be injected into web interface layer when

needed by using dependency injection.

HTTP access layer: This layer will prepare HTTP calling strings and call web server’s web APIs.

Page 14 of 23 - - – A00000000

8.2 Server

The server side will be developed by using Microsoft ASP .Net Core 2.2. It will be hosed on Microsoft

Azure.

Web API controller layer: This layer act like a gateway of the web server. It has API routing design, check

data validation and user authentication. This layer will accept the parameters from client calls and

choose the right server-side services to user to request data. All server layer instances will use

dependency injection to inject into controllers. When the web server responses to client requests by

sending a view mode of data (like a view in database to contain all data that users need for a request),

this layer will decide if the returned data is valid or send back error messages.

Service layer: This layer will do two things. One, use the parameters received from controller layer and

decide which repository layer’s methods to call to request data, which is like data from a table. Two, the

data model will be mapped to a view model to return to the controller layer. All repository instances will

use dependency injection to inject into service layer.

Repository layer: This layer will use “Repository Design Pattern”. Entity Framework Core is at this layer

to control and query database, for example create and update database by using “code first migration”.

Each time the database is modified, a database migration class (C#) will be created in the project. This

layer will separate the service layer logic from the actual database access. In case if we need to change

database from SQLite from other databases, such as Microsoft SQL Server, we only need to modify this

layer without worrying about changing the service layers.

8.3 Database

The database will user SQLite, because its free and simple. It can also store very large amount data up to

many TB. The SQLite database file will be physically in a folder in this project. The database tables have

relation by setting primary and foreign keys. It also has indices and constraints on tables. All of these are

set by Entity Framework Core’s code first design.

9 Innovation First, my typing application will provide features that current typing software do not have. My design is

based on my typing and language learning rational which is to combine typing with learning vocabulary,

grammar and writing skills. My typing training application will let users customize what they use to

practice typing, for example, save selected text to practice. It is potentially can be used by elementary

school teachers to design typing practice for students, so students can use typing to learning spelling,

grammar etc. at the same time.

Second and more importantly, unlike other online typing applications only provide users very general

type error reports, my typing application can suggest users what they should practice more according to

their recent typing report. (The detail of the algorithm is in Technical Challenge section). Each individual

learner will get different suggestions which target their specific weaknesses in typing. Teachers can save

many sample essays into database, then my typing application has an algorithm to analyze the typing

errors for each student and then select previously saved essays to suggest student to practice. If a

Page 15 of 23 - - – A00000000

student often makes mistakes about key “w” and “o”, then either words with more “w” and “o” are

suggested to this student to practice, or a pre-uploaded essay which has more “w” and “o” are

suggested. This is another education rational of mine. Currently, students learn the same thing by using

the same practice handed out by teachers. I believe that even though we learn the same skill and there

are common learning principles, everybody’s practice path will not and should not be exactly the same,

because everybody is unique in this world. Everyone has their own strengths and weaknesses, so ideally

everyone’s practice should be customized based on the observation and measurement of their unique

condition. Beyond the technical challenges for software development, beyond typing skill, this project is

also my personal preliminary exploration about how to make education more efficient. This typing

application is also a test tool for my education rational. Of course, the current technologies in our social

education system are not able to make different targeted plans and exercises for each student’s learning

in every subject, but I believe in the future it will become possible after internet, big data and artificial

intelligence are further developed.

Let me to use a body building workout example to further explain what the innovation is in my typing

application.

The following is a workout schedule for body builders.

15 pull ups

20 barbell shrugs

20 bench press

20 push ups

40 barbell squats

30 minutes cardio

Do it every Monday Thursday and Saturday.

Let’s assume some people real like this schedule and it really works for them, but will this schedule be

efficient for everybody? Definitely no. That’s why a lot of bodybuilders hire a professional trainer to

customize unique training programs for them based on their needs and conditions. For instance, Tom’s

legs are relatively weak, so he should do more squats. Joe likes big chest, so he should do more bench

press etc.

Back to our typing learning. When we open a typing software, if all learners will use all the same sample

texts to learn typing, it’s like all bodybuilders use the same training program to workout. Many people

hire a personal workout trainer, but who likes to hire a personal typing trainer to guide them to use the

most efficient practices to increase their typing proficiency? The application I am going to develop is the

personal typing trainer has the unique feature in the world for all learners and it is free. My application

will measure users typing mistakes to see which keys they have higher change to type wrong.

To make learning more efficient, an important method is to minimize the time we practice on something

we are already been good at and maximize the practice time on what we are not good at. Regrettably, I

searched many typing training software for my daughter, currently there is no such a typing software

Page 16 of 23 - - – A00000000

can act like a smart typing trainer. My online typing training application will have the innovation to fill

this gap.

From technology perspective, the application I am going to develop is far from the boundary of science.

The innovation selling point of my software is that currently there is no such a typing skill training

software which can act like a personal typing trainer to guide each individual user through the most

efficient learning path by analyzing users’ typing mistakes and searching the best available typing

practice texts for them. The innovation concept is not only for learning typing. I believe it is for learning

anything, for example math, physics or any other topics. I believe that teachers give all students the

same homework to practice is not always efficient. Each student should get different practice questions

at some point of learning. If there is a software can collect all students’ mistakes in their homework and

tests, then analyze the root causes of why they made these mistakes and finally provide each student

different practice questions which target their weak points during learning, it will be a big innovation for

our society. I do not have the knowledge and ability to develop such a complex software, but I can use

the same teaching and learning rational to start from a smaller task, an online typing training

application. It is not a simple improvement such as making a typing software interface more attractive

or something like that. My project will give the typing software an essential innovation, that is, let a

typing software have the analytical ability by collecting performance data of each user and the ability to

suggest users with the exercises that best enhance their learning outcomes.

10 Technical Challenges User experience: The user interface must be intuitive and easy to use. This interface will be attractive

and can immediately show users the unique features which distinguish this application from others. The

front-end user interface will use some Angular amination, so it requires good understanding of Angular’s

animation.

Database migration with multiple schemas: The database will be managed by Microsoft Entity

Framework Core by using code first methodology, so database structure will be controlled by C# code.

The database in the typing application I am going to develop has multiple schemas, for example “Iam”

schema has all the tables about users and roles; “Typing” schema has all the tables relate to users’

typing result records. Multiple schemas can segregate the project into multiple subprojects to decouple

components of the project. The project code first database migration must be able to independently

control all tables in each schema, and allow tables in different schemas to reference each other, for

instance, “Typing.PracticeText” table should have a foreign key to reference “Iam.User” table. However,

the current version of Entity Framework Core does not support foreign key creation cross database

schema. I must find a way to solve this issue.

Code maintainability and reusability: The design of the project is important. It will avoid big and long

methods that handle too many tasks. Each data flow and process will be separated into difference

layers, such as interface (UI on client side and API controller on server side), service (data process logic)

and communication (HTTP call and data query). In each layer, all components will be designed as

independent as possible, for example the user upload text UI component on client side should be able to

be easily reused in other projects.

Page 17 of 23 - - – A00000000

Extensibility: Developer should be able to keep adding new features to this application after the release.

The code will be based on high cohesion and low coupling principle. For example, all services will use

their object-oriented programming interfaces to decouple from other code, so the same logic can be

easily used by new added features without code duplication.

Record analysis algorithm: This algorithm can select the best saved practice text and suggest the user to

practice typing according to this user’s previous type errors. It will target where the most mistakes are.

1, This typing training application only check the following characters (called checked characters):

• Alphabet case insensitive (26 characters)

• Number keys from 0-9 (10 characters)

• Punctuations: comma, period, single, double quote, semi colon, question mark, exclamation

mark (7 characters).

Totally there are 43 keys will be checked. I only use these 43 keys as an example to explain the

algorithm. In the application, I can implement a user configuration that sets which characters users want

to include, such as add “<” or “%” or remove number keys etc.

2, Each time when a user uploads a new essay to the typing training application, the essay will be

assigned a unique id and saved into a database table called “PracticeText”. As the application checks 43

characters, a set of 43 records according to each checked character will be save to another table called

“CheckedCharacter”. Each record in “CheckedCharacter” table will have a foreign key reference to “Id”

column in “PracticeText” table.

The “CheckedCharacter” table has the following columns:

• Id

• PracticeTextId (Foreign Key)

• Character (‘a’ or ‘b’ or other checked characters)

• Percentage (P) (percentage of this check character appears in this practice text, for example

1.825)

The PracticeText table has the following columns

• Id

• UserId (Foreign Key to indicate the owner of this practice text)

• Text

• TotalCharacter (how many checked characters in this text)

Each record in “PracticeText” will have 43 associated records in “CheckedCharacter” table.

Note: in the real implementation, these tables may have more columns than showed above. Here I only

show the columns relate to the algorithm)

3, After a user finishes typing a practice text, a result record will be saved into database table called

“TypingResult”.

The “TypingResult” table has the following columns

Page 18 of 23 - - – A00000000

• Id

• UserId (Foreign Key to indicate who typed it)

• PracticeTextId (Foreign Key)

• PracticeTime (include year, month day and time)

Note: uses can decide if the practice this time will be save or not. If they select to save the result, then it

is like a typing proficiency test for them. The result data will be used for analysis in this algorithm. If they

do not want to save the result, then it means they just want to do a regular practice, not a test for future

analysis.

4, Then a set of 43 detailed typing records will be saved to a table called “TypingResultDetail”

The “TypingResultDetail” table has the following columns

• Id

• TypingResultId (Foreign Key to indicate which typing result it references to)

• CharacterTypedWrong (‘a’ or ‘b’ or other checked characters)

• Occurrence (O) (an integer which shows how many times this checked character was typed

wrong)

• MistakeRatio (MR) (“Occurrence” divided by “Percentage” field in “CheckedCharacter” table.

Larger MR indicates user is more like need more practice on this checked character)

We need “MistakeRatio” later to calculate which checked characters this user does not type well. We

use “MistakeRatio”, not “Occurrence”, because in a longer practice text, user have higher chance to

make more mistakes. We must use the percentage of a checked character appears in a practice text as a

base (O / P).

A smaller P will make the MR larger. A larger P will make the MR smaller. The reason is that if a checked

character appears a lot in a practice text, then the user has more opportunities to type it wrong. For

example, in the same practice text which has 1000 checked characters. Letter “e” appears 50 times, so

P(e) = 50 / 1000 = 0.05 and letter “w” only appears 5 times, P(w) = 5 / 1000 = 0.005. If a user types “e”

wrong 10 times, but types “w” wrong 4 times. Obviously, this user should practice more “w” rather than

“e”, because MR(w) = 4 / 0.005 = 800 > 200 = 10 / 0.05 = MR(e).

5, Users can set how many practices results they want to keep for analyzing, for example 10 practices.

After a user finishes the 11th practice, the first practice result will be deleted. The application will only

keep 2nd to 11th practice results.

6. At any time, how to use a user’s existing typing result to find out which practice text is the best for

this user to improve typing skills? The principle is to find the practice test which has the highest checked

characters appearance which this user has the highest mistake percentage.

7, Get the sum of “MistakeRatio” for each “CheckedCharacter” from the 10 saved typing result. Then

sort the sum of “MistakeRatio” from high to low. For example, a user’s first practice, the MistakeRatio

for checked character “a” is MR(a)1. The second practice MistakeRatio for checked character “a” is

MR(a)2. Then all the way to MR(a)10. If the user sets to save n practice results, then the formula is

Page 19 of 23 - - – A00000000

𝑀𝑅(𝑐ℎ𝑒𝑐𝑘𝑒𝑑 𝑐ℎ𝑎𝑟𝑎𝑐𝑡𝑒𝑟)sum = ∑ 𝑀𝑅(𝑐ℎ𝑒𝑐𝑘𝑒𝑑 𝑐ℎ𝑎𝑟𝑎𝑐𝑡𝑒𝑟)𝑘

𝑛

𝑘=1

where 𝑀𝑅 = O

P and k is saved practice results order number

8, We select the top 3 MR sums to indicate 3 checked characters which have the highest chance to type

wrong by this user, for example they are “h”, “w” and “l”, so users need to practice more of these

characters. In the typing training application, users can set how many highest MR they want to show, for

example, they might want to know which checked characters have the top 5 MR sums. Here we use 3

MR sums as example to show the algorithm.

9, Search through the saved practiced texts which belong to this user to find practice texts with the

highest percentage of “h”, “w” and “l”. The logic is as the following

SELECT TOP (1) pt. Id, pt.Text FROM CheckedCharacter cc INNER JOIN PracticeText pt ON cc.PracticeTextId = pt.Id WHERE cc.Character = ‘h’ AND pt.UserId = ‘currentUserId’ ORDER BY Percentage DESC

10, Repeat the previous logic for checked character “w” and “l”. Then suggest the 3 found practice texts

to the user. It is possible that only 2 practice texts found because one text might have the highest

percentage of two of the three checked characters “h”, “w” and “l”. When a text is has the highest

percentage of all the three checked characters compared with other practice texts, then the user will

only get one suggested practice text.

Note: This algorithm cannot prevent users from cheating. I know that type speed won’t be constant

during typing, but I assume all users will do their best to type from the beginning to the end of a practice

text, so the type results of how many times a character typed wrong can reflect which keys the user

should practice more. However, for example, if a user knows he cannot type “b” very well, so he

deliberately slows down a lot when types “b” or even look at the keyboard to avoid pressing a wrong

key, then the algorithm won’t be able to suggest the best practice text.

Page 20 of 23 - - – A00000000

11 Development Schedule and Milestones

Page 21 of 23 - - – A00000000

Page 22 of 23 - - – A00000000

The project schedule is written in Microsoft Project. I must separate the entire project into 2 pieces from

middle to fit the proposal page width.

I plan to start implementing the project from March 1st and finish it before the end of June. There will be

8 development cycles (sprint). Each sprint has around 60 hours. I plan to use 462 hours to finish this

project.

12 Deliverables The deliverables of this project are as follows:

• Web server in ASP .Net Core

• Web site in Angular TypeScript and JavaScript

• Sample database in SQLite

• Final Report: final report of this practicum course

• User Manual: user manual to show how to user this application

13 Conclusion and Expertise Development This project will help me to improve my software developing skills from database, web server to front-

end web site. This project will also include all the software planning, design and management skills I

have learned from BCIT and the software development team in Schneider Electric. There might be some

loopholes in my learning from school and work, but in this project, I will find out and make up for these

loopholes, so that I can become a better software developer.

14 References • Angular framework https://angular.io/

• TypeScript https://www.typescriptlang.org/

• Bootstrap https://getbootstrap.com/

• Node.js https://nodejs.org/en/

• NPM https://www.npmjs.com/

• ASP.NET Core https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-2.2

• Entity Framework Core https://docs.microsoft.com/en-us/ef/core/

• AutoMapper https://automapper.org/

• Moq https://github.com/moq/moq4

• SQLite https://www.sqlite.org/index.html

• Azure https://azure.microsoft.com/en-ca/

• Jira https://www.atlassian.com/software/jira

• Bitbucket https://bitbucket.org/product

• Sourcetree https://www.sourcetreeapp.com/

Page 23 of 23 - - – A00000000

15 Change Log Version 2 on Feb 23rd, 2019

• Cover page, change the project name from “Online Typing Application” to “Online Typing

Training Application” to emphasize this software is for users to improve typing skills. It’s not a

software for typing essays like Microsoft Word. So called essays are just practice text.

• Section 3 “Problem Statement and Background”, addition more explanations about what exactly

the problems my project will solve. Clear the misunderstanding about grammar checking. Page

5-7.

• Section 9 “Innovation”, additional explanations about the advanced learning / training rational

of my project and why it’s innovative and unique to solve problems which not yet have a

solution in the world. Remove a paragraph that mentions about using cutting age technologies.

Page 15-16.

• Section 10 “Technical Challenges”, add algorithm detail. Page 17-19.

• Section 11 “Development Schedule and Milestones”, update schedule. Page 20-21.