Introduction
Last updated
Last updated
Program: A step-by-step instruction to perform a specific task on a computer in a programming language is called program.
Software: Is a program along with proper documentation (requirement analysis, design, coding, testing) and user manuals which mainly includes installation guide and other manuals.
Software = Program + Documentation
--> A program is a subset of software, and it becomes software only if documentation and an operating procedure manual is prepared.
Program
Documents Software documentation consist of all the description, programs, graphics and instructions pertaining to design, coding, testing and preparation of software.
Operating Procedure (User Manual & Operational Manual) Provides information about what software is how to work with it how to install it on your system and how to control all the activities of the software.
Problems with software?
The major problem with current scenario in Software industry is, software usually overrun their development cost, they exceed their development duration limits, are usually of poor quality.
As long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem. — Edsger Dijkstra, The Humble Programmer (EWD340), Communications of the ACM
In software industry we understand that there is an urgent need to use a proper strategy, process and development cycles so that we can produce, or we can design quality products that are within budget, with in time and must satisfy the requirement of their users.
&
Software engineering is the systematic application of engineering principles and methods to the design, development, testing, and maintenance of software products. It involves the use of various tools, techniques, and methodologies to manage the software development process and ensure the quality, reliability, and maintainability of software products.
Software Developemnt vs Manufacturing: ---> Software is crafted through a process of coding and development. ---> Unlike physical products, it isn't produced in factories through a manufacturing process.
No Physical Wear and Tear: ---> Software doesn't deteriorate over time like physical object. ---> Its performance doesn't degrade due to physical use.
Custom-Built Nature: ---> Most software is specially designed to meet specific needs. ---> It's often not just a combination of pre-existing components but requires unique coding. and design
Intangibility of Software ---> Software can't be touched or handled physically. ---> It exists as code and functions within computers or digital devices.
Inadequate Requirements Gathering: • Ambiguous or incomplete requirements • Lack of communication between stakeholder
Poor Project Management: • Inadequate planning, monitoring, and control • Lack of risk assessment and mitigation • Multiplicity of software development life cycle • Selection of wrong technology or tool for development
Insufficient Time and Budget: • Unrealistic deadlines and resource constraints • Inefficient resource allocation and prioritization
Lack of Skilled Personnel: • Inadequate expertise in the development team • High turnover rates and loss of experienced staff
Resistance to Change: • Difficulty in adapting to new technologies or processes • Reluctance to modify established practices or mindsets • Rapid technology advancement
Nature of the Product: ---> Similarity: Both processes aim to create high-quality, reliable products ---> Difference: Conventional engineering focuses on physical systems, while software engineering deals with intangible software systems
Design Flexibility and Iteration: ---> Similarity: Both processes involve iterative design and prototyping ---> Difference: Software engineering allows for greater flexibility and ease of modification due to the non-physical nature of software
Quality Assurance and Testing: ---> Similarity: Both processes emphasize the importance of testing and quality assurance to ensure product performance and reliability ---> Difference: Conventional engineering often involves physical testing of prototypes, while software engineering relies on various types of software testing, such as unit, integration, and system testing
Project Management and Collaboration: ---> Similarity: Both processes require effective project management, team collaboration, and communication among stakeholders ---> Difference: Software engineering projects may involve distributed teams and rely more heavily on digital communication and collaboration tools
Maintenance and Evolution: ---> Similarity: Both processes involve maintenance and support activities to ensure the ongoing performance and reliability of the product ---> Difference: Software engineering typically demands more frequent updates, patches, and evolution due to the rapidly changing nature of technology and user requirements
For hardware Same production cost every time, for software production cost only for the first time and then only maintenance cost.
--> Correctness: The ability of the software to perform its intended tasks effectively and meet user requirements.
--> Usability: The ease with which users can learn, operate, and navigate the software.
--> Reliability: The software's consistency in producing accurate results and maintaining performance over time.
--> Efficiency: The optimal use of system resources, such as memory and processing power, to achieve desired outcomes.
--> Maintainability: The ease of updating, modifying, and fixing the software to accommodate changing requirements or fix issues.
--> Portability: The ability of the software to operate on different platforms or environments without significant modifications.
--> Scalability: The software's capacity to handle increased workloads or user demands without compromising performance.
--> Security: The software's ability to protect against unauthorized access, data breaches, and other potential threats
--> Modularity: The degree to which the software's components are organized into separate, manageable units that can be independently developed or updated.
--> Reusability: The potential for the software's components to be used in other applications or contexts, reducing development time and costs
--> Testability: The ease with which the software can be tested to ensure it meets its requirements and performs as expected.
Software Process A software process (also known as software methodology) is a set of related activities that lead to the production of the software. These activities may involve the development of the software from the scratch, or, modifying an existing system. ---> Feasibility study • Find abstract definition of the problem • Majorly checking the financial and technical feasibility • Analysis of cost and befit ratio • Checking availability of infrastructure and human resource • Examination of alternative solution strategies ---> Requirement analysis and specification • Try to understand the exact and complete requirement of the customer and document them properly. • Try to collect and analysis all data related to the project. • In last, a large document will be written in the natural language which will describe what the system will do without describing it how, called (SRS) Software Requirement Specification. • Very critical phase because, a small error hear can result of sever problem in later stages ---> Designing • We transform the requirements into a structure that is suitable for implementation of the code in a specific programming language. • Overall architecture and the algorithmic strategy are chosen (Coupling and cohesion). • Lastly will prepare a document called SDD (software design description), which will describe how the system will perform functionality. ---> Coding • Goal of coding is to translate the design of the system into a code of programming language. • It affects both testing and maintenance, so also critical feature. • We will be discussing some guidelines for how to write maintainable and readable code. ---> Testing • Because of human errors there will be a bug or fault in the code and if that bug/fault is executed it become a failure. • Software testing is a process of executing a program with the intention of finding bugs or fault in the code. ---> Implementation • Software is installed on the user site and training of the user and h/w requirement check is done. ---> Maintenance • Any change made in the software after its official release is called maintenance. It could be because of various reasons. • Adaptive • Corrective • Perfective
--> Software development organization follows some process when developing a s/w product, in mature organization this is well defined and managed.
--> In SDLC we development s/w in a systematic and disciplined manner. SDLC will define entry and exit for every stage. It makes assessment possible, time prediction, cost prediction, scheduling, to identify faults early possible.
--> Selection of a correct development model play an important role in cost, quality, overall success of the project.
Developed in the 1970s by Winston W. Royce. & Inspired by manufacturing and construction processes, where each step relies on the completion of the previous one.
It is a simplest SDLC in which phases are organised in a linear and sequential order
It is called waterfall model as its diagrammatic representation resembles as like a waterfall, also known as classical life cycle model
his type of model is basically used for the Small to medium-sized projects with clear, well-defined requirements. When the technology and tools to be used are well known and stable.
Projects where minimal changes are expected during the development process, and predictability is prioritized over adaptability.
---> Advantages:
Easy to understand and implement, with well-defined stages and clear milestones.
Each phase has well defined input and output, phases are processed and completed one at a time. Phases do not overlap.
Low cost and easy to schedule, as all staff do not work concurrently on the same project, so can work on different projects.
---> Disadvantages:
Not suitable to accommodate any change or iteration once development has begun. It is always difficult to acquire of the requirement in the starting.
Working version is produced in the last level, so not good for large size sophisticated projects.
High amounts of risk and uncertainty.
Most of the customer are not sure about the functionality they require from the software, as a result the final s/w is not according too exact demand.
It is an iterative approach, which involves developing an early working model of the software based on the currently known requirements with limited functionalities, low reliability and untrusted performance.
Refining it through user feedback, and repeating the process until a satisfactory solution is achieved.
Then shown to the user, as per the feedback of the user prototype is rebuilt and modified and again, shown to the user, the process continues till the customer is not satisfied.
After this process the final SRS document is developed.
Developing the prototype help in building the actual design.
Prototype model is of two types — Evolutionary prototype — Throwaway prototype
Evolutionary prototype —> Also known as incremental or iterative prototyping, develops a working prototype, gradually improving and refining it based on user feedback
Prototype evolves into the final product over time with feature additions and modifications. Accommodates changing requirements during the development process.
Throwaway prototype --> Throwaway prototyping, also known as rapid or exploratory prototyping, involves creating a temporary, simplified version of the software to validate the feasibility of specific features, test ideas, or gain user feedback on the initial design. The throwaway prototype is not intended to be used in the final product; instead, it is discarded once it has served its purpose.
Once the developers have gathered the necessary information, they can then start developing the actual software product from scratch, using the lessons learned from the prototype. This approach is particularly useful for testing complex or risky features, as it helps to minimize the potential impact of these features on the overall project.
---> Advantages
Customers get a chance to see the product early in the life cycle, and give important feedback.
There is a scope to accommodate new requirements.
Developer and more confident, and hence risk is reduced.
---> Disadvantages
After seeing the early prototype use demand the actual system soon.
If not managed properly the iterative process can run for a long time.
If user is not satisfied, he may lose its interest in the project
Barry boehm recognised the project risk factor into a life cycle model, the result was the spiral model, which was presented in 1986.
The radial dimensions of the model represent the cumulative costs.
Each path around the spiral is the indicative of the increased cost.
The angular dimensions represent the progress made in the completing each cycle, each loop of the spiral from X-axis clockwise through 360 represent one phase, which is divided into four sectors.
---> Advantages
Provide early and frequent feedback of the customer, Additional Functionality can be added at a later date.
Management control of quality, correctness, cost, schedule is improved through review at the conclusion of each iteration.
Resolve all the possible risk involved in the product early in the life cycle.
Allows for incremental releases and testing.
---> Disadvantages
Not suitable for small size project as the cost of risk analysis may exceed the actual cost of the project, High administrative overhead.
It is complex and time-consuming to use.
Risk analysis requires highly specific expertise.
Incremental development is based on the idea of developing an initial implementation, exposing this to user feedback, and evolving it through several versions until an acceptable system has been developed.
In incremental model the whole requirement is divided into various builds. Multiple Development cycles take place here, making the life cycle a “multi-waterfall” cycle. Cycles are divided up into smaller, more easily managed modules. Each module passes through the requirements, design, implementation and testing phases.
A working version of software is produced during the first module, so you have working software early on during the software life cycle. Each subsequent release of the module adds function to the previous release. The process continues till the complete system is achieved.
Generally, the early increments of the system should include the most important or most urgently required functionality. tries to combine the benefits of both prototyping and the waterfall model.
---> Advantages
Generates working software quickly and early during the software life cycle.
This model is more flexible – less costly to change scope and requirements.
It is easier to test and debug during a smaller iteration.
In this model customer can respond to each built.
Easier to manage risk because risky pieces are identified and handled during it’d iteration.
---> Disadvantages
Needs good planning and design.
Needs a clear and complete definition of the whole system before it can be broken down and built incrementally.
Total cost is higher than waterfall.
Focus
Adaptation and evolution of software in response to changing requirements and user feedback.
Continuous improvement and refinement of a software system in iterations.
Initial Release
May start with a basic prototype or a partially functional system to gather feedback.
Begins with a basic version of the software, usually with minimal functionality.
Development Approach
Develops through repeated cycles (e.g., prototypes or increments) with each cycle refining and expanding the software.
Focuses on enhancing and refining an existing system through multiple iterations.
Feedback Integration
Heavily relies on user feedback to guide each evolutionary stage, often with significant changes between stages.
Uses feedback to make improvements in each iteration, usually with smaller, incremental changes.
Examples
Prototyping Model, Spiral Model, Agile Development, RAD
Agile Development (as a specific approach focusing on enhancement and refinement), Iterative Development Model.
Next Page -->