Group Assignment

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 22

GROUP ASSIGNMENT

ICS 2302: SOFTWARE ENGINEERING I


GROUP MEMBERS:
1.) Keith Njuguna -> SCT221-0217/2022
2.) Bridget Masila -> SCT221-0228/2022
3.) Kepha Weru -> SCT221-0218/2022
4.) Natasha Njeri -> SCT221-0439/2022
5.) Nicholas Ng’ang’a -> SCT221-0742/2022
6.) David Thuo -> SCT221-0684/2022
SOFTWARE DEVELOPMENT METHODOLOGIES
1) Structured System Analysis and Design Methodology
-SSADM is a step-by-step approach to developing systems that takes into account
the needs of the users and the business.
-It involves analyzing the current system, designing the current system, designing
the new system testing the new system, developing the new system,
implementing the new system, and finally maintaining and supporting the new
system.
- Structured System analysis and design methodology is often used in
organizations that have large and complex systems.
Objectives of Structured System Analysis and Design Methodology.
1. Define the scope of the project – defining the scope of the project involves
identifying the boundaries of the project and what it will and will not
involve. This helps to ensure the project has manageable and clear goals
2. Analyzing the current system- this involves understanding how the current
system works and its strengths and weaknesses. This helps to identify areas
of improvement and how the new system can be designed to better meet
the needs of the users.
3. Requirements of the new system - Defining the requirements for the new
system involves identifying the specific features and functions that the new
system should have. This is done by consulting with users and stakeholders
to understand their needs and expectations.
4. Designing the new system-is the process of translating the requirements
into a plan for how the new system will work. This includes designing the
user interface, the data structures, and the logic of the system.
5. Developing the new system-involves implementing the design and creating
the actual code and data for the system. This is the technical
part of the process.
6. Testing the new system is critical-to ensuring that it works as intended and
meets the requirements. This is done by running tests and simulations to
identify any bugs or issues.
7. Implementing the new system-is the process of putting the new system into
production and making it available for users to use. This often involves
training users on how to use the new system.
8. Maintaining and supporting the new system- is the ongoing process of
keeping the system running smoothly and making updates and
improvements as needed. This is an ongoing process that never really ends.

The following three data modeling techniques are used in SSADM:

1. Logical data modeling. A logical data model depicts the logical data
structure of the system and deals with documenting the data requirements
of the system. The model describes: entities that are objects in the system
and have information recorded about them;
attributes that are descriptors of the entities; and
relationships that are the associations between the entities.
2. Data flow modeling. Data flows are identified, modeled and
documented. Data flow diagrams consist of the following: processes that
transform data;
external entities that send data from a system and receive data from
another system; data stores that hold data at rest; and data flows to move
data among entities.
3. Entity behavior modeling. This technique focuses on identifying,
modeling and documenting the events that occur in the system. It looks at
how events affect the entity and the sequence in which they occur.

The SSADM process is typically broken down into five stages:


The following steps are part of SSADM.

1. Feasibility stage. A feasibility study investigates the goals and implications


of a project to determine whether the project is achievable. The existing
system is analyzed for problems that must be solved during development.
There are four main areas considered in a feasibility study.
A technical feasibility study to determine if the project is technically
possible.
Organizational feasibility to evaluate whether the project is compatible with
existing systems.
An ethical feasibility step to establish if the project is socially and ethically
acceptable.
A financial feasibility study to verify if the project is financially practical.
2. Requirements analysis. This step investigates the current environment
and examines existing business systems to see what modifications are
needed. This includes a cost-benefits analysis of business system options
and the potential effect of the new system on the organization and
employees.

3. Definition of requirements. The requirements specification for the new


system may include a look at the life histories of the entities involved, user
role and function matrices, and process identity modeling, data catalogs
and correspondence diagrams.

4. Logical system specification. This step consists of two stages:

Technical system options define possible implementation methods and


components, such as staffing costs, the type of software and hardware
required, physical limitations of the area that houses the system and
requirements for the human-computer interface. At the end of this stage, a
technical system option is chosen.
Logical design defines the logic used in the new system, with a specific focus
on human-computer interaction and logical dialog with the system.
5. Physical design. The system's logical specifications are matched to
physical architecture. The function and structure of the database component is
specified based on outputs from the logical design and technical system option
steps.

2) Object Oriented System Analysis and Design Methodology


