Software Engineering is a branch that deals with the development and evolution of software products by employing certain methodologies and well-defined scientific principles. For developing a software product certain processes need to be followed and outcome of which is an efficient and authentic software product. The software is a group of executable program code with associated libraries. Software designed to satisfy a specific need is known as Software Product. It is a very good topic for master’s thesis, project, and research. There are various topics in Software Engineering which will be helpful for M.Tech and other masters students write their software project thesis.
Software Evolution is the process of developing software product using underlying techniques and methodologies. It consists of all the steps right from the initial requirements up to its maintenance. In the initial stage, software requirements are gathered. After this, a prototype of the actual software product is created which is shown to the end users for feedback. Users give their suggestions regarding the product and suggest changes if required. This process is repeated until the time desired software product is developed. There are certain Software Evolution laws according to which software is divided into following three types:
- S-Type (static-type) – This type of software works according to specifications and solutions. It is the simplest of all the three types of software.
- P-Type (practical-type) – This software is a collection of procedures. Gaming software is an example of this type of software.
- E-Type (embedded-type) – This software works according to the real-world requirements. It has a high degree of evolution.
The methods and steps taken to design a software product are referred to as software paradigms.
Why is Software Engineering required?
Software Engineering is required due to frequent changes in user requirements and the environment. Through your thesis and research work, you can get to know more about the importance of Software Engineering. Following are the other things for which software engineering is required:
- Large Software – The large size of software make it essential for the requirement of software engineering.
- Scalability – Software Engineering makes it possible to scale the existing software rather than creating a new software.
- Cost – Software Engineering also cut down the excess manufacturing cost in software development.
- Dynamic Nature of Software – Software Engineering plays an important role if new enhancements are to be done in the existing software provided that the nature of software is dynamic.
- Better Quality Management – Software Engineering provides better software development processes for better quality services.
Software Development Lifecycle (SDLC)
SDLC is a sequence of steps and stages in Software Engineering for the development of Software product. It is an important topic for project and thesis in software engineering. Following are the phases of SDLC:
- Requirement Gathering and Analysis – It is the initial stage of software development in which the requirements for the software product to be made is collected. In this phase, the engineering team studies existing systems, take the opinion of stakeholders, and conduct user interviews. The types of requirements include user requirements, functional requirements and non-functional requirements. After the requirements are collected, these are examined and analyzed for validation i.e. whether these requirements can be incorporated into the system or not.
- Feasibility Study – After requirement gathering, the next step is the feasibility study i.e. to check whether the desired software system can be made or not. The software development team comes up with an outline of the whole process and discusses whether the system will be able to meet the user requirements or not. In this phase, all the aspects like financial, practical, and technical are considered. If these aspects are found to be feasible only then the further processes are taken up.
- Software Design – After confirming the feasibility of the software system, the designing of the software product is done. The designing of the software is done based on the requirements collected in the initial stage. An outline of the whole process is created in this phase which will define the overall system architecture. There are two types of designs – physical design and logical design.
- Coding – This phase is also known as implementation phase as the actual implementation of the software system takes place here. An executable programming code is written in any suitable programming language for implementation. The work is divided into different modules and coding is done in each of these modules. This process is undertaken by a developer expert in programming.
- Testing – Testing phase follows the coding phase in which testing of the code is done to check whether the system meets the user requirements or not. The types of testing include unit testing, system testing, integration testing and acceptance testing. Testing is required to find out any underlying errors and bugs in the product. Testing helps in creating a reliable software product.
- Deployment – After successful testing, the software product is delivered to the end users. Customers perform Beta Testing to find out if there are changes required in the system or not. If changes are needed, then they can suggest them to the engineering team.
- Maintenance – A special team is appointed to look after the maintenance of the software product. This team will provide timely software updates and give notifications based on that. The code is updated in accordance with the changes taking place in the real world environment.
Software Development Process Models
There are certain software development models as defined by Software Paradigms. Some of these are explained below:
It is a simple model for software development which defines that all the phases of SDLC take place in a linear manner. Simple meaning that if one phase is finished then only the next phase is started. According to this model, all the phases are executed in sequence with the planning of next phase in the previous phase. Also, this model will not function properly if there are certain issues left in the previous phase.
It is another model for software development in which the whole process takes place in iterations. Iteration simply means repeating steps after a cycle is over. On the first iteration, the software is developed on a small scale and then the subsequent steps are followed. During the next iteration, more features and modules are added. On completion of each iteration cycle, software is produced which have their own features and capabilities. The management team works on the risk management and prepare for next iteration.
Spiral Model is a combination of iterative model and any one of the other SDLC model. The most important feature of this model is the consideration of risk factor which left unnoticed by other models. Initially, the objectives and constraints of the software product are determined. During next iteration, the prototype of the software is created. This process also includes risk analysis. In the fourth phase, next iteration is prepared.
In the waterfall model, we can go to next step only if the previous step is completed. Also, we cannot go back to the previous stage if some change is required. This drawback of waterfall model is fulfilled by the V-Shaped Model which provides testing of each phase in a reverse manner. In this model, test plans and test cases are created according to the requirements of that stage to verify and validate the software product. Thus verification and validation go in parallel in this case.
Software Metrics and Measures
Software Metrics and Measures are essential components in Software Engineering to understand the attributes and aspects of a software. These also help in maintaining the better quality of the software products. Following are some of the Software Metrics:
- Size Metrics – It is measured in terms of Lines of Code (LOC) and Function Point Code. Lines of Code mean the number of lines of the programming code whereas Function Point Code is the Functional capacity of the software.
- Complexity Metrics – It is measured in terms of number of independent paths in a program.
- Quality Metrics – It is determined by the number of defects encountered while developing the software and after the product is delivered.
- Process Metrics – Methods, tools, and standards used in software development come under process metrics.
- Resource Metrics – It includes effort, time and resources used in development process.
Modularization in Software Engineering
Modularization is a technique in Software Engineering in which software system is divided into multiple modules and each module carries out its individual task independently. Modularization is more or less based on ‘Divide and Conquer’ approach. Each module is compiled and executed separately.
Advantages of Modularization are:
- Smaller modules are easier to process.
- Modularization offers a level of abstraction to the program.
- High Cohesion components can be used again.
- Concurrent execution is also possible.
- It is also more secure.
It is the process of verifying and validating the software product to check whether it meets the user requirements or not as expected. Moreover, it also detects underlying defects, errors, and bugs that left unnoticed during the process of software development. As a whole, software testing detects software failures. Software Testing itself is a sub-field in software engineering and a trending topic for project, thesis, and research in software engineering.
Purpose of Software Testing
Following are the main purposes of software testing:
- Verification – Verification is a process to find out whether the developed software product meets the business requirements or not. Verification ensures that whether the product being created satisfies the design specifications or not.
- Validation – Validation is the process that examines whether or not the system meets the user requirements. The validation process is carried out at the end of SDLC.
- Defect Finding – Defect finding simply means the difference between the actual output and the expected output. Software Testing tends to find this defect in the software product.
Types of Testing
Following are the main types of testing in software systems:
- Alpha Testing – It is the most common type of testing carried out by a developer team at the developer end. It is conducted before the product is released.
- Beta Testing – It is a type of software testing carried out by end users at the user end. This type of testing is performed in a real-world environment.
- Acceptance Testing – It is a type of testing to find out whether the software system meets the user requirements or not.
- Unit Testing – It is a type of testing in which an individual unit of the software product is tested.
- Integration Testing – In this, two or more modules are combined and tested together as a group.
- System Testing – Here all the individual modules are combined and then tested as a single group.
UML and Software Engineering
UML or Unified Modeling Language is language in software engineering for visualizing and documenting the components of a software system and is created by Object Management Group (OMG). It is different from programming languages. UML implements object-oriented concepts for analysis and design.
Building Blocks of UML
Following are the three main building blocks of UML:
Things can be any one of the following:
Structural – Static Components of a system
Behavioral – Dynamic Components of a system
Grouping – Group elements of a UML model like package
Annotational – Comments of a UML model
The relationship describes how individual elements are associated with each other in a system. Following kinds of relationships are there:
The output of the entire process is UML diagrams. Following are the main UML diagrams:
- Class Diagram
- Object Diagram
- Use Case Diagram
- Sequence Diagram
- Collaboration Diagram
- Activity Diagram
- Statechart Diagram
- Deployment Diagram
- Component Diagram
After the Software product is successfully launched in the market, timely updations and modifications needed to be done. This all comes under Software Maintenance. It includes all those measures taken after the delivery to correct errors and to enhance the performance. Software Maintenance does not merely means fixing defects but also providing time to time updations.
Types of Software Maintenance
The types of Software Maintenance depends upon the size and nature of the software product. Following are the main types of software maintenance:
- Corrective Maintenance – Fixing and correcting a problem identified by the user comes under corrective maintenance.
- Adaptive Maintenance – In adaptive maintenance, the software is kept up-to-date to meet the ever-changing environment and technology.
- Perfective Maintenance – To keep the software durable, perfective maintenance is done. This includes the addition of new features and new user requirements.
- Preventive Maintenance – To prevent any future problems in the software, preventive maintenance is done so that there are not any serious issues in near future.
Activities in Software Maintenance
Following activities are performed in Software Maintenance as given by IEEE:
- Identification and Tracing
- System Testing
- Acceptance Testing
- Maintenance Management
Reverse Engineering is a process in which an existing system is thoroughly analyzed to extract some information from that system and reproduce that system or product using that extracted information. The whole process is a reverse SDLC. Reverse Engineering for software is done to extract the source code of the program which can be implemented in a new software product.
Case Tools for Software Engineering
Case or Computer-aided Software Engineering are computer-based automated tools for development and maintenance of software products. Just as the CAD (Computer-aided design) is used for designing of hardware products, Case is used for designing of software products. Case tools develop high-quality and easily maintainable software products.
Elements of Case Tools
Following are the main components of Case Tools:
- Central Repository – Central Repository or Data Dictionary is a central storage for product specifications, documents, reports, and diagrams.
- Upper Case Tools – These are used in planning, analysis, and design phases of SDLC.
- Lower Case Tools – These are used in the implementation, testing, and maintenance.
- Integrated Case Tools – These tools can be used in all the stages of SDLC.
Project, Thesis, and Research topics in Software Engineering
Following is the list of Software Engineering topics for project, thesis, and research for masters and other postgraduate students:
- Data Modeling
- Software Models
- Software Quality
- Software Testing
- Software Maintenance
- Verification and Validation
- Software Project Management
This was all about Software Engineering. You can explore and research more of this topic while working on your project and thesis.