== Profile Information
Name: Formasit Chijoh Fokunang
Nickname: formasit
Github: Formasitchijoh
Email: formasitf@gmail.com/manoica2023@gmail.com
Phone Number: +237-675-718-328
Location: Cameroon
Time Zone: Cameroon (GMT + 1)
== Meeting with mentors:
I am reachable anytime through email, slack, and any communication channel
GMT + 1, 6:00 AM to 10:00 PM
= Synopsis
== [WikiEducation Dashboard] Improve the Wiki Education Dashboard test suite
Wiki Education Dashboard is a Ruby on Rails application that provides server-rendered fronted and contains a with a mixed React and Redux. It provides tracking and statistics for hundreds of thousands of editors on Wikipedia and other Wikimedia wikis.The Dashboard codebase uses a comprehensive suite of Ruby tests, including unit and feature tests, to maintain functionality.However, the current test suite is fails often, taking approximately 35 minutes to run (on GitHub CI), and is overall fairly fragile, with intermittently failing tests .This project seeks to enhance the maintainability, scalability, and developer experience by improving the test suite's performance .The focus will be on identifying and improving quality and performance of the test suite, optimizing execution times, and increasing test coverage. Strategies such as parallelizing tests, and refactoring slow tests will be employed to achieve a more reliable and performant platform. Improving the Dashboard test suite will drastically improve the developer experience and making the platform performant and scalable
== Mentors
Sage Ross(@Ragesoss), Sulagna Saha(@saha23s)
= (In Progress)
== Deliverables
The aim of this project is to address the core issues of maintainability and reliability by identifying patterns of intermittent test failures and their root causes. It will also focus on increasing test run speed and ensuring comprehensive test coverage across the application. The project will improve the platform's overall performance, making it more maintainable, scalable, and enhancing the developer experience, The following will be my area of focus.
1. Identifying and fix all tests that fail intermittently
2. Identifying tests (or sets of testsEstablish a test suite that passes 20 consecutive runs on CI
3. Refactor, or aspects ofrewrite and improve code quality and test suite configuration) that contribute substantially to execution timecoverage of areas of the code holes in test coverage and write test for untested LOC
34. Areas of the code with significant holes in test coveragedocument test case that can evolve for future reference
== Implementation Details
4.The Major scope of this project will focus on the ruby rspec test suite, for the ruby on rails backend which contain unit tests of individual class files as well as browser-driven feature (ie, integration) tests that interact with both the client-side UI and the server-side behavior, Tests that are not easy to understand or should be refactored or rewritten
===== Alsohence improving this section will greatly affect the performance of the entire test suite.
The primary focus will be evaluating the test suite and its recent CI logs to identify intermittently failing tests, I wish to stretch the goal of the project by
1their causes, and tests that significantly contribute to long execution times and proper evalution of external API that the system interacts with. Establish a test suite that passes 20 consecutive runs on CIThe project will also target areas of the codebase with gaps in test coverage and LOC with unwritten test , ensurrewriting stability and reliability by minimizboth the tests and underlying flakiness and inconsistencies in test outcomes.code as needed
=== STEP-I
2. I aim to optimizeThe current API of the test suite execution to ensure it completes in under 20 minutessystem currently through error intermittently,
3.* The first step will be to run unit test each test for the different controllers, models and services in isolation to ensure it works as expected and identify any patterns of failures in the test, identify the cause of the failure and document them,
* Features that utilize third party Api like the LiftWing Api, ReferenceCounter APi, Commons Wiki, WwikiApi, often fail intemittenly, Complete the remaining 1%due with at least some of untested LOCthese problems, bringthe LiftWing the platform to 100% line coverage for improved reliability and maintainabilityAPI has different responses than what the specs were written around.
4. to different responses returned than what the Rspec expect, I aim to increase the JavaScript/JSX statement coverage to 80% if time permits
== Implementation Detthese third party endpoint will be tested under different condition to analyze it response and update existing to cover the reponse gotten from this endpoint Rpec and code that use these enpoint.
These endpoint will be tested, to identify its’s interactions with the system and Why it fails
The primary focus will be evaluating the test suite and its recent CI logs to identify intermittently failing tests, their causes, and tests that significantly contribute to long execution times. The project will also target areas of the codebase with gaps in test coverage, rewriting both the tests and underlying code as needed.* Currently the the CI/CD pipeline takes approximately 30 to 35 minutes to complete, Additionallythis is relatively slow for development purposes, tests that are difficult to understand or prone to flakiness will be refactored. Proper tests will be implemented to catch failures caused by external APIs or third-party resourcesrecent Sentry logs and development logs will, be reviewed to identify the different failure, updatingand how the codebase to handle these cases.y have evolved overtime, These improvements will allow new contributors to easily identify edge cases,and identify any pattern and dependencies. quickly debug failingUsing the most slowest apI request and test that are identified by the tests suite, and reduce overall build time on GitHub CI
= Phase 1 (Deliverable before phase 1 evaluation): timer will be used to identify the time that each of the requests takes and how identify how to optimize them. And improve the performance.
* Evaluate the existing test suite and its recent history of continuous integration (CI) logs to identify tests that fail intermittentlyI am currently working on issue of writing comprehensive test for the javascript and ruby test suite and from the issue that was raised here i have been going through all the failures that have come up during the contribution stage and am currently fixing them, i ill continue to do so until outreachy result declaration and all through the bonding phase
=== STEP-I
* Evaluate and identify third party resources that causes test to failAfter proper analysis of the entire test suite and identifying the different causes of intermittent failures and their causes , The project will employee automation testing strategy that will range from
* Identify areas of the code with significant holes in test coverage
= Phase 2 (Deliverable before phase 2 evaluation):updating existing unit test to fix and accommodate breaking changes and write new unit test to improve the test coverage for the lines of code with unwritten test
* Run each test in isolation to identify test that contribute substantially to execution timeUpdate test for external API and ensure existing test are written around the recent responses that are returned by the external APi and ensure all features that unilizes them use the appropriate format
* Ensure that all existing tests cover edge cases adequatelyAfter analysis of the current failures it noticed that major section of the test suite that posses an issue are with the revision, articles and course that uses the LiftWing API and the ReferenceCounters of the articles, each of these models controllers and request test case will be reevaluated to improve the find issue
* All existing modules will be properly tested to ensure full test coverage, fixing any issues encountered and writing new integration test for new codes and will be tested and ensuring that all work as expected improving and writing new integration test for new feature
* Writing tests to fix code with holes in test coverage, in the codebase and fixing all possible bugsEach endpoint will be tested with different loads to see it’s stress level and impRove it’s performance,
* Using Capybara to test the server rendered section of the test suite an tested end to end using the systems flow and ensuring all parts work toghether as expected.
* Rewrite tests that are not easy to understand or should be refactored or rewritten
= Phase 3 (Deliverable before final evaluation):Using Sentry logs, test suites will be improves to reduce test run and equally optimize test performance.
* Establish a* create new test suite that passes 20 consecutive runs on CI and complete under 20 minutesData configurations and ensure existing once are improved to work
=== STEP-III
* Complete the remaining 1% of untested LOC, bringing the platform to 100% line coverage* Run end to test to ensure Existing iintermittent test failures are resolved
* Write a guide to assist developers in navigating and diagnosing issues in failing tests
* Implement a more intuitive and easy to understand reporting strategy for error logs and where exactly the error is from
== Future Goals:
Will be implemented if all above-mentioned milestones are achieved and completed successfully and approved by the mentors, also desired to be taken up after Outreachy.
*Increase the JavaScript/JSX statement coverage to 90%
*Continue monitoring the system platform to ensure all test pass properly and are effective and handle new code
=== Timeline
=== October 29 - November 26:
* Continue making contributions to the Wikieducation Dashboard
=== November 26 - December 9
* Community bonding period
=== December 9 - December 14
(Week 1 )
* Begin with the user research to identify further areas of improvements in the existing test suites
* The first step will be to run unit test each test for the different controllers, models and services in isolation to ensure it works as expected and identify any patterns of failures in the test, identify the cause of the failure and document them,
=== December 16 - Jan 5 (Week 2)
* Features that utilize third party Api like the LiftWing Api, ReferenceCounter APi, Commons Wiki, WwikiApi, often fail intemittenly, due with at least some of these problems, the LiftWing API has different responses than what the specs were written around.
to different responses returned than what the Rspec expect, these third party endpoint will be tested under different condition to analyze it response and update existing to cover the reponse gotten from this endpoint Rpec and code that use these enpoint.
These endpoint will be tested, to identify its’s interactions with the system and Why it fails
=== Jan 7 - Jan 12
(Week 3)
* create new test Data configurations and ensure existing once are improved to work
* Currently the the CI/CD pipeline takes approximately 30 to 35 minutes to complete, this is relatively slow for development purposes, recent Sentry logs and development logs will, be reviewed to identify the different failure, and how they have evolved overtime, and identify any pattern and dependencies. Using the most slowest apI request and test that are identified by the test suite, a timer will be used to identify the time that each of the requests takes and how identify how to optimize them. And improve the performance.
=== Jan 14 - Jan 19
* updating existing unit test to fix and accommodate breaking changes and write new unit test to improve the test coverage for the lines of code with unwritten test
Buffer time for previous weeks
Mid point feedback
Jan 21 - Jan 26
(Week 5)
Discuss how to improve continuous new uploads
Keeping up with the ongoing research
* Update test for external API and ensure existing test are written around the recent responses that are returned by the external APi and ensure all features that unilizes them use the appropriate format
*Using Sentry logs, test suites will be improves to reduce test run and equally optimize test performance.
January 28 - Feb 3
(Week 6 )
After analysis of the current failures it noticed that major section of the test suite that posses an issue are with the revision, articles and course that uses the LiftWing API and the ReferenceCounters of the articles, each of these models controllers and request test case will be reevaluated to improve the find issue
Feb 5 - Feb 10
(Week 7)
All existing modules will be properly tested to ensure full test coverage, fixing any issues encountered and writing new integration test for new codes and will be tested and ensuring that all work as expected improving and writing new integration test for new feature
Improve the data flow for continually importing new uploads [B]-7
July 12 - August 17
(Week 8 )
* Each endpoint will be tested with different loads to see it’s stress level and impRove it’s performance,
* Using Capybara to test the server rendered section of the test suite an tested end to end using the systems flow and ensuring all parts work toghether as expected.
26 - 2
(Week 9 )
Run end to test to ensure Existing iintermittent test failures are resolved
Write a guide to assist developers in navigating and diagnosing issues in failing tests
Implement a more intuitive and easy to understand reporting strategy for error logs and where exactly the error is from
4-9
(Week 10 )
Increase the JavaScript/JSX statement coverage to 90%
11-16
(Week 12 )
*Continue monitoring the system platform to ensure all test pass properly and are effective and handle new code
Wrap up the research
Code cleanup for submission
== Participation
I intend to use the project’s slack channel as the main communication channel and also through emails, as per the mentor’s convenience. I’ll equally github as the main means of contributing code where I will push commits to my own clone of the repository. I’ll be using GitHub’s issue tracker for feature requests and bugs and communicating through Phabricator task, I would equally help other contributors and users solve their issues and aid the process of reviewing my Pull request by writing good and understandable commit and pull request messages.
=About Me
== Education
I am a software engineering graduate from the University of Buea, set to graduate this December. During my studies, I gained proficiency in Python and Rust, test driven development, which enabled me have a strong knowledge software development. I was introduced to and began contributing to free and open-source software during my sophomore year, and I have continued ever since. The open-source community provides a collaborative and welcoming environment where I can practice and improve my skills without bias or limitations. I am particularly passionate about learning and ensuring that everyone has access to free, quality education. Contributing to Wikimedia and the Wiki Education Dashboard allows me to support this initiative in my own small way
== How did you hear about this program?
I learned about Outreachy from a mentor who has contributed to wikimedia through Outreachhy and GSOC over the years and suggested it was a great opportunity for me to learn and apply my skills in an industry project. I have applied to Outreachy for five times , the first two times I was accepted but didn't go pass the contribution phase and the last 3 I wasn't accepted.
== Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?
I have no other commitments as i am done with my degree program. I would like to spend time with my family from 24th of December to the 1st of January but I can accommodate any important task during this time.
== Will you have any other time commitments, such as school work, another job, planned vacation, etc, during the duration of the program?
I don't have any other commitments, I don’t have any summer plan other than Outreachy. The Outreachy project phase takes the highest position on my priority list
== What does making this project happen mean to you?
I strongly believe in contributing in my own way to improve the challenges I have faced, enabling others to benefit from my experiences, my first PR to the platform ran for over 50 minutes and it failed. I struggled to understand the reason for the failure, as I did not clearly identify where the error originated and found it difficult to interpret the error messages. This process took me an entire day to resolve after seeking help from my mentors, Sageross and Abishecks, who were very approachable and provided valuable guidance. on what the issue was. Over the course of the development i have realized other contributors also have this challenge and for a newcomer it is very overwhelming, So improving the test suites of the dashboard will help improve the developer experience and help newcomers better understand the error they are having and what is the possible cause and how to fix them.
Furthermore, these improvements will enhance the overall performance of the dashboard, ensuring a seamless user experience and enabling students and instructors to maximize their use of the platform for education and knowledge transmission.
From a professional point of view, I have recently begun learning Ruby on Rails as part of my development skill set. Additionally, I am focused on writing comprehensive and efficient tests to improve system performance, maintainability, and scalability. I believe this project will allow me to apply my knowledge, enhance my skills as a tester, and contribute to significant FOSS projects while gaining direct access to mentorship.
== Past Experience
I am passionate about performant system that are maintainable and scalable, having been passionate about Software development since my second year in university since then I have been working continuously on personal projects and some open source projects. I have always been interested in building software that are reliable and has practical scale implications, and Open source has provided me with the platform to do so. I make commits with clean commit messages and well structured Pull Requests, I believe this helps me communicate my understanding of the task and help my mentors in the review process
= Coding Skills:
== Programming Languages and Frameworks:
Fluent in HTML, CSS, JavaScript, Ruby, Python
Proficient in Ruby on Rails and experienced with Django (Python) and Java.
Strong knowledge of OOP and MVC architecture.
Experienced with front-end frameworks such as React, Next.js, and Redux.
Proficient in testing tools: RSpec, Jest, and Capybara.
Familiar with CI/CD practices and tools.
Strong concepts of Git; can adapt to other version control tools if required.
Good analytical and problem-solving skills.
Effective communication skills for collaboration in a team.
Understanding of Agile methodologies
I have earned a great amount of experience with the codebase of the project. Also, I have made quite a few pull requests now and most of them have been merged. My contributions were focused towards writing unit test , fixing existing bugs,
Here is a list of my contributions:
== Wikimedia Contributions:
https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/5973
https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/5965
https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/5974
https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/5978
https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/5985
https://github.com/WikiEducationFoundation/WikiEduDashboard/pull/5986
= Other Contributions
== Unstructured Studio
https://github.com/unstructuredstudio/zubhub/pull/736
https://github.com/unstructuredstudio/zubhub/pull/778