The Object-Oriented System Analysis and Design Methodology, or OOSADM for
short, is a framework used to design and develop complex software systems. The
main focus of OOSADM is on defining and implementing objects, as well as
modeling and visualizing relationships between objects. OOSADM uses an
iterative approach, where each iteration consists of four phases: analysis, design,
implementation, and testing. In the analysis phase, the problem is identified and
requirements are gathered. In the design phase, a system model is created and a
prototype is developed.
Object Oriented Approach
In the object-oriented approach, the focus is on capturing the structure and
behavior of information systems into small modules that combines both data and
process. The main aim of Object-Oriented Design (OOD) is to improve the quality
and productivity of system analysis and design by making it more usable.
In analysis phase, OO models are used to fill the gap between problem and
solution. It performs well in situation where systems are undergoing continuous
design, adaption, and maintenance. It identifies the objects in problem domain,
classifying them in terms of data and behavior.
The OO model is beneficial in the following ways −
 It facilitates changes in the system at low cost.
 It promotes the reuse of components.
 It simplifies the problem of integrating components to configure large
system.
 It simplifies the design of distributed systems.
Elements of Object-Oriented System
Let us go through the characteristics of OO System −
 Objects − An object is something that is exists within problem domain and
can be identified by data (attribute) or behavior. All tangible entities
(student, patient) and some intangible entities (bank account) are modeled
as object.
 Attributes − They describe information about the object.
 Behavior − It specifies what the object can do. It defines the operation
performed on objects.
 Class − A class encapsulates the data and its behavior. Objects with similar
meaning and purpose grouped together as class.
 Methods − Methods determine the behavior of a class. They are nothing
more than an action that an object can perform.
 Message − A message is a function or procedure call from one object to
another. They are information sent to objects to trigger methods.
Essentially, a message is a function or procedure call from one object to
another.
Features of Object-Oriented System
An object-oriented system comes with several great features which are discussed
below;
Encapsulation
Encapsulation is a process of information hiding. It is simply the combination of
process and data into a single entity. Data of an object is hidden from the rest of
the system and available only through the services of the class. It allows
improvement or modification of methods used by objects without affecting other
parts of a system.
Abstraction
It is a process of taking or selecting necessary method and attributes to specify
the object. It focuses on essential characteristics of an object relative to
perspective of user.
Relationships
All the classes in the system are related with each other. The objects do not exist
in isolation, they exist in relationship with other objects.
There are three types of object relationships −
 Aggregation − It indicates relationship between a whole and its parts.
 Association − In this, two classes are related or connected in some way such
as one class works with another to perform a task or one class acts upon
other class.
 Generalization − The child class is based on parent class. It indicates that
two classes are similar but have some differences.
Inheritance
Inheritance is a great feature that allows to create sub-classes from an existing
class by inheriting the attributes and/or operations of existing classes.
Polymorphism and Dynamic Binding
Polymorphism is the ability to take on many different forms. It applies to both
objects and operations. A polymorphic object is one who true type hides within a
super or parent class.
In polymorphic operation, the operation may be carried out differently by
different classes of objects. It allows us to manipulate objects of different classes
by knowing only their common properties.
Unified Modeling Language (UML)
UML is a visual language that lets you to model processes, software, and systems
to express the design of system architecture. It is a standard language for
designing and documenting a system in an object-oriented manner that allow
technical architects to communicate with developer.
It is defined as set of specifications created and distributed by Object
Management Group. UML is extensible and scalable.
The objective of UML is to provide a common vocabulary of object-oriented terms
and diagramming techniques that is rich enough to model any systems
development project from analysis through implementation.
UML is made up of −
 Diagrams − It is a pictorial representation of process, system, or some part
of it.
 Notations − It consists of elements that work together in a diagram such as
connectors, symbols, notes, etc.
Example of UML Notation for class
Instance diagram-UML notation

Operations Performed on Objects


The following operations are performed on the objects −
 Constructor/Destructor − Creating new instances of a class and deleting
existing instances of a class. For example, adding a new employee.
 Query − Accessing state without changing value, has no side effects. For
example, finding address of a particular employee.
 Update − Changes value of one or more attributes & affect state of object
For example, changing the address of an employee.

Uses of UML
UML is quite useful for the following purposes −
 Modeling the business process
 Describing the system architecture
 Showing the application structure
 Capturing the system behavior
 Modeling the data structure
 Building the detailed specifications of the system
 Sketching the ideas
 Generating the program code
Static Models
Static models show the structural characteristics of a system, describe its system
structure, and emphasize on the parts that make up the system.
 They are used to define class names, attributes, methods, signature, and
packages.
 UML diagrams that represent static model include class diagram, object
