Software and software engineering Flashcards
What is the defining quality of a good software system?
A good software system is one the meets its users needs.
How can a good software system be characterised?
A good software system can be characterised as:
– Useful – Usable – Reliable – Flexible – Available – Affordable
How might greater flexibility make a software system more affordable over its whole life?
User’s needs will change over time. In flexible systems the time taken to implement changes in requirements is less compared to less flexible software. As labour costs are the most significant component of software costs, flexible software is more affordable
What are reasons why a deliverable software system might not meet its user’s needs?
Software systems are usually out of date even as they are being developed because:
– Some needs are often missed during requirements capture.
– User’s needs change with time.
What are some means of measuring the maintainability of a software system?
The efforts required by a developer to locate and implement a given change to a software system could be measured. That effort can be classified in two components:
– The effort needed to locate and fix errors (bugs)
– The effort needed to adapt the software system to meet its users’ needs.
A successful software project must:
- Resolve the diverse and possibly conflicting needs of users in a disciplined way
– Satisfy the users’ expectations
– Have been developed and delivered in a timely and economical manner
– Be resilient to the changes that will be introduced during its operational lifetime
– Demonstrate good overall system quality.
Why might you consider splitting up a large project into smaller chunks?
There is a limit to the size of a software system that any one person can deal with. By splitting a large project into smaller chunks, it is possible to identify a number of more manageable tasks for those involved.
What is a development process?
A development process is a set of rules that defines how a software development project should be carried out. It incorporates a number of activities, and a process model (or life cycle) that indicates how these activities are ordered.
What should the role of project management be with respect to the deliverables of a development project?
A good software system must be affordable and available within an appropriate timeframe. Each deliverable uses resources, such as developers’ time, that add to its cost. Project management involves the identification of the appropriate deliverables for a given set of requirements and controlling the cost of producing them. Project management also involves ensuring that deliverables are produced on time and taking steps to cope with any delays.
What is the difference between a customer and a user?
A customer is the person who pays for a software system, whereas a user is someone who will use that system on a day-to-day basis. A customer will also be a user when the proposed software system is intended to support their job.
Suggest a reason why maintenance is a core activity in the development of a good software system.
Maintenance allows a software system to evolve over its operational lifetime so that it continues to be useful.
What additional task is needed when the development of a software system is partitioned into a number of increments?
A task devoted to the integration of the increments to form the final software system will be needed.
What are the assumptions on which the waterfall model is based?
There is an assumption that once a particular activity or phase is finished, it is not re-entered, and that the activities do not overlap but follow each other in a sequential life cycle. There is no need for reviewing or reworking. All this presupposes that an end point for each activity can be identified.
What is Agile software development?
Methods which promoter practices that encourage simpler, lighter weight, faster and mingled software development that can adapt to inevitable changes in customer requirements.
Define Extreme Programming (XP)
Is an agile method based on intensive testing and incremental development.
Defines the following practices:
– Incremental design – Test first programming – Programming in pairs – Continuous integration – Planning for the week