# Design and Research of a Virtual Laboratory for Coding Theory
## 2 Materials and Methods
### Designing the Virtual Laboratory  
* Formulation of requirements for the virtual laboratory Well-thought-out and documented requirements for a software product are essential for its successful implementation. Requirements can be categorized into two groups: _functional_ and _non-functional_. Functional requirements aim to define the desired behavior of the system through its functions, services, or what the system must perform. Through the non-functional requirements, the aim is to determine the quality of the software system through a set of standards used to assess the specific work, for example, speed, security, flexibility, etc. [26]  
\(\circ\) Functional requirements  
The following functional requirements are formulated for the virtual laboratory:  
- The system interface should be in Bulgarian and English;  
- Logging into the system should be performed using a username and password;  
- The system should support two types of users--students and teachers;  
- Ability to control users--add, remove, change passwords, and manage groups for control work (tests);  
- Ability to control the conditions of the tasks;  
- Ability to include in its composition a set of interactive models for solving tasks for the following types of error control codes: _Hamming code by general method_--encoding mode and decoding mode; _Hamming code by matrix method_--encoding mode and decoding mode; _Cyclic code by polynomial method_--encoding mode;  
_Cyclic code using linear feedback shift register_--encoding mode. - For each solved task, the user receives incentive points according to previously specified criteria;  
- The system should support three modes for solving tasks:  
- \"Training\" mode (no set condition);  
- \"Task\" mode (solving a specific condition);  
- \"Control work\" mode (limited number of models launched). Figure 2: Methodology for design and development of the virtual lab. * The system should store information about the solved tasks, including data about the name of the software model used, including the mode of operation (encoding or decoding); time to solve the task; the number of mistakes made; the mistakes made; the number of points received from the task; and the condition of the task (only in \"Control work\" mode). * The system should be platform-independent;
- The system should be web-based and work with the most popular web browsers, such as Mozilla Firefox, Google Chrome, Microsoft Edge, Safari, etc. ;
- Data processing and system response should take minimal time;
- Access to the system should be allowed only for registered users;
- Access to the virtual laboratory should be possible at any time and from any place;
- Not requiring the installation of additional software to work with the virtual laboratory;
- The graphic interface of the administrative part and the interactive models should be intuitive and unified;
- Data should be protected from illegal attacks. * Architecture of the virtual laboratory The general architecture of the designed virtual laboratory is given in Figure 3. It consists of four layers:
* Presentation Layer. This layer represents the user interface through which users interact with the system. Its main purpose is to deliver information to and collect information from users. As can be seen from the architecture, the system is intended to support two types of users--students and teachers. * _Interactive models for solving tasks_--this module includes the four planned software models: Hamming code by general and matrix method, cyclic code by polynomial method, and cyclic code by linear feedback shift register;
- _Modules for statistical reference_--these modules summarize the accumulated data and provide information about the usability of the models for solving tasks, student activity, and the most active students and the mistakes made when solving the tasks;
- _Administrative modules_--these modules serve to manage user profiles; manage assignment conditions and group students for control works. * Data Access Layer.