Unit 1 (Part 1) Software Engineer
Unit 1 (Part 1) Software Engineer
Software is more than just a program code. A program is an executable code, which serves some
computational purpose. Software is considered to be a collection of executable programming code,
associated libraries and documentations. Software, when made for a specific requirement is called
software product.
Engineering on the other hand, is all about developing products, using well-defined, scientific
principles and methods.
Engineering is the branch of science and technology concerned with the design, building, and use
of engines, machines, and structures. It is the application of science, tools and methods to find cost
effective solution to simple and complex problems.
Characteristics of software
Functionality:
It refers to the degree of performance of the software against its intended purpose.
Required functions are:
Reliability:
A set of attributes that bears on the capability of software to maintain its level of performance
under the given condition for a stated period of time.
Required functions are:
Efficiency:
It refers to the ability of the software to use system resources in the most effective and efficient
manner. The software should make effective use of storage space and executive command as per
desired timing requirements.
Required functions are:
Usability:
It refers to the extent to which the software can be used with ease. the amount of effort or time
required to learn how to use the software.
Required functions are:
Maintainability:
It refers to the ease with which the modifications can be made in a software system to extend its
functionality, improve its performance, or correct errors.
Required functions are:
Portability:
A set of attributes that bears on the ability of software to be transferred from one environment
to another, without or minimum changes.
Required functions are:
More focus on Hardware:- In early days of computing the primary concern was that building
or acquiring the hardware. If the software did not work, people thought, it would be easy enough
to change it until it did work. In that case, why make the effort to plan?
Software cost consideration: The cost of software amounted to such a small fraction of the
cost of the hardware that no one considered it very important to manage it development. People
time was assumde to save machine time. Making the people process efficient received little
priority.
Meeting people expectation:- when computing matured, programs become more Complex
and larger. A team effort is required for program to be routinely specified, written, operated,
and maintained so people's expectations would be fulfilled.
Exceeded cost: As program become large and complex and the time required to write program
and their costs began to exceed to all estimates.
Time development: Programmer started to take weeks, months or years longer than expected
to complete. The systems turned over the client frequently did not work correctly because the
money or time had run out before the program could be made to work as originally intended.
Us military, several million dollar project was abandoned due to it could never be made
to work properly.
Quality concern: As computers and their programs were used for more vital tasks like
monitoring life support equipment, program quality also become new concern.
Change- expensive: Making a change within a complex program turned out to be very
expensive. It was quite easier to throw a program then to expect from program to do thing
different slightly.
Fast and Rapid change in hardware and software:As tubes were replaced by transistors->
integrated circuits. The cost of hardware which had to be increased was getting low. The time
and cost to develop the software were no longer so small, compared to hardware, that they could
be ignored.
Wrong analysis of client requirements:Programmers were often thought they had understood
the client requirement. Once the program has been written, the client begin to express distract
dissatisfaction.
Software Crisis is a term used in computer science for the difficulty of writing useful
and efficient computer programs in the required time .software crisis was due to using
same workforce, same methods, same tools even though rapidly increasing in software
demand, complexity of software and software challenges. With increase in the
complexity of software, many software problems arise because existing methods were
insufficient.
If we will use same workforce, same methods and same tools after fast increasing in
software demand, software complexity and software challenges, then there arise some
problems like software budget problem, software efficiency problem, software quality
problem, software managing and delivering problem etc. This condition is called
software crisis.
Software myths
All people who come into contact with software may suffer from various myths associated with
developing and using software. Here are a few common ones.
Management myths
Our company has books full of standards, procedures, protocol, and so on, related to
programming software. This provides everything that our programmers and managers need
to know. While company standards may exist, one must ask if the standards are complete, reflect
modern software practice, and are — importantly — actually used.
If we fall behind schedule in developing software, we can just put more people on it. If
software is late, adding more people will merely make the problem worse. This is because the
people already working on the project now need to spend time educating the newcomers, and are
thus taken away from their work. The newcomers are also far less productive than the existing
software engineers, and so the work put into training them to work on the software does not
immediately meet with an appropriate reduction in work.
Changing requirements can be easily taken care of because software is so flexible. This is not
true: the longer that development on the software has proceeded for, the more work is required to
incorporate any changes to the software requirements.
Programmer myths
Once the software is written, and works, our job is done. A large portion of software
engineering occurs after the customer has the software, since bugs will be discovered, missing
requirements uncovered, and so on.
The only deliverable for a project is the working program. At the very least there should also
be documentation, which provides support to both the software maintainers, and to the end-users.
Software engineering will make us create a lot of unnecessary documentation, and will slow
us down. Software engineering is not about producing documents. Software engineering increases
the quality of the software. Better quality reduces work load and speeds up software delivery times.
Software Processes
The term software specifies to the set of computer programs, procedures and associated
documents (Flowcharts, manuals, etc.) that describe the program and how they are to be used.
A software process is the set of activities and associated outcome that produce a software product.
Software engineers mostly carry out these activities. These are four key process activities, which
are common to all software processes. These activities are:
1. Software specifications: The functionality of the software and constraints on its operation
must be defined.
2. Software development: The software to meet the requirement must be produced.
3. Software validation: The software must be validated to ensure that it does what the
customer wants.
4. Software evolution: The software must evolve to meet changing client needs.
The Personal Software Process (PSP) emphasizes personal measurement of both the work product
that is produced and the resultant quality of the work product. In addition PSP makes the
practitioner responsible for project planning and empowers the practitioner to control the quality
of all software work products that are developed. The PSP model defines five framework activities:
• Planning. This activity isolates requirements and develops both size and resource
estimates. In addition, defects estimate (the number of defects projected for the work) is
made. All metrics are recorded on worksheets or templates. Finally, development tasks are
identified and a project schedule is created.
• High level design. External specifications for each component to be constructed are
developed and a component design is created. Prototypes are built when uncertainty exists.
All issues are recorded and tracked.
• High level design review. Formal verification methods are applied to uncover errors in the
design. Metrics are maintained for all important tasks and work results.
• Development. The component level design is refined and reviewed. Code is generated,
reviewed, compiled, and tested. Metrics are maintained for all important tasks and work
results.
• Postmortem. Using the measures and metrics collected, the effectiveness of the process is
determined. Measures and metrics should provide guidance for modifying the process to
improve its effectiveness.
Watts Humphrey extended the lessons learned from the introduction of PSP and proposed a Team
Software Process (TSP). The goal of TSP is to build a “self directed” project team that organizes
itself to produce high quality software.
▪ Build self directed teams that plan and track their work, establish goals, and own their
processes and plans. These can be pure software teams or integrated product teams (IPTs)
of 3 to about 20 engineers.
▪ Show managers how to coach and motivate their teams and how to help them sustain peak
performance
▪ Accelerate software process improvement by making CMM23 Level 5 behavior normal
and expected.
▪ Provide improvement guidance to high-maturity organizations.
▪ Facilitate university teaching of industrial-grade team skills.
A self directed team has a consistent understanding of its overall goals and objectives; defines
roles and responsibilities for each team member; tracks quantitative project data (about
productivity and quality); identifies a team process that is appropriate for the project and a strategy
for implementing the process; defines local standards that are applicable to the team’s software
engineering work; continually assesses risk and reacts to it; and tracks, manages, and reports
project status.