Software engineering is the discipline concerned with all
aspects of complex software production, from initial specification through development to delivery and maintenance
of the final product.
Good quality software is
Dependable
Secure
Reliable
Safe
Efficient
Makes good use of recourses
Memory
processor
Network capacities
Usable
Easy to learn
Appropriate for tasks
takin into account different classes of users
Delivers the required functionality
Maintainable
Easily evolve with changing needs/appropriate documentation
Causes of system failure
Coding Errors
Errors in supporting infrastructure
Errors in translating requirements to design
Incorrect interpretation or omission of user requirements
Software Project Management
Costing
Economic feasibility study
Cost/Benefit analysis
TB-TC/TC
Monitoring and Reviews
Personnel seletion and evaluation
Report writing & presentation
Difficulties in project management
Projects are intangible
Projects are uniquely inflexible
The software development isn't standardized
Many software are one-off projects
Project Planning/Scheduling
Constraints
Budget
Time
infrastructure
Activities/Tasks
Nota:
Value of activity networks: - provide insight to non-obvious dependencies among tasks. -They help to optimise allocation of resources. -a- allocate more people to tasks in critical path in order to shorten project time. -b- allocate less people to tasks on non-critical paths tasks and allow them to finish later without any impact on the overall time - They may initiate design changes that could shorten the critical path. .
- They may be used to partly automate project planning
Which can run concurrently
Milestones
Milestones
Software Processes
The waterfall method
Nota:
Requirements definition:the system services and constraints are established consulting the users. These are defined in detail and form a specification.
System and software design: requirements are allocated to hardware and software, and an overall architecture is established. Software design involves identification of objects, data and operations.
implementation and unit testing:Software design is realised as a set of program units. Unit testing verifies that each unit meets its specification.
integration and system testing:Units are integrated and tested to ensure requirements have been met. Delivery of product. operation and maintenance: Correction of errors and changes to accommodate new demands.
Evolutionary development
Nota:
Advantages:
By experimenting with incremental versions, users develop a better understanding of their needs.
Avoiding omission and misinterpretation of requirements
Disadvantages
Development is not transparent
documentation is labour intensive and pointless for throwaway prototyping
special tools may be needed
failure rate high for each change
Exploratory development
Development starts from a core of well understood requirements, systems involve as customers experiment with intermediate versions
Throw-away prototyping
Development starts from poorly understood parts of the system, to clarify requirements early versions are quickly made and withdrawn
Later versions can use a more structured approach for example the waterfal method
Encremental development
Nota:
Advantages
management of large projects become easier
functions are delivered with each increment
functionality is available earlier
lower risk of overall project failure highest priority systems are delivered earlier and are tested more