Thursday, June 26, 2008

types of testing

Black box testing and white box testing

Friday, August 3, 2007

SOFTWARE QUALITY ASSURANCE


1. Definition:


SQA is the planned and systematic set of activities that ensure that software process and products conform to requirements, standards, and procedures.


"Processes" include all activities involved in designing, coding, testing and maintaining; "products" include software, associated data, documentation, and all supporting and reporting paperwork.


The role of SQA is to give management the assurance that the officially established process is actually being implemented. It ensures that:
An appropriate development methodology is in place.
The projects use standards and procedures in their work.
Reviews and audits are conducted.
Documentation is produced to support maintenance and enhancement.
Software Configuration Management is set up to control change.
Testing is performed and passed.
Any deficiencies and deviations are identified and brought to management's attention.


2. Goals of SQA:
he software development is a complex process full risks. There are technical risks such as software will not perform as intended or be too hard to operate, modify, and/or maintain; there are programmatic risks such as the project will overrun cost or schedule.


The goals of SQA is to reduce these risks by:


Appropriately monitoring the software and the development process.
Ensuring full compliance with standards and procedures for software and process.
Ensuring that inadequacies in product, process, or standards are brought to management's attention so that they can be fixed.
SQA is not responsible for producing quality products or for making quality plans. They are responsible for auditing the quality actions and for alerting management to any deviations.
3 Responsibilities of SQA:


To achieve its goals, SQA is responsible for:
Review all development and quality plans for completeness.
Participate as inspection moderators in design and code inspections.
Review all test plans for adherence to standards.
Review samples of all test results to determine adherence to plans.
Periodically audit SCM performance to determine adherence to standards.
Participate in all project phase reviews and write down any nonconformance.

Monday, July 30, 2007

Systems Engineering

Systems Engineering (SE) is an interdisciplinary approach and means for enabling the realization and deployment of successful systems. It can be viewed as the application of engineering techniques to the engineering of systems, as well as the application of a systems approach to engineering efforts. Systems Engineering integrates other disciplines and specialty groups into a team effort, forming a structured development process that proceeds from concept to production to operation and disposal. Systems Engineering considers both the business and the technical needs of all customers, with the goal of providing a quality product that meets the user needs.




Closely related fields:
Many related fields may be considered tightly coupled to systems engineering. These areas have contributed to the development of systems engineering as a distinct entity.



  • Cognitive systems engineering: This is Systems Engineering with the human integrated as an explicit part of the system. It draws from the direct application of centuries of experience and research in both Cognitive Psychology and Systems Engineering. Cognitive Systems Engineering focuses on how man interacts with the environment and attempts to design systems that explicitly respect how humans think, and works at the intersection of problems imposed by the world; needs of agents (human, hardware, and software); and interaction among the various systems and technologies that affect (and/or are affected by) the situation. Sometimes referred to as Human Engineering or Human Factors Engineering, this subject also deals with ergonomics in systems design.


  • Control engineering: The design and implementation of control systems, used extensively in nearly every industry, is a large sub-field of Systems Engineering. The cruise control on an automobile and the guidance system for a ballistic missile are two examples. Control systems theory is an active field of applied mathematics involving the investigation of solution spaces and the development of new methods for the analysis of the control process.


  • Industrial engineering: It is a branch of engineering that concerns the development, improvement, implementation and evaluation of integrated systems of people, money, knowledge, information, equipment, energy, material and process. Industrial engineering draws upon the principles and methods of engineering analysis and synthesis, as well as mathematical, physical and social sciences together with the principles and methods of engineering analysis and design to specify, predict and evaluate the results to be obtained from such systems.


  • Interface design: This design and it's specification are concerned with assuring that the pieces of a system connect and inter-operate with other parts of the system and with external systems as necessary. Interface design also includes assuring that system interfaces be able to accept new features, including mechanical, electrical, and logical interfaces, including reserved wires, plug-space, command codes and bits in communication protocols. This is known as extensibility. Human-Computer Interaction (HCI) or Human-Machine Interface (HMI) is another aspect of interface design, and is a critical aspect of modern Systems Engineering. Systems engineering principles are applied in the design of network protocols for local-area networks and wide-area networks.


  • Operations research: Operations research supports systems engineering. The tools of operations research are used in systems analysis, decision making, and trade studies. Several schools teach SE courses within the operations research or industrial engineering department[citation needed], highlighting the role systems engineering plays in complex projects. operations research, briefly, is concerned with the optimization of a process under multiple constraints.


  • Reliability engineering: This is the discipline of ensuring a system will meet the customer's expectations for reliability throughout its life; i.e. it will not fail more frequently than expected. Reliability engineering applies to all aspects of the system. It is closely associated with maintainability, availability and logistics engineering. Reliability engineering is always a critical component of safety engineering, as in failure modes and effects analysis (FMEA) and hazard fault tree analysis, and of security engineering. Reliability engineering relies heavily on statistics, probability theory and reliability theory for its tools and processes.


  • Performance engineering: This is the discipline of ensuring a system will meet the customer's expectations for performance throughout its life. Performance is usually defined as the speed with which a certain operation is executed or the capability of executing a number of such operations in the unit of time. It may be degraded where operations queue to be executed whenever the capacity is of the system is limited. For example, the performance of a packed-switched network would be characterised by the end-to-end packet transit delay or the number of packets switched within an hour. The design of performant systems makes use of analytical or simulation modeling, whereas the delivery of performant implementation involves thorough performance testing. Performance engineering relies heavily on statistics, queuing theory and probability theory for its tools and processes.


  • Safety engineering: The techniques of safety engineering may be applied by non-specialist engineers (e.g., EEs or SEs) in designing complex systems to minimize the probability of safety-critical failures. The "System Safety Engineering" function helps to identify "safety hazards" in emerging designs, and may assist with techniques to "mitigate" the effects of (potentially) hazardous conditions that cannot be designed out of systems.


  • Security engineering: This can be viewed as an interdisciplinary field that integrates the community of practice for control systems design, reliability, safety and systems engineering. It may involve such sub-specialties as authentication of system users, system targets, and others: people, objects, and processes.


  • Software engineering: From its beginnings Software engineering has shaped modern Systems Engineering practice to a great degree.[citation needed] The techniques used in the handling of complexes of large software-intensive systems has had a major effect on the shaping and reshaping of the tools, methods and processes of SE (e.g., see SysML, CMMI, Object-oriented analysis and design, Requirements engineering, Formal methods and Language theory).


  • Supportability engineering: Any system, when operational and providing the requirements defined in the design, needs degrees of support to maintain the operational functions. Supportability engineering is an analytical process that determines the optimal mix and distribution of support resources. By using the reliability aspects of the system and through isolating failure modes, causes and effects, the system's maintainability can be designed. A properly designed maintenance plan determines support resource capacities, such as trained support staff, documentation, spare parts, test equipment, repair facilities and contracted support, necessary to reduce the mean system downtime.


