Professional Documents
Culture Documents
Seven Core Principles For Software Engineering
Seven Core Principles For Software Engineering
Testing Principles:
1. All tests should be traceable to customer requirements. The objective of software testing is to
uncover errors. It follows that the most severe defects are those that cause the program to fail to meet
its requirements. 2. Tests should be planned long before testing begins. Test planning can begin as
soon as the analysis model is complete. 3. The Pareto principle applies to software testing. Stated
simply, the Pareto principle implies that 80 percent of all errors uncovered during testing will likely be
traceable to 20 percent of all program components. The problem, of course, is to isolate these suspect
components and to thoroughly test them. 4. Testing should begin “in the small” and progress toward
testing “in the large. The first tests planned and executed generally focus on individual components.
As testing progresses, focus shifts in an attempt to find errors in integrated clusters of components and
ultimately in the entire system. 5. Exhaustive testing is not possible. The number of path
permutations for even a moderately sized program is exceptionally large. For this reason, it is
impossible to execute every combination of paths during testing.
Verification: Verification refers to a set of activity that ensures that software correctly implements a
specific function. Validation: Validation refers to a different set of activities that ensure that the
software has been build is traceable to customer requirements.
Difference:
Verification Validation
Takes place before validation. Cannot takes place before verification
The objective is to ensure that the work products The objective is to ensure that the work product
meet their specification. fulfill its intended use in intended environment.
Evaluate codes, plans, requirements and Evaluates the products itself.
specification.
Question: Are we building the product right? Question: Are we building the right product?
Input is reviews walkthrough and inception. Input is the actual testing of an actual product.
Output is a set of nearly perfect plans Output is nearly perfect product.
requirements and specification.
Unit testing: Unit testing focuses verification effort on the smallest unit of software design. The unit
testing focuses on the internal processing logic and data structures within the boundaries of
component. This type of testing can be conducted in parallel for multiple components.
*Interface: Data flows into and out of the program unit under test. *Local data structure: Data storage
temporarily maintains integrity. *Boundary condition: are tested to ensure that the module operates
properly at the boundaries established to limit or restrict processing. *Independent paths: all modules
must be work at least once.
Incremental integration: In incremental integration the program is constructed and tested in small
increment, where errors are easier to isolate and correct.
Top down testing: Top down testing is an approach to integrated testing where the top integration
module is tested and branch of the module is tested step by step until the end of the related module.
Bottom up testing: Bottom up testing is an approach to integrated testing where the lowest level
components are tested first. Then used to facilitate the testing of higher level components. The
process is repeated until the component at the top of the hierarchy is tested.
Deference:
Sandwich Testing: Sandwich testing is approach to combine top down testing to bottom up testing.
Advantage of bottom up approach: 1. Easier test case design. 2. Lack of stub. Disadvantage: 1. The
program as an entity doesn’t exists until the last module is added.
The system hierarchy: The world view is composed of a set of domains which can each be a system or
a system of systems in its own rights. WV={D1,D2,D3……Dn}. Each domain is composed of specific
elements (Ei) each of which serves a role in accomplishing the objective and goal of the domain or
component. Di={E1,E2,E3…..En}. Each element is implemented by specifying technical components
(Cic). Ei={C1,C2,C3……Cic}
System architecture: Three different architecture must be analyzed and designed within the context of
business objective and goals. 1. Data architecture. 2. Application architecture. 3. Technology
infrastructure. 1.Data architecture: Data architecture provides a framework to the information needs
of a business or business function. 2. Application architecture: Application architecture encompasses
those elements of a system that transforms objects within the data architecture for some business
purpose. 2. Technology infrastructure: Technology infrastructure provides the foundation for data and
application architecture.
System modeling with UML: 1. Deployment diagrams: each 3d box depicts a hardware element that is
part of the physical architecture of the system. 2. Activity diagrams: Represents procedural aspects of a
system element. 3. Class diagram: Represent system level elements in terms of the data that describe
the element and the operations that manipulate the data.