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.
1 Good quality software is
1.2.1 Makes good use of recourses
22.214.171.124 Network capacities
1.3.1 Easy to learn
1.3.2 Appropriate for tasks
1.3.3 takin into account different classes of users
1.4 Delivers the required functionality
1.5.1 Easily evolve with changing needs/appropriate documentation
2 Causes of system failure
2.1 Coding Errors
2.2 Errors in supporting infrastructure
2.3 Errors in translating requirements to design
2.4 Incorrect interpretation or omission of user requirements
3 Software Project Management
3.1.1 Economic feasibility study
126.96.36.199 Cost/Benefit analysis
3.2 Monitoring and Reviews
3.3 Personnel seletion and evaluation
3.4 Report writing & presentation
3.5 Difficulties in project management
3.5.1 Projects are intangible
3.5.2 Projects are uniquely inflexible
3.5.3 The software development isn't standardized
3.5.4 Many software are one-off projects
4 Project Planning/Scheduling
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
4.2.1 Which can run concurrently
5 Software Processes
5.1 The waterfall method
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.
5.2 Evolutionary development
By experimenting with incremental versions, users develop a better understanding of their needs.
Avoiding omission and misinterpretation of requirements
Development is not transparent
documentation is labour intensive and pointless for throwaway prototyping
special tools may be needed
failure rate high for each change
5.2.1 Exploratory development
188.8.131.52 Development starts from a core of well understood requirements, systems involve as customers experiment with intermediate versions
5.2.2 Throw-away prototyping
184.108.40.206 Development starts from poorly understood parts of the system, to clarify requirements early versions are quickly made and withdrawn
220.127.116.11 Later versions can use a more structured approach for example the waterfal method
5.3 Encremental development
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