Nature of Software
The nature of software is defined by its fundamental characteristics, which distinguish it from physical hardware and traditional manufacturing products. The key characteristics are:
- Quality and Compliance: Software should achieve a good quality in design and meet all the specifications of the customer.
- Durability: Software does not wear out i.e. it does not lose the material.
- Complexity: Software should be inherently complex.
- Efficiency: Software must be efficient i.e. the ability of the software to use system resources in an effective and efficient manner.
- Integrity: Software must be integral i.e. it must prevent from unauthorized access to the software or data.
Software Engineering: Layered Technology
Software engineering is a systematic and disciplined approach towards the development of the software operation and maintenance. The main purpose behind software engineering is to give a framework for building a software with best quality.
Software engineering is a fully layered technology. To develop a software, we need to go from one layer to another. All these layers are related to each other and each layer demands the fulfillment of the previous layer. The layered technology consists of: Tools, Methods, Process, and Quality focus.
1. Quality focus
The characteristics of good quality software are:
- Correctness of the functions required to be performed by the software.
- Maintainability of the software.
- Integrity i.e. providing security so that the unauthorized user cannot access information or data.
- Usability i.e. the efforts required to use or operate the software.
2. Process
- It is the base layer or foundation layer for the software engineering.
- The software process is the key to keep all levels together.
- It defines a framework that includes different activities and tasks.
- i.e. it covers all activities, actions and tasks required to be carried out for software development.
3. Methods
- The method provides the answers of all 'how-to' that are asked during the process.
- It provides the technical way to implement the software.
- It includes collection of tasks starting from communication, requirement analysis, analysis and design modelling, program construction, testing and support.
4. Tools
- The software engineering tool is an automated support for the software development.
- The tools are integrated i.e. the information created by one tool can be used by the other tool.
- Ex: The Microsoft publisher can be used as a web designing tool.
Software Process
The process framework defines a small set of activities that are applicable to all types of projects. The software process framework is a collection of task sets. A task set consists of a collection of small work tasks, project milestones, work products and software quality assurance (SQA) points.
Umbrella Activities
Typical umbrella activities are:
- Software project tracking and control: In this activity, the developing team accesses the project plan and compares it with the predefined schedule. If these project plans do not match with the predefined schedule, then the required actions are taken to maintain the schedule.
- Risk management: Risk is an event that may or may not occur. If the event occurs, then it causes some unwanted outcome, hence proper risk management is required.
- Software Quality Assurance (SQA): SQA is the planned and systematic pattern of activities which are required to give a guarantee of software quality. For example, during software development, meetings are conducted at every stage to find out the defects and suggest improvements.
- Formal Technical Reviews (FTR): FTR is a meeting conducted by the technical staff to detect quality problems and suggest improvements. The technical person focuses on the quality of the software from the customer point of view.
- Measurement: Measurement consists of the effort required to measure the software. It is measured by direct measures (like cost, lines of code, size of software) and indirect measures (such as quality of software).
- Software Configuration Management (SCM): It manages the effect of change throughout the software process.
- Reusability management: It defines the criteria to reuse the product. The quality of software is good when components developed for a certain application are useful for developing other applications.
- Work product preparation and production: It consists of the activities that are needed to create the documents, forms, lists, logs and user manuals for developing a software.
Generic Process Framework
There are five generic process framework activities:
- Communication: The software development starts with the communication between customer and developer. They communicate to understand objectives and gather requirements.
- Planning: It consists of complete estimation, scheduling for project development and tracking. A "map" is created which defines the work by describing the tasks, risks, resources, work products and work schedule.
- Modeling: It creates a "sketch", showing what it looks like architecturally and how the constituent parts fit together. It consists of complete requirement analysis and the design of the project like algorithm and flowchart.
- Construction: Construction consists of code generation and the testing part. The coding part implements the design details using an appropriate programming language, while testing checks whether the flow is correct and provides the desired output.
- Deployment: This step consists of delivering the product to the customer and taking feedback from them. If the customer wants corrections or demands additional capabilities, then change is required for improvement in the quality of the software.
Capability Maturity Model (CMM)
The Capability Maturity Model (CMM) is a procedure used to develop and refine an organization's software development process. The model defines a five-level evolutionary stage of increasingly organized and consistently more mature processes. It was developed and is promoted by the Software Engineering Institute (SEI) and is used as a benchmark to measure the maturity of an organization's software process.
Level 1: Initial
- Ad hoc activities characterize a software development organization at this level.
- Very few or no processes are described and followed.
- Processes followed are adhoc, immature, and are not well defined, creating an unstable environment.
- There is no basis for predicting product quality or time for completion.
- Since software production processes are not limited, different engineers follow their own process, making development efforts chaotic.
Level 2: Repeatable
- At this level, fundamental project management practices like tracking cost and schedule are established.
- Size and cost estimation methods (like function point analysis, COCOMO) are used.
- Experience with earlier projects is used for managing new similar natured projects.
- Program management is a key characteristic, focusing on maintaining performance of the software product for the entire lifecycle.
Level 3: Defined
- Methods for both management and development activities are defined and documented.
- There is a common organization-wide understanding of operations, roles, and responsibilities.
- Peer Reviews: Defects are removed by using review methods like walkthroughs and buddy checks.
- Intergroup Coordination: Consists of planned interactions between different teams to ensure efficient fulfilment of needs.
- Training Programs: Focuses on the enhancement of knowledge and skills of the team members.
Level 4: Managed
- Quantitative quality goals are set for the organization for software products as well as software processes.
- The measurements help the organization predict product and process quality within quantitative limits.
- Software Quality Management: Includes establishment of plans and strategies to develop quantitative analysis of product quality.
- Quantitative Management: Focuses on controlling the project performance in a quantitative manner.
Level 5: Optimizing
- This is the highest level of process maturity and focuses on continuous process improvement using quantitative feedback.
- Process Change Management: Focuses on continuous improvement of software processes to improve productivity, quality, and cycle time.
- Technology Change Management: Consists of identification and use of new technologies to decrease development time.
- Defect Prevention: Focuses on identification of causes of defects and prevents them from recurring.
Key Process Areas (KPAs)
Except for CMM level 1, each maturity level is featured by several Key Process Areas (KPAs) that contain the areas an organization should focus on to improve its software process to the next level.
| CMM Level | Focus | Key Process Areas |
|---|---|---|
| 1. Initial | Competent People | NO KPA'S |
| 2. Repeatable | Project Management | Software Project Planning, Software Configuration Management |
| 3. Defined | Definition of Processes | Process definition, Training Program, Peer reviews |
| 4. Managed | Product and Process quality | Quantitative Process Metrics, Software Quality Management |
| 5. Optimizing | Continuous Process improvement | Defect Prevention, Process change management, Technology change management |
Prescriptive Process Models: The Waterfall Model
The name 'prescriptive' is given because the model prescribes a set of activities, actions, tasks, quality assurance and change the mechanism for every project. There are three types of prescriptive process models: The Waterfall Model, Incremental Process model, and Rapid Application Development (RAD) model.
The Waterfall Model
The Waterfall model was the first Process Model to be introduced and is also referred to as a linear-sequential life cycle model. It is very simple to understand and use. In a waterfall model, each phase must be completed before the next phase can begin and there is no overlapping in the phases. Typically, the outcome of one phase acts as the input for the next phase sequentially. Feedback is taken after each phase to ensure the project is on the right path, and testing starts only after the development is complete.
Phases in Waterfall Model
- Requirement Gathering and analysis: All possible requirements of the system to be developed are captured in this phase and documented in a requirement specification document. Both customer and developer work together to document functions, performance, and interfaces. It describes the "what" of the system, not "how".
- System Design: Requirement specifications are studied to prepare the system design. This helps specify hardware/system requirements and overall system architecture.
- Implementation: With inputs from system design, the system is first developed in small programs called units. Each unit is developed and tested for functionality (Unit Testing).
- Integration and Testing: All developed units are integrated into a system after testing of each unit. Post integration, the entire system is tested for any faults and failures.
- Deployment of system: Once functional and non-functional testing is done, the product is deployed in the customer environment or released into the market.
- Maintenance: Issues that come up in the client environment are fixed by releasing patches. Better versions are released to enhance the product.
Advantages of Waterfall Model
- Simple and easy to understand, implement, and use.
- All requirements are known at the beginning, making it easy to manage.
- Avoids overlapping of phases because each phase is completed at once.
- Works well for small projects with clearly defined stages and well-understood milestones.
- Process and results are well documented.
- Preferred for projects where quality is more important than cost.
Disadvantages of Waterfall Model
- No working software is produced until late during the life cycle.
- Not a good model for complex, object-oriented, or long ongoing projects.
- Not suitable for projects where requirements are at a moderate to high risk of changing.
- Difficult to measure progress within stages and cannot accommodate changing requirements.
- Problems are uncovered late, during software testing.
- Integration is done as a "big-bang" at the very end, preventing early identification of technological bottlenecks.
Applications of Waterfall Model
Some situations where the use of Waterfall model is most appropriate are:
- Requirements are very well documented, clear, and fixed.
- Product definition is stable and there are no ambiguous requirements.
- Technology is understood and is not dynamic.
- Ample resources with required expertise are available.
- The project is short.
Incremental Process Model
The incremental model combines the elements of the waterfall model and applies them in an iterative manner. The first increment in this model is generally a core product. Each increment builds the product and submits it to the customer for any suggested modifications. The next increment implements the customer's suggestions and adds additional requirements to the previous increment. This process is repeated until the product is finished. For example, word-processing software is typically developed using the incremental model.
Phases in Incremental Process Model
- Requirement analysis: In the first phase, the product analysis expertise identifies the requirements. The system functional requirements are understood by the requirement analysis team.
- Design and Development: In this phase, the design of the system functionality and the development method are finished with success.
- Testing: The testing phase checks the performance of each existing function as well as additional functionality. Various methods are used to test the behavior of each task.
- Implementation: This phase enables the coding phase of the development system. It involves the final coding that was designed and tested. After completion, the working product is enhanced and upgraded to the final system product.
Advantages of Incremental Model
- The model is flexible because the cost of development is low and initial product delivery is faster.
- Errors are easy to be recognized, and it is easier to test and debug during the smaller iteration.
- Simple to manage risk because it is handled during its iteration.
- Working software generates quickly and early during the software life cycle.
- The client gets important functionality early, and parallel development can be planned.
Disadvantages of Incremental Model
- The cost of the final product may cross the cost estimated initially.
- Requires very clear and complete planning.
- System architecture or design issues may arise because not all requirements are gathered in the beginning.
- Not suitable for smaller projects, and management complexity is more.
- The end of the project may not be known, which is a risk.
Applications of Incremental Model
- When requirements are superior or a project has a lengthy development schedule.
- When the customer demands a quick release of the product, allowing prioritized requirements to be developed first.
- When a new technology is being used and is being learnt by the development team while working.
- When some high-risk features and goals may change in the future.
Evolutionary Process Models: RAD & Spiral
The Evolutionary development model is a combination of the Iterative and Incremental models of the software development life cycle. It divides the development cycle into smaller, incremental waterfall models in which users are able to get access to the product at the end of each cycle. Feedback is provided by the users, and the development team responds by changing the product, plan, or process. Therefore, the software product evolves with time. The two main types are the Rapid Application Development (RAD) Model and the Spiral Model.
1. Rapid Application Development (RAD) Model
Using the RAD model, a software product is developed in a short period of time (generally a 60-90 days time-box). It is used when the requirements of the complete system are clearly defined and understood. The model achieves faster development and higher quality through gathering requirements via workshops, early user testing of designs, re-use of software components, and less formality in team communication.
Business & Data Modelling
Business: Information flow among business functions is defined by answering what data drives the process and where it goes.
Data: Data collected from business modeling is refined into a set of data objects (entities) and their relationships are defined.
Process Modelling
The information objects are transformed to achieve the necessary data flow to implement a business function. Processing descriptions are created for adding, modifying, deleting, or retrieving a data object.
Application Generation & Testing
Generation: Automated tools are used to facilitate the construction of the software.
Testing: Reduces overall testing time because RAD emphasizes reuse, though new parts and interfaces must still be fully tested.
- Advantages of RAD: Reduced cycle time due to reusable components, early customer feedback, reduced costs, and accommodation of changing requirements.
- Disadvantages of RAD: Requires highly skilled professionals, demands continuous customer involvement, and is not suitable for small-scale projects or systems that cannot be modularized.
- Applications: Best when the project can be modularized in 2-3 months, requirements are well-known, technical risk is limited, and budget allows for automatic code-generating tools.
2. Spiral Model
First mentioned by Barry Boehm, the Spiral Model is a risk-driven software development process model. It is a combination of the waterfall model and iterative model. It allows incremental releases of the product or incremental refinement through each iteration around the spiral, continuously evaluating unique risk patterns.
1. Communication & 2. Planning
Interacting with the customer to gather requirements and understand specifications. Includes estimating the cost, schedule, and resources for the iteration.
3. Risk Analysis
An important phase involving a Risk analyst. Identification of potential risks is done while risk mitigation strategy is planned and finalized.
4. Engineering
Includes designing and modeling the system. Starts with conceptual design and progresses to architectural and physical product design in subsequent spirals.
5. Construction & 6. Evaluation
Programs are developed into prototypes (early cycles) or developed software (subsequent cycles) and tested. Finally, the customer evaluates the software and monitors risks.
- Advantages of Spiral: Focuses on reducing project risks, produces prototypes for cost/time evaluation, accommodates changing customer requirements, and is highly recommended for large and complex projects.
- Disadvantages of Spiral: It is expensive and not suitable for small projects. Success heavily depends on highly experienced risk experts. Time estimation is difficult because the number of phases is unknown at the start.
- Applications: Projects with high-level risks, long-term projects, projects requiring frequent evaluation and customer feedback, or when requirements are complex and likely to change.
Agile Process Model: XP, Scrum, Kanban
The Agile process model is based on iterative development and provides a versatile, rapid, and adaptive response to change. An agile process is driven by customer descriptions, recognizes that plans are short-lived, develops software iteratively with a heavy emphasis on construction, and delivers multiple software increments. Entire projects are divided into smaller parts with iterations lasting from one to four weeks. High-performing agile teams require effective communication, collaboration, self-organization, metrics-driven approaches, and mutual respect.
1. Extreme Programming (XP)
eXtreme Programming (XP) is a lightweight, efficient, low-risk, and flexible agile methodology developed to address the specific needs of software development by small teams facing vague and changing requirements. It emphasizes taking best practices to extreme levels and uses the concept of object-oriented programming.
XP Core Values:
Communication, Simplicity, Feedback, Courage, and Respect.
- Phases in XP:
- Planning: Customers and teams create 'user stories' which are converted into iterations.
- Designing: Follows the 'keep it simple' principle. It uses Class Responsibilities and Collaboration (CRC) Cards and creates 'spike solutions' to explore potential risk mitigations.
- Coding: The most important phase. Emphasizes Pair Programming, 40-hour work weeks, collective code ownership, and frequent integration.
- Testing: Integrates testing daily with unit tests for all code and customer acceptance tests at the completion of coding.
- Advantages: Close contact with customers, generates stable software through continuous testing, avoids error through pair programming, and handles highly uncertain environments.
- Disadvantages: Requires constant customer participation, relatively high cost and time investment, demands strict self-discipline, and is not for large/complex environments.
2. Scrum
Scrum is a light-weighted framework that emphasizes self-organization and is effective for projects with tight timelines, changing requirements, and business criticality. The framework relies on constant feedback and divides the large product into small sub-products.
Product Backlog
A prioritized list of project requirements or features that provide business value.
Sprint Backlog
Divided into product assigned features to sprint and sprint planning meeting.
The Sprint
A time-box of one month or less. Changes are not introduced during the sprint.
Daily Scrum
Short daily meetings guiding 'knowledge socialization' to encourage a self-organizing structure.
- Advantages: Fast moving, money efficient, highly adaptive due to short sprints, and strongly prioritizes customer satisfaction.
- Disadvantages: Does not allow changes within a sprint, is not a fully described model (requires merging with XP or Kanban), and daily meetings require substantial resources.
3. Kanban
Kanban is a system indicating a workflow that limits Work In Progress (WIP) using visual cards, signboards, or billboards. It utilizes Just-In-Time (JIT) strategies to control inventory expenses and improve high-level production.
Core Concepts of Kanban:
- Visualize the workflow: Split work into defined states visualized as named columns on a wall using a Kanban Board.
- Limit Work-in-Progress (WIP): Assign explicit limits to how many items can be in progress to realize bottlenecks and prevent overproduction.
- Measure Lead Time: Measure the cycle time (average time to complete one item) to optimize the process.
- Advantages: Bottlenecks are highly visible in real-time, reduces wait times and inventory waste, delivers features faster, and is highly responsive to change.
- Disadvantages: Cannot be used as an independent tool (needs merging with Scrum/JIT), predicting specific completion timelines is difficult, and not suitable for highly dynamic environments without stable plans.
XP vs Scrum vs Kanban
| Parameter | Extreme Programming (XP) | Scrum | Kanban |
|---|---|---|---|
| Change Acceptance | Amenable to change even in later stages; allowed in set timelines. | Changes are not allowed within the Sprint. | Changes allowed at any time. |
| Iterations | Typically 1-2 weeks. | Sprints lasting 1-4 weeks (max 30 days). | Delivery cadence (continuous delivery, short iterations). |
| Coding Standards | Strict coding standards are used. | No coding standards are used. | No coding standards are used. |
| Requirements | Managed in the form of Story Cards. | Managed as artifacts (Product/Sprint Backlogs). | Managed using visual Kanban Boards. |
Introduction to AI/ML & Advanced Trends in SE
The software engineering landscape is rapidly evolving with the integration of cutting-edge technologies. These advanced trends are reshaping how applications are developed, deployed, and experienced by end-users.
Artificial Intelligence (AI) & Machine Learning (ML)
Machines can now think intelligently like humans and perform tasks that were initially restricted to humans.
- Chatbots: There is a rising trend of chatbots in app and website development using powerful programming languages, effectively replacing traditional human assistance and customer service.
- App Usability: The use of AI and machine learning in native app development has begun to significantly enhance customer experience and app usability.
- Error Reduction: These technologies have reduced human involvement in almost everything, making processes much less prone to errors.
Other Advanced Trends in Software Engineering
Internet of Things (IoT)
Ordinary devices and vehicles are attached with sensors for monitoring and data gathering. Best utilized when combined with AI and Big Data, heavily driving smart city solutions.
Low-Code Development
Allows developers to sketch applications like a flowchart rather than coding line-by-line. It is fast, intuitive, and highly fruitful for companies undergoing digital transformation.
Reality Technologies (AR/VR/MR)
- AR: Empowers digital worlds (e.g., ads, virtual makeup filters).
- VR: Used heavily in gaming, education, and workforce training.
- MR: Combines AR smart glasses with VR headsets to direct employees through complicated enterprise operations.
Cloud & Big Data
- Cloud: Growing need for business availability, data recovery, and "distributed cloud" technology.
- Big Data: Startups use it to reap benefits via Data-as-a-Service (DaaS), allowing access to exact data when needed while eliminating redundancy.
Blockchain & Human Augmentation
- Blockchain: Helps in the secured, simplified recording of transactions in a decentralized ledger (used in finance, media, healthcare).
- Human Augmentation (HA): Implantation of technologies into the human body/brain for cognitive and physical improvements (e.g., powered exoskeletons for heavy lifting).