# Migrating from Developing Asynchronous Multi-Threading Programs to Reactive Programs in Java
## 7 Evaluation of Results
### Performance Analysis
#### 7.2.5 Limitations in Performance Testing  
This testing was performed in a local environment, with containerized databases, thereby influencing the accuracy of higher concurrency simulations. Despite the utilization of a \"server\" system to host the applications and an additional \"client\" system to execute the JMeter tests, the local conditions do not fully reflect the behavior in a production environment with real users. In addition, testing in a local environment may not scale to what would be achieved inside cloud or distributed production environments, and the generated traffic is not as diverse as in real-use scenarios.  
The test scenarios generally focused on I/O-bound flows, which are common in web applications. While this approach provided meaningful insights into such typical use cases, CPU-bound workloads were not benchmarked, requiring further investigation in this area.  
The methodology included running multiple iterations of the tests, which consistently showed stable behavior with only minor variations within acceptable ranges. However, a fixed number of iterations was not employed, and formal error margins were not calculated, as the observed stability across runs was considered sufficient. Nonetheless, adopting a more structured and precise testing approach could further strengthen the reliability of the results.  
Additionally, the testing process did not include long-duration tests to evaluate the effects of \"software aging\", which could impact the system's stability and performance over extended periods of continuous operation. Software aging, characterized by factors such as resource leaks, memory fragmentation, or other cumulative effects, is an important aspect in determining long-term robustness and reliability [71]. Future evaluations should incorporate these tests to better assess the system's behavior under prolonged workloads and identify potential areas requiring stabilization, such as resource cleanup mechanisms or enhanced error-handling strategies.  
The hardware specifications for the devices used to perform the testing are as follows:  
* Server: Intel Core i7 10,700 CPU, 32 GB DDR4 RAM, and 1 TB SSD (Intel, Santa Clara, CA, USA).
* Client: Apple M1 chip, 16 GB unified memory, and 256 GB SSD (Apple, Cupertino, CA, USA).  
These specifications influence the results of performance testing, as the limited resources available for such consumer devices might have introduced variations that would not have been present in a robust production environment. Also, other applications or processes running within the systems used for testing could have interfered with the results, introducing additional variation in the resulting measurements.  
The testing was conducted over LAN, which ensures minimal network latency, as displayed in Figure 9.  
While this was beneficial for achieving consistent and timely results, it does not provide a complete overview of the performance under varied network conditions, which are encountered in distributed environments or on the Internet.  
During the performance testing phase, the authentication using JWT tokens was disabled to avoid the constant overhead it introduced. This allowed for a focused evaluation of the core performance of the services. However, a complete evaluation based on real-world scenarios should also consider the overhead introduced by the authentication.