Software Concepts PDF
Document Details
![SplendidGyrolite5000](https://quizgecko.com/images/avatars/avatar-1.webp)
Uploaded by SplendidGyrolite5000
Ladoke Akintola University of Technology
Tags
Summary
This document provides an introduction to software concepts, classifying it into system and application software. It details various types of functionalities, such as word processing, spreadsheets, and database applications, often used in programs.
Full Transcript
# Chapter 1: Concept of Software ## 1.0 Introduction Software is a program or set of programs containing instructions that provide desired functionality. Engineering is the process of designing and building something that serves a particular purpose and finds a cost-effective solution to problems....
# Chapter 1: Concept of Software ## 1.0 Introduction Software is a program or set of programs containing instructions that provide desired functionality. Engineering is the process of designing and building something that serves a particular purpose and finds a cost-effective solution to problems. Software is the computerized instructions that operate the computer, execute particular functions or tasks, and manipulate the data. To perform various functions, software must be programmed, meaning the instructions need to be written in a programming language the computer can understand. Without a program, a computer is useless. In addition to physical devices, the computer requires a set of instructions that specify how the input is to be processed called the software. A set of related data written in a sequential manner to do a particular task is called a program. ## 1.1 Classification of Software There are two kinds of software: systems software and applications software. ### A. System Software System software controls the operations of the hardware and helps in running the computer system efficiently and conveniently. System software is required for any application software to run. Examples include Operating Systems, Compilers, Assemblers, etc. System software includes the operating system and all the utilities that enable the computer to function. The most important program that runs on a computer is the operating system. Every general-purpose computer must have an operating system to run other programs. This includes controlling functions such as coordinating the hardware and applications software, allocating storage facilities, controlling input and output devices, and managing time sharing for linked or networked computers. In many respects, an operating system works like an air traffic controller to coordinate activities within the computer. Examples of operating systems include Windows, DOS, and OS/2. The Windows family of operating systems includes a Graphical User Interface (GUI) that makes the software user-friendly. System software could thus be thought of as a bridge between a computer's hardware and the applications that people use. Included among other system software are programs that help the computer to operate at its maximum efficiency. Some examples of system software include: - Operating Systems - Utility Software - Firmware - Device Drivers ### B. Application Software Application software is a set of instructions that instruct a computer on how to perform various tasks. Applications software is software that has been developed to perform useful work on specific tasks, or for particular problems, or to provide entertainment for users. As users, you interact with the application's software. System software enables the applications software to interact with the computer and helps manage its internal resources that guide or tell the hardware how to accomplish a given task. If you buy a new microcomputer in a store, you will find that some packaged software already installed on it includes system software (e.g., operating system) and various types of applications software compatible with it. Application Software's are programs designed for end users which allow end-users to accomplish a set of specific tasks. This might include, among others, programs to find solutions to users' problems. As described before, the software can be divided into system software (i.e., programs designed to control the execution and utilization of other programs and hardware effectively) and applications software (i.e., programs to solve users' problems). Systems software is generally supplied by hardware manufacturers. Application software comprises the method and guides that enable computer systems to do what the user requires. Application Software includes programs that users access to carry out work. They include applications for the following functions. - **Word processing:** Word processing is the most common applications software. The great advantage of word processing over using a typewriter is that you can make changes without retyping the entire document. Word processors make it easy to manipulate and format documents. For example: Ms Word, Page Maker, Wordpad, etc. - **Spreadsheets:** Spreadsheets are computer programs that let people electronically create and manipulate spreadsheets (tables of values arranged in rows and columns with predefined relationships to each other). Spreadsheets are used for mathematical calculations such as accounts, budgets, statistics, Sales Analysis & Forecasting, Inventory Control, Investments Plans, Examinations Results Processing, Balance Sheet Preparation, Journals and Ledgers Transactions, Preparation of various Accounts, and so on. Typical examples of Spreadsheet Programs include the following: Ms Excel, Lotus 1-2-3, Multiplan, Viewsheet, Pipedream, Quattro, and Eureka. - **Database management applications:** Database management applications are computer programs that let people create and manipulate data in a database. A database is a collection of related information that can be manipulated and used to sort information, conduct statistical analyses or generate reports. For example: Dbase, foxpro, access, oracle, or SQL server, etc. - **Presentation packages and graphics:** Presentation packages and graphics are computer programs that enable users to create highly stylised images for slide presentations and reports. They can be used to produce various types of charts and graphs. Many software applications include graphics components including: paint programs, desktop publishing applications and so on. For example: Power Point, etc. ## 1.2 Software Design Concepts Software design essentially involves three abstract concepts: algorithms, data structures, and file structures. ### 1.2.1 Algorithm An algorithm is a sequence of steps for solving a well-defined problem. It is also a step-by-step procedure used to solve a clear, properly outlined, and precise problem. An algorithm consists of a list of instructions that carry out prescribed and specific instructions in an orderly manner. Mathematical and computing algorithms are usually procedures for solving the same problem repetitively. Algorithms are simply the steps for computation. They may either be numerical or non-numerical, for example, sorting, text searching, etc. There is a widespread application of algorithms in virtually every area of computing and information technology. Algorithms are used to specify data processing tasks and operations of automated systems. Algorithms may be as simple as the one used for sorting numbers or may complex tasks like social media content analysis or automated flight control operations. An algorithm usually begins with an initial input followed by a sequence of instructions for the operation or computation to be performed. An output, which is usually more data, is produced at the end of the execution of the instructions for the computation process. There are two commonly used notations for expressing algorithms, namely, natural languages and pseudocode. #### 1.2.1.1 Purpose of Algorithms The following are the reasons why computer scientists create algorithms: - **To Aid Scalability:** Algorithms enable application developers to have a full grasp of what scalability entails. Developers use algorithms to break a complex problem into small and manageable chunks, which are better understood and can be analyzed in a few steps quickly. - **To Achieve Performance:** Complex real-world problems are difficult to break down. However, if a complex problem can be broken down into smaller chunks consisting of a few steps each, then the problem is realistic and the solution feasible - **To Simplify Program Writing:** Program codes can be written faster and more easily once an algorithm is developed and analyzed to confirm the feasibility of the proposed solution. #### 1.2.1.2 Characteristics of Algorithms 1. **Input:** An algorithm must have one or more input values. The input may be any value apart from 0. 2. **Output:** An algorithm should produce one or more outcomes after execution. 3. **Unambiguity:** A good algorithm should have clear, well-articulated and unambiguous instructions. Each instruction should have only one interpretation and should not produce conflicting results. 4. **Finiteness:** An algorithm must have a countable instruction. That is, the instructions in an algorithm cannot be unlimited. 5. **Effectiveness:** An algorithm should contain sufficient instructions needed to perform the desired task. That is, the number of instructions in an algorithm should be adequate to carry out the process for which the algorithm is designed. 6. **Language independence:** The creation of an algorithm should not be based on any programming language. This means that the sequence of instructions in the algorithm should be implementable in any language and produce the same results irrespective of the language of implementation. #### 1.2.1.3 Types of Algorithms Algorithms are designed to perform different tasks. The nature of tasks an algorithm executes determines the category to which the algorithm belongs. Algorithms can be broadly categorized as follows: 1. **Search engine algorithm**: This algorithm searches databases and produces results of relevant web pages using strings of keywords and operators. 2. **Encryption algorithm**: This security algorithm uses a secret key to transform data into unintelligible form, which unauthorised persons cannot read. Authorised persons can access the transformed data and convert it to intelligible form using a key and an opposite (decryption) algorithm. The process is called decryption. An encryption algorithm may be symmetric, such as the Data Encryption Standard, or Asymmetric, such as the Rivest, Shamir and Adelman algorithm. Symmetric algorithms use the same key for encryption and decryption, while asymmetric algorithms use different keys for encryption and decryption of data. 3. **Greedy algorithm**: The purpose of this algorithm is to solve optimisation problems. It works by finding a locally optimal solution with the hope that such a solution can be adopted as a globally optimal solution. 4. **Recursive algorithm**: This algorithm executes the same set of instructions repetitively until a terminating condition is reached. A small value is used to execute the function whenever it is called. 5. **Backtracking algorithm**: This algorithm uses an incremental approach to address a complex problem by solving one slice of the problem at a time. 6. **Divide-and-conquer algorithm**: Solves a problem in two steps. The first step breaks a complex problem into simple subproblems. The second step solves each of the subproblems and integrates the solutions to form the solution to the original problem. 7. **Dynamic programming algorithm**: Divides a complex problem into subproblems. It solves each of the subproblems and stores the results. These results are applied to similar problems in the future. 8. **Brute-force algorithm**: This algorithm explores all possible ways to solve a problem. The goal is to find one or more suitable solutions to the problem. 9. **Sorting algorithm**: This is used to rearrange the contents of data structures such as a queue or stack. The arrangement is done using a comparison operator, which determines whether the data is stored in ascending or descending order. 10. **Hashing algorithm**: This algorithm takes data of varying sizes as input and produces a message of the same size irrespective of the sizes of individual input. 11. **Randomised algorithm**: This algorithm uses random elements to minimise run times and time-based complexities. #### 1.2.1.4 Advantages of Algorithms 1. Algorithms provide automated and faster knowledge creation than traditional problem-solving techniques. 2. Algorithms provide faster manipulation of databases quickly and minimize delays caused by technology and humans. 3. Algorithms can minimize transportation issues. They can identify traffic congestion and suggest alternative travel times and routes. 4. Self-driving cars could dramatically reduce the number of road accidents and improve the quality of life 5. Algorithms can be used for targeted delivery of news, services, and advertisement. 6. More evidence-based social science experiments use algorithms to collect data from social media and click trials. 7. Improved and more proactive police work, targeting areas where crime can be prevented. 8. Algorithms minimize the difficulty associated with decision-making, purchasing, transportation, and other human endeavors. ### 1.2.2 Data structures Data structures are ways to organize and store data in a computer so it can be efficiently accessed, modified, and manipulated. Common data structures include: - **Basic Data Structures:** - Arrays (ordered collections) - Linked Lists (dynamic collections) - Stacks (Last-In-First-Out) - Queues (First-In-First-Out) - Trees (hierarchical relationships) - Graphs (complex relationships) - **Advanced Data Structures:** - Hash Tables (key-value pairs) - Heaps (priority queues) - Trie (prefix tree) - Binary Search Tree (BST) - AVL Tree (self-balancing BST) - B-Tree (multi-level indexing) - **Data Structure Types:** - Linear (arrays, linked lists) - Non-Linear (trees, graphs) - Dynamic (linked lists, stacks) - Static (arrays) - **Data Structure Operations:** - Insertion (adding data) - Deletion (removing data) - Search (finding data) - Update (modifying data) - Traversal (accessing data) - **Data Structure Applications:** - Database management - File systems - Web search engines - Social networks - Video games - Compilers ### 1.2.3 File Structures File structure refers to the organization and layout of files within a computer system or storage device. Common file structures include: - **File Organization Methods:** - Hierarchical (Tree-like) - Linear (Sequential) - Network (Graph-based) - Relational (Database-like) - **File System Types:** - FAT (File Allocation Table) - NTFS (New Technology File System) - HFS (Hierarchical File System) - APFS (Apple File System) - NFS (Network File System) - **File Structure Components:** - Root Directory - Folders/Directories - Subdirectories - File Names - Extensions - **File System Features:** - File compression - Encryption - Access control - Disk quotas - File recovery - File replication - Paths - Files # Chapter 2: Software Engineering ## 2.0 Software Engineering Concept Software Engineering is the process of designing, developing, testing, and maintaining software. It is a systematic and disciplined approach to software development that aims to create high-quality, reliable, and maintainable software. Software engineering includes a variety of techniques, tools, and methodologies, including requirements analysis, design, testing, and maintenance. It is a rapidly evolving field, and new tools and technologies are constantly being developed to improve the software development process. Software engineering ensures that the software that has to be built should be consistent, correct, on budget, on time, and within the required requirements. ## 2.1 Principles of Software Engineering - **Modularity:** Breaking the software into smaller, reusable components that can be developed and tested independently. - **Abstraction:** Hiding the implementation details of a component and exposing only the necessary functionality to other parts of the software. - **Encapsulation:** Wrapping up the data and functions of an object into a single unit, and protecting the internal state of an object from external modifications. - **Reusability:** Creating components that can be used in multiple projects, which can save time and resources. - **Maintenance:** Regularly updating and improving the software to fix bugs, add new features, and address security vulnerabilities. - **Testing:** Verifying that the software meets its requirements and is free of bugs. - **Design Patterns:** Solving recurring problems in software design by providing templates for solving them. - **Agile methodologies:** Using iterative and incremental development processes that focus on customer satisfaction, rapid delivery, and flexibility. - **Continuous Integration & Deployment:** Continuously integrating the code changes and deploying them into the production environment. ## 2.2 Attributes of Software Engineering Software Engineering is a systematic, disciplined, quantifiable study, and approach to the design, development, operation, and maintenance of a software system. There are four main Attributes of Software Engineering. 1. **Efficiency:** It provides a measure of the resource requirement of a software product efficiently. 2. **Reliability:** It assures that the product will deliver the same results when used in similar working environments. 3. **Reusability:** This attribute makes sure that the module can be used in multiple applications 4. **Maintainability:** It is the ability of the software to be modified, repaired, or enhanced easily with changing requirements. ## 2.3 Software Engineering Careers A degree in software engineering and relevant experience can be utilized to explore several computing job choices. Software engineers have the opportunity to seek well-paying careers and professional progress, although their exact possibilities may vary depending on their particular school, industry, and region. Following are the job choices in software engineering: - SWE (Software Engineer) - SDE (Software Development Engineer) - Quality Assurance Engineer - Software Test Engineer - Web Developer - Web Designer - Cloud Engineer. - Back-End Developer - Front-End Developer - DevOps Engineer. - Security Engineer. ## 2.4 Tasks of Software Engineers The main responsibility of a software engineer is to develop useful computer programs and applications. Working in teams, you would complete various projects and develop solutions to satisfy certain customer or corporate demands. Some of the key responsibilities of software engineers are: - **Requirement Analysis:** Collaborating with stakeholders to understand and gather the requirements to design and develop software solutions. - **Design and Development:** Creating well-structured, maintainable code that meets the functional requirements and adheres to software design principles. - **Testing and Debugging:** Writing and conducting unit tests, integration tests, and debugging code to ensure software is reliable and bug-free. - **Code Review:** Participating in code reviews to improve code quality, ensure adherence to standards, and facilitate knowledge sharing among team members. - **Maintenance:** Updating and maintaining existing software systems, fixing bugs, and improving performance or adding new features. - **Documentation:** Writing clear documentation, including code comments, API documentation, and design documents to help other engineers and future developers understand the system. ## 2.5 Advantages of Software Engineering There are several advantages to using a systematic and disciplined approach to software development, such as: 1. **Improved Quality:** By following established software engineering principles and techniques, the software can be developed with fewer bugs and higher reliability. 2. **Increased Productivity:** Using modern tools and methodologies can streamline the development process, allowing developers to be more productive, and complete projects faster. 3. **Better Maintainability:** Software that is designed and developed using sound software engineering practices is easier to maintain and update over time. 4. **Reduced Costs:** By identifying and addressing potential problems early in the development process, software engineering can help to reduce the cost of fixing bugs and adding new features later on. 5. **Increased Customer Satisfaction:** By involving customers in the development process and developing software that meets their needs, software engineering can help to increase customer satisfaction. 6. **Better Team Collaboration:** By using Agile methodologies and continuous integration, software engineering allows for better collaboration among development teams. ## 2.6 Disadvantages of Software Engineering While Software Engineering offers many advantages, there are also some potential disadvantages to consider: 1. **High upfront costs:** Implementing a systematic and disciplined approach to software development can be resource-intensive and require a significant investment in tools and training. 2. **Limited flexibility:** Following established software engineering principles and methodologies can be rigid and limit the ability to quickly adapt to changing requirements. 3. **Bureaucratic:** Software Engineering can create an environment that is bureaucratic, with a lot of processes and paperwork, which may slow down the development process. 4. **Complexity:** With the increase in the tools and methodologies, software engineering can be complex and difficult to navigate. 5. **Limited creativity:** The focus on structure and process can stifle creativity and innovation among developers. 6. **High learning curve:** The development process can be complex, and it requires a lot of learning and training, which can be challenging for new developers. 7. **High dependence on tools:** Software engineering heavily depends on the tools, and if the tools are not properly configured or are not compatible with the software, it can cause issues. 8. **High maintenance:** The software engineering process requires regular maintenance to ensure that the software is running efficiently, which can be costly and time-consuming. ## 2.7 Software Engineering and Computer Engineering Software engineering and Computer engineering are two distinct disciplines that focus on different aspects of computer systems. While both fields require a strong foundation in computer science and mathematics, software engineering is focused on software development processes, while computer engineering is focused on the physical components and systems that make up computers. ### Software Engineering Software engineering focuses on the development of software applications. It involves the study and application of principles and the use of computers that usually cover theoretical and practical approaches. ### Computer Engineering Computer engineering involves the study of both architecture and structural properties of principles and the use of computers which usually covers theoretical and practical approaches. ## 2.8 Benefits of Software development as an engineering discipline There are many benefits to treating software development as an engineering discipline. Some of the key benefits include: 1. **Improved quality:** By following established best practices and methodologies, software engineers are able to produce higher quality software that is more reliable and less prone to errors. 2. **Increased productivity:** Formal methods and tools can help software engineers work more efficiently and effectively, leading to increased productivity. 3. **Greater predictability:** By following a structured and systematic approach, software engineers can make more accurate predictions about the time and resources required to complete a project. 4. **Better communication:** Software engineering practices can help ensure that all stakeholders, including developers, managers, and clients, have a clear understanding of the project's goals and requirements. 5. **Greater maintainability:** Software engineering practices can help ensure that the software is designed in a way that makes it easy to maintain and update over time. 6. **Better cost management:** By following established best practices and methodologies, software engineers can reduce the cost of development, testing and maintenance of software. 7. **Better Scalability:** Software engineering provides the process and methodologies to design the software in a way that it is easy to scale up or down as per the requirement. ## 2.9 Pseudocode Pseudocode is a high-level representation of a program or algorithm, using structured English-like language, without adhering to specific programming language syntax. Pseudocodes constitute the notion of the basic operating principles, workflows, and data flows of the program that are similar to the programming language used. A pseudocode is a step-by-step description of an algorithm. It does not use any programming language in its representation. Pseudocode can be easily translated into various programming languages, such as: Python, Java, C++, JavaScript, C#, etc. ### Characteristics of Pseudocode - Easy to read and understand - Platform-independent - Language-independent - Focuses on logic and flow - Ignores low-level details ### Pseudocode Elements - Variables (e.g., x, y) - Control structures (e.g., IF, WHILE, FOR) - Functions/Procedures - Input/Output operations - Comments ### Benefits of Pseudocodes - Simplifies program design - Eases communication among developers - Reduces errors - Improves readability ### Uses of Pseudocodes - Algorithm design - Program planning - Helps in algorithm development - Code review - Education and training - Documentation # Chapter 3: Software Development Life Cycle *A software life cycle model (also called process model) is a descriptive and diagrammatic representation of the software life cycle. A life cycle model represents all the activities required to make a software product transit through its life cycle phases. It also captures the order in which these activities are to be undertaken. In other words, a life cycle model maps the different activities performed on a software product from its inception to retirement. Different life cycle models may map the basic development activities to phases in different ways. Thus, no matter which life cycle model is followed, the basic activities are included in all life cycle models though the activities may be carried out in different orders in different life cycle models. During any life cycle phase, more than one activity may also be carried out.* ## 3.1 Phases of Software Development ### A. Feasibility Study *The main aim of feasibility study is to determine whether it would be financially and technically feasible to develop the product. At first project managers or team leaders try to have a rough understanding of what is required to be done by visiting the client side. After they have an overall understanding of the problem they investigate the different solutions that are possible. Based on this analysis they pick the best solution and determine whether the solution is feasible financially and technically. They check whether the customer budget would meet the cost of the product and whether they have sufficient technical expertise in the area of development.* ### B. Requirements analysis and specification *Software requirements are descriptions of the features, functions, capabilities, and constraints that a software system must possess to meet the needs of its users and stakeholders. They serve as the foundation for software development, guiding the design, implementation, and testing phases of the project.* *The aim of the requirements analysis and specification phase is to understand the exact requirements of the customer and to document them properly. This phase consists of two distinct activities, namely:* - Requirements gathering and analysis - Requirements specification *The goal of the requirements gathering activity is to collect all relevant information from the customer regarding the product to be developed. This is done to clearly understand the customer requirements so that incompleteness and inconsistencies are removed. The requirements analysis activity is begun by collecting all relevant data regarding the product to be developed from the users of the product and from the customer through interviews and discussions. It is necessary to identify all ambiguities and contradictions in the requirements and resolve them through further discussions with the customer. During this activity, the user requirements are systematically organized into a Software Requirements Specification (SRS) document. The customer requirements identified during the requirements gathering and analysis activity are organized into a SRS document. The important components of this document are functional requirements, the nonfunctional requirements, and the goals of implementation.* ### C. Design *The goal of the design phase is to transform the requirements specified in the SRS document into a structure that is suitable for implementation in some programming language. In technical terms, during the design phase the software architecture is derived from the SRS document. Two distinctly different approaches are available: the traditional design approach and the object-oriented design approach.* #### i. Traditional design approach *Traditional design consists of two different activities: first, a structured analysis of the requirements specification is carried out where the detailed structure of the problem is examined. This is followed by a structured design activity. During structured design; the results of structured analysis are transformed into the software design.* #### ii. Object-oriented design approach *In this technique, various objects that occur in the problem domain and the solution domain are first identified, and the different relationships that exist among these objects are identified. The object structure is further refined to obtain the detailed design.* ### D. Coding and Unit testing *The purpose of the coding phase (sometimes called the implementation phase) of software development is to translate the software design into source code. Each component of the design is implemented as a program module. The end-product of this phase is a set of program modules that have been individually tested. During this phase, each module is unit tested to determine the correct working of all the individual modules. It involves testing each module in isolation as this is the most efficient way to debug the errors identified at this stage.* ### E. Integration and system testing *Integration of different modules is undertaken once they have been coded and unit tested. During the integration and system testing phase, the modules are integrated in a planned manner. The different modules making up a software product are almost never integrated in one shot. Integration is normally carried out incrementally over a number of steps. During each integration step, the partially integrated system is tested, and a set of previously planned modules are added to it. Finally, when all the modules have been successfully integrated and tested, system testing is carried out. The goal of system testing is to ensure that the developed system conforms to the user requirements laid out in the SRS document.* ### F. Maintenance *Maintenance of a typical software product requires much more than the effort necessary to develop the product itself. Many studies carried out in the past confirm this and indicate that the relative effort of development of a typical software product to its maintenance effort is roughly in the 40:60 ratios.* *Maintenance involves performing any one or more of the following three kinds of activities:* - Correcting errors that were not discovered during the product development phase. This is called corrective maintenance. - Improving the implementation of the system, and enhancing the functionalities of the system according to the customer's requirements. This is called perfective maintenance. - Porting the software to work in a new environment. For example, porting may be required to get the software to work on a new computer platform or with a new operating system. This is called adaptive maintenance. ## 3.2 Software Development Models and Architecture *Software development models are frameworks that guide the process of creating software applications. They provide a structured approach to planning, designing, implementing, testing, and deploying software. Types of Software Methodologies include Waterfall, Agile, V-Model, Incremental, Spiral, Rapid Application Software Development (RAD), Extreme Programming (XP), Scrum, Kanban, and Lean Software Development.* ### Characteristics of Software Methodologies - Iterative or sequential approach - Emphasis on documentation or flexibility - Customer involvement and feedback - Team collaboration and communication - Risk management and mitigation - Testing and validation - Change management and version control ### Software Methodology Selection Criteria: - Project size and complexity - Customer requirements and expectations - Team size and experience - Time and budget constraints - Technology and infrastructure - Risk tolerance and management - Regulatory and compliance requirements ### Benefits of Software Methodologies - Improved project management - Enhanced team collaboration - Increased customer satisfaction - Reduced risks and errors - Faster time-to-market - Better quality software - Improved maintainability and scalability ### Challenges in Implementing Software Methodologies - Resistance to change - Cultural and organizational changes - Lack of training and expertise - Difficulty in scaling - Balancing flexibility and structure - Insufficient resources and budget - Integrating with existing processes ### Real-World Applications - Software development companies - IT departments - Financial institutions - Healthcare organizations - Government agencies - Mobile app development - E-commerce platforms ### 3.3.1 Waterfall Model *The Waterfall model involves initially developing the application, which is followed by various types of testing. Less client participation is required with the waterfall paradigm. Debugging takes place after the final step under this model, while problem identification occurs during testing. The Waterfall Model follows a strict, linear sequence of phases and is best for small projects with well-defined requirements. It produces the final product only after all phases are completed. This model is basically used for small projects.* #### Key Features - Linear, sequential approach - No overlap between phases - Emphasis on documentation #### Advantages - Easy to manage and understand - Each phase completes before next begins - Clear timelines and milestones - Predictable timeline and budget - Less complex, less risky - Suitable for small, well-defined projects #### Disadvantages - Inflexible to changes - Less complex and less risky - High risk if requirements change - Difficult to incorporate feedback - Testing occurs late in the cycle - Limited customer involvement ### 3.3.2 Incremental Model *The Incremental Model develops the software in smaller, iterative cycles, delivering a working version early and adding features incrementally. This approach offers more flexibility and lower risk. In Incremental Model Multiple development cycles take place and these cycles are divided into more smaller modules. Generally a working software in incremental model is produced during each cycle. It allows for rapid delivery of functionality and early feedback from users. While Incremental Model is most widely used it has also some disadvantages.* #### Advantages - Offers more flexibility - Lower risk - Enables rapid delivery #### Disadvantages - Requires strong planning - Requires well-defined modules - Can be difficult to manage ### 3.3.3 V-Model *The V-Model is a software development process that combines elements of the Waterfall and Verification/Validation models. V-model is the most important model that is used in the process of software testing. The late Paul Rook introduced it in the 1980s. The V-model is a sequential process in which the next phase begins only after the completion of the present phase. It's characterized by phases viz.* - Requirements Gathering - System Design - Architecture Design - Module Design - Coding - Unit Testing - Integration Testing - System Testing - Acceptance Testing #### Key Features - V-shaped diagram representing phases - Emphasis on verification and validation - Testing occurs in parallel with development - Each phase has specific deliverables #### Advantages - Improved testing and quality assurance - Reduced defects and rework - Better requirements tracing - Increased customer satisfaction - Suitable for complex projects #### Disadvantages - More complex and time-consuming - Requires more resources and planning - Difficult to adapt to changing requirements - Higher costs ### 3.3.4 Spiral Model *The Spiral model is a risk-driven software development process that combines elements of Waterfall and Iterative models. its diagrammatic representation, looks like a spiral with many loops. The exact number of loops of the spiral is unknown and can vary from project to project. Each loop of the spiral is called a phase of the software development process. It provides support for Risk Handling. It consists of the following phases:* - Planning Phase - Risk Analysis - Engineering Phase - Evaluation Plase #### Key Features - Risk assessment and mitigation - Iterative development - Emphasis on customer feedback - Flexible and adaptive - Multiple cycles (spirals) #### Advantages - Improved risk management - Increased customer satisfaction - Reduced defects and rework - Easier to adapt to changing requirements - Suitable for large, complex projects #### Disadvantages - More complex and time-consuming - Requires more resources and planning - Difficult to adapt to changing requirements - Requires more expertise and skilled resources ### 3.3.5 Iterative model *The iterative model is a way of software development that works in small steps for the development of the software. It was developed by a group of software developers for better ways of developing one. It is a easy way to craft development tasks are required into small steps and easy step is developed in iterations to achieve a final solution. The iterative model focuses on delivering functionality in small, incremental releases. This approach ensures that users can provide feedback and refine the product early in the development cycle. This helps to reduce the risk of developing a software product that does not meet the needs of end-users or stakeholders, while also reducing development time and cost. The prototype can be developed using different methods, such as throwaway prototyping, evolutionary prototyping, and Incremental prototyping. The prototyping model can be used in conjunction with other software development methodologies, such as agile development, to create software products that meet the needs of end-users and stakeholders. #### Advantages of Software Prototyping - Users help to shape the future. As a result, errors can be discovered during the first stage of the software development process. - Prototyping is also considered a risk reduction function because it allows non-existent performance to be seen, lowering the risk of failure. - Assists team members in effectively communicating. - Customer satisfaction exists, and he can feel the product from the start. - There will be no risk of software loss. - Quick user feedback aids in the development of better software solutions. #### Disadvantages of Software Prototyping - Prototyping is a time-consuming and labor-intensive process. - The cost of creating a prototype is completely wasted because the prototype is eventually discarded. - Prototyping may result in an overabundance of change requests. - Customers may be unwilling to commit to the iteration cycle for an extended period of time. - During each customer test, there may be too many variations in software requirements. - Poor documentation as a result of changing customer needs. ### 3.3.6 Prototype Model *Software Prototyping Model is a software development methodology that involves creating an initial prototype of the software product before developing the final product. The prototype is a working model of the software product that can be used to gather feedback and refine the design before the final product is developed. The prototyping model is particularly useful for projects where the requirements are not well-defined or are likely to change over time. The prototyping model can be used to reduce the risk of developing a software product that does not meet the needs of end-users or stakeholders, while also reducing development time and cost. The prototype can be developed using different methods, such as throwaway prototyping, evolutionary prototyping, and Incremental prototyping. The prototyping model can be used in conjunction with other software development methodologies, such as agile development, to create software products that meet the needs of end-users and stakeholders.* ### Difference between Waterfall model and Incremental model - In the waterfall model, early-stage planning is necessary. In an incremental model, early-stage planning is also necessary. - There is a high amount of risk in the waterfall model. There is a low amount of risk in the incremental model. - There is a long waiting time for running software in the waterfall model. There is a short waiting time for running software in the incremental model. # Chapter 4: Requirements Analysis and Specification ## 4.0 Introduction *Before software can be developed, it becomes quite essential for us to understand and document the exact requirement of the customer/users. Experienced members of the development team carry out this job. They are called as system analysts. The analyst starts requirements gathering and analysis activity by collecting all information from the customer which could be used to develop the requirements of the system. He then analyzes the collected information to obtain a clear and thorough understanding of the product to be developed, with a view to remove all