# Comparison of Multi-Agent Platform Usability for Industrial-Grade Applications
## 5 AOSE in Contrast to Modern SDLC
### Adherence to Modern Code Standards  
Over the years, code standards have evolved in SE. In this context, the book [64] is probably the most well-known work describing best code practices. Among other things, it outlines (1) how methods, interfaces, and tests should be structured, (2) how the project should be organised, and (3) what the most effective naming conventions are. Modern code standards emphasise aspects such as rich, yet not overly complicated interfaces, modularity of software constructs, and the selection of appropriate libraries. Additionally, the code standards can also depend on the technology and programming language of choice. For instance, in Java, built-in streams with declarative means of collection processing are more favoured than standard loops. As most AOSE frameworks were developed several years ago, they tend to follow practices that are usually found in legacy code. Within this domain, the lack of intermediate interfaces, which abstract the complexity of built-in methods, is the most severe problem. In particular, available agent platforms tend to directly use fairly complicated agent-related concepts that require substantive knowledge of the agent systems domain. These concepts are common in agent-related communities (e.g., terminology of BDI); however, they do not appear in general SE. Therefore, developers who are not familiar with the theory of agent systems may find them difficult to use. Such frameworks require gaining the necessary know-how, which additionally increases the costs of overall development. This problem could be solved by providing additional layers of abstraction that would hide the complexities associated with agents from the end user. For instance, this has been done in Akka [65], which may be one of the factors contributing to its industrial acceptance. Nevertheless, in most agent platforms, such practices have not been applied. Moreover, many agent platforms have not paid enough attention to smaller yet essential code details (e.g., Jadex). Their official codebases contain \"workarounds\" or features that are internally marked as unfinished. Additionally, several methods have also been named ambiguously, which may lead to misinterpretation of their implementation specifics. When using such code, developers may find themselves in situations where certain functionalities do not work as intended. Furthermore, if one were to examine the source code of an application, it would be extremely difficult to identify errors. Specific examples have been determined based on JADE, Jadex, and SPADE platforms, as summarised in Table 3.  
Among all agent platforms, JADE probably has the widest built-in support for FIPA-specific concepts (see Section 3). As a result, developers working with JADE can take advantage of a rich set of predefined functionalities without having to implement them on their own. However, all of these use strictly agent-specific terminology, which may not be familiar to most industrial programmers. Moreover, even though the design of JADE is sufficiently extendable (as evidenced by the number of JADE-based extensions/add-ons), overriding its advanced features can be difficult due to (1) high cognitive complexity [66], often reaching scores above 20 at the method level, where 15 is the recommended threshold, (2) large classes, sometimes exceeding 700-2000 lines, and (3) code repetitions, with a total of 442 cases found in the source code. To outline the scale of existing issues, running the Intellij code inspection on the latest sources of JADE results in 364 errors and 17,431 severe warnings. Among these, 164 errors are attributed to the usage of deprecated APIs, which reflects the maintenance state of JADE (see Section 5.5). Furthermore, there are a large number of lines with comments that are not part of the documentation. This deviates significantly from the standards of high-quality code, which should be self-explanatory, with occasional comments referring only to the most complex functions.