Its purpose is to improve Software Engineering by applying a scientific approach (experimentation) in the construction of new methods and techniques to support software development. In addition, it is also concerned with the advancement of the area, studying and researching new models for the planning, execution and packaging of studies related to Software Engineering.
These activities are fundamental for Software Engineering to increasingly incorporate the principles of Engineering.
Software testing is an empirical investigation conducted to provide stakeholders with information about the quality of the product or service under test, with respect to the context in which it is intended to operate. Software Testing also provides an objective, independent view of the software to allow the business to appreciate and understand the risks at implementation of the software. Test techniques include, but are not limited to, the process of executing a program or application with the intent of finding software bugs.
Model-based testing (MBT) is an approach to derive test artefacts from system models. MBT is based on the idea of the automation of test activities, e.g. test case/script generation. This help to reduce the cost of software testing, since this cost is related to the effort and time for test cases design, test artefacts (e.g. drivers and scripts), construction and the number of interactions performed by each script during the test execution. As the testing phase costs between 30% and 60% of software development effort, MBT is a valuable approach to mitigate these problems. Furthermore, the MBT adoption can bring several other advantages to the test team such as early identification of ambiguities in the model specification, enhanced communication among developers and testers and easiness to update the test cases/scripts when the requirements are changed. However, the MBT technique requires specific activities that are beyond the usual activities of software testing. Moreover, MBT adoption requires that test engineers adjust their testing process and invest in the testing teams training and use of new tools, methods and techniques.
Performance testing aims to identify potential bottlenecks or performance shortfalls, determining the system processing limits, and verify that the performance of software meets the specified performance non-functional requirements. For instance, it can be used to determine the application under tests behaviour under different conditions, such as insufficient memory or low disk space, performing testing over part or the whole of the system, under normal and/or stress load. Hence, performance testing can be classified roughly into two categories:
(1) Load Testing: The test focuses on determining or evaluating the behavior of a system under normal workload. Mainly, to verify that the system meets the specified performance nonfunctional requirements;
(2) Stress Testing: The test aims to determine the behavior of a system when it performs beyond the normal workload.
Further, this test reveals the failure points when the system is submitted to huge workloads.
The Model Driven Engineering (MDE) includes software development approaches where source-code is generated for specific target platforms from system models represented in multi-levels. In code generation approaches, software artifacts are input to transformations that are capable of combining information to generate one or more target artifacts. Other approaches that do not use code generators are also interesting, allowing communication and simulation of design models. This research topic is broad and diverse, opening many possibilities for specific researches described below.
MDE is built over the integration of many Domain-Specific Languages (DSLs) or he use of only one to represent artifacts in high-level of abstraction. Currently we are investigating the development, use and integration of many DSLs supporting the representation of abstractions for: Model-Based Test, Software Reuse, Object-Relational Mapping, Entity-Relationship, Object Orientation, OO-Method, Domain Driven Design, Use Case Patterns, Design Patterns, Method Engineering, Test-Driven Development, Acceptance Test-Driven Development, Model-Driven * refinement and transformation tools, Behavioral Driven-Development, Evolutionary and Architectural and Functional Prototyping.
Tools developed in our research group follows a mantra of applied computing. Likewise, our goal is to develop and study the feasibility of these tools to maximize production software for information systems, embedded systems and wireless sensor networks. This topic also includes investigations to explore the automation of software processes tasks. Model-driven development is one of the practices under study, as well as software process automation with the Business Process Modeling Notation (BPMN 2) and software test automation. Another element under investigation is the automation of Software Engineering business through DevOps, including technical studies to automate software factories through Continuous Integration, Continuous Deployment, Continuous Delivery and Blockchains.
Not all modelling practices will work for all the contexts in software development. Agile processes, for example, demand specific features from design tools that challenge their usage by agile teams. Our goal in this topic is to develop methods and processes to enable the combination of agility with design through tools for MDE, such as mockups and code generators built with different languages.