Software Engineering

 Software Engineering


Software Development Process

🔳What is Software ?

🔴Software is defined as a collection of computer programs, procedures, rules and data. 
🟢Software is a program or set of programs containing instructions that provide the desired functionality.
🟠Software is a set of instruction used to acquire inputs and to manipulate them to produce the desired output in terms of functions and performance as determined by the user of the software.
🟡Software = Programs + Documentation + Operating procedures 

🔳What is Software Engineering ?

🔸Software Engineering is the process of designing, developing, testing, and maintaining software. 
🔸It is systematic and disciplined approach to software development that aims to create high-quality, reliable, and maintainable software.
🔸Software engineering is the establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines.

🔳Explain characteristics of software

1. Software is developed or engineered; it is not manufactured in the classical sense.
🔸Although some similarities exist between software development and hardware 
manufacture, the two activities are fundamentally different. 
🔸In both activities, high quality is achieved through good design, but the 
manufacturing phase for hardware can introduce quality problems that are non
existent (or easily corrected) for software. 
🔸Both activities are dependent on people, but the relationship between people 
applied and work accomplished is entirely different.
🔸Software costs are concentrated in engineering. This means that software 
projects cannot be managed as if they were manufacturing projects. 

2. Software doesn't "wear out."


The idealized curve as shown in above figure is an oversimplification of actual failure models for software. 
However, the implication is clear software doesn't wear out. 
But it does deteriorate! 
🔸This contradiction can best be explained by considering the “actual curve” shown in Figure. 
🔸During its life, software will undergo change (maintenance). As changes are made, it is likely that some new defects will be introduced, causing the failure rate curve to spike as shown in figure. 
🔸Before the curve can return to the original steady-state failure rate, another change is requested, causing the curve to spike again. Slowly, the minimum failure rate level begins to rise—the software is deteriorating due to change. 

3. Although the industry is moving toward component-based construction, most 
software continues to be custom built.
The reusable components have been created so that the engineer can concentrate on the truly innovative elements of a design, that is, the parts of the design that represent something new. 
🔸In the software world, it is something that has only begun to be achieved on a broad scale. A software component should be designed and implemented so that it can be reused in many different programs. 
🔸A software component should be designed and implemented so that it can be reused in many different programs. Modern reusable components encapsulate both data and the processing that is applied to the data, enabling the software engineer to create new applications from reusable parts. 
🔸For example, today’s interactive user interfaces are built with reusable components that enable the creation of graphics windows, pull-down menus, and a wide variety of interaction mechanisms. 
 
4. A software component should be designed and implemented so that it can be 
reused in many different programs.  
🔸It is the responsibility of software engineer to design and implement a software component in such a way that it should be reused easily in many different programs. 
🔸Latest reusable components summarize both data as well as the processing, which is applied to the data, which helps the software engineer to develop new applications from existing components. 


🔳Types / Categories of Software

1️⃣System Software
2️⃣Application Software
3️⃣Scientific Software
4️⃣Embedded Software
5️⃣Real time Software
6️⃣Product-line Software
7️⃣Web based software
8️⃣Artificial Intelligence (AI) Software
9️⃣Personal Computer Software

1. System Software
➡️System Software comprises programs that control the operations of the hardware components. System software is a collection of programs used to run the system as assistance to other software programs.
➡️The compilers, editor, utilities, operating system components, drivers, and interfaces are examples of system software.
➡️System software resides in the computer system and consumes its resources. A computer system software cannot function.
➡️System software directly interacts with the hardware, heavy usage by multiple users, concurrent operations that require scheduling, resource sharing, and so on.

2. Application Software
➡️Application software consists of programs purely for the tasks of the users, obtaining the inputs and processing them in the instructions already defined.
➡️Application software is a standalone program which solves a specific business/ organization requirement.
➡️Application software consists of the programs that do real work for the users. For example, word processors, spreadsheets and database management systems fall under the category of applications software.

3. Embedded Software
➡️Software, when written to perform certain functions under control conditions and is further embedded into hardware as a part of large systems, is called embedded software.
➡️Found in intelligent products for consumer and industrial markets.
➡️Resides in read-only memory (ROM), used to control products and systems.
➡️Can perform very limited tasks or provide significant control (such as automotive features).
➡️Examples: Microwave ovens, washing machines.

