**4. Workflow for software development management**

The Software development and management process follows the software development life cycle (SDLC) to develop the software within the organization. The SDLC has a detailed plan of how to develop, maintain and upgrade the overall development process. Workflow depicted in the **Figure 1** seems sequential, however, it is hardly that simple. Most management approaches include all of the steps but in many different spiral, iterative and analogous combination since such chronological workflow is not effective and efficient in faces changing environments. However tasks carried out in each phases are still relevant and effective.

#### **4.1 Planning and requirement analysis**

In this stage, the project managers obtain the requirements related inputs from the clients, sponsors, and different stakeholders of the organization. The data gathered from various stakeholders are used analyze the feasibility of the product in affordable, functional, and specialized areas and to develop the design and the approach that would work best for the scope and within the constraints [4]. These inputs are

#### **Figure 1.** *Workflow of software development and management.*

used for developing the project detailed plans and milestones. Consistent process of gathering requirements at depths and breadth is essential to succeed in software projects since they go through many levels of translations from business requirements to technical requirements.

### **4.2 Defining requirements**

The main reasons for variation in the estimation for time and budget in the software projects are related to the lack of complete understanding of the requirements properly. These gaps must be minimized at the time of requirements analysis so that the variations in required time and money to complete the project can be minimized. Source of customer dissatisfaction is also related to the lack of understanding the need. Specific requirements are defined and documented at the end of the analysis of the requirements. Requirements are categorized as functional, operational, interoperability and technical environment related requirements. The clients then look at the requirements and approve the requirements. The finalized document is called the Software Requirement Specification (SRS) which consists of all the software requirements that must be documented, planned, and tracked throughout the life cycle of the project.

#### **4.3 Designing**

Many technical design guidelines and standards are decided or reused from previous projects based on common software engineering principles. Fundamental software engineering concepts, such as abstraction, modularity, reusability, compatibility, extensibility, scalability, and maintainability are important aspects that are considered in design phase to develop the high quality and longer-lasting software solutions [2]. Level of modularity needed in the software is decided in the initial phase of the design to allow the level of flexibility for future changes. Furthermore, opportunities for code reusability, write once use many times, are also considered in the designing phase to increase efficiency and quality of the software product. Nonfunctional requirements such as compatibility, scalability, and maintainability are considered to make software more adoptable, change friendly.

In the designing phase of the workflow. The software architects plot the best architecture for the software to be developed using the SRS, that was developed in the previous step. To give a better context to the requirements, user stories or use cases are developed that would clarify interfacing requirements such as inter-functional inputs and output requirements. Software architects usually design one or more architecture and document it in the Design Document Specification (DDS). This document is further scrutinized with all the stakeholders with respect to the project boundaries, hazard evaluation, time imperatives and the financial plan.

#### **4.4 Development**

The actual development starts, and the software is built in this stage based on the DDS defined in the previous step the programming code for the software solution is generated. Various requirements and related user stories are itemized and coordinated within distributed and parallel development groups. With such approach programming and application development process, unknowns are minimized, and development become more efficient and effective. During the generation of the code,

the developers follow organization wide coding standards and programming tools needed for the programming such as the interpreters, compilers, and debuggers [5]. Even though there are separate dedicated measures for testing and quality assurance, unit testing is performed at this stage to detect and address defects at the unit level. Unit testing is performed to ensure that an application or a product meets its design and behaves as per the requirements. These tests are run by the developers in their development environment. The developers test the internal logical structure of each software component as well as the individual function or procedure.

#### **4.5 Testing and quality assurance**

Software Testing is performed to detect the defects in the product while quality assurance process addresses the need for preventive measures to avoid the defects in the product. Quality Assurance measures ensure that the developed solution addresses all the requirements as defined in agreed specifications, standards, and functionality without known bugs, defects, or abnormal behaviors [6].

Software solution is tested from various perspectives before deployment for detecting defects and bugs. The defects, bugs, and abnormal behaviors in the software are discovered, tracked, fixed, and retested until the software reaches the quality requirements, that are characterized in the SRS.

Various types of tests conducted during this phase are integration testing, regression testing, software security testing, and user acceptance testing. Functional testing focuses on the functional requirements and software behavior in accordance with pre-determined requirements. Full set of functional inputs are used to validate the set of output it generates to affirm that all application functionalities work appropriately as indicated by the business requirements. Regression testing is performed to make sure previously developed, and tested application performs the same after making changes or enhancement in the application by retesting all functional and non-functional test cases. Integration testing is the part of programming testing where individual programming modules are amalgamated and tested overall to verify the coupling and interactions between them. Interface testing is conducted to make sure all human to software and all software-to-software interfaces are as per the requirements. Interface testing includes the UI testing, API testing, web services testing. Finally, the user acceptance testing is the last phase of testing in the software development life cycle where the business users or functional experts performs the acceptance testing to make sure the application meets all the customer requirements.

### **4.6 Deployment**

Once the product is tested and ready to be conveyed, it is distributed and delivered to the end users. In this stage, various components of the software are packaged in a way that deployment checks the perquisites and then the components are sequenced, deployed, and verified. Various deployment mechanisms are decided and operationalized in this phase such as Manual (software is installed manually on the end points) v/s automated (software is installed automatically from centralized deployment systems), Push (software is pushed to targeted endpoints) v/s Pull (targeted endpoints may pull the software based on their preferences), Phased (deployment occurs in logically divided phases) v/s Big-Bang (app endpoints receive software at once). Subsequently, the maintenance, updates, and bug fixes are deployed using similar methods of deployment.
