Report of A 6 Month Internship at Go-Groups LTD, Buea: Faculty of Engineering and Technology
Report of A 6 Month Internship at Go-Groups LTD, Buea: Faculty of Engineering and Technology
PEACE-WORK-FATHERLAND
P.0 BOX 63,
Buea, South West Region
CAMEROON
Tel: (237) 3332 21 34 / 3332 26 90
Fax: (237) 3332 22 72
By:
SERKWI BRUNO NDZI
Matriculation Number: FE17A073
Option: Software Engineering
[email protected] [email protected]
Go-Groups ltd Buea University of Buea
Acknowledgment.................................................................................................................. iv
2.8.2 Phase 1 (writing unit and integration tests for PayAmGo Sandbox Service) ..... 12
3.2 Working Sessions with Go-Group’s General Manager and Technical Manager....... 15
References ............................................................................................................................ 20
Appendices ........................................................................................................................... 21
ii
Dedication
To my parents Mr. and Mrs. Serkwi whose love for me has been my motivation.
iii
Acknowledgment
I will like to appreciate my supervisor, Mr. Sop Deffo for his patience in walking me through
my report and correcting the errors I made often too frequently. My sincere appreciation also
goes to Mr. Nnouka Stephen my academic supervisor for his timely inputs and suggestions
during my internship which helped me reshape my ideas for a better internship experience. I
deeply thank Mr. Michael Boyo, general manager of Go-Groups ltd, Mr. Tanko Edward, the
technical manager, Mr. Che Lewis, Go-Group’s administrative manager, Mr. Obiasong Frank
and Mr. Takougang Dieudonne, despite their busy schedules, they devoted time to help me
out each time I was in need of their assistance. I cannot leave out my siblings who have been
very supportive throughout this journey. I am grateful to Engineer Wepngong Benaiah for all
the assistance he has been giving me from the very start. Finally, I appreciate other interns
with whom I was at Go-Groups ltd and Go-Groups ltd staff as a whole most especially Mr.
Ewang Clarkson for his counsel.
Above all else, I thank the Omniscient God, for being my supreme guide and guard.
iv
List of Tables
Table 1: Go-Groups micro-services used by cash contribution service ....................................8
v
List of Figures
Figure 1. Organigram of Go-Groups ltd ..................................................................................3
vi
List of Abbreviations
API: Application Programming Interface
CI: Continuous Integration
CD: Continuous Deployment
DBMS: DataBase Management System
H2: Hypersonic 2
HTTP: HyperText Transfer Protocol
IT: Information Technology
JWT: Json Web Token
NPM: Node Package Manager
REST: Representational State Transfer
UI: User Interface
XAF: Central African CFA Franc
vii
Chapter 1: Introduction
1.1 Definition of internship
An internship is a professional learning experience that offers meaningful, practical work
related to a student's field of study or career interest (^, What is an internship, 2018). It is a
period when a student decides to spend time with professionals in a bid to learn and have a
mastery of skills of the professional world.
1
1.4 The company
1.4.1 About Go-Groups
Go-Groups ltd is one of the leading Software companies in the Silicon Mountain (Borno,
2016). It is located at Malingo Street of Molyko, Buea in the South West region of Cameroon.
This company started in 2012. Two years later, in 2014, it was registered as a legal
business entity in Cameroon. It started off with the Go-Student platform which is in use at the
University of Buea as well as other renowned universities around Cameroon.
Some services offered by Go-Groups ltd include:
School management software solutions,
Database design and implementation,
Web and mobile application development, etc. (Go-Groups, 2014)
2
1.6 Structure of Go-Groups
Go-Groups ltd has the following administrative organization
Go-Groups ltd, being a Software company employs state of the art technologies in order
to deliver quality and relevant products to all its clients. These technologies
include Laravel and Spring Boot, for its backend REST API’s, angular 8+ for web frontend,
ionic and ReactJs for mobile apps, Docker for containerized deployment, maven and NPM for
package management and as build tools. Concourse CI is employed as CI/CD server and git
(with GitLab) is used for version control and also complementing the CI/CD
server. Go-Groups uses Microsoft teams for team and internal communication.
3
Chapter 2: Internship activities
2.1 First day of internship
This internship started on the 1st of September 2020. It started with a meeting
between Go-Group’s assistant technical manager, Mr. Obiassong Frank and all of the interns
in the company; five in number. Mr. Obiassong welcomed everyone and then went on to
drill all the interns present, on the company, its organization and its core values. During
the meeting, the structure of the internship was elaborated upon. Directions were given on:
who to contact whenever need arose,
what ought to be done during the internship period and
what was not allowed for interns, as well as the privileges, rights and duties which an
intern was to have in the course of the internship.
Finally, the work expected to be achieved by each intern was defined and explicitly explained.
The rest of the day was allowed for the interns to familiarize themselves with the company’s
environment.
4
project was done following the agile methodology of software design and development,
which is illustrated below.
Figure 2. Illustration of the agile software development life cycle (sauterv, 2016)
Every Wednesdays, meetings were held with the internship project’s owner, Mr. Michael
Boyo, with whom details about the project, expected future features and recommendations
and corrections for work already done were discussed on. After such meetings, the
development process either continued with adding new features to the software product or
modifying previously implemented features, to suite the project owner.
This internship project had already been defined and the main internship task was that of
implementing a cash collection and distribution service for one of the company’s new
projects. The project was broken down into stories and each study was further broken down
into executable tasks. These stories and tasks were well documented on Pivotal Tracker, a
project planning tool which encourages the agile methodology (sauterv, 2016). On each day
of internship, 2-4 of such tasks were picked and executed.
5
2.4 Start of Internship Project 1
On 5th October 2020, the first lines of code for the internship project were written. The
development phase started off slowly and with small tasks like changing colors and fonts of
UI elements and modifying form input fields, then gradually steepened to more demanding
tasks like implementing entire modules for given functionalities.
6
These use cases and actors interact as illustrate in the following sequence diagram
Service Role
- JWT Authentication Server Handle authorization and authentication of users on
the system. This is JWT based authentication server.
This server issued a private key-public key pair to
the contribution service. Each time a user wanted to
be authenticated or access a protected resource, the
user requested for a token from this authentication
server, then made a request to the contribution
service with the token. The contribution service will
7
verify the validity of the token using its private key
and either grant or deny access to the protected
resource.
- Email Notification Assist in sending designated email notifications to
Microservice system users.
These components and the communication among them are illustrated below.
The contribution service REST API, written with Spring Boot made use of the following
technologies:
8
- MySQL: MySQL database was the primary storage all REST API’s data, including
contributions and users. It was used in the production environment.
- H2 database: An in-memory database was used as the database of the application in
the development environment (to store data needed to run unit and integration tests).
- JUnit: This framework was employed for writing unit tests in collaboration with
Mockito for mocking dependencies of code while unit testing the contribution service.
9
Maven Automate build and management
of dependencies of the Spring
Boot backend API
Table 2: Tools used in project
After tests were written, then came time to write the actual REST API code. The code was
continually refactored until all the test cases written passed.
When all tasks under a story on pivotal tracker were completed, the code was pushed to
GitLab, this triggered a build process. A Concourse CI server configured for the project by
10
the Technical Manager, Mr. Tanko Edward immediately pulled the code from GitLab, tested
it by running all the tests written at development and deployed the code if all of the tests
passed. If there were any test failures, the build stopped and only resumed when the errors
had been corrected.
This process of writing REST API code, pushing, then writing frontend code and pushing
continued for 2 weeks, after which the project owner, Mr. Michael Boyo would come in to
test and give his comments on what should be done next, or what should be adjusted before
continuing to newer features.
11
2.8.1 Definition of problem
The service for which tests were to be written was a sandbox service for
the PayAmGo payment aggregator which is the major payment aggregator used on
the Go-Student platform. During the internship period, there was hand-full of software
application projects being developed by Go-Groups ltd, which employed PayAmGo to handle
all payments within those applications. Each of these projects was developed following the
agile methodology and so several system tests were performed on those applications, which
in turn put a high overhead on the PayAmGo payment aggregator, as it was
receiving and handling a lot traffic from the development environment. There thus arose a
need to construct a separate service to simulate payment transactions in the development
environment of all company projects and only migrate to the PayAmGo payment aggregator
once the applications under development were completed or were running on the
development server. Evidently, the existence of such a service was very crucial, reason why
work had to be suspended from the previously defined internship project in favor of testing
the PayAmGo sandbox. Also following one of the company’s core values of thoroughly
testing each of their products before putting it to use, whether by the public or internally by
the company’s staff, the sandbox definitely had to be tested and quickly so as not to
hinder the progress of other projects which depended on the PayAmGo payments aggregator.
The following test plan was created and used in order to effectively and fully test this service.
The test cases are not outlined, but in all, 24 test cases were written.
12
Test Scenario Test Cases Duration Comments
1. Initiating a - Initiating a payment (3days)
payment from an unauthorized
application
- Initiating a payment
from an authorized
application with
inconsistent data
- Initiating payment from
authorized application
with consistent data.
2. Selecting a - (1day)
payment channel
3. Simulating a (2days)
payment
4. Registering (3days)
simulation state
Table 3: Test Cases on PayAmGo Sandbox
As indicated in the plan above, it took 9 working days, to write test cases for the sandbox
service, on the 10th day, the tests were all run together and any bugs picked by the tests were
corrected and the code pushed to GitLab for review and deployment by the technical
manager.
13
Figma, next was the implementation phase. The key technologies used in order to implement
the interface were Spring Boot, Thymeleaf and bootstrap 3.
14
Chapter 3: Extracurricular Activities
This internship was not only composed of activities centered around software engineering,
but also included leisure sessions and other educative sessions.
There was also a meeting with the Go-Group’s technical manager, Mr. Tanko Edward. He
devoted quality time to talk with each intern. He asked me of my plans as a computer
engineer and helped me make concrete plans as to what to make of my career as a computer
software engineer and how I can effectively manage my time in order to achieve more.
15
appropriately use social media platforms to expose myself to opportunities as well amass new
skills in the IT domain.
16
Chapter 4: Difficulties and challenges encountered
This internship was a very enriching venture, thanks to both the good moments and the
few challenges encountered. For the most part, it was a smooth internship, since the
company’s staff was always ready to give directions and suggestions each time those were
needed. Notwithstanding, some hurdles were encountered in the course of the internship.
These can be broadly divided into technical related and non-technical related upheavals.
I had a hard time getting familiarized with some of Go-Groups ltd’s cultures and
inculcating some of her values like innovation. My approach to solving this was based
on my conviction that getting used to those cultures was difficult because that was the
first time of being such an environment. This approach was that of patiently watching
and imitating and as days went by, the cultures were becoming part me too.
Poor task reporting skills. At Go-Groups ltd there are weekly meetings at the start and
end of each week, attended by both all staff and all interns. In these meetings each
person tells the entire company body what they achieved for the just ended week or
what they intend achieving for the upcoming week. This was a new practice and my
reports were mostly either incomplete or incomprehensible. To resolve this, I resorted
to paying closer attention to the reports of the company’s staff and following their
approach strictly to structure and present my weekly reports.
17
The duration of internship was not well understood. When the internship started, I
thought the internship was for 6 months and was to run from September 2020 to
February 2021 ending. But before the end of February, I was called back at schooled.
This brought some confusion between the company’s administration and I.
Subsequently, to solve this, the school administration could rather reduce the
internship period to 5 months, to fit the academic year’s calendar.
18
Chapter 5: Conclusion and Recommendation
In February, the internship came to an end. Although the end of the internship was abrupt, it
was necessary. The expectation was that the internship would end by the end of February,
given that it was to last for six months (beginning from September). Notwithstanding, at the
moment of termination of internship, the goals set for the internship were about 80% attained.
The internship was taken to gain new practical and theoretical skills in engineering while
practicing what had already been gained at school. This was a great success. By the end of the
internship, I had a firm grip on API design and implementation with Spring Boot, database
design and implementation with MySQL, web user interface implementation with angular and
Bootstrap and other soft skills like presentation, assiduity, punctuality and proper time
management. I was also exposed to a great deal of state of the art technologies, including
Docker and Docker Swarm, pivotal tracker and Microsoft teams.
Through these technologies and practice, not only do I have knowledge on software
development life cycles, I can bring a software project from idea to minimal viable product
following the agile methodology of software development. These technologies and skills also
helped me better understand the client-server architecture and consequently I can build and
deploy client-server applications, with clients written in angular 8 or bootstrap and the servers
in Java (Spring Boot).
Conclusively, the stay at Go-Groups ltd was an impactful experience. A lot was learnt, from
essential software design concepts to team etiquettes and a host many other soft skills. And
though there were some challenges, the advice to any person going in for an internship is that
they should prepare their mind that challenges will definitely arise and as such they should be
ready to quickly adaptations to whatever changes may be necessary within the internship
period and in their new environment.
19
References
^. (2016, April 15). Cameroon's high-tech hub. Retrieved December 10, 2020, from
https://www.bbc.com/news/av/business-36054263/cameroon-s-drive-to-become-the-n
ew-home-of-innovation
^. (2018, July 4). What is an internship. Retrieved October 17, 2020, from
https://careers.umbc.edu/employers/internships/what-is-an-internship/
Apastyle.apa.org. (2016). Sample Student Paper. Sample Annotated Student Paper in APA
Style, 1-7. Retrieved February 8, 2021
Borno, S. (2016, April 15). Silicon Mountain. Retrieved January 16, 2021, from
https://afrohustler.com/cameroon-silicon-mountain-startups-bbc-world-news-mustwat
ch
Clarkson, E. (2018). Design and implementation of a time table generation system. 8-20.
Go-Groups. (2014, January 1). Go-Groups Website. Retrieved January 5, 2021, from
Go-Groups Website: https://www.go-groups.net
Julien, B. (2014, June 9). It's Here: Docker 1.0. Retrieved February 4, 2021, from
https://blog.docker.com/2014/06/its-here-docker-1-0
Phillip, W., Dave, S., Josh, L., Stephane, N., Rob, W., Andy, W., . . . Scot, F. (2012). Spring
Boot Reference Documentation.
sauterv. (2016, June 3). Agile Methodology and System Analysis. Retrieved January 10, 2021,
from umsel.edu: https://www.umsl.edu/~sauterv/analysis/Agile Methodology and
System Analysis.htm
Spring. (2017, August 1). docs.spring.io. Retrieved February 8, 2021, from docs.spring.io:
https://docs.spring.io/spring-framework/docs/current/reference/pdf/testing.pdf
vskills. (2015, October 8). Understanding TDD. Retrieved January 22, 2021, from vskills.in:
htts://www.vskills.in/certification/tutorial/tdd-2
20
Appendices
- Silicon Mountain: Name referring to the ecosystem of IT startups and companies in
and around the Fako Division of Buea. (Borno, 2016)
- Docker: A set of platform as a service products that use OS level virtualization to
deliver software in packages called containers. (Julien, 2014)
- Docker swarm: A Docker container orchestration tool allowing for the management
of containers deployed across multiple machines
21