During recent years, the emphasis of problem solving strategies in software engineering has
shifted dramatically from pre-defined processes (or long-term contractual plans) to dynamic adaptive models (or pay-as-you-go
methodologies) . While both approaches still rely on process models , adaptive approaches adjust the process continuously
to manage change as opposed to static problem solving prescriptions which are not less likely to face tremendous chaos when encountering evolving challenges , uncertainty or equivocality in today’s real world projects .
Effective management of change requires not only construction of adjustable models but also building them at high speed as well as efficient execution. Managing change and risk
control are two sides of one coin since unpredictable yet almost inevitable change is today the primary cause of software projects risks .
Consequently, a broad array of revolutionary software
engineering strategies have emerged under the agile software development umbrella over the last decade . The common goal
in agile is to boast software development productivity in more adaptive , iterative and self-organized environments .
The key agile strategies include :
- XP - eXtreme
Programming
- Scrum
- DSDM -
Dynamic Systems Development Method
- FDD - Feature
Driven Development
- Lean Software
Development
- Crystal (Cockburn's
Crystal Family)
- ASD - Adaptive
Software Development
- TDD - Test-Driven
Design
- XBreed
- AD - Agile Data Modeling / Agile Database Techniques
- AM - Agile
Modeling
- Agile-related
approaches such as open source development and rational unified process models.
Agile strategies
are generally characterized by :
1-
Adaptability to evolving risks and business requirements
2-
Evolutionary development through a series of prototypes or deliverables
3-
Self-organization and high degree of decentralization
The above three
characteristics are , in fact , the key strategies within which productivity and high speed delivery of results are expected to be achieved in agile methodologies .
Many consider reducing
the cycle time of business operations as a key measure for productivity .Time
reduction became the driving
force in most software engineering strategies which evolved since early 80’s specially after the integration
of rapid application development methods , tools , configurations and techniques . Rapid application development was approached
through different ways in the software engineering history . These ways or main
streams in RAD can be summarized as follows :
1- Reducing cycle time by cutting unnecessary tasks (process reengineering )
2- Reducing cycle time by synchronizing tasks ( concurrent
development )
3- Reducing cycle time by automating tasks ( generated RAD
)
4- Reducing cycle time by reusing code and project components (Object oriented
strategies )
5- Reducing cycle time by visualization and backtracking
( evolutionary prototyping )
6- Reducing cycle time by computer-based logistics management
( collaboration technologies )
7- Reducing cycle time by effective management of human
resources
8- Other streams such as avoiding single-point task failures
, product lines , architected RAD , etc.
RAD forms
1- Limited –Scale RAD
1.1 - D-RAD (Dump)
1.2 - G-RAD (Generated) / RAD through
technology (CASE &4 GL tools)
1.3 - C-RAD (Composite)
2- Full -Scale -RAD
2.1- RAD through people (Agile software development )
1-
XP - eXtreme
Programming
2-
Scrum
3-
DSDM -
Dynamic Systems Development Method
4-
FDD - Feature
Driven Development
5-
Lean Software
Development
6-
Crystal (Cockburn's
Crystal Family)
7-
ASD - Adaptive
Software Development
8-
TDD - Test-Driven
Design
9-
XBreed
10- AD - Agile Data Modeling / Agile Database Techniques
11- AM - Agile
Modeling
12- Agile-related
approaches
12.1- Open Source development
12.2- RUP (Rational Unified Process
model)
2.2- RAD through task elimination (Business Process Engineering)
2.3- RAD through reducing time per task
2.3.1- Collaboration Technologies (distributed teams)
2.3.1.1- Groupware
2.3.2.2- Wide area workflow management tools
2.3.2- Parallel (concurrent) development
2.4- RAD through avoiding single-point task failures
2.5- RAD through reduction of backtracking and visualization (prototyping and risk management)
2.6- RAD through streamlining activity networks
2.7- RAD through effective management of human resources (dynamic modeling)
2.8- RAD through acquiring better people & transition to a learning
organization
2.9- RAD through automatic transformation between phases
2.9.1- Math and statistics utilization (Cleanroom software engineering)
2.9.2- Concept to code strategies
2.10– RAD through reusability
2.10.1
- Object-oriented software development
2.10.2
- Business Objects and OOBPR
2.10.3
- COTS
2.11– RAD through product line models
2.11.1
-Aspect-Oriented
2.11.2
-Feature–oriented
2.12- Architected RAD (from IBM)
2.13- RAD and the personal software process (PSP)
2.14- RAD and the team software process (TSP)
1-
The problem solving process
2-
The elements of the problem solving process in software engineering
3-
The ways problem solving was approached in software engineering
4-
A taxonomy of software engineering problem solving strategies
5-
Measures of problem solving effectiveness in software engineering
6-
The critical role of the development team in the problem solving process
7-
How can we assess team performance
?
8-
How was team performance approached in software engineering ?
9-
The reasons why RAD methodologies originally emerged
10- The
various ways RAD methodologies approach productivity
11- The
needs for agile methodologies as a special version of RAD
12- The
elements of the agile methodologies that makes them unique from other RAD methodologies
13- The
elements of agile methodologies that makes them similar or that are shared between them
14- The
elements that distinguish SCRUM
15- The
elements that distinguish FDD
16- The
elements shared between SCRUM and FDD