Software Engineering in Internet of Things

Software Engineering in Internet of Things

Naresh E. (Ramaiah Institute of Technology, India), Vijaya Kumar B. P. (Ramaiah Institute of Technology, India), Aishwarya Hampiholi (Ramaiah Institute of Technology, India) and Jeevan B. (Ramaiah Institute of Technology, India)
Copyright: © 2019 |Pages: 20
DOI: 10.4018/978-1-5225-6070-8.ch008

Abstract

This chapter gives an overall role of software engineering in internet of things domain. In this chapter, the following topics are included: glimpse of complete software engineering, main motivation of IoT, how IoT evolved, usage of software engineering concepts in IoT, role of CBSE in IoT, role of aspect-oriented software engineering, heterogeneous boards in designing IoT systems, importance of integration phase in IoT systems, comparison of different IDEs of IoT, testing of IoT systems, and a case study illustrating all the concepts for online blood banking system and forest fire detection.
Chapter Preview
Top

Software Engineering: The Science Of Creating Efficient Software

Suppose we want to build a new house or any infrastructure in common, what do we do? Well, we approach an engineer who has great experience and good name in the industry. For a great result, it is important for the engineer to plan out the construction process. It is also important for the customer to brief the engineer about what exactly is he looking for in the building. If the customer is not sure about what he wants, it becomes difficult for the engineer to carry out the further process. Once the requirements are clearly defined, the engineer plans out the rest of the process based on his level of expertise.

The same theory applies for the software and computer systems of today. We are surrounded by enormous number of computer systems. To create each of these systems, there is a certain process that needs to be followed. This process needs to be planned very well and needs to be executed in the same order. The study of Software Engineering teaches the aspect of planning and executing the process of building a software system.

Software Engineering involves identifying the best practice to plan and execute the creation of new software. Be it, the traditional method like waterfall model or adaptive models like agile or spiral models. Every software needs to be developed in a different and unique way. The software needs to be developed using the waterfall model when it has all the requirements fixed in the initial stage of development. Whereas, in a few cases the requirements keep changing every now and then. In such cases, we go for adaptive models like agile or spiral. If the software development plan is not made in a proper way, it does not turn out to be the way we expect it to behave.

Software Engineering also provides the methods to test the final software product such as verification and validation. Not just that, it also includes the techniques to manage the whole process be it in estimating of cost and effort or in managing the staffing issue. It also throws light on the various types of software services/development techniques (Sommerville, 2011).

  • Component Based Software Engineering: This technique mainly involves the idea of reusing already existing components instead of creating new modules everytime from scratch while creating a new software. Components are the pre-existing modules that have a definite functionality and can be adapted while building a new software. More about CBSE is explained in the part 1.5 of this chapter (Niekamp, n.d.).

  • Service-Oriented Software Engineering: This technique mainly promotes reusability of code. It is similar to component based software engineering but, here, instead of smaller modules for individual functions, we use smaller modules that provide services. For example, webservices. This includes third party service providers as well (Cervantes, Humberto & Hall, 2004).

  • Aspect-Oriented Software Engineering: This is one of the software engineering techniques that is a little more advanced than the component-based software engineering. In this technique, we can not only reuse the modules for a particular functionality, we have the liberty to add many more functionalities without changing the existing code(Kiczales, Lamping, Mendhekar, Maeda, Lopes, Loingtier, & Irwin, 1997).

  • Model-Based Software Engineering: While component-based software engineering, gives the ability to reuse functional modules, model-based software engineering gives the abstract models that can be reused for building any new system (Schmidt, 2006).

Complete Chapter List

Search this Book:
Reset