Tddm4Iots: A Test-Driven Development Methodology For Internet of Things (Iot) - Based Systems
Tddm4Iots: A Test-Driven Development Methodology For Internet of Things (Iot) - Based Systems
[email protected], {mhornos,carlosrodriguez}@ugr.es
1 Introduction
methodology was presented by Schwabe and Rossi in 2002 [4]. Thus, it has traditionally
been considered necessary to review development methodologies after the emergence
of new technological paradigms in Software Engineering.
Nowadays, IoT is one of the most prominent technological paradigms. This term,
coined by Ashton [5], stems from the objective of “digitalizing physical objects” so
that they can seamlessly interact with each other and with the people surrounding
them to improve their lifestyles and productivity [6]. IoT is the result of the conflu-
ence/collaboration of several research areas, such as communication and cooperation,
location and identification, sensor and actuator networks, integrated processing of dis-
tributed information, artificial intelligence and adaptive user interfaces, to name just a
few of the most important converging fields.
The first IoTS were developed using ad-hoc methodologies specific to each devel-
opment team, arising from the corresponding adaptation of methodologies employed in
the development of more traditional information systems (IS).
However, the development of IoTS differs from the development of traditional com-
puter systems in several key aspects. For instance, the development of IoTS necessar-
ily involves deploying and setting up hardware components (sensors, actuators, con-
trollers…) to interact with the physical and digital environment, which is not the usual
case in traditional IS. Each of the hardware devices deployed in the environment (such
as sensors, actuators and single board computers) requires a specific programming and
configuration, as well as the implementation of information dissemination mechanisms
(Publish/Subscribe or Request/Response are among the most common) to efficiently
distribute data and create complex data flows between them.
On the other hand, in both traditional IS and IoTS, end-user client applications,
mainly web-based [7] or mobile-based [8], must be implemented to interact with people,
depending on the needs of the users themselves [9]. However, in the literature, the vast
majority of IoTS development methodologies are focused exclusively on the implemen-
tation of either configuration software for IoT devices or a set of end-user applications,
but they do not cover both aspects at the same time. In addition, none of the studied
methodologies incorporate feasibility analysis or maintenance stages, instead they focus
on software design and code generation. In this paper, we propose a methodology for
the development of IoTS that covers all these aspects at the same time. Consequently,
the main objectives of this paper are: (1) To present an exhaustive review of existing
IoTS development methodologies, based on TDD, MDE and/or agile methodologies;
(2) To check that there is no methodology specifically designed for the development of
IoTS; and (3) To propose a new development methodology for IoTS that, in addition
to the software in charge of business logic and user-system interaction, addresses the
configuration and deployment of the hardware (sensors, actuators, processors,…) and
the programming of single board computers (Arduino, Raspberry,…), so that they can
perform an adequate pre-processing of the data captured by the sensors.
The remainder of this paper is structured as follows: Sect. 2 presents the state of the
art on IoTS development methodologies based on TDD, MDE, and/or agile development
methodologies. Section 3 proposes a new methodology for the development of IoTS that
attempts to overcome the absence of a specific methodology for the development of IoTS.
Finally, Sect. 4 outlines our conclusions and future work.
TDDM4IoTS: A Test-Driven Development Methodology for IoTS 43
Table 1. Keywords and query strings used and number of search results obtained
As a result, we obtained 38 documents (see last row of Table 1). After a thorough
review of these documents, those that did not present a development methodology were
discarded, and 12 papers (shown in Table 2) were finally selected for further analysis.
Table 2. (continued)
it controls. That aspect has only been taken into consideration by [15] and [17]. In
addition, deployment diagrams, which can show interlinks between the (software- and
hardware-based) system components, are only used in [19].
One approach that can reduce and alleviate the work of developers is specifying the
context of the environment that IoTS must control: available networks, quality of service
(QoS), privacy levels, the physical environment in which the system will be deployed, as
well as the preferences that the user may have, such as aesthetic changes and accessibility
parameters. This specification may also help in making decisions regarding the specific
technologies and tools to use. These aspects are considered important in the present
work, although they are not included in any of the reviewed methodologies.
Another widely forgotten aspect of the development of IoTS in the reviewed bib-
liography is information storage. Although most authors highlight the importance of
information storage, they assume that it is ready to use at the beginning of the devel-
opment, via existing software components that are not significant in the development
process. However, we consider that the type of database (relational, NoSQL,…) that is
used must be carefully chosen during the development process, in addition to adequately
designing its structure and selecting the resources dedicated to its management (database
engine, local server or in the cloud, etc.).
Consequently, we have reached the conclusion that existing methodologies have
important shortcomings in terms of their applicability to IoTS. Therefore, we present a
new methodological proposal to better tackle the specific requirements of IoTS in the
next section.
46 G. Guerrero-Ulloa et al.
3 An Overview of TDDM4IoTS
We present a new methodology specifically designed for the development of IoTS that
integrates ideas from the most prominent software development methodologies and tries
to mitigate the weaknesses found in the reviewed methodologies. In fact, it is based on
the TDD methodology phases [22], while applying the fundamentals of MDE and the
principles of agile methodologies. That is why we have named it Test-Driven Develop-
ment Methodology for IoT-based Systems (TDDM4IoTS). Additionally, it emphasizes
the use of tools that, according to experts, ensure that the software meets the requirements
that the customer has provided.
We propose TDDM4IoTS as a methodology independent of specific automation
tools or frameworks, so that developers are free to choose the appropriate tool(s) to
be used, depending on their needs and preferences. Nonetheless, we are working on
the development of an automated tool to support TDDM4IoTS in all its phases. For
the requirements specification, we propose using use cases instead of describing the
requirements in natural language, which is more usual and what makes them error-prone
and full of ambiguities [16]. One of the goals of our automated tool will be to reduce
ambiguities at this level. The use cases, together with the conceptual class model, will
allow us to automatically generate both the tests and parts of the software that must pass
those tests. The developers will focus on specifying and analyzing system requirements,
as well as completing and adapting the automatically generated software.
The phases of the life cycle of TDDM4IoTS, shown in Fig. 1, take into account the
development of all types of IoTS, which is why the order and frequency of application,
as well as the allocation of resources for each phase will depend on both the nature
of the project and the knowledge, skills, experience and number of project members.
Nonetheless, the order of application suggested by the numbers shown in Fig. 1 would
be valid for the development of a large number of IoTS.
1
Preliminary analysis
11 2
Maintenance Technology layer
design
10 3
Deliverable Detailed require-
assessment ment analysis
9 4
Hardware and Model generation
software deploy- and adaptation
8
5
Software refinement Test generation
7 6
Model refinement Software generation
These phases will be repeated iteratively for each deliverable. However, in the devel-
opment of some deliverables, it may not be necessary to apply some of these phases
(drawn with a dashed line in Fig. 1). For example, it may not be necessary to perform
the preliminary analysis in a second iteration, or to carry out the refinement of the model
in the development of a given deliverable. The development team must estimate the
effort and duration of the process to obtain each deliverable or component into which
any project is usually divided. Negotiation between the client and the development team
on the priority (development order) of each deliverable will be of vital importance to
the success of the project, unlike the SCRUM development framework, where the client
(product owner) assigns development priorities to the deliverables (Sprints) [23–25].
TDDM4IoTS requires the project facilitator’s responsibility to be assigned to the
member with the most experience in project management who possesses the characteris-
tics of a leader. Developers who follow TDDM4IoTS are not subject to task impositions
but to negotiations. The facilitator is not responsible for the whole project, s/he is just
the manager of the negotiation between the development teams. The responsibility of
the project rests with each of its members. Consequently, TDDM4IoTS adopts a hori-
zontal management approach with shared responsibility, leaving the team members to
self-organize. The number of developers will depend on the project size, and considering
that we suggest “agile” teams, they should not exceed ten [23, 26]. The project members
have different responsibilities, depending on their roles, shown in Table 4. Each devel-
opment team is made up of a maximum of three developers, and should be balanced in
terms of both knowledge and experience [26]. One of its members will be (informally)
designated as a counselor, if necessary.
Consequently, while the participants can play three main roles in SCRUM, which
are detailed in [29, 30], together with their responsibilities, we consider four roles in
TDDM4IoTS, as shown in Table 4.
We can conclude that: (1) SCRUM is based on the principles for agile software
development. (2) IoT encompasses different and varied aspects, such as the complexity
of software development, hardware deployment, indispensable communications, cloud
Table 4. (continued)
storage and processing, and the intercommunication between these elements, among
others. (3) SCRUM and XP ignore non-functional requirements, which are an important
aspect in IoTS [31]. These three premises make it quite difficult to make a simple adap-
tation of SCRUM for the development of IoTS. This is why we intend to incorporate the
best features of the manifesto for the agile development of software into TDDM4IoTS,
adapting them to the particularities of IoTS.
The following subsections describe how to apply the foundations on which
TDDM4IoTS is based and its phases, as well as the activities to be carried out and
possible tools to be used in each of them.
Values and Principles for Agile Software Development. Agile software develop-
ment is governed by four values, namely: (i) Individuals and interactions before processes
and tools, (ii) Software working before extensive documentation, (iii) Collaboration with
the customer before contractual negotiation, and (iv) Response to change before follow-
ing a plan [29, 30]. Agile methodologies have revolutionized the software development
process, demonstrating that development teams that have completed their projects suc-
cessfully and on time did not respect rigid and heavy methodologies [30]. To comply
with these values, twelve principles are detailed that a methodology must comply with
to be qualified as an agile methodology [29, 30].
TDDM4IoTS complies with the twelve principles, bearing in mind that, as already
said, IoTS comprise the deployment of a series of hardware devices in addition to the
corresponding software. Therefore, a deliverable will be a finished element of the system,
obtained as a result of an iteration, which is important for the customer.
TDDM4IoTS: A Test-Driven Development Methodology for IoTS 49
TDD as an Agile Methodology. TDD [32–34] is one of the methodologies used for the
development of traditional IS that has not been applied to the development of IoTS. As
this type of methodology guarantees that the software of the developed system satisfies
the requirements that the user has provided, we have incorporated it into our proposal.
Nowadays, many integrated development environments (IDE) support TDD, such as
IntelliJ IDEA, .Net, or Eclipse, to name just a few [35].
TDD, which is considered an agile methodology, is applied to ensure the quality of
the deliverables. It has three phases in its development cycle [33]. By first writing the
tests and then writing the code that has to pass the tests, it is ensured that the software
does exactly what the customer wants (i.e., tests formally specify use cases) [22].
The agile software development methodologies that have been considered in this
research are XP (eXtreme Programming) [36] and SCRUM [23]. We are interesting
in how they approach software development projects, and especially in: delivery fre-
quencies, acceptance of changes, giving greater importance to the deliverable than to an
exhaustive documentation, and the quality of the software (tested and approved by the
client) as one of the most important features, among other principles of agile method-
ologies that must be complied with. On the one hand, XP is one of the methodologies
that has promoted TDD [35]. On the other hand, SCRUM delivers tested software, that
is, software that has passed the tests, without specifying if the tests are written before or
after the software code. However, it separates the tests from the development very well,
as another (tester) team tests the software.
MDE. The heterogeneity of IoTS technologies and standards make MDE an important
foundation for TDDM4IoTS. One objective is to reuse these models (with or without
adaptations) in the development of other systems, for which these models could be
converted into executable code [37].
• Requirements analysis. This analysis determines two types of requirements: (i) func-
tional, which are the customer’s specifications (list of deliverables), determining its
implementation priority, and (ii) non-functional, also called quality attributes, such as
scalability, intrusiveness, environment aesthetics (deployment, appearance, etc.).
• Technology analysis. This determines the technology to be used that meets the sys-
tem requirements: (i) Hardware resources already available; (ii) Existing hardware,
taking into account its characteristics and costs; (iii) Tools (software) for hardware
configuration; (iv) Tools for both software development and storage management; (v)
Third-party hardware for specific tasks, and (vi) First-party hardware development, if
necessary and feasible.
• Analysis of the environment. The client can specify the characteristics of the environ-
ment in which the system will be deployed. For example, available and/or feasible
power supply points, data communication networks – Internet access, customer’s
preferred methods of interaction, etc.
• Feasibility analysis. Among the types of feasibility to be analyzed are: (i) Techni-
cal feasibility, for which the questions to be answered would be: (a) Are there the
technologies necessary to develop the project? (b) Are trained personnel available
to develop the system? (c) Can the system be developed? (ii) Economic feasibility,
where the question to be answered would be: Is there an adequate budget to develop
the project? (iii) Operational feasibility, which is important for the system to remain
in operation after it is implemented, so these questions must be answered: (a) Will it
be possible to install the system once it is completed? (b) Will the system be able to
operate with available resources? (c) Are there the necessary guarantees for the sys-
tem to continue operating once installed? (d) Will the IoTS have a properly scheduled
maintenance?
Since IoTS may involve the use of multiple technologies, the availability of each of
them could alter the order or priorities of the deliverables. Therefore, it is necessary that
this first phase is carried out globally at the beginning of the project, and reviewed at the
beginning of the development of each deliverable, to consider the changes related to the
technology (new devices, new tools, etc.) and requirements that might arise during the
development of the project.
There are no specific tools to meet the objective of this particular phase. However,
for the project planning, it is suggested to use a free software tool, such as OpenProj,
GanttProject, dotProject, and for those who prefer proprietary software, MS-Project,
among many others.
The result of this phase is fundamental for the first negotiations with the client,
concerning deliveries, times, and budget. All this is preliminary and cannot be considered
definitive, as it can be negotiated between both parties at the beginning of the development
of each deliverable.
(2) Technology Layer Design. The objective of this phase is to obtain the first design
of the global system that will serve as a guide for the development teams. This is very
important, given that IoT involves emerging and heterogeneous technologies, and so far,
it is difficult to find a professional who can master all the technologies involved in the
development of IoTS [21].
TDDM4IoTS: A Test-Driven Development Methodology for IoTS 51
For the system design, circuit design tools may be used that can represent as clearly
as possible the elements that have been determined for the project. For example, if
Arduino boards are used, online tools such as Circuito.io or Fritzing can be used. The
development team may complement the designs that have been obtained. If necessary,
the resulting design can be updated at the end of each deliverable. This will be one of the
documents of greatest interest for all the development teams of the project. Therefore,
it must always be accessible to all of them.
In this phase, the architecture with which the system will be implemented should be
designed. Consequently, the outcome of this phase will serve as a guide for the entire
development process.
(3) Detailed Requirement Analysis. The objective of this phase, which will be exe-
cuted for each system deliverable, is to obtain the detailed requirements of the deliver-
able to be developed. In addition, the client will be asked to describe the tests together
with the developers, to reduce ambiguities. For the requirements specification, it is rec-
ommended to use tools that are understandable for all the stakeholders, considering the
customer as one of them. One of the notations to be used could be UML, with its different
tools, such as use cases and semi-structured use cases, using pre-established templates,
seeking to eliminate ambiguities, in addition to other tools, such as state and deployment
diagrams, which help to understand the requirements provided by the client.
(5) Test Generation. TDDM4IoTS follows the TDD paradigm, so it must generate the
tests that the software must pass to ensure the quality of the system. The tests can be
grouped into two groups: (1) The tests written by the developers, within which there are:
(a) unit tests, which are the most exhaustive, to examine the complete functioning of a
function, i.e., it is tested whether the function yields the results that it should yield and
even whether it supports the exceptions that may arise; and (b) integration tests, which
also involve system tests. And (2) tests documented by the client, which are basically
acceptance tests, including functional tests [22].
52 G. Guerrero-Ulloa et al.
The automated tools for this phase will depend on the IDE that has been selected for
development, although so far no tool automatically generates tests based on requirements.
(6) Software Generation. This phase is based on models and tests. The developer must
write/generate the code for the tests to be passed [33, 39]. The new models generated
and/or the existing models adapted are part of the system documentation. Therefore,
unlike SCRUM and XP methodologies, which suggest that the documentation related to
the analysis and design of the solution should be written at the end of each deliverable
development [30], TDDM4IoTS propose to do it before the code generation, as there
are tools that, based on the models, help in this task. Also, when surveying software
developers who work or have worked with SCRUM and/or XP methodology, most agree
that the solution that will be implemented later should at least be sketched at the beginning
of the life cycle of the methodology. This corroborates what is stated in TDDM4IoTS
regarding the analysis and design of the solution, which should be carried out during the
development of the deliverables.
Once the software has been generated, it is checked that it passes the corresponding
tests, and then this phase finishes. The result of this phase is the software tested and
working, though it will almost always have to be refined later.
To generate the code, some of the tools mentioned in the model generation and
refinement phase can be used. In fact, there are several tools, both free software and
proprietary software, which even allow simulation of the system behavior.
(7) Model Refinement. UML models facilitate model refinement. Note that the solution
found is a functional solution, but not necessarily an optimal solution. Hence, it is
important to make the necessary adjustments and refinements, such as improving the
robustness, scalability or reusability of the deliverables that made up of the IoTS to be
developed [40]. The result of this phase will be the definitive model, based on which the
system code will be generated.
The tools recommended to perform the tasks of this phase are the same tools as in
the model generation and adaptation phase.
(8) Software Refinement. The work of the developers in this phase will be to guarantee
the software quality, eliminating redundancies and making the software easy to maintain.
The tools that support this activity will be those provided by the chosen IDE. It must be
ensured that the final software meets the specifications of a clean code [34].
(9) Hardware and Software Deployment. Once the software has been tested (simu-
lated), it is implemented and deployed in the devices and resources to be used in the
system, confirming compliance with the final requirements negotiated between the client
and the development team. At this point, and for the first deliverable, both the informa-
tion storage system and the applications that will serve for the user-system interaction
will have already been configured [41, 42]. For subsequent deliverables, the necessary
changes will be made to this assembled infrastructure to add the new deliverables. Since
the subsequent deliverables depend on the technology already installed, the operation
of the (new) integrated system must be guaranteed before continuing the development
process.
The tools to be used in this phase will depend on the technology used (single board
computers, embedded sensors…).
TDDM4IoTS: A Test-Driven Development Methodology for IoTS 53
(10) Deliverable Assessment. Once the development of the deliverable is complete (it
had to pass the necessary tests to guarantee its operation), the integration tests, the system
tests and, of course, the functional tests must be performed once again at this stage [43, 44].
(11) Maintenance. IoTS combine the complexity of software maintenance with the
minor complexity of hardware maintenance. If an IoTS physical component (e.g., sensor,
actuator, board computer, among others) fails, it is replaced by some other similar device.
However, if the software requirements change, the code has to be modified, given that
it has no spare parts [45]. Additionally, IoTS need constant operational maintenance
(batteries or power lines, and connectivity, among others).
References
1. Dahl, O.-J., Hoare, C.A.R.: Chapter III: Hierarchical program structures. In: Structured
Programming, pp. 175–220. Academic Press Ltd. (1972)
2. Ingalls, D.H.H.: The Smalltalk-76 programming system design and implementation. In: Pro-
ceedings of the 5th ACM SIGACT-SIGPLAN Symposium on Principles of Programming
Languages - POPL 1978, pp. 9–16. ACM (1978)
3. Pashtan, A.: Object oriented operating systems: an emerging design methodology. In:
Proceedings of the ACM 1982 Conference on ACM 1982, pp. 126–131. ACM (1982)
4. Schwabe, D., Rossi, G.: The object-oriented hypermedia design model. Commun. ACM 38(8),
45–46 (2002)
5. Ashton, K.: That ‘Internet of Things’ thing. RFID J. 22(7), 97–114 (2009)
6. Ray, P.P.: A survey on Internet of Things architectures. J. King Saud Univ. – Comput. Inf.
Sci. 30(3), 291–319 (2018)
7. Leotta, M., et al.: An acceptance testing approach for Internet of Things systems. IET Softw.
12(5), 430–436 (2018)
54 G. Guerrero-Ulloa et al.
8. Benedetto, J.I., González, L.A., Sanabria, P., Neyem, A., Navón, J.: Towards a practical frame-
work for code offloading in the Internet of Things. Future Gener. Comput. Syst. 92(March),
424–437 (2019)
9. Cervantes-Solis, J.W., Baber, C., Khattab, A., Mitch, R.: Rule and theme discovery in human
interactions with an Internet of Things. In: Proceedings of the 2015 British HCI Conference
on - British HCI 2015, pp. 222–227. ACM, UK (2015)
10. Ciccozzi, F., Spalazzese, R.: MDE4IoT: supporting the Internet of Things with model-driven
engineering. In: Badica, C., et al. (eds.) IDC 2016. SCI, vol. 678, pp. 67–76. Springer, Cham
(2017). https://doi.org/10.1007/978-3-319-48829-5_7
11. Khaleel, H., et al.: Heterogeneous applications, tools, and methodologies in the car
manufacturing industry through an IoT approach. IEEE Syst. J. 11(3), 1412–1423 (2017)
12. Cai, H., Gu, Y., Vasilakos, A.V., Xu, B., Zhou, J.: Model-driven development patterns for
mobile services in cloud of things. IEEE Trans. Cloud Comput. 6(3), 771–784 (2018)
13. Lekidis, A., Stachtiari, E., Katsaros, P., Bozga, M., Georgiadis, C.K.: Model-based design
of IoT systems with the BIP component framework. J. Softw.: Pract. Exp. 48(6), 1167–1194
(2018)
14. Brambilla, M., Umuhoza, E., Acerbis, R.: Model-driven development of user interfaces for
IoT systems via domain-specific components and patterns. J. Internet Serv. Appl. 8(1), 1–21
(2017)
15. Harbouche, A., Djedi, N., Erradi, M., Ben-Othman, J., Kobbane, A.: Model driven flexible
design of a wireless body sensor network for health monitoring. Comput. Netw. 129-2, 548–
571 (2017)
16. Usländer, T., Batz, T.: Agile service engineering in the industrial Internet of Things. Future
Internet 10(10), 100 (2018)
17. Pico-Valencia, P., Holgado-Terriza, J.A., Paderewski, P.: A systematic method for building
internet of agents applications based on the linked open data approach. Future Gener. Comput.
Syst. 94, 250–271 (2019)
18. Sosa-Reyna, C.M., Tello-Leal, E., Lara-Alabazares, D.: Methodology for the model-driven
development of service oriented IoT applications. J. Syst. Architect. 90, 15–22 (2018)
19. de Farias, C.M., et al.: COMFIT: a development environment for the Internet of Things. Future
Gener. Comput. Syst. 75, 128–144 (2017)
20. Fortino, G., et al.: Towards multi-layer interoperability of heterogeneous IoT platforms: the
INTER-IoT approach. In: Gravina, R., Palau, C.E., Manso, M., Liotta, A., Fortino, G. (eds.)
Integration, Interconnection, and Interoperability of IoT Systems. IT, pp. 199–232. Springer,
Cham (2018). https://doi.org/10.1007/978-3-319-61300-0_10
21. Patel, P., Cassou, D.: Enabling high-level application development for the Internet of Things.
J. Syst. Softw. 103, 62–84 (2015)
22. Martin, R.C.: Clean Coder Blog, TDD (2017). https://blog.cleancoder.com/. Accessed 11
Sept 2019
23. Rising, L., Janoff, N.S.: Scrum software development process for small teams. IEEE Softw.
17(4), 26–32 (2000)
24. Heeager, L.T., Nielsen, P.A.: A conceptual model of agile software development in a safety-
critical context: a systematic literature review. Inf. Softw. Technol. 103, 22–39 (2018)
25. Abrahamsson, P., Salo, O., Ronkainen, J., Warsta, J.: Agile Software Development Methods:
Review and Analysis. VTT Publications 478 (2002)
26. Holzinger, A., Errath, M., Searle, G., Thurnher, B., Slany, W.: From extreme programming and
usability engineering to extreme usability in software engineering education (XP+UE→XU).
In: 29th Annual International Computer Software and Applications Conference (COMPSAC
2005), vol. 2, pp. 169–172. IEEE, UK (2005)
27. Mowday, R.T.: Leader characteristics, self-confidence, and methods of upward influence in
organizational decision situations. Acad. Manag. J. 22(4), 709–725 (1979)
TDDM4IoTS: A Test-Driven Development Methodology for IoTS 55
28. Koo, K., Park, C.: Foundation of leadership in Asia: leader characteristics and leadership
styles review and research agenda. Asia Pac. J. Manag. 35(3), 697–718 (2018)
29. Beck, K.: Manifesto for Agile Software Development (2001). http://agilemanifesto.org/.
Accessed 11 May 2019
30. Hazzan, O., Dubinsky, Y.: The agile manifesto. In: Zdonik, S., et al. (eds.) Agile Anywhere.
SCS, pp. 9–14. Springer, Cham (2014). https://doi.org/10.1007/978-3-319-10157-6_3
31. Sachdeva, V., Chung, L.: Handling non-functional requirements for big data and IoT Projects
in Scrum. In: 2017 7th International Conference on Cloud Computing, Data Science &
Engineering - Confluence, pp. 216–221. IEEE (2017)
32. Tort, A., Olivé, A., Sancho, M.R.: An approach to test-driven development of conceptual
schemas. Data Knowl. Eng. 70(12), 1088–1111 (2011)
33. Janzen, D., Saiedian, H.: Test-driven development: concepts, taxonomy, and future direction.
Computer 38(9), 43–50 (2005)
34. Martin, R.C.: Clean Code, A Handbook of Agile Software Craftsmanship, 1st edn. Pearson
Education Inc., Boston (2011)
35. Madeyski, L., Kawalerowicz, M.: Continuous test-driven development: a preliminary empir-
ical evaluation using agile experimentation in industrial settings. In: Kosiuczenko, P.,
Madeyski, L. (eds.) Towards a Synergistic Combination of Research and Practice in Soft-
ware Engineering. SCI, vol. 733, pp. 105–118. Springer, Cham (2018). https://doi.org/10.
1007/978-3-319-65208-5_8
36. Braithwaite, K., Joyce, T.: XP expanded: distributed extreme programming. In: Baumeister,
H., Marchesi, M., Holcombe, M. (eds.) XP 2005. LNCS, vol. 3556, pp. 180–188. Springer,
Heidelberg (2005). https://doi.org/10.1007/11499053_21
37. Sosa-Reyna, C.M., Tello-Leal, E., Lara-Alabazares, D.: An approach based on model-driven
development for IoT applications. In: Proceedings of the 2018 IEEE International Congress
on IoT, ICIOT, 2018 IEEE World Congress on Services, pp. 134–139. IEEE, San Francisco,
EEUU (2018)
38. Rasch, R.H., Tosi, H.L.: Factors affecting software developers’ performance: an integrated
approach. MIS Q. 16(3), 395–413 (1992)
39. Nyznar, M., Pałka, D.: Generating source code templates on the basis of unit tests. In: Grzech,
A., Świ˛atek, J., Wilimowska, Z., Borzemski, L. (eds.) Information Systems Architecture and
Technology: Proceedings of 37th International Conference on Information Systems Archi-
tecture and Technology – ISAT 2016 – Part II. AISC, vol. 522, pp. 213–223. Springer, Cham
(2017). https://doi.org/10.1007/978-3-319-46586-9_17
40. Chen, Z., Liu, Z., Ravn, A.P., Stolz, V., Zhan, N.: Refinement and verification in component-
based model-driven design. Sci. Comput. Program. 74(4), 168–196 (2009)
41. Monteiro, K., Rocha, E., Silva, E., Santos, G.L., Santos, W., Endo, P.T.: Developing an e-
health system based on IoT, fog and cloud computing. In: 2018 IEEE/ACM International
Conference on Utility and Cloud Computing Companion (UCC Companion), pp. 17–18.
IEEE, Zurich (2018)
42. Guerrero-Ulloa, G., Rodríguez-Domínguez, C., Hornos, M.J.: IoT-based system to help care
for dependent elderly. In: Botto-Tobar, M., Pizarro, G., Zúñiga-Prieto, M., D’Armas, M.,
Zúñiga Sánchez, M. (eds.) CITT 2018. CCIS, vol. 895, pp. 41–55. Springer, Cham (2019).
https://doi.org/10.1007/978-3-030-05532-5_4
43. Latorre, R.: Effects of developer experience on learning and applying unit test-driven
development. IEEE Trans. Softw. Eng. 40(4), 381–395 (2014)
44. Shihab, E., Jiang, Z.M., Adams, B., Hassan, A.E., Bowerman, R.: Prioritizing the creation of
unit tests in legacy software systems. Softw.: Pract. Exp. 41(10), 1027–1048 (2011)
45. Pressman, R.S., Maxim, B.: Software Engineering: A Practitioner’s Approach, 8th edn.
McGraw-Hill Education, Boston (2015)