4. Personal Computer Software
➡️Developed for use on personal computers, both for business and personal applications.
➡️Broad range includes word processing, spreadsheets, graphics, multimedia, and database management.
➡️Facilitates external network/database access and entertainment.
➡️Examples: Microsoft Word, Excel.

5. Scientific Software
➡️Characterized by number-crunching and intensive algorithms.
➡️Used in scientific research such as astronomy, biology, and engineering (stress analysis, CAD/CAM).
➡️Modern types use more interactive and real-time features.
➡️Examples: CAD and CAM software.

6. Artificial Intelligence (AI) Software
➡️Simulates human intelligence and decision-making.
➡️Features learning, reasoning, problem-solving abilities.
➡️Used in applications like expert systems, natural language processing, and robotics.
➡️Continuously improves performance with experience.

🔳Software Characteristics

1. Software is Developed or Engineered, Not Manufactured
🔸Software creation is an engineering process, not a manufacturing one.
🔸High quality is achieved through good design, unlike hardware where manufacturing can introduce defects.
🔸Software project costs are concentrated in engineering/design, not in reproduction.
🔸Software projects should not be managed as if they were manufacturing projects because of these fundamental differences.

2. Software Doesn't Wear Out
🔸Software does not physically degrade over time like hardware.
🔸However, as changes are made (maintenance), new defects are likely to be introduced, causing the software to “deteriorate.”
🔸The failure rate curve of software does not show wear, but spikes with each change due to newly introduced defects.
🔸Over its life, ongoing changes can raise the minimum failure rate, reflecting deterioration due to change rather than physical wear.

3. Most Software is Still Custom-Built
🔸While the industry is moving towards component-based construction, most software continues to be tailored for specific needs.
🔸Reusable components allow engineers to focus on innovative aspects of a design.
🔸True large-scale reuse is only now becoming widespread.
🔸Custom-built nature means software is often unique and specifically crafted for different users or organizations.

4. Software Can Be Reused
🔸Well-designed software components can be reused in different programs.
🔸Modern reusable components encapsulate both data and the processing applied to it.
🔸User interfaces, for example, are built with reusable graphical components (windows, menus, etc.).
🔸Reusing components helps speed up development and enhances productivity by leveraging existing solutions.


🔳Software Development Framework

A Software Development Framework provides a structured foundation for successful software development by organizing and guiding key activities throughout a project's life cycle. 

Key Components of the Software Development Framework

1. Process Framework
➡️Establishes the foundation for a complete software process.
➡️Identifies a small number of framework activities applicable to all software projects:
        🔸Communication: Heavy collaboration with customers and stakeholders; encompasses requirements gathering and related activities.
        🔸Planning: Establishes plans for software engineering work, describes technical tasks, risk analysis, project tracking, and deadlines.
        🔸Modeling: Creation of models to help developers and customers understand requirements and designs.
        🔸Construction: Involves both code generation and the testing required for identifying defects.
        🔸Deployment: Delivering the software to the customer for evaluation and feedback.
➡️Umbrella activities such as software quality assurance and configuration management occur throughout the process.

2. The 4 Ps of the Management Spectrum
➡️People: Focus on motivating, organizing, and developing the software team.
➡️Product: Establishing clear product objectives and scope before planning begins.
➡️Process: The chosen software process provides the necessary framework for planning and execution.
➡️Project: Careful planning and control to manage complexity and improve success rates.

3. Framework Activities and Adaptation
➡️A small set of framework activities (listed above) is adapted by creating specific task sets (tasks, milestones, work products, quality points) to suit the project’s particular needs.
➡️Framework adapts to differences in project size, complexity, and team requirements.

4. Prescriptive vs. Agile Models (Framework Styles)
➡️Prescriptive Model: Emphasizes detailed definitions and predictable planning. Follows structured process life cycles like the Waterfall or Spiral Model.
➡️Agile Model: Focuses on adaptability and people, using iterative, incremental development and minimal documentation. Emphasizes continuous feedback and adaptive planning.


🔳Software Process Framework

🔸A Software Process Framework is a structured approach that defines the steps, tasks, and activities involved in software development.
🔸This framework serves as a foundation for software engineering, guiding the development team through various stages to ensure a systematic and efficient process.
🔸A Software Process Framework helps in project planning, risk management, and quality assurance by detailing the chronological order of actions.

Software-Process