diagram, and use case diagram.

Dynamic Models
Dynamic models show the behavioral characteristics of a system, i.e., how the
system behaves in response to external events.
 Dynamic models identify the object needed and how they work together
through methods and messages.
 They are used to design the logic and behavior of system.
 UML diagrams represent dynamic model include sequence diagram,
communication diagram, state diagram, activity diagram.
Object Oriented System Development Life Cycle
It consists of three macro processes −
 Object Oriented Analysis (OOA)
 Object oriented design (OOD)
 Object oriented Implementation (OOI)
Object-oriented systems development includes the following stages −
 Object-oriented analysis
 Object-oriented design
 Prototyping
 Implementation
 Incremental testing
Object-Oriented Analysis
This phase concerns with determining the system requirements and to understand
the system requirements build a use-case model. A use-case is a scenario to
describe the interaction between user and computer system. This model
represents the user needs or user view of system.
It also includes identifying the classes and their relationships to the other classes
in the problem domain, that make up an application.
Object-Oriented Design
The objective of this phase is to design and refine the classes, attributes, methods,
and structures that are identified during the analysis phase, user interface, and
data access. This phase also identifies and defines the additional classes or objects
that support implementation of the requirement.
Prototyping
Prototyping enables to fully understand how easy or difficult it will be to
implement some of the features of the system.
It can also give users a chance to comment on the usability and usefulness of the
design. It can further define a use-case and make use-case modeling much easier.
Implementation
It uses either Component-Based Development (CBD) or Rapid Application
Development (RAD).
Component-based development (CBD)
CODD is an industrialized approach to the software development process using
various range of technologies like CASE tools. Application development moves
from custom development to assembly of pre-built, pre-tested, reusable software
components that operate with each other. A CBD developer can assemble
components to construct a complete software system.
Rapid Application Development (RAD)
RAD is a set of tools and techniques that can be used to build an application faster
than typically possible with traditional methods. It does not replace SDLC but
complements it, since it focuses more on process description and can be
combined perfectly with the object-oriented approach.
Its task is to build the application quickly and incrementally implement the user
requirements design through tools such as visual basic, power builder, etc.
Incremental Testing
Software development and all of its activities including testing are an iterative
process. Therefore, it can be a costly affair if we wait to test a product only after
its complete development. Here incremental testing comes into picture wherein
the product is tested during various stages of its development.
Agile Methods
Agile is an approach to software development that seeks the continuous delivery
of working software created in rapid iterations.
In practical terms, agile software development methodologies are all about
delivering small pieces of working software quickly to improve customer
satisfaction. These methodologies use adaptive approaches and teamwork to
focus on continuous improvement. Usually, agile software development consists
of small, self-organizing teams of software developers and business
representatives regularly meeting in-person throughout the software
development life cycle. Agile favors a lightweight approach to software
documentation and embraces rather than resists changes at any stage of the life
cycle.

What is the Agile Manifesto?


Agile is an iterative and flexible approach to software development that
emphasizes collaboration, adaptability, and customer satisfaction.
The Agile Manifesto outlines 12 principles that guide Agile practices:
1. Customer Satisfaction through Early and Continuous Software Delivery:
- Agile teams focus on delivering valuable software to customers as early and
frequently as possible to ensure their satisfaction.

2. Welcome Changing Requirements, Even Late in Development:


- Agile processes are designed to be adaptable, allowing for changes in
requirements, even late in the development cycle, to better serve the customer's
needs.

3. Deliver Working Software Frequently:


- Agile teams aim to deliver functional software in short, iterative cycles,
typically in weeks rather than months, to provide early and continuous value.

4. Collaboration between Business and Developers:


- Agile promotes close collaboration between business stakeholders and
development teams to ensure a shared understanding of requirements and
priorities.

5. Build Projects around Motivated Individuals:


- Agile principles emphasize the importance of motivated and empowered
individuals, trusting them to get the job done.

6. Face-to-Face Communication:
- Agile encourages in-person or direct communication as it is often more
effective in conveying information and resolving issues.

7. Working Software as the Primary Measure of Progress:


- Agile prioritizes working software as the main indicator of project progress,
over comprehensive documentation or other metrics.

8. Sustainable Development Pace:


- Agile teams work at a sustainable pace, avoiding excessive overtime to
maintain productivity and morale.

9. Technical Excellence and Good Design:


- Agile promotes the use of best practices, good design, and technical excellence
to ensure the quality and maintainability of the software.
10. Simplicity:
- Agile teams value simplicity in design and implementation, favoring
straightforward solutions over unnecessary complexity.

