You are on page 1of 27

Implementation and Testing of Software Projects

Alosh Bennett
Scope of the talk

To introduce you to various techniques and technologies that will


enable you build professional quality software.

But

I can only show you the way.


Software Design – What is a good design?
Build software that works and works well.

 Things to consider while designing a system


 Software should be user friendly
 Software should be reliable
 Fast to respond
 Compatible with various operating systems etc
 Should be easy to maintain
 Should be easy to extend
 Should re-use and should be re-usable
 Should be secure
Software Design – How to design a good software?
Signposts on the way to building good software

 Design concepts that help build a good software


 Abstraction – Let the complicacies remain under the hood
 Modularity – Building blocks from which the software is made
 Data Hiding – Information on a need-to-know basis
 Testability – A chain is only as strong as its weakest link
Design Tools
Blueprint of the system

 Unified Modeling Language (UML)


•Industry standard
•General purpose modeling language
•Way to visualize a system's architectural blueprints

 Entity Relationship diagrams


•Conceptual representation of data
•Database modeling method
UML – Class Diagram
UML – Activity Diagram
ER Diagram example
Design Patterns
Not re-inventing the wheel
A design pattern is a general reusable solution to a commonly occurring
problem in software design.
Coding – Choose the right Language
One size doesn't fit all
 Learn more than one language
•Different languages have different capabilities
•Java for portability
•C for device programming

•Supports different programming models


•Java – OOPS
•Clojure – Functional programming
•Scala – Concurrency
•Python – Scripting
•Ruby – Dynamic programming
Programming Paradigms Speaking in style

 Procedural Programming
•Program as sequence of steps to be carried out.

 Object Oriented Programming


•Objects have behaviour and data
•Program as interaction of objects.

 Functional Programming
•Modules like mathematical functions
•Program as a series of function calls
Setting up the environment

 A powerful development environment


 Contains the right tools
 Linux
•Vast tool support
•Command line
•Built by developers for developers
 Native Installation
 Virtual Machines
•Easy to install
•Safe
•Preconfigured Images
Virtual Machine running Ubuntu
IDE – Integrated Development Environment

 DO NOT code using notepad


 OK for single file projects
 Cannot manage as the project grows in size
 IDE
•Much more than an editor
•Complete development environment
 Features
•Syntax highlighting
•Code Completion
•Access documentation
•Refactor code
•Build
•Test
•Deploy
Netbeans IDE
Netbeans IDE
Coding Guidelines
 Coding Standards – Best practices to follow while coding
•IDE Support – Code coach

 Handle Error cases


 Use existing libraries
 Code against standards
 Provide comments
Build and Deploy
 Use build tools to compile and deploy your projects
 Apache ANT
•Used for building and deploying of Java Projects
•Has built-in tasks to compile, assemble, test, run
•Extremely flexible
•IDE integration – can run ANT from within the IDE
Source Control
 Keeps track of changes and backup of source code
 Provide backup against accidental deletion
 Provide backup to revert back changes
 Means to collaborate
 Multiple people can work on the project simultaneously
 CVS – Concurrent Versions System
•SourceForge – Online CVS repository
 Git
•GitHub – Online Git repository
CVS from NetBeans
GitHub – Jquery Project
GitHub – Jquery History
Testing
 Functional Testing – Test the software's features
•Decide on the features to be tested
•Come up with test cases
•Test around boundary conditions

 Non-Functional Testing – Testing the technology


•Is the software compatible with other OS?
•How is the performance?
•Security – Can the system be hacked?
The new style of testing
 Automated Testing
 Make use of testing frameworks
•Junit
•Industry standard
•Framework for defining test cases
•Lot of built-in features for supplying value and evaluating
results
•Write less testing code and more test cases
•Available for other languages too
 Write test cases as you write the code
 Test cases slowly evolves to completion
 IDE Integration – Run the test cases automatically from the IDE
Software Implementation and Testing - Checklist

 Modeling – UML diagrams


 Development Environment – Linux (Native/Virtual)
 IDE
 Code Coach
 Build Tool – ANT
 Online Source Control – GitHub/SourceForge
 JUnit Test cases
Resources
 UML Modeling tools
•Argo UML - http://argouml.tigris.org/
•Umbrello - http://uml.sourceforge.net/
 Virtual Machines
•Virtual Box - http://www.virtualbox.org/
 IDEs
•Netbeans - http://netbeans.org/
•Eclipse - http://www.eclipse.org/
 Coding Standards
•Java - http://www.oracle.com/technetwork/java/codeconvtoc-136057.html
 Build Tools
•Apache ANT - http://ant.apache.org/
 Source Control
•CVS - http://savannah.nongnu.org/projects/cvs
•Git - http://git-scm.com/
 Online Source Control
•SourceForge - http://sourceforge.net/
•GitHub - https://github.com/
References
 http://en.wikipedia.org
 http://www.mathcs.richmond.edu/~lbarnett/MCS_dept/junit/junit_intro.html
 http://www.exforsys.com/tutorials/oops.html
 http://www.tutorialspoint.com/uml/uml_class_diagram.htm

 Slides available at
http://www.aloshbennett.in/weblog/topics/sessions/

Thank You

You might also like