Process Models and Testing Flashcards
What are the design options for embedded systems both hardware and software.
App-specific software runs on general-use computers.
App-specific software runs on a combination of general-purpose computing hardware supported by application specific circuits.
Almost all of the functionality is realised in hardware.
What are some hardware options
Hardware Options:
General Purpose computing hardware
Microcontrollers
App specific integrated circuits, and field progammable gate arrays.
What can you do with FPGAs?
- Design your own CPU/memory structure
- Add extra circuits for app specific functionality.
- Hardware description languages
Most Popular: Verilog, VDHL
Look like programming languages but describe the functionality of integrated circuits.
What is a Hardware Description Language?
It Describes the functioning of the hardware
– The compiler creates a specification of the
required signal lines and logic gates
What was the Traditional Design Process and its drawbacks.
It starts by partioning the design process into software and hardware, the software and hardware work are designed separately, then they are integrated and the final product is made.
The drawbacks are:
Late system integration
Impact of HW and SW on each other cannot be assessed easily.
Poor quality designs
May require costly late modifications
May need schedule extensions
What are Hadware/Software co-design’s aims and interdisciplinary design groups.
Hardware/Software is the concurrent design of hardware and software.
The aims are:
-Exploit synery between hardware and software
-Optimise cost, performance, power of the product.
-Reduce time to market
—-Interdisciplinary design groups
- Firmware, OS, and application developers.
- Hardware developers and chip designers
What are the different architectural design decisions and partitioning objectives and strategies?
Architectural design decisions
-Type of processor, interface style.
Partitioning objectives
- Speedup, latency requirement, silicon size, cost
Partitioning strategies
- High-level partitioning by hand, computer-aided partitioning technique.
Difference between sequential development and hardware/software codesign
For Sequential development of hardware and software, the software team cannot start until hardware is available.
For Hardware/Software codesign. There is a shorter critical path, more options for early testing and more options for testing alternative
What is SDLC?
The Software Development Life Cycle is a detailed plan to describe how to develop, maintain, replace, alter and/or enhance specific software.
What are the steps of SDLC?
Step 1: Planning and Requirement Analysis
Step 2: Defining Requirements
Step 3: Designing the Product Architecture
Step 4: Building or Developing the Product
Step 5: Testing the Product
Step 6: Deployment in the Market and Maintanence.
What is the Waterfall Model
The waterfall was the first SDLC Model to be used. In this model the whole process of software development is divided into separate phases.
What are the steps of Waterfall Model
- Requirements
- Analysis
- Design
- Coding
- Testing
- Maintanence
Advantages of Waterfall Model
Simple and easy to understand and use
Clearly defined stages
Well understood milestones
Easy to arrange tasks.
Process and results are well documented
Disadvantages of Waterfall Model
No working software is produced until late during the life cycle
High amounts of risk and uncertainty
Not a good model for complex and object-oriented projects.
Poor model for long and ongoing
It is difficult to measure progress within stages
Adjusting scope during the life cycle can end a project.
What are the advantages of Agile method
Is a very realistic approach to software development.
Promotes teamwork and cross training
Functionality can be developed rapidly and demonstrated
Resource requirements are minimum
What are the disadvantages of Agile Method
Not suitable for handling complex dependencies
More risk of sustainability, maintainability and extensibility
Transfer of tech to new team members may be challenging due to lack of documentation.
Depends on customer interaction, so if customer is not clear, team can be driven in wrong direction.
What is Sofware Testing and what can it reveal or not reveal?
Testing is intended to show that a program does what is intended to do and to discover program defects before being put into use.
Testing can reveal the presence of errors, not their absence.
Factors of Verification Testing
Is the project being built correctly?
Ensure the software conforms to the specifications?
Absence of run-time errors.
Test cases don’t reflect typical usage, but aim at exposing defects.
Factors of Validation Testing
Is the right project being built
Ensures software does what the user requires.
The requirements are realistic.
Software tests needed for every requirement and every system feature.
What does software inspections involve as well as their characteristics?
Looking at the source code or UML diagrams to discover problems
Includes tool-based document/code analysis.
Applicable to incomplete code, since the program is not executed.
Also suitable for other documents, requirements, design, configuration data, test data.
Effective technique for discovering program errors.
What does software testing include
It is concerned with observing product behaviour and the system is executed with test data and it’s operational behaviour is observed.
What are the stages of testing
- Development Testing
Testing the system during development to discover bugs and defect.
- Release Testing
Tesitng of a complete version of the system by a separate testing team before it is released to users.
- User Testing
Testing by users or potential users of a system in their own environment.
What tests does development testing consist of and explain them
It consists of unit tests, component tests and system tests.
Unit tests:
Individual program units or object classes are tested.
Unit tests focus on the functionality of the methods.
Component Tests:
Where several individual units are integrated to create composite conponents.
Component tests focus on testing component interfaces. Checking the behaviour of the component to see if it’s correct and checking for interface errors.
System Tests:
Where some or all components in a system are integrated and system is tested as a whole.
System testing focuses on testing component interactions
What is Regression Testing?
Resgression testing checks that the code changes have not broken previously working code.
In automatic testing, regression testing is simple and straightforward but with a manual testing process it’s expensive.
All tests are rerun every time a change is made to the program. Tests must run ‘successfully’ before the change is comitted.
What is Release Testing
Releasing testing is the process of testing a particular release of a system that it is intended for use outside of the development team
The primary goal of the release testing process is to convince the supplier of the system that it is good enough for use.
Release testing has to show that the system delivers its specified functionality, performance and dependability, and that it doesn’t fail during normal use.
Release testing is a black box testing porcess where tests are only derived from the system specification.
What is the difference between release testing and system testing.
A separate team, that has not been involved in the system development, should be responsible for release testing.
System testing by the development team should focus on discovering bugs in the system (defect testing).
The objective of
release testing is to check that the system meets its requirements and is good enough for external use (validation testing).
What is Requirements based testing
Requirements-based testing involves examining each requirement and
developing a test or tests for it.
Devise scenarios from the requirements and develop tests for these scenarios.
What is Performance Based Testing
Part of release testing may involve testing the emergent properties of a system,
such as performance and reliability.
– Tests should reflect the profile of use of the system.
– Performance tests usually involve planning a series of tests where the load is
steadily increased until the system performance becomes unacceptable.
– Stress testing is a form of performance testing where the system is deliberately
overloaded to test its failure behavior.
What is User Testing and why it’s important.
User or customer testing is a stage in the testing process in which users or customers provide input and advice
on system testing.
User testing is essential, even when comprehensive system and release testing have been carried out.
The reason for this is that influences from the user’s working environment have a major effect on the reliability, performance,
usability and robustness of a system. These cannot be replicated in a testing environment.
What are the different types of User Testing and explain what occurs for each type.
Alpha Testing
Users of the software work with the development team to test the software at the developer’s site.
Beta Testing
A release of the software is made available to users to allow them to experiment and to raise problems that they discover with
the system developers.
Acceptance Testing
Customers test a system to decide whether or not it is ready to be accepted from the system developers and deployed in the
customer environment. This is primarily for custom systems.
What are the stages in Acceptance Testing?
- Define acceptance criteria
- Plan acceptance testing
- Derive acceptance tests
- Run acceptance tests
- Negotiate test results
- Reject/accept system
What relationship does the user have with dev team in agile methods?
In agile methods, the user/customer is part of the development team
and is responsible for making decisions on the acceptability of the
system
What are some testing strategies?
Partition Testing is where you identify groups of inputs that have common characteristics and should be processed in the same way.
Automated Testing
Guideline-based Testing is where you use testing guidelines to choose test cases.
What are the general testing guidelines
– Choose inputs that force the system to generate all error messages
– Design inputs that cause input buffers to overflow
– Repeat the same input or series of inputs numerous times
– Force invalid outputs to be generated
– Force computation results to be too large or too small
Why are testing policies needed
Exhaustive system testing is impossible so testing policies
which define the required system test coverage may be
developed
Examples of Testing Policies
– All system functions that are accessed through menus should be
tested
– Combinations of functions (e.g. text formatting) that are accessed
through the same menu must be tested
– Where user input is provided, all functions must be tested with both correct and incorrect input
What is Test Driven Development ?
- Test-driven development (TDD) is an approach to program development in which
you interleave testing and code development - Tests are written before code and ‘passing’ the tests is the critical driver of
development - You develop code incrementally, along with a test for that increment. You don’t
move on to the next increment until the code that you have developed passes its
test.
What are the TDD Process Activities?
Start by identifying the increment of functionality that is required. This should
normally be small and implementable in a few lines of code.
Write a test for this functionality and implement this as an automated test.
Run the test, along with all other tests that have been implemented. Initially, you
have not implemented the functionality so the new test will fail.
Implement the functionality and re-run the test.
Once all tests run successfully, you move on to implementing the next chunk of
functionality.
Benefits of TDD
Code coverage
– Every code segment that you write has at least one associated test, so all code written has
at least one test.
Regression testing
– A regression test suite is developed incrementally as a program is developed.
Simplified debugging
– When a test fails, it should be obvious where the problem lies. The newly written code
needs to be checked and modified.
System documentation
– The tests themselves are a form of documentation that describe what the code should be
doing.
What does Defect Management consist of?
It includes bug severity and bug priority which are decided by the QA Team and PM respectively.
Bug Severity
1. Blocker: Impossible to use/test software
2. Critical: Business-critical error
3. Major: Significant error, but limited to a single aspect of the software.
4. Minor: Confusing or undesirable behaviour
5. Low: Types or problems with third-party software.
Bug Priority
1. High: Needs to be fixed ASAP.
2. Medium: Error can be fixed during the next sprint.
3, Low: Fix it later or never.