In: Computer Science
What are the most effective problem-solving techniques available to software engineers today, and how do they facilitate the software engineering process? Please provide examples and explain who the main stakeholders are and what their responsibilities in the software engineering process are.
The most effective problem-solving techniques available to software engineers today.
1.Mindspin
Brainstorming is part of the bread and butter of the problem
solving process and all problem solving strategies benefit from
getting ideas out and challenging a team to generate solutions
quickly.
With Mindspin, participants are encouraged not only to generate ideas but to do so under time constraints and by slamming down cards and passing them on. By doing multiple rounds, your team can begin with a free generation of possible solutions before moving on to developing those solutions and encouraging further ideation.
This is one of our favorite problem solving activities and can be great for keeping the energy up throughout the workshop. Remember the importance of helping people become engaged in the process – energizing problem solving games like Mindspin can help ensure your team stays engaged and happy, even when the problems they’re coming together to solve are complex.
2. Improved Solutions
The goal of all problem solving strategies is to come up with
solutions to the problem at hand. After a team has successfully
identified a problem and come up with a few solutions, it can be
tempting to call the work of the problem solving process complete.
That said, the first solution is not necessarily the best, and by
including a further review and reflection activity into your
problem solving model, you can ensure your group reaches the best
possible result.
One of a number of problem solving games from Thiagi Group, Improved Solutions helps you go the extra mile and develop suggested solutions with close consideration and peer review. By supporting the discussion of several problems at once and by shifting team roles throughout, this problem solving technique is a dynamic way of finding the best solution.
3.Four Step Sketch
Creative thinking and visual ideation does not need to be confined
to the opening stages of your problem solving strategies. Problem
solving games that include sketching and prototyping on paper can
be effective at the solution finding and development stage of the
process, and can be great for keeping a team engaged.
By going from simple notes to a crazy 8s round that involves rapidly sketching 8 variations on their ideas before then producing a final solution sketch, the group is able to iterate quickly and visually. Problem solving techniques like Four Step Sketch are great if you have a group of different thinkers and want to change things up from more textual or discussion-based problem solving activities.
4.15% Solutions
Some problems are simpler than others and with the right problem
solving activities, you can empower people to take immediate
actions that can help create organizational change.
Part of the liberating structures toolkit, 15% solutions is a problem solving technique that focuses on finding and implementing solutions quickly. A process of iterating and making small changes quickly can help generate momentum and appetite for solving large problems.
Problem solving strategies can live and die on whether people are onboard. Getting some quick-wins is a great way of getting people behind the process.
It can be extremely empowering for a team to realize that problem solving techniques can be deployed quickly and easily and delineate between things they can positively impact and those things they cannot change.
5.How-Now-Wow Matrix
The problem solving process is often creative, as complex problems
usually require a change of thinking and creative response in order
to find the best solutions. While it’s common for the first stages
of a problem solving model to encourage creative thinking, groups
can often gravitate to familiar solutions when it comes to the end
of the process.
When selecting solutions, you don’t want to lose the creative energy of the problem identification, problem analysis or brainstorming stages of the process. The How-Now-Wow Matrix from Gamestorming is a great problem solving activity that enables a group to stay creative and think out of the box when it comes to selecting the right solution for a given problem.
Problem solving techniques that encourage creative thinking and the ideation and selection of new solutions can be the most effective in organizational change. Give the How-Now-Wow Matrix a go, and not just for how pleasant it is to say out loud.
6.Impact and Effort Matrix
All problem solving techniques hope to not only find solutions to a
given problem or challenge but to find the best solution. When it
comes to finding a solution as part of a problem solving process,
groups are invited to put on their decision making hats and really
think about how a proposed idea would work in practice.
The Impact and Effort Matrix is one of the problem solving techniques that fall into this camp, empowering participants to first generate ideas and then categorize them into a 2×2 matrix based on impact and effort. Activities that invite critical thinking while remaining simple are invaluable in a successful problem solving model – use the Impact and Effort Matrix to move from ideation and towards evaluating potential solutions before then committing to them.
7.Dotmocracy
If you’ve followed each of the problem solving steps with your
group successfully, you should move towards the end of your problem
solving process with heaps of possible solutions developed with a
specific problem in mind. But how do you help a group go from
ideation to putting a solution into action?
Dotmocracy – or Dot Voting -is a tried and tested method of helping a team in the problem solving process make decisions and put actions in place with a degree of oversight and consensus.
One of the problem solving techniques that should be in every facilitator’s toolbox, Dot Voting is fast and effective and can help identify the most popular and best solutions and help bring a group to a decision effectively.
Software Engineering Processes
A software engineering process is the model chosen for managing the creation of software from initial customer inception to the release of the finished product. The chosen process usually involves techniques such as • Analysis, • Design, • Coding, • Testing and • Maintenance Several different process models exist and vary mainly in the frequency, application and implementation of the above techniques, for example, different process models use different analysis techniques, other models attempt to implement the solution to a problem in one big-bang approach, while others adopt an iterative approach whereby successively larger and more complete versions of the software are built with each iteration of the process model.
The Software Engineering Process - The Software Life
Cycle
The illustration below highlights the various phases of what is
probably the oldest software development process in existence,
namely the classic life-cycle paradigm,sometimes called the
"waterfall model,". This paradigm implies a systematic,sequential
approach (rarely achieved in practice) to software development that
begins at the system level and progresses through analysis, design,
coding, testing and maintenance.
Modelled after the conventional engineering cycle, the
life-cycle paradigm
encompasses the above activities. Let’s take a look at each of
these phases in turn
and explain what is involved.
System Engineering and Analysis.
Because software almost always forms part of a much larger system,
work begins by
establishing requirements for all components of the system,
identifying not only the
role played by the software but, more importantly, its interface
and interaction with
the outside world.
This ‘system view’ is essential when software must interface with
other elements
such as hardware, people, databases and computers outside of, and
beyond the
control of the system designer. In essence Systems engineering
involves exploring
some of the following issues:
1. Where does the software solution fit into the overall picture?
The software
being proposed may be one small cog in a very large wheel. Maybe
the
software is a calculating employee pay or tax, or perhaps has to
co-ordinate
the activities of several distributed systems controlling a
production/manufacturing plant or warehouse distribution system.
Until the
overall picture is clear, no analysis of the software can
begin.
2. What does the system do? Is it required to control or monitor
some process or
activity or is it simply performing analysis of data?
3. What environment will the system be placed in?
• Hostile, such as an elevator subject to vibration and dust, or
friendly,
such as a cosy air-conditioned office?
• Will the system be ‘real time’, ‘on-line’, ‘batch’, ‘safety
critical’, ‘fault tolerant?’
• Is it required to be mobile or does it require an electricity
main outlet?
• Is it embedded?
• Does it require a man-machine interface?
• Who or what does it interact with
All of these factors could severely influence, restrict and or
dictate the form
of the solution.
4. What inputs and outputs are required/produced and what is the
form of that
data: Paper, Database, Disk file, Graphics, Network, Analogue to
digital
converter outputs?
In answering the above question, a list of external devices is
uncovered and can be
explored further, e.g. what size of paper, what resolution
graphics, what format is the
data accepted/displayed, what capacity of disk, what resolution of
Analogue to
digital converter etc.
Design and Coding
Once the analysis of the system has been completed, design or
development can
begin. This is an attempt to translate a set of requirements and
program/data models
that were laid down in the “requirements document” into a well
designed and
engineering software solution. Design is best summarised by the
following sequence
of steps
• The data flow/UML diagrams that represent the system model are
converted
into a suitable hierarchical, modular program and data
structure/architecture.
• Each program module is converted into an appropriate cohesive
function
subroutine or class, that is designed to perform a single
well-defined task.
• Design then focuses on the implementation of each module/class.
The
sometimes loose and vague, perhaps English like, description of
the
modules role/function within the program is expanded and translated
into
an algorithm, which describes in detail exactly what, when and how
the
module/class carries out its task. The interfaces and its
interaction
with other modules/objects are also considered and assessed for
good design
(see coupling and cohesion in future lectures).
• The modules algorithm can then be translated into a flowchart,
which is a
step-by-step graphical representation of the actions carried out by
the
module expressed in terms of sequence, selection and
repetition.
• The flowchart can then be translated into Pseudocode, which
conveys the
same information as a flowchart, but presents it a way that is
more
amenable to translation into program code.
• Finally, the Pseudocode for each module is translated into a
chosen
programming language and the various modules entered,
compiled,
integrated into a system ready for testing.
At each stage, the process is documented so that if changes are
required in the future,
the design pertinent to each stage is available for consultation
and discussion. The
end result of design and coding is most definitely not just the
program listing. It
includes the architecture data structures, algorithms, flowcharts,
Pseudocode and all
program source code listings, as shown below.
A structured illustration of the design process is shown above.
The results of
analysis, that is, the specification and model, feed into the
design stage
where an attempt is made to turn the ‘model’ the system into a data
structure and program,
architecture which can be translated eventually into code.
Software Testing and Debugging
Once the constituent software components/modules have been written,
testing and
debugging can begin. Testing involves the following techniques
(amongst others)
• Verification and Validation. That is, checking that the software
meets the
agreed specification and checking that the software is correct in
its operation.
• Black and white box testing techniques. That is, testing the
insides of the
modules for correct operation and testing the interfaces to the
module.
• Integration Testing: Testing that the modules all work
together.
• Acceptance Testing: Letting the customer test the product.
• Debugging: The ‘art’ of identifying the cause of failure in a
piece of software
and correcting it.
Software Maintenance
Software maintenance reapplies each of the preceding life cycle
steps to an existing
program rather than a new one in order to correct or add new
functionality.
Examples:
Spiral development
• Create a base
system that has the
overall structure of
the final product
with dummy stubs
for missing components.
• Create a
comprehensive set of
test cases for all
completed
components.
• Use a succession
of sprints to
develop new or
improved components,
each with a set
of test cases.
Add these
components to the
source
code library.
• On a daily
cycle, build the
enBre system from
the source code
library
and run the
complete set of
test cases.
With spiral development
there is always a
fully tested system,
but the
funcBonality is incomplete.
Example
Developing a new
version of an
operaBng system.
Type of Stakeholders:
1. Internal Stakeholder:
An internal stakeholder is a person, group or a company that is
directly involved in the project.
For example,
Project Manager:
Responsible for managing the whole project. Project Manager is
generally never involved in producing the end product but he/she
controls, monitors and manages the activities involved in the
production.
Project Team:
Performs the actual work of the project under the Project Manager
inluding development, testing, etc.
Company:
Organisation who has taken up the project and whose employees are
directly involved in the development of the project.
Funders:
Provides funds and resources for the successful completion of the
project.
2. External Stakeholder:
An external stakeholder is the one who is linked indirectly to the
project but has significant contribution in the successful
completion of the project.
For example,
Customer:
Specifies the requirements of the project and helps in the
elicitation process of the requirement gathering phase. Customer is
the one for whom the project is being developed.
Supplier:
Supplies essential services and equipment for the project.
Government:
Makes policies which helps in better working of the
organisation.