11. Self-Organizing Teams:


- Agile teams are self-organizing, with members collectively responsible for
planning and executing tasks.

12. Regular Reflection and Adjustment:


- Agile teams regularly inspect and adapt their processes and performance to
improve continuously.
Agile methods
These are a collection of software development approaches that prioritize
flexibility, collaboration, and customer-centricity. Here are explanations of some of
the most popular Agile methods:

1. Scrum:
- Description: Scrum is one of the most widely used Agile frameworks. It divides
the development process into short, fixed-length iterations called "sprints,"
typically lasting 2-4 weeks. Scrum teams follow a defined set of roles, including
Product Owner, Scrum Master, and Development Team. Daily stand-up meetings,
sprint planning, and sprint reviews are key Scrum ceremonies.
- Key Features: Sprint planning, daily stand-ups, sprint reviews, and
retrospectives. Roles include Product Owner, Scrum Master, and Development
Team.

2. Kanban:
- Description: Kanban is a visual workflow management system that emphasizes
a continuous flow of work items, with no predefined timeboxes like sprints in
Scrum. Work items move through a Kanban board, progressing from "to-do" to "in
progress" to "done." It provides real-time visibility into work, helping teams
manage and optimize their processes.
- Key Features: Visual boards, work-in-progress (WIP) limits, and continuous flow
of work.

3. Extreme Programming (XP):


- Description: XP is an Agile methodology focused on improving software quality
and responsiveness to changing customer requirements. It incorporates practices
like test-driven development (TDD), continuous integration, pair programming,
and frequent releases. XP values simplicity, feedback, and close collaboration with
customers.
- Key Features: Test-driven development (TDD), pair programming, continuous
integration, frequent releases, and on-site customer involvement.

4. Lean Software Development:


- Description: Lean principles, adapted from manufacturing, are applied to
software development in this method. It aims to eliminate waste, optimize flow,
and deliver value to customers quickly. Lean focuses on customer value,
eliminating non-value-added activities, and reducing lead times.
- Key Features: Reducing waste, optimizing flow, and customer-centric
development.

5. Crystal:
- Description: Crystal is a family of Agile methodologies that vary in terms of
complexity and practices based on the project's specific needs. Crystal
methodologies adapt to the team's size, criticality, and experience. They
emphasize communication, collaboration, and the importance of people over
processes.

6. Dynamic Systems Development Method (DSDM):


- Description: DSDM is an Agile method that focuses on delivering projects on
time and within budget. It provides a framework for project management, and its
principles include collaboration, frequent delivery, and embracing change. DSDM
is particularly popular in the UK and Europe.

7. Feature-Driven Development (FDD):


- Description: FDD is an Agile method that is particularly suitable for larger
software development projects. It divides the project into manageable "features,"
each with its own development cycle. FDD emphasizes design and domain
modeling.

8. Adaptive Software Development (ASD):


- Description: ASD is an Agile method that focuses on constant adaptation to
changing requirements and conditions. It incorporates a risk-driven development
approach, adaptive planning, and continuous learning.

9. Rational Unified Process (RUP):


- Description: RUP is an iterative software development process framework that
is adaptable to various project types. It provides a disciplined approach to
software engineering, emphasizing best practices, use cases, and iterative
development.

10. Scaled Agile Framework (SAFe):


- Description: SAFe is an Agile framework designed to scale Agile practices to
large organizations. It provides a set of roles, responsibilities, and ceremonies that
help coordinate and align work across multiple Agile teams.

Each of these Agile methods has its own unique characteristics, benefits, and
areas of applicability. The choice of which method to use depends on the specific
project, organization, and team dynamics. Many organizations also adapt and
combine elements from different Agile methods to create a customized approach
that suits their needs.

PROCESS MODELS ARE METHODOLOGIES OR FRAMEWORKS USED IN SOFTWARE


ENGINEERING TO STRUCTURE THE SOFTWARE DEVELOPMENT PROCESS. They
provide a set of guidelines and best practices for designing, building, and
maintaining software systems. Here's an evaluation and detailed explanation of
some of the most common software development process models:

1. Waterfall Model:
- Description: The Waterfall model is a linear, sequential approach where each
phase must be completed before the next one begins. The phases typically include
requirements, design, implementation, testing, deployment, and maintenance.
- Evaluation:
- Advantages:
- Clear and well-defined phases.
- Easy to understand and manage.
- Well-suited for small projects with stable requirements.
- Disadvantages:
- Inflexible to changing requirements.
- High risk of project failure if requirements are not well-defined.
- Long delivery times, with no working software until the end.

