Unit Testing Building Rock-Solid Software Svetlin Nakov Technical Trainer Software University
Software Engineering Fundamentals Svetlin Nakov774
-
Upload
dineshpancharia -
Category
Documents
-
view
226 -
download
0
Transcript of Software Engineering Fundamentals Svetlin Nakov774
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
1/49
Software Engineering
Fundamentals
Svetlin NakovNational Academy for
Software Development
academy.devbg.org
http://academy.devbg.org/http://academy.devbg.org/http://academy.devbg.org/http://academy.devbg.org/ -
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
2/49
Agenda
1. Software engineering overview Requirements
Design
Construction Testing
Project management
2. Development methodologies overview The Waterfall development process
Heavyweight methodologies
Agile methodologies and XP
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
3/49
About The Speaker
Svetlin Nakov Founder and Chairman of BASD
Director training and consulting
activities, National Academy forSoftware Development (NASD)
15 years of developer experience
8 year as a professional software
engineer, trainer and consultant
Author of 4 books, 20 articles, and50 seminar lectures
Lecturer in Sofia University and NBU
http://www.devbg.org/http://www.nakov.com/books/signatures/http://www.devbg.org/dotnetbook/http://www.nakov.com/books/inetjava/ -
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
4/49
Software Engineering
Requirements, Design,
Construction, Testing
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
5/49
What is SoftwareEngineering?
Software engineeringis the
application of a systematic,
disciplined, quantifiable approachto the development, operation,
and maintenance of software
Defini t ion by IEEE
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
6/49
Software Engineering
Software engineering is: An engineering discipline that provides
knowledge, tools, and methods for:
Defining software requirements
Performing software design
Software construction
Software testing
Software maintenance tasks
Software project management
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
7/49
Software DevelopmentActivities
Software development always includesthe following activities (to some extent):
Requirements analysis
Design
Construction
Testing (sometimes)
These activities do not follow strictly oneafter another!
Often overlap and interact
SoftwareProject
Management
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
8/49
Software Requirements
Functional, Non-functional
Requirements, SRS
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
9/49
Software Requirements
Software requ irementsdefine thefunctionality of the system
Answer the question "what?", not
"how?"
Define constraints on the system
Two kinds of requirements
Funct ionalrequirements
Non-funct ionalrequirements
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
10/49
Requirements Analysis
Requ irements analysisstarts from avision about the system
Customers don't know what they need!
Requirements come roughly and arespecified and extended iteratively
Prototypingis often used, especially for
the user interface
The outcome is the Software
Requirements Specification (SRS)
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
11/49
Software RequirementsSpecification (SRS)
The Software Requ irementsSpecif icat ion (SRS)is a formalrequirements document
It describes in details: Functional requirements
Business processes
Actors and use-cases
Non-functional requirements
E.g. performance, scalability, etc.
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
12/49
Software Requirements
It is always hard to describe anddocument the requirements incomprehensive and not ambiguous way
Good requirements save time and money
Requirements always change during theproject!
Good software requirementsspecification reduces the changes
Prototypes significantly reduce changes
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
13/49
Software Requirements
Specification and UIPrototype Examples
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
14/49
Software Architectureand Software Design
S ft A hit t d
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
15/49
Software Architecture andSoftware Design
Software designis a technicaldescription about how the system willimplement the requirements
The sys tem archi tecturedescribes: How the system will be decomposed
into subsystems (modules)
Responsibilities of each module
Interaction between modules
Platforms and technologies
S t A hit t
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
16/49
System ArchitectureDiagram Example
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
17/49
Software Design
Detailed Design
Describes the internal module structure
Interfaces, data design, process design
Object-Oriented Design Describes the classes, their
responsibilities, relationships,dependencies, and interactions
Internal Class Design
Methods, responsibilities, algorithms and
interactions between them
S ft D i D t
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
18/49
Software Design Document(SDD)
The Software Design Document (SDD)isa formal description of the architectureand design of the system
It contains:
Architecture design
Modules and their interaction (diagram)
For each module
Process design (diagrams)
Data design (E/R diagram)
Interfaces design (class diagram)
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
19/49
Software Design
Document Example
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
20/49
Software Construction
Implementation, Unit Testing,
Debugging, Integration
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
21/49
Software Construction
During the so f tware construct ionphasedevelopers create the software
Sometimes called implementat ionphase
It includes: Internal method design
Writing code
Writing unit tests (sometimes)
Testing and debugging
Integration
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
22/49
Writing the Code
Codingis the process of writing theprogramming code (the source code)
The code strictly follows the design
Developers perform in ternal methoddesignas part of coding
The sou rce codeis the output of the
software construction process Written by developers
Can include unit tests
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
23/49
Testing the Code
Test ingchecks whether the developedsoftware conforms to the requirements
Aims to identify defects (bugs)
Developers test the code after write it At least run it to see the results
Unit test ingis even better
Units tests can be repeated many times
System testing is done by QA engineers
Unit testing is done by developers
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
24/49
Debugging
Debuggingaims to find the source ofalready identified defect and to fix it
Performed by developers
Steps in debugging: Find the defect in the code
Identify the source of the problem
Identify the exact place in code causing it
Fix the defect
Test to check if the fix is correct
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
25/49
Integration
Integrationis putting all pieces together Compile, run and deploy the modules as
single system
Test to identify defects
Integration strategies
Big bang, top-down and bottom-up
Continuous integration
Coding != Software
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
26/49
Coding != SoftwareEngineering
Inexperienced developers considercoding the core of development
In most projects coding is only 20% ofthe project activities!
The important decisions are taken duringthe requirements analysis and design
Documentation, testing, integration,maintenance, etc. are often disparaged
Software engineering is not just coding!
Programmer!= so ftware engineer
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
27/49
Software Verification
and Testing
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
28/49
Software Verification
What is so ftware veri f icat ion? It checks whether the developed software
conforms to the requirements
Performed by the Software QualityAssurance Engineers (QA)
Two approaches:
Formal reviewsand inspect ions
Different kinds oftest ing
Cannot certify absence of defects!
Can only decrease their rates
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
29/49
Software Testing
Test ingchecks whether the developedsoftware conforms to the requirements
Testing aims to find defects (bugs)
Black-box and white-box tests
Unit tests, integration tests, system tests,acceptance tests
Stress tests, load tests, regression tests
Tester engineers can use automated testtools to record and execute tests
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
30/49
Software Testing Process
Test planning Establish test strategy and test plan
During requirements and design phases
Test development
Test procedures, test scenarios, testcases, test scripts
Test execution
Test reporting
Retesting the defects
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
31/49
Test Plan and Test Cases
The test p lanis a formal document thatdescribes how tests will be performed
List of test activities to be performed to
ensure meeting the requirements Features to be tested, testing approach,
schedule, acceptance criteria
Test scenarios and test cases Test scenarios stories to be tested
Test cases tests of single function
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
32/49
Test Plans and Test
Cases Example
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
33/49
Software Project
Management
What is Project
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
34/49
What is ProjectManagement?
Project managementis the discipline oforganizing and managing resources inorder to successfully complete a project
Successfully means within definedscope, quality, time and cost constraints
Project constraints:Scope
Quality
Project Success
What is Software Project
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
35/49
What is Software ProjectManagement?
Software pro ject management Management discipline about planning,
monitoring and controlling softwareprojects
Project p lann ing
Identify the scope, estimate the workinvolved, and create a project schedule
Project mon i tor ing and con t ro l
Keep the team up to date on the project'sprogress and handle problems
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
36/49
What is Project Plan?
The pro ject p lanis a document thatdescribes how the work on the projectwill be organized
Contains tasks, resources, schedule,milestones, etc.
Tasks have start, end, assignedresources (team members), % complete,dependencies, nested tasks, etc.
Project management tools simplifycreating and monitoring project plans
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
37/49
Project Plan Example
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
38/49
Development
Methodologies
What is a Development
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
39/49
What is a DevelopmentMethodology?
A development methodo logyis a set ofpractices and procedures for creating
software
A set of rules that developers have tofollow
A set of conventions the organization
decides to follow
A systematical, engineering approach for
organizing software projects
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
40/49
Development Methodologies
The "Waterfall" Process Old-fashioned, not used today
Rational Unified Process (RUP)
Very formal, lots of documentation
Microsoft Solutions Framework (MSF)
Formal heavyweight approach Agile Development Processes
E.g. Extreme Programming
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
41/49
The Waterfall DevelopmentProcess
Th W t f ll P
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
42/49
The Waterfall Process
The waterfall development process:
Software
Requirements
SoftwareDesign
Implementation
(Coding)
Verification
(Testing)
Operation
(Maintenance)
F l M th d l i
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
43/49
Requirements
System
Requirements
Formal Methodologies
Formal methodologies are heavyweight!
Software
Requirements
Analysis
Coding
Testing
Operations
Design
Analysis
Detailed
Design
PreliminaryDesign
Document
UI Design
Document Test
Plan
Preliminary
DesignSoftware
Requirements
SpecificationPrelim.
Revie
w
Program
Design
Design Review
OperatingInstructions
Coding
Integration
Testing
Usage
Code
Review
Lots of documents,diagrams, etc.
Final
Design
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
44/49
Agile Development
Th A il M if t
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
45/49
The Agile Manifesto
Our highest priority is to satisfy the
customer through early and continuous
delivery of valuable software
Manifesto for Agi le
Th A il S i it
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
46/49
Incremental Working sof twareover comprehensive
documentation
Cooperation
Customer col laborat ionover contractnegotiation
Straightforward
Ind iv iduals and interact ion sover processesand tools
Adaptive
Responding to changeover following a plan
The Agile Spirit
A il M th d l i
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
47/49
Agile Methodologies
eXtreme Programming (XP) Scrum
Crystal family of methodologies
Feature-Driven Development (FDD)
Adaptive Software Development (ASD)
Dynamic System Development Model(DSDM)
Agile Unified Process (AUP)
Extreme Programming:
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
48/49
Extreme Programming:The 12 Key Practices
The Planning Game
Small Releases
Metaphor
Simple Design
Test-Driven Development Refactoring
Pair Programming
Collective Ownership
Continuous Integration
40-Hour Workweek
On-site Customer
Coding Standards
Software Engineering
-
7/28/2019 Software Engineering Fundamentals Svetlin Nakov774
49/49
Software EngineeringFundamentals
Questions?