synchronization

The process of maintaining one operation in step with another. The commonest example is the electric clock, whose motor rotates at some integral multiple or submultiple of the speed of the alternator in the power station. In television, synchronization is essential in order that the electron beams of receiver picture tubes are at exactly the same spot on the screen at each instant as is the beam in the television camera tube at the transmitter

1. The arrangement of military actions in time, space, and purpose to produce maximum relative combat power at a decisive place and time.
2. In the intelligence context, application of intelligence sources and methods in concert with the operation plan.

Synchronization is a problem in timekeeping which requires the coordination of events to operate a system . The familiar conductor of an orchestra serves to keep the orchestra in time. Systems operating with all their parts in synchrony are said to be synchronous.

synchronization

In computer science, synchronization refers to one of two distinct, but related concepts: synchronization of processes, and synchronization of data. Process synchronization refers to the idea that multiple processes are to join up or handshake at a certain point, so as to reach an agreement or commit to a certain sequence of action. Data synchronization refers to the idea of keeping multiple copies of a dataset in coherence with one another, or to maintain data integrity. Process synchronization primitives are commonly used to implement data synchronization.

Process Synchronization
Process synchronization refers to the coordination of simultaneous threads or processes to complete a task in order to get correct runtime order and avoid unexpected race conditions

Data Synchronization
A distinctly different (but related) concept is that of data synchronization. This refers to the need to keep multiple copies of a set of data coherent with one another

Thursday, July 26, 2007

Degrees of rigor

Degrees of Rigor

The degree of rigor is a function of many project characteristics. As an example, small, non-mission critical projects can generally be addressed with somewhat less rigor than large, complex mission critical applications. It should be noted, however, that all projects must be conducted in a manner that results in timely, high quality deliverables.

Four different degrees of rigor are defined for the APM:

Casual. All APM framework activities are applied, but only a minimum task set is required. In general, umbrella tasks will be minimized and documentation requirements will be reduced. All basic principles of software engineering are still applicable.

Structured. The APM framework will be applied for this project. Framework activities and related tasks appropriate to the project type will be applied and umbrella activities necessary to ensure high quality will be applied. SQA, SCM, documentation and measurement tasks will be conducted in a streamlined manner.

Strict. The APM will be applied for this project with a degree of discipline that will ensure high quality. All umbrella activities will be applied and robust documentation will be produced.

Quick Reaction. The APM will be applied for this project, but because of an emergency situation, only those tasks essential to maintaining good quality will be applied. "Back-filling" (e.g., developing a complete set of documentation, conducting additional reviews) will be accomplished after the application/product is delivered to the customer.

Monday, July 23, 2007

SOFTWARE METRICS-TEAM4

Software Metrics

Metrics are management tools which are used to estimate the cost and resource requirements of a project.

In order to conduct a successful software project we must understand the scope of work to be done, the risks incurred, the resources required, the tasks to be accomplished, the milestones to be tracked, the cost, and the schedule to be followed. Project management provides this understanding.

Before a project can be planned, objectives and scope should be established, alternative solutions should be considered, and technical and management constraints should be identified. This information is required to estimate costs, project tasks, and a project schedule.

Metrics help us understand the technical process that is used to develop a product. The process is measured to improve it and the product is measured to increase quality.

Measuring software projects is still controversial. It is not yet clear which are the appropriate metrics for a software project or whether people, processes, or products can be compared using metrics.

Estimates for project cost and time requirements must derived during the planning stage of a project. Experience is often the only guide used to derive these estimates, but it may be insufficient if the project breaks new ground. A number of estimation techniques exist for software development. These techniques consist of establishing project scope, using software metrics based upon past experience are used to generate estimates, and dividing the project into smaller pieces which are estimated individually.