Software Engineering
Software engineering is an engineering discipline concerned with
the practical problems of developing large software systems, and
is set apart from the more specific disciplines of computer programming
and computer science.
Computer programming is primarily concerned with the representation
computable processes and structures in terms of a machine readable
instructions; whereas computer science is concerned with the study
of computable processes and structures in relation to requirements.
In contrast, software engineering encompasses the whole software
lifecycle comprising analysis, design, development and testing and
is primarily concerned with the delivery of effective computing
solutions to business problems.
Software engineering, in essence, is the production of well-engineered
software at predictable cost, and within an acceptable timeframe.
Well-engineered software exhibits four main characteristics:
- is reliable;
- has an appropriate user interface;
- is reasonably efficient;
- and is maintainable.
Developing well-engineered computer systems within time and cost
constraints is a complex and variable process comprising mostly
'soft' software process management techniques; a combination of
formal, semi-formal, and informal techniques for requirements specification;
software design; user interface design; programming and testing.
Software Systems
We have considerable experience developing software systems for
a variety of business requirements based on mainly the Unix and
Windows NT/2000 platforms:
- Background, or service processes — Windows NT/2000 services,
and Unix daemons. These applications are distinguished from application
services in that they usually require little user-interaction
beyond software configuration.
- Internet-based applications and services — applications
and services accessed primarily via the Internet and the World
Wide Web.
- GUI-based applications and services — client / server
application and services accessed through clients running Windows.
Depending on the type of software system, and its requirements,
we use a variety of techniques to assist us in the software development
process:
- Systems Analysis and Requirements Definition — which enables
us to develop a clear understanding of the purpose and behaviour
of the system under development.
- System Modelling — where we capture both existing, and
future data requirements and the relationships between the data.
- Software Prototyping — where we build an active, though
not necessarily complete, prototype of key parts of the system.
This is especially important in user interface design, where the
practical elements of a design can be assessed prior to implementation.
- Formal Specification — which enables a mathematical model
of a systems behaviour to be specified precisely. This technique
is particularly useful as part of the analysis process for systems
that have precise, although not necessarily well-documented requirements
(particularly in financial, or safety critical applications).
In many cases, formal methods represent a way of 'pre-programming'
a solution, to identify areas of the system that are not well-understood.
For implementation, we generally select the most appropriate implementation
language, and software platform for the application, subject to
considerations such as your existing infrastructure, user interface,
and the maintenance arrangements for the system.
Software Components
In addition to complete systems development, we also develop software
tools, libraries and components for integration within larger systems:
- Software Tools — which are small applications performing
discrete, well defined tasks;
- Software Libraries — collections of functions;
- COM Components — based on Microsoft's Component Object
Model (COM).
Specific examples of tools and components we have developed in
the past include scripting periodic system backup processes; libraries
for encryption and decryption, and COM components that provide a
high-performance interface between server-side JavaScript (ASP)
and certain operating system functions.
Systems Integration
We have experience in integrating systems based on nearly all common
environments including Unix, Windows NT/2000, Macintosh, OS/400,
and MVS.
|