Software-Process-Framework-Activities

🔸Five framework activities are described in a process framework for software engineering. Communication, planning, modeling, construction, and deployment are all examples of framework activities.

1. Communication
Communication involves gathering requirements from customers and stakeholders to determine the system's objectives and the software's requirements.
Effective communication is essential to understand what the users need from the software.
This phase ensures that all stakeholders are on the same page regarding the goals and requirements of the system.

Activities: Requirement Gathering, Objective Setting.

2. Planning
Planning involves establishing an engineering work plan, describing technical risks, listing resource requirements, and defining a work schedule.
Planning helps in organizing the project and setting clear expectations.
It ensures that the development team has a roadmap to follow and that potential challenges are anticipated and managed.

Activities: Work Plan, Risk Assessment, Resource Allocation, Schedule Definition.

3. Modeling
Modeling involves creating architectural models and designs to better understand the problem and work towards the best solution.
Modeling translates requirements into a visual and structured representation of the system. It helps in identifying the best design approach and serves as a blueprint for development.

Activities: Analysis of Requirements, Design.

4. Construction
Construction involves creating code, testing the system, fixing bugs, and confirming that all criteria are met.
This phase is where the actual software is built. Testing is crucial to ensure that the code is error-free and that the software meets all specified requirements.

Activities: Code Generation, Testing.

5. Deployment
Deployment involves presenting the completed or partially completed product to customers for evaluation and feedback, then making necessary modifications based on their input.

Activities: Product Release, Feedback Collection, Product Improvement.


🔳Waterfall Model

The Waterfall Model is a way to make software (or do any project) step by step. You finish one step completely before you move to the next step.
[ वॉटरफॉल मॉडेल म्हणजे सॉफ्टवेअर (किंवा कोणतेही प्रोजेक्ट) टप्प्याटप्प्याने बनवायची पद्धत. एक टप्पा पूर्ण झाला की मगच पुढचा टप्पा सुरु केला जातो. ]

Waterfall is best when you know exactly what you want at the beginning!
[ वॉटरफॉल हा मॉडेल तेव्हा योग्य, जेव्हा सुरुवातीपासून सगळं स्पष्ट माहित असतं! ]

waterfall-model-SDLC


1. Communication (Requirement Gathering)
Talk to your customer about what the software should do. List EVERY requirement.
[ कम्युनिकेशन (आवश्यकता गोळा करणे) :- ग्राहकाशी संवाद साधून, त्यांना काय हवं आहे हे नीटहीट समजून घेणे आणि लिहून ठेवणे. ]

2. Planning
Plan the schedule, estimate time and cost, and identify any risks.
[ वेळापत्रक, खर्च, धोके ओळखणे व सर्वांचे नियोजन करणे. ]

3. Modelling (Design)
The engineers/designers make plans for how the software will look and work.
[ इंजिनिअर किंवा डिझायनरने सॉफ्टवेअर कसे दिसेल, कसे चालेल याचे डिझाईन तयार करणे. ]

4. Construction (Coding)
Programmers write the code to create the software as per the design.
[ प्रोग्रामर प्रत्यक्ष सॉफ्टवेअर कोड लिहितात. ]

5. Deployment (Delivery)
The software is given to the customer. They start using it, and if they find bugs, they report back for fixes.
[ सॉफ्टवेअर ग्राहकाला दिलं जातं, वापरता येतं, त्रुटी असल्यास कळवता येतं. ]

⭕Advantages: Easy To understand , Good for small project , easy to manage.

❌Disadvantages: Not Good for large projects, takes time , No Changes Allowed.
 

➡️ 1) Software is developed or engineered : Software is not manufactured in the classical sense. Although some similarities exist between software development and hardware manufacture, the two activities are fundamentally different. Both activities are dependent on people, but the relationship between people applied and work accomplished is entirely different.
2) Software doesn't "wear out". During its life, software will undergo change (maintenance). As changes are made, it is likely that some new defects will be introduced, causing the failure rate curve to spike. Before the curve can return to the original steady-state failure rate, another change is requested, causing the curve to spike again. Slowly, the minimum failure rate level begins to rise—the software is deteriorating due to change.
3) Most Software is custom built, rather than being assembled from Existing Components. 

➡️ Embedded software, personal software, scientific software, Application Software, system software.





Post a Comment

0 Comments