Assignment 1 Shahrukh
Assignment 1 Shahrukh
The goal of software engineering is, of course, to design and develop better software. However,
what exactly does "better software" mean? In order to answer this question, this lesson
introduces some common software quality characteristics. Six of the most important quality
characteristics are maintainability, correctness, reusability, reliability, portability, and efficiency.
Maintainability is "the ease with which changes can be made to satisfy new requirements
or to correct deficiencies". Well-designed software should be flexible enough to accommodate
future changes that will be needed as new requirements come to light. Since maintenance
accounts for nearly 70% of the cost of the software life cycle, the importance of this quality
characteristic cannot be overemphasized. Quite often the programmer responsible for writing a
section of code is not the one who must maintain it. For this reason, the quality of the software
documentation significantly affects the maintainability of the software product.
Correctness is "the degree with which software adheres to its specified requirements". At the
start of the software life cycle, the requirements for the software are determined and formalized
in the requirements specification document. Well-designed software should meet all the stated
requirements. While it might seem obvious that software should be correct, the reality is that this
characteristic is one of the hardest to assess. Because of the tremendous complexity of software
products, it is impossible to perform exhaustive execution-based testing to ensure that no errors
will occur when the software is run. Also, it is important to remember that some products of the
software life cycle such as the design specification cannot be "executed" for testing. Instead,
these products must be tested with various other techniques such as formal proofs, inspections,
and walkthroughs.
Reusability is "the ease with which software can be reused in developing other software". By
reusing existing software, developers can create more complex software in a shorter amount of
time. Reuse is already a common technique employed in other engineering disciplines. For
example, when a house is constructed, the trusses which support the roof are typically purchased
preassembled. Unless a special design is needed, the architect will not bother to design a new
truss for the house. Instead, he or she will simply reuse an existing design that has proven itself
to be reliable. In much the same way, software can be designed to accommodate reuse in many
situations. A simple example of software reuse could be the development of an efficient sorting
routine that can be incorporated in many future applications.
Portability is "the ease with which software can be used on computer configurations other
than its current one". Porting software to other computer configurations is important for several
reasons. First, "good software products can have a life of 15 years or more, whereas hardware is
frequently changed at least every 4 or 5 years. Thus, good software can be implemented, over its
lifetime, on three or more different hardware configurations". Second, porting software to a new
computer configuration may be less expensive than developing analogous software from scratch.
Third, the sales of "shrink-wrapped software" can be increased because a greater market for the
software is available.
Efficiency is "the degree with which software fulfills its purpose without waste of resources".
Efficiency is really a multifaceted quality characteristic and must be assessed with respect to a
particular resource such as execution time or storage space. One measure of efficiency is the
speed of a program's execution. Another measure is the amount of storage space the program
requires for execution. Often these two measures are inversely related, that is, increasing the
execution efficiency causes a decrease in the space efficiency. This relationship is known as the
space-time tradeoff. When it is not possible to design a software product with efficiency in every
aspect, the most important resources of the software are given priority.
QUALITIES OF A GOOD DEVELOPER
1. POSITIVE ATTITUDE
A great programmer cares about your product. They are positive, willing to go the distance to get
the job done and bring their best everyday. Although it’s important not to exhaust a developer
with frequent urgent deadlines, sometimes this is unavoidable. When you need to bring a product
to market or need to ship a certain feature out by the deadline, the great programmer will step up
and get the product released whenever possible. Because they care. A great developer doesn’t let
their ego get in the way of taking feedback. A good way to instil a positive attitude is to give
them interesting projects to work on, give them a sense of ownership and praise them for good
work. Start-ups can give out stock options, pay employees for working overtime, provide
compensated paid leave or find other perks that ensure great programmers are retained.