Test 1 Flashcards
Explain software crisis
It refers to the difficulty of writing useful and efficient computer programs within the required time. It was caused by the rapid increases in computer power and the complexity of the problems that arose but existing methods were not sufficient to address them.
Define software engineering (IEEE)
The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.
Systematic - done or acting to a fixed plan; methodical
Disciplined - showing a controlled form of behavior or way of working
Quantifiable - capable of being measured
Define software systems engineering
It is concerned with the processes, methods, and tools for the development of large and complex software systems in an economic and timely manner.
Process - a series of actions or steps taken to achieve an end.
Method - a particular procedure for accomplishing something, esp. a systematic or established one. A method is like a recipe. A method may involve a particular paradigm or a set of paradigms. A paradigm is a particular approach or philosophy. E.g. OO, procedural, and so on.
Tools - something that is used to improve developer’s productivity. E.g. IDEs, VCS, etc.
Name the software development generic phases
- Problem Identification and Definition
- Software Requirements
- Software Design and Implementation
- Software Validation
- Software Deployment and Evolution
Explain the motivations for selecting a software development process
- The criticality of the software
- The desired release date
- Development team size
- Project requirements
- Project size
Name the general principles of software engineering practice
- Determine the value of the system
- KISS!
- Maintain a clear vision
- Always keep in mind that someone else will have to understand what you are doing and have done
- Always keep in mind that systems change, so design accordingly
- Plan ahead for reuse
- Think ahead before acting
Discuss the build-and-fix model
When utilizing the build-and-fix model, the development team finds out the customer’s needs and builds the software. After building, the team will determine if the software fits the needs of the client. If it does, work is complete. If it does not, the software is modified iteratively until it fits the needs of the client.
- May work for very small informal projects
- Does not scale well to large projects
- Costs are difficult to control
- Difficult to delegate to team members
- Difficult to make changes later
- Deadlines are difficult to meet
Discuss waterfall models
- First published model of the software development process by Royce in 1970
- Sometimes called the classic life cycle
- Suggests a systematic, sequential approach to software development
- Suggests separate, process stages (Requirements, Design, Implementation, Testing, Maintenance)
Advantages
- Simple and easy to use
- Practiced for many years and people have much experience with it
- Easy to manage, enforced, disciplined approach
- Facilitates allocation of resources
- Works well for smaller projects where requirements are very well understood
Disadvantages
- Requirements must be known up front
- No feedback of system by stakeholders until after testing phase
- Major problems with the system are not discovered until late in the process
- Inefficient use of resources
- Real projects rarely follow the sequential flow that this model proposes
Discuss evolutionary models
Based on the idea of developing an initial implementation, exposing this to user comment and refining it through many versions until an adequate system is developed. These models are both iterative and incremental in nature.
Describe agile methods
Dissatisfaction with the overheads involved in software design methods of the 1980s and 1990s led to the creation of agile methods. The aim of agile methods is to reduce overheads in the software process (e.g. by limiting documentation) and to be able to respond quickly to changing requirements without excessive rework.
These methods:
- Focus on the code rather than the specification
- Are based on an iterative approach to software development
- Are intended to deliver working software quickly and evolve this quickly to meet changing requirements
Advantages
- Always has demonstrable results – each iteration as a working piece of the software
- Developers tend to be more motivated – more focus of working artifacts, not documentation
- Customers are able to provide better requirements because they can see the evolving product
Disadvantages
- Problematic for large applications
- Documentation output is questionable
Describe formal methods
- Use rigorously specified mathematical models to build software
- Use mathematical proofs to complement system testing
- Formal verification does not remove the need for testing
- May be viewed as a 3-step process
1. Formal Specification
2. Verification
3. Implementation
Formal Specification
- The engineer rigorously defines a system using a formal modeling language
- Similar to the process of converting a word problem into algebraic notation
Verification
- By building a system using a formal specification, the designer is actually developing a set of theorems about the system
- The system is verified by proving the theorems correct
Implementation
-The formal specifications are converted to executable code
Advantages
-Discipline - By virtue of their rigor, formal systems require an engineer to think out his design in a more thorough fashion-
Precision - Natural language descriptions are notoriously ambiguous
Disadvantages
- Expense - more expensive than traditional approaches to engineering.
- Limits of Computational Models - these limitations are usually considered intolerable from a developer’s perspective
- Usability - the modeling languages tend to be difficult to use and understand