CS603 Handouts
CS603 Handouts
CS603 Handouts
Topic: 1
Software Application
Software application development process consist on different phases mentioned in the below figure.
Planning, analysis, design, deployment and implementation, testing and maintenance are steps (phases)
that involved in software development.
Topic: 2
Customer Requirements
Customer requirements mean what customers or users required from the system. How the system
behaves, what are the tasks need to perform by the system, how users will interact with the
system, and how the system will present the output. The customer is a significant stakeholder
that plays a vital role in the correct development, successful implementation, and system
utilization.
Domain Knowledge
Domain knowledge means the information and having expertise about the particular environment
and industry in which the developed system will operate. For example, knowledge of the
pharmaceutical industry and telecom industry.
System Specification
A system specification can be a written document containing a detailed description of all aspects
of the system to be built before the project commences.
Topic 3:
Topic 4:
Types of Complexities
Essential Complexities
Accidental complexities
Essential Complexities
You will understand Essential Complexities after reading below different descriptions of
essential complexities.
Essential Complexity is just the nature of the beast you are trying to tame.
Essential Complexity represents the difficulty inherent in any problem.
Essential Complexity is Complexity inherent to the problem. It is Complexity related to
the problem and cannot remove.
Essential Complexity is how hard something is to do, regardless of how experienced you
are, what tools you use or what new and flashy architecture pattern you used to solve the
problem. Essential Complexity is Complexity inherent to the problem.
Essential Complexity is the entanglement/combination of components/ideas in software
necessary for solving the problem at hand. It cannot avoid.
Example 1
If users need a program to do 30 things, then those 30 things are essential; you cannot simply
take out a few of them to make the software less complex. Whenever you are solving a problem,
there are just some areas of complexity that cannot be whittled down.
Example 2
Coordinating a nation’s air traffic is an inherently complex problem. Every plane’s exact position
(including altitude), speed, direction, and destination must be tracked in real-time to prevent mid-
air and runway collisions. The flight schedules of aircraft must be managed to avoid airport
congestion in a continuously changing environment—a severe change in weather throws the
entire schedule out of whack.
Accidental Complexities
You will understand Essential Complexities after reading below different descriptions of
essential complexities.
Accidental Complexity is Complexity not related to the problem. Ben Mosely and Peter
Marks describe it as a “mishap.” It is Complexity from the fault of the developer and
happens to be there.
Accidental Complexity is the entanglement of components/ideas that is not necessary for
solving the problem. This Complexity is accidental because someone probably didn’t
think hard enough before unnecessarily tying things together. As a result, the software is
harder to understand than it should be.
Accidental Complexity grows from the things we feel we must build to mitigate essential
Complexity.
Example 1
Accidental complexity refers to challenges that developers unintentionally make for themselves
due to trying to solve a problem. (Fortunately, this kind of complexity can also be fixed or
improved by developers.)
Example 2
Developers bring complexity while writing the program. This type of complexity is called
accidental complexity.
Topic 6
What is abstraction?
An abstraction is a simplified view of an entity, which omits unimportant details. The software designer
ignores the minor details attached to the problem and focused on the high-level details.
For example, a software designer designs the system's overall structure instead of working on the minor
details of the application, such as the color of user interface forms and font styles of text.
Topic 7
What is Art?
Art is a diverse range of human activities involving creative imagination to express technical proficiency,
beauty, emotional power, or conceptual ideas.
What is Science?
Science is made up of fundamental principles, which can be taught as truth.
A branch of knowledge or study dealing with a body of facts or truths systematically arranged
and showing the operation of general laws.
Topic 10
For example: ‘ships are now built in modules rather than built in a whole from the base up’.
In above figure, you can imagine that four individual modules have been solved individually then
combined all modules into one combined solution.
Abstraction
Transitioning your thought process from program design to software design involves the use of
abstraction. When designing software, you think of ways to abstract away certain details. This is typically
done by grouping certain details together based on shared characteristics or purposes. These shared
characteristics or purposes are then a way to generalize your design. For example, a programmer may
think about a soccer ball, tennis ball, baseball, and softball as distinct types of items. A software designer
would generalize these items by classifying all of them as a type of ball that share certain characteristics
(e.g., they are all spheres with a center point and radius) and purposes (e.g., they are all struck by an
object). (Reference Book: Guide to Efficient Software Design by David P. Voorhees)
Abstraction Hand-on-Exercise
You are required to explain and discuss below image moderate discussion board.
Topic 12
No matter how good the design is, in terms of proportions, efficient use of materials and ease of
construction and modification, our ideas about its quality will still be very largely influenced by the actual
construction. If it is badly assembled, then, regardless of how good its design may be, we will not
consider it to be of good quality. Equally, if the design is poor, no amount of good craftsmanship applied
to its construction will be able to disguise its fundamental failings. (The door may be well made and may
close well, but if it is positioned so that we graze our knuckles each time it is opened, then we will still
find it inconvenient to use.)
Exercise: Analyze the below image regarding code reusability and describe
that what comes to your mind