Cursul 9 – 18 Aprilie [email protected]
Din Cursurile trecute…
◦ Design Patterns
Creational Patterns
Structural Patterns
Behavioral Patterns
Alte tipuri de Design Patterns
Quality Assurance
◦ Software Testing
◦ Testing Methodologies
◦ Testing process
◦ Manual Testing vs Automatic Testing
GOF = ?
Creational Patterns
Structural Patterns
Behavioral Patterns
Abstract Factory
Builder
Factory Method
Prototype = ?
Singleton
Adapter
Bridge
Composite
Decorator
Façade
Flyweight = ?
Proxy
Help, multi level filter
Customer, waiter, cook
Musical notes
Remote control
Control tower
Memento:
◦ Undo and restore operations in most software
◦ Database transactions
State
◦ Network connection
Excel graphs, News Agency
Standard calculator, Robot
Games, Travel Agency
Car elements visitor
Concurrency Patterns - deal with multi-threaded programming paradigm
◦ Single Threaded Execution – Prevent concurrent calls to the method from resulting in concurrent
executions of the method
◦ Scheduler - Control the order in which threads are scheduled to execute single threaded code using an object that explicitly sequences waiting threads
◦ Producer-Consumer - Coordinate the asynchronous production and consumption of information or
objects
Testing Patterns 1
◦ Black Box Testing - Ensure that software satisfies requirements
◦ White Box Testing - Design a suite of test cases to exhaustively test software by testing it in all
meaningful situations
◦ Unit Testing - Test individual classes
◦ Integration Testing - Test individually developed classes together for the first time
◦ System Testing - Test a program as a whole entity
Testing Patterns 2
◦ Regression Testing - Keep track of the outcomes of testing software with a suite of tests over time
◦ Acceptance Testing – Is done to ensure that delivered software meets the needs of the customer or
organization that the software was developed for
◦ Clean Room Testing - People designing software should not discuss specifications or their
implementation with people designing tests for the software
Distributed Architecture Patterns
◦ Mobile Agent - An object needs to access very large volume of remote data => move the object to the data
◦ Demilitarized Zone - You don’t want hackers to be able to gain access to servers
◦ Object Replication - You need to improve the throughput or availability of a distributed
computation
Transaction patterns -
Ensure that atransaction will never have any unexpected or inconsistent outcome. Design and implement
transactions correctly and with a minimum of effort
Distributed computing patterns
Temporal patterns -
distributed applications to function correctly, the clocks on the computersthey run on must be synchronized. You may need to access pervious or future states of an object.
The values of an object’s attributes may change over time
Database patterns
Refers to planned and systematic production
processes that provide confidence in a product's suitability for its intended purpose.
A set of activities intended to ensure that products satisfy customer requirements
QA cannot absolutely guarantee the production of quality products, unfortunately, but makes this more likely
Two key principles characterize QA:
◦ "fit for purpose" - the product should be suitable for the intended purpose, and
◦ "right first time" - mistakes should be eliminated
Price Time
Quality
“The process of exercising or evaluating a system by manual or automated
means to verify that it satisfies specified requirements or to identify differences
between expected and actual results.”
(IEEE Standard Glossary, 1983)
(SQA) consists of a means of monitoring the software engineering processes and methods used to ensure quality
May include ensuring conformance to one or more standards, such as ISO 9000 or CMMI
SQA encompasses the entire software
development process, which includes processes such as
software design, coding, source code control, code reviews, change management, configuration management, and release
management
ISO 9000 is a family of standards for quality management systems
Some of the requirements in ISO 9001 (from ISO 9000 family) include
◦ a set of procedures;
◦ monitoring processes;
◦ keeping adequate records;
◦ checking output for defects;
◦ regularly reviewing individual processes;
◦ facilitating continual improvement
An empirical investigation conducted to provide information about the
quality of the product or service under test, with respect to the context in which it is intended to operate
. Allow the business to
appreciate and understand
the risks at implementation of the software Test techniques include the process of
executing a program or application with the intent of finding software bugs
The process of validating and verifying that a software program/application/product meets the business and technical requirements that guided its design and development
Can be implemented at any time in the development process
However the most test effort is employed after the requirements have been defined and coding process has been completed
In XP…
Testarea Software NU este o fază
Este un proces care trebuie integrat în toate fazele
construcţiei produsului software
Există documente de testare asociate la fiecare fază a
dezvoltării
De a localiza şi preveni bugs cât mai curând posibil
De a efectua toate Testele
corespunzător Cerinţelor, într-un mod cât mai eficient şi mai economic
De a aduce produsul software la un
nivel de calitate cât mai ridicat (pentru client)
Testarea nu e doar pentru Software!
Este pentru toate componentele ce vor
fi livrate clientului
Comunicarea deficitară sau Blocajele de comunicare
Înţelegerea deficitară
Presiunea Timpului
Nivelul Programatorului este Scăzut
Comunicare Deficitară
32
Cerinţe definite Incomplet
Modelare Ambiguă sau Insuficientă
Erori de Programare
50%
30%
20%
0 20 40 60 80 100
Cerinţe Modelare Impl. Test. Int. Test.sist. Client
Găsirea târzie a bugs un cost
cât mai mare pentru a le fixa
CERINŢE MODELARE IMPLEM. TESTARE CLIENT
Profesionalismul în testare constă în
abilitatea de a selecta numărul minim
de cazuri de testare eficientă ce va fi
capabil să verifice numărul maxim de
funcţii ale sistemului
Niciodată
Când numărul de erori găsite într-un ciclu de testare este mai mic decât un număr stabilit
Când nu mai sunt găsite defecte critice şi majore
Când timpul a expirat
Echipa de Test
Mediul de Testare
Procese
de Test Testware
Designs Acquires Configures Utilizes Support
Provides a Platform
for the operation of
Determine the usage of
Designs Acquires Configures
Utilizes Support
Create Articulates
Trains Applies Internalize
Diferenţa dintre testare SW şi debug SW
Nivele de Test
Metode de Testare
Conţinutul Testării
Testare Manuală vs Testare Automată
Testare
•Verificarea respectării cerinţelor
•De regulă e făcută de o entitate externă şi neutră
•Este un proces
planificat şi controlat
Debug
•Verificarea validităţii secţiunilor
•E făcută de programator
•E un proces aleator
Unitate sau Debug
Modul/Sub-Sistem
Integrare
Sistem
Acceptare
Testarea unei funcţii, a unui program, a unui ecran, a unei funcţionalităţi
Se face de către programatori
Predefinită.
Rezultatele trebuie documentate
Se folosesc simulatoare pentru Input şi Output
Testarea funcţionării unor module în acelaşi timp
Testarea coexistenţei
Se execută de către programatori sau de către testeri analişti
Testare pre-planificată
Rezultatele se documentează
System testing of software or hardware is
testing conducted on a complete, integrated
system to evaluate the system's compliance with its specified requirements.
System testing falls within the scope of black box testing
System testing is a more limiting type of testing;
it seeks to detect defects both within the "inter- assemblages" and also within the system as a whole.
White Box
Black Box
Gray Box
Graphical user Interface Testing
Acceptance Testing
Regression Testing
END DO
The tester has access to the internal data structures and algorithms
Types of white box testing
◦ api testing - Testing of the application using Public and Private APIs
◦ code coverage - creating tests to satisfy some criteria of code coverage
◦ fault injection methods
◦ mutation testing methods
◦ static testing - White box testing includes all static testing
Input Output
Spec
"like a walk in a dark labyrinth without a flashlight,"
Specification-based testing
Black box testing methods include: equivalence partitioning, boundary value analysis, all-pairs testing, fuzz testing, model-based testing,
traceability matrix, exploratory testing and specification-based testing.
This involves having access to internal data structures and algorithms for purposes of
designing the test cases, but testing at the user, or black-box level
Manipulating input data and formatting output do not qualify as "grey-box," because the input and output are clearly outside of the "black-
box" that we are calling "the software under test."
In computer science, GUI software testing is the process of testing a product that uses a
graphical user interface, to ensure it meets its written specifications.
The variety of errors found in GUI applications:
◦ Data validation, Incorrect field defaults, Mandatory fields, not mandatory, Wrong fields retrieved by queries, Incorrect search criteria
◦ Field order, Multiple database rows returned, single row expected
◦ Currency of data on screens, Correct window modality?
◦ Control state alignment with state of data in window?
A black-box testing performed on a system prior to its delivery
In software development, acceptance testing by the system provider is often distinguished from acceptance testing by the customer (the user or client) prior to accepting transfer of ownership.
In such environments, acceptance testing
performed by the customer is known as user acceptance testing (UAT).
This is also known as end-user testing, site (acceptance) testing, or field (acceptance) testing.
Regression testing is any type of software testing which seeks to uncover software regressions.
Such regressions occur whenever software functionality that was previously working correctly, stops working as intended.
Typically regressions occur as an unintended consequence of program changes.
Common methods of regression testing include re-running previously run tests and checking
whether previously fixed faults have re-emerged
Definirea structurii testării
Se împarte sistemul într-o structură ierarhică
Se descriu resursele necesare pentru testare
Se planifică testarea
Împărţirea în paşi se face ţinând cont de cerinţe
Se descrie ce va fi testat pentru componente şi funcţii
Descrie CUM să testăm sistemul
constructori
set, get
toString
Se găsesc rapid problemele
Se câştigă timp când e nevoie să repetăm
testele
Procesul de scriere a codului e mult mai flexibil
Reduce volumul de testare manuală
Dezvoltarea software devine previzibilă şi repetabilă
Rezolvă problemele de interfaţă: scrierea
corectă a textelor, mesajelor, aranjarea corectă în pagină, în ordinea care trebuie, sunt vizibile, etc.
Realizarea Scenariilor de
test poate fi o treabă de
durată şi anevoioasă şi
implică o cunoaştere
temeinică a întregului
sistem
Convenţiile de programare sunt importante deoarece:
80% din timpul alocat unei componente software este întreţinere
Foarte rar un produs software este întreţinut pe toată durata folosirii lui de către aceeaşi
persoană
Convenţiile de cod îmbunătăţesc lizibilitatea produsului, şi permite inginerilor software să înţeleagă rapid un program nou
Folosirea fără rezerve a Comentariilor: ce fac procedurile, ce reprezintă variabilele,
explicarea paşilor algoritmului, etc.
Folosirea numelor sugestive pentru variabile si proceduri
Scrierea modulara a proiectului
Folosirea perechilor de tip set/get, start/stop, adauga/sterge, salvare/incarcare
C++:
◦ http://www.chris-
lott.org/resources/cstyle/
◦ http://geosoft.no/development/cppstyle.
html
Java:
◦ http://java.sun.com/docs/codeconv/
◦ http://geosoft.no/development/javastyle
.html
Behavioral Patterns: http://www.oodesign.com/behavioral- patterns/
Pattern Synopses2,3:
http://www.mindspring.com/~mgrand/pattern_synopses2.htm http://www.mindspring.com/~mgrand/pattern_synopses3.htm
Software Quality Assurance:
http://satc.gsfc.nasa.gov/assure/agbsec3.txt
Software Testing:
http://en.wikipedia.org/wiki/Software_testing
GUI Software Testing:
http://en.wikipedia.org/wiki/GUI_software_testing
Regression Testing:
http://en.wikipedia.org/wiki/Regression_testing
Junit Test Example:
http://www.cs.unc.edu/~weiss/COMP401/s08-27- JUnitTestExample.doc