 |
Software
Development
Custom Software Development
and Web Application Design:
Software projects can be large or small, in-house systems
or commercial products, desktop based or web based,
etc... Although every project is different, similarities
can also be drawn and models employed which help minimize
unnecessary work/re-work to ensure everything goes to
plan. Our primary objective is to combine your knowledge
of your business requirements with our software development
skills. This objective is met through working in incremental
stages and concentrating on fitness for purpose (the
business value), rather than just the technical aspects.
The iterative software development approach is actually
a combination of the Rational Unified Process (RUP)
and eXtreme Programming (XP) methods. Based on the commonly
accepted fact that a usable 80% of any proposed system
can be produced in 20% of the time it would eventually
take to produce the total solution. The iterative approach
enables incorrect assumptions, omissions, or insufficient
understanding of the requirements to be identified earlier
on in the project when correction is least costly and
least time-consuming.
Whenever possible, we create a small, operational "core"
version of the application, to which additional components
can be added as they are completed. Through using this
approach we can give clients the opportunity to see
actual working versions of their proposed system very
early on in the project and use feedback to improve
our understanding of the requirements.
Requirements Capture
This is the process of discovering the real needs which
the new software must meet. A requirements document
usually includes the following kinds of information:
- Users
- Who are the users?
- What are their roles and responsibilities?
- Functionality
- What and how will data be inputted to the
system?
- What specific outputs (reports, screen-based
information, exported data, data feeds) will
be produced?
- Are we seeking to streamline or improve existing
business practices?
- What specific levels of performance and reliability
are required?
- What kinds of extra flexibility not needed
now should be built-in so future enhancements
will be more economical?
- Help, Training and Support
- How will the software be maintained?
- Will business conditions dictate frequent
changes and enhancements or will the system
remain relatively static?
- Will future responsibility for the system
be in-house or contracted out?
- What types of user support will be needed?
- Is extensive context-sensitive online help
required?
- Should there be a user manual?
Risk Assessment
It is imperative that we identify those unknowns which
could significantly affect the success of a project.
For example:
- Can the required performance and reliability levels
be met?
- Is there a possibility that users will not like
the software and will not want to use it?
- If commercial, will customers buy it? (Although
not entirely within our control, there will be certain
attributes of the application that will affect the
customer's desire for the product and their decision
to buy (and recommend) the product?
- Are any new technologies or environments involved
whose reliability is unknown?
- How confident is everyone with time and cost estimates
and what contingencies are included?
- What are the critical elements of infrastructure
- such as networks, servers, desk top computers,
storage systems, firewalls, VPN, SSL, etc...?
- Do we need to objectively test the validity of
any algorithms supplied before proceeding further
into the project?
- Are there corporate standards which could affect
time, cost and/or approach to development of this
application?
Project Management and Costing
The fundamental activities in software development are
analysis, design, production and testing. Project management
is not a separate activity, but is control of the development
process and each development activity. The three competing
variables to be managed are product quality (i.e. functionality
and robustness), timescales and resources.
Whilst tiny projects may only require minimal informal
management, for larger projects it is an essential that
project management is used effectively. The
main tasks carried out are:
- Proposing the main project objectives and tasks
- Estimating time, effort and cost (using prior
experience)
- Procuring any required raw materials or tools
- Evaluating, selecting (or recruiting) and training
personnel
- Scheduling (including setting milestones) and
budgeting
- Monitoring and communicating progress to management
and/or the client
- Identifying problems and adjusting plans
Prototype Development
Like the development cycle itself, prototyping must
be iterative. The use of Rapid Application Development
(RAD) tools such as Microsoft Visual Studio can be a
considerable advantage, enabling basic working models
to be created in a matter of hours. Quite often several
prototypes will be created for the client to evaluate
before commencing with the project.
The major benefits of prototyping include:
- Confirmation that requirements have been clearly
understood
- Identification of any major technological constraints
or issues to be tackled
- Much earlier visualization of the product
- A more intuitive end product (since feedback will
have been fed into the design process from the beginning)
Detailed Analysis, Design
and Production
Once the specification has been agreed, and the complex
issues and risks identified, the actual software development
begins.
First we analyse the requirements. If we are going to
produce a system, we need to know what it is and how
it will satisfy the stakeholders. In this activity,
we capture the context and most important requirements
in enough detail to derive acceptance criteria for the
product.
New technology brings with it the potential for new
and improved solutions to software problems. Some time
is usually spent early on in projects evaluating 3rd
party components for suitability as they can often help
reduce timescales and major risks whilst enhancing the
quality of the product.
Once we are well into the design stage, focus is shifted
to hunting for the appropriate solutions to the problems
presented. Code and prototypes are often used as design
tools since they allow refinement as part of the iterative
process. CASE tools are usually used on larger projects
which allow use cases and potential solutions to be
properly explored before any code is written.
Testing
Testing serves several purposes. It allows the developer
to ensure that all requirements have been satisfied,
nothing has been missed and to identify any defects
in the code. The application should be tested for:
- Functionality / Performance - including Load/Stress, Response and Link testing
- Compatibility - platform and OS configurations, browsers, connection speeds, languages, other applications
- Usability - coping with input of valid and invalid data
|
|
|
|