2. Iterative Model:
- Description: The Iterative model breaks the project into small, manageable
iterations. Each iteration goes through the phases of the Waterfall model, but the
process is repeated with feedback from each iteration.
- Evaluation:
- Advantages:
- Provides the flexibility to adapt to changing requirements.
- Delivers a working product incrementally.
- Early identification of issues.
- Disadvantages:
- Continuous iterations can lead to scope creep.
- Requires good project management and communication.

3. Spiral Model:
- Description: The Spiral model combines iterative development with elements
of the Waterfall model. It emphasizes risk assessment and management
throughout the project.
- Evaluation:
- Advantages
- Strong focus on risk management.
- Allows for progressive development and prototyping.
- Well-suited for large, complex projects.
- Disadvantages:
- Requires a high level of expertise to manage.
- Can be time-consuming and expensive due to its comprehensive risk
assessment.

4. V-Model (Validation and Verification Model):


- Description: The V-Model is an extension of the Waterfall model that
emphasizes testing. For each development phase, there is a corresponding testing
phase, forming a "V" shape.
- Evaluation:
- Advantages:
- Strong focus on testing and validation.
- Well-suited for safety-critical systems.
- Enhances the quality of the final product.
- Disadvantages:
- Inflexible to changes in requirements.
- Can lead to late detection of issues.

5. Agile Model (e.g., Scrum, Kanban, XP):


- Description: Agile methodologies are iterative and flexible, emphasizing
collaboration, customer feedback, and incremental development. They promote
delivering small, working increments in short time frames.
- Evaluation:
- Advantages:
- Highly adaptable to changing requirements.
- Promotes customer satisfaction and collaboration.
- Delivers working software quickly.
- Disadvantages:
- May require a cultural shift within organizations.
- Can be challenging for large, complex projects.

6. Big Bang Model:


- Description: The Big Bang model is an informal and unstructured approach
where the development process begins with little planning. It is often used for
small projects, prototypes, or experimental software.
- Evaluation:
- Advantages:
- Suitable for small, experimental projects.
- Minimal up-front planning.
- Flexibility to explore new ideas.
- Disadvantages:
- High risk of project failure due to lack of structure.
- Difficult to manage for larger, mission-critical projects.

7. Rapid Application Development (RAD):


- Description: RAD is an incremental software development process that puts a
premium on rapid prototyping and speedy feedback from end-users.
- Evaluation:
- Advantages:
- Rapid development and delivery.
- Strong customer involvement and feedback.
- Well-suited for small to medium-sized projects.
- Disadvantages:
- Not ideal for projects with strict security or regulatory requirements.
- Requires skilled developers and constant customer involvement.

8. Unified Process (UP) / Rational Unified Process (RUP):


- Description: UP is an iterative and incremental development framework. RUP is
a specific implementation of UP with a strong focus on architecture-centric
development and use case-driven development.
- Evaluation:
- Advantages:
- Strong emphasis on architecture and design.
- Provides guidelines for project management.
- Well-suited for complex, long-term projects.
- Disadvantages:
- Can be resource-intensive and complex for small projects.
- May require extensive training.

9. DevOps:
- Description: DevOps is a culture and set of practices that emphasize
collaboration and communication between development and operations teams. It
includes automation, continuous integration, and continuous delivery to
streamline software development and deployment.
- Evaluation:
- Advantages:
- Accelerates software delivery.
- Enhances collaboration and communication.
- Improves deployment and operational efficiency.
- Disadvantages:
- Cultural changes may be challenging to implement.
- Requires significant automation and infrastructure changes.

10. Lean Software Development:


- Description: Lean software development is inspired by Lean manufacturing
principles. It focuses on minimizing waste, optimizing the whole process,
delivering value, and empowering teams.
- Evaluation:
- Advantages:
- Eliminates waste and inefficiencies.
- Emphasizes value delivery to the customer.
- Promotes a culture of continuous improvement.
- Disadvantages:
- May require cultural changes within organizations.
- Not a prescriptive methodology, which may lead to ambiguity.

Each of these process models has its strengths and weaknesses, making them
more suitable for different types of projects and organizations. The choice of a
process model depends on factors such as project size, complexity, requirements,
and the organization's culture and priorities. It's also common for organizations to
combine elements from multiple process models to create a hybrid approach
tailored to their specific needs.

You might also like