software developer
A software developer is a
programmer who is concerned with one or more facets of the software
development process, a somewhat broader scope of computer programming. This
person may contribute to the overview of the project on the application
level rather than component level or individual programming tasks. Software
developers are often still guided by lead programmers but also encompasses
the class of freelance software developers.
Other names which are often used in the same close context are software
analyst and software engineer.
With time, differences between system design, software development and
programming are more apparent. Already in the current market place there can
be found a segregation between programmers and developers, being that one
who actually implements is not the same as the one who designs the class
structure or hierarchy. Even more so that developers become systems
architects, those who design the multi-leveled architecture or component
interactions of a large software system.
|
|
Scope and Focus of
Software Engineering
Software engineering is not programming, which is a distinct discipline.
Software engineering is concerned with the proper application of engineering
principles to the design and development of a software system. This
discipline deals with identifying, defining, and realizing the required
performance characteristics of the resulting software. These performance
characteristics include: reliability, maintainability, availability,
testability, ease-of-use, portability, etc. Software engineering addresses
these performance characteristics by preparing design and technology
specifications, that if implemented properly, will enable the resulting
software to meet these requirements.
Software engineering is also concerned with the characteristics of the
program development process. In this regard, it deals with characteristics
as: cost of development, duration of development, risks in development.
Process
Activities/Steps
Software Engineering processes are
composed of many activities, notably the following. They are considered
sequential steps in the Waterfall process, but other processes may rearrange
or combine them in different ways.
Requirements Analysis
Extracting the requirements of a desired software product is the first task
in creating it. While customers probably believe they know what the software
is to do, it may require skill and experience in software engineering to
recognize incomplete, ambiguous or contradictory requirements.
Specification
Specification is the task of precisely describing the software to be
written, in a mathematically rigorous way. In practice, most successful
specifications are written to understand and fine-tune applications that
were already well-developed, although safety-critical software systems are
often carefully specified prior to application development. Specifications
are most important for external interfaces that must remain stable.
Software architecture
The architecture of a software system refers to an abstract representation
of that system. Architecture is concerned with making sure the software
system will meet the requirements of the product, as well as ensuring that
future requirements can be addressed. The architecture step also addresses
interfaces between the software system and other software products, as well
as the underlying hardware or the host operating system.
Coding
Reducing a design to code may be the most obvious part of the software
engineering job, but it is not necessarily the largest portion.
Testing
Testing of parts of software, especially where code by two different
engineers must work together, falls to the software engineer.
Documentation
An important (and often overlooked) task is documenting the internal design
of software for the purpose of future maintenance and enhancement.
Documentation is most important for external interfaces.
Software Training and Support
A large percentage of software projects fail because the developers fail to
realize that it doesn't matter how much time and planning a development team
puts into creating software if nobody in an organization ends up using it.
People are occasionally resistant to change and avoid venturing into an
unfamiliar area, so as a part of the deployment phase, its very important to
have training classes for the most enthusiastic software users (build
excitement and confidence), shifting the training towards the neutral users
intermixed with the avid supporters, and finally incorporate the rest of the
organization into adopting the new software. Users will have lots of
questions and software problems which leads to the next phase of software.
Maintenance
Maintaining and enhancing software to cope with newly discovered problems or
new requirements can take far more time than the initial development of the
software. Not only may it be necessary to add code that does not fit the
original design but just determining how software works at some point after
it is completed may require significant effort by a software engineer. About
⅔ of all software engineering work is maintenance, but this statistic can be
misleading. A small part of that is fixing bugs. Most maintenance is
extending systems to do new things, which in many ways can be considered new
work. In comparison, about ⅔ of all civil engineering, architecture, and
construction work is maintenance in a similar way.
|