0
The software management and engineering in the AI-oriented projects Dr  W Pietruszkiewicz SDART Ltd
Plan of presentation <ul><li>Introduction </li></ul><ul><li>Software project management </li></ul><ul><li>Software design ...
Introduction
Artificial Intelligence
Project success
Research oriented software <ul><li>Time and budget aren ’ t usually fixed – it is possible to extend the research </li></u...
Product oriented software <ul><li>Time and budget are usually fixed </li></ul><ul><li>Quality is adjusted to the available...
AI & software in projects   Proper management Struggle
This tutorial <ul><li>Reasons to propose this tutorial: </li></ul><ul><li>There exist the software projects without AI but...
This tutorial <ul><li>Will: </li></ul><ul><ul><li>present a selection of the popular techniques and methods for software d...
Software project management
AI & soft – PM nightmare <ul><li>In the project management two types of projects are the symbols of unpredictability: </li...
Software development schema
DM   management <ul><li>Data mining management seems to be more organised than AI </li></ul><ul><li>There are different mo...
CRISP-DM
SEMMA
DMAIC&DMADV
Management model <ul><li>Can ’ t we use any DM model to properly manage the AI&software projects? Yes we could …. only if ...
Common risk sources
Risk strategies <ul><li>Avoidance </li></ul><ul><li>Retention </li></ul><ul><li>Sharing </li></ul><ul><li>Reduction </li><...
Software quality <ul><li>There are many software quality factors, among them: </li></ul>
Software quality
Software quality <ul><li>If an application is a product users perceive only its „front ”  parts: </li></ul><ul><li>GUI </l...
Software metrics <ul><li>Tom DeMarco said „You can ’ t control what you can ’ t measure ” </li></ul><ul><li>Software metri...
Software estimation <ul><li>Estimation problem </li></ul>I think I ’ ve forgotten something, but what was it???
Methodology & Life cycle <ul><li>Software methodology defines the structure, plan and management of developed software </l...
M&LC– staged delivery Requirements Design Implementation Verification Maintenance
M&LC - spiral  <ul><li>Spiral model – Boehm 1988 </li></ul>
M&LC – staged delivery Conception Analysis Desing Stage 1 Stage 2 Stage n
M&LC – design to schedule Conception Analysis Desing Stage 1 Stage 2 Stage n Software  release Time? Costs?
M&LC - Agile <ul><li>The Agile development is based on the iterative model </li></ul>Initial planning Planning Requirement...
M&LC - XP <ul><li>Extreme programming is an Agile implementation: </li></ul><ul><li>Programming in pairs </li></ul><ul><li...
M&LC - SCRUM  <ul><li>Project is being developed by Pigs & Chickens </li></ul><ul><li>Pig is committed to the project i.e....
M&LC - SCRUM
M&LC – Unified Process <ul><li>Is an iterative software development framework </li></ul>
M&LC – UP versions <ul><li>Rational Unifed Process </li></ul><ul><li>Agile Unified Process </li></ul><ul><li>Open Unified ...
M&LC – selection <ul><li>The factors that influences life cycle selection are: </li></ul><ul><li>Size of project </li></ul...
M&LC  - summary <ul><li>Waterfall is still the most frequently used model by the biggest software companies </li></ul><ul>...
Collaboration Homogeneous research team Heterogeneous software team
Project controlling
Software design
Architecture <ul><li>Architecture is a high level planning for the software that does not involve any functional decisions...
Views <ul><li>The views are perspectives that are used to represent different aspect of the system: </li></ul><ul><li>Code...
Frameworks <ul><li>Software architecture is defined by various frameworks defining its necessary elements: </li></ul><ul><...
Frameworks - 4+1
Design concepts <ul><li>Abstraction & refinement – generalisation  </li></ul><ul><li>Modularity </li></ul><ul><li>Hierarch...
UML <ul><li>Unified Modeling Language: </li></ul><ul><li>Object oriented </li></ul><ul><li>Unified Booch, OOSE, OMT modell...
UML Diagrams
UML Advantages <ul><li>UML became an industry standard due to: </li></ul><ul><li>Visualisation </li></ul><ul><li>Documenti...
UML Tools <ul><li>Papyrus – http://www.papyrusuml.org  </li></ul><ul><li>Poseidon for UML  - http://www.gentleware.com </l...
Supporting tools <ul><li>Let ’ s take a look at the supporting tools </li></ul><ul><li>If something could be done simpler ...
Version controlling <ul><li>How to avoid the mess dealing with the different versions of files in projects? </li></ul><ul>...
Version controlling <ul><li>Version controlling allows the development team to manage different versions of software. They...
Version controlling – local systems <ul><li>Revision Control System </li></ul><ul><li>Source Conde Control System </li></u...
Version controlling - distributed <ul><li>DCVS (Distributed CVS) </li></ul><ul><li>Monotone </li></ul><ul><li>GNU arch </l...
Version controlling – client/server <ul><li>CVS </li></ul><ul><li>SVN </li></ul><ul><li>Codendi </li></ul><ul><li>ClearCas...
Supporting tools   &   technologies
Automated builds - advantages <ul><li>Efficiency increase </li></ul><ul><li>Development process simplification </li></ul><...
Automated builds <ul><li>The automated build tools include: </li></ul><ul><li>make </li></ul><ul><li>Maven </li></ul><ul><...
Automated testing - make An example of  makefile  taken from QT library. PNGMAK=scripts/makefile.linux all: cd zlib; ./con...
Automated testing - Ant <project name=&quot;MyProject&quot; default=&quot;dist&quot; basedir=&quot;.&quot;> <description>s...
Automated testing - Maven <project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; mlns:xsi=&quot;http://www.w3.org/20...
Automated testing - unit The most popular unit testing tool is xUnit available in many versions for all popular languages ...
Automated testing - system <ul><li>Automated GUI tests perceive the application as a black-box and test it from the user ’...
Code documenting <ul><li>Automatic API documentation tools: </li></ul><ul><li>JavaDoc </li></ul><ul><li>DoxyGen </li></ul>...
Bug tracking <ul><li>Issue/Bug Tracking Systems usage leads to: </li></ul><ul><li>Better quality control </li></ul><ul><li...
Bug tracking – bug categories
Bug tracking <ul><li>Bugzilla </li></ul><ul><li>Flyspray </li></ul><ul><li>Mantis </li></ul><ul><li>Trac </li></ul><ul><li...
Bug tracking
AI implementation
Implementation <ul><li>Transforms the design (plan) into the code </li></ul><ul><li>Problems: </li></ul><ul><ul><li>Techno...
Levels of programming languages
1st generation <ul><li>The code lines are equal to the processor instructions – one to one </li></ul><ul><li>Machine code ...
2nd generation <ul><li>Symbolic representation of processor ’ s instructions </li></ul><ul><li>Assembler language </li></ul>
3rd generation <ul><li>Instructions represent the basic operations </li></ul><ul><li>Oriented on programmer </li></ul><ul>...
4th generation <ul><li>Specialised languages oriented on advanced operations </li></ul><ul><li>RAD tools are 4GL build ove...
5th generation <ul><li>Represent not algorithms but desired outcome </li></ul><ul><li>Logical programming </li></ul><ul><l...
Hybrid programming – embedding <ul><li>Hybrid programming (embedding languages) could be synergic but: </li></ul><ul><li>I...
Programming paradigms <ul><li>Paradigm is a fundamental style of computer programming and defines the concept of programmi...
Programming paradigms <ul><li>The most popular paradigms are: </li></ul><ul><li>Agent-oriented </li></ul><ul><li>Declarati...
Desktop applications <ul><li>C/C++ </li></ul><ul><li>Java </li></ul><ul><li>C# </li></ul><ul><li>Python </li></ul>
Web services – server side <ul><li>Java EE </li></ul><ul><li>PHP </li></ul><ul><li>Python </li></ul><ul><li>Ruby </li></ul...
Web services - RIAs <ul><li>Flash </li></ul><ul><li>AJAX </li></ul><ul><li>Java SE </li></ul><ul><li>JavaFX </li></ul><ul>...
Mobile applications <ul><li>Java ME </li></ul><ul><li>C++ </li></ul><ul><li>Objective-C </li></ul>
Languages popularity http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Characteristics - domain <ul><li>Specialised – good at something but below average on other things </li></ul><ul><li>Gener...
Characteristics - speed <ul><li>Compiled faster </li></ul><ul><li>Interpreted slower </li></ul><ul><li>But: </li></ul><ul>...
Characteristics - portability <ul><li>Software could be portable on two levels: </li></ul><ul><li>Source code </li></ul><u...
Characteristics - prototyping <ul><li>Ability to verify the assumption: </li></ul><ul><li>Dynamic language </li></ul><ul><...
Characteristics – target platform <ul><li>Target platform: </li></ul><ul><li>PC </li></ul><ul><li>Mobile </li></ul><ul><li...
Computer languages Scientific perspective Programming perspective
Why use a specialised languages <ul><li>Popular in the research community </li></ul><ul><li>Specialized languages </li></u...
Why not use them <ul><li>Specialised not universal </li></ul><ul><li>High price </li></ul><ul><li>Simple or no GUI </li></...
Important programming features <ul><li>Dynamic languages: </li></ul><ul><li>Do not care about types of data </li></ul><ul>...
Important programming features <ul><li>Prototyping: </li></ul><ul><li>Checks algorithms </li></ul><ul><li>Easily visualise...
Important programming features <ul><li>Scientific libraries: </li></ul><ul><li>How often do we construct new algorithms (C...
Important  programming  features <ul><li>Visual design (graphical programming): </li></ul><ul><li>GUI could be constructed...
More important part of AI software Knowledge Models Rules Graphs
Hybrid software development Research Development Idea Product Replanning & redesign Technology X Technology X Technology Y...
Programming libraries – C/C++ <ul><li>MLC++ http://www.sgi.com/tech/mlc/ </li></ul><ul><li>FANN http://leenissen.dk/fann/ ...
Programming libraries – Java <ul><li>Java-ML http://java-ml.sourceforge.net/ </li></ul><ul><li>Weka Engine http://www.cs.w...
Programming libraries – C# <ul><li>Infer.NET http://research.microsoft.com/en-us/um/cambridge/projects/infernet/ </li></ul...
Programming libraries – Python <ul><li>Orange engine http://www.ailab.si/orange/ </li></ul><ul><li>PyML http://pyml.source...
Programming libraries – PHP <ul><li>FANN PHP Extension http://fann.sourceforge.net/fann.html </li></ul><ul><li>Tremani Neu...
Example I – Java <ul><li>A simple data mining task </li></ul><ul><li>Uses Java-ML library </li></ul>
Example II – Python <ul><li>Adaptive filtering algorithm </li></ul><ul><li>Use as a web service (server part) </li></ul><u...
Example III – Flex <ul><li>Particle Swarm Optimisation example </li></ul><ul><li>RIA application </li></ul><ul><li>Uses a ...
Thank you. Any questions? Get in touch: www.sdart.co.uk
Upcoming SlideShare
Loading in...5
×

The software management and engineering in the AI-oriented projects tutorial

846

Published on

SDART Ltd presents a tutorial about Software Management Engineering in AI-based projects. The tutorial's aim is to familiarise participants with the problems concerning AI-based software project management.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
846
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
61
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "The software management and engineering in the AI-oriented projects tutorial"

  1. 1. The software management and engineering in the AI-oriented projects Dr W Pietruszkiewicz SDART Ltd
  2. 2. Plan of presentation <ul><li>Introduction </li></ul><ul><li>Software project management </li></ul><ul><li>Software design </li></ul><ul><li>AI implementation </li></ul><ul><li>Examples of AI software </li></ul>
  3. 3. Introduction
  4. 4. Artificial Intelligence
  5. 5. Project success
  6. 6. Research oriented software <ul><li>Time and budget aren ’ t usually fixed – it is possible to extend the research </li></ul><ul><li>Resources are flexible </li></ul><ul><li>People mainly have the personal interests (fame, dissertations, publications …) </li></ul><ul><li>Quality (functionality) is the main concern </li></ul>
  7. 7. Product oriented software <ul><li>Time and budget are usually fixed </li></ul><ul><li>Quality is adjusted to the available budget and schedule </li></ul><ul><li>People mainly have the business interests </li></ul><ul><li>Resources aren ’ t flexible </li></ul>
  8. 8. AI & software in projects   Proper management Struggle
  9. 9. This tutorial <ul><li>Reasons to propose this tutorial: </li></ul><ul><li>There exist the software projects without AI but I ’ m not sure if there exist AI projects without the software (embedded count too!) … </li></ul><ul><li>The knowledge about the software management is unpopular among AI researchers </li></ul><ul><li>At SDART we deal with the AI-oriented software projects </li></ul>
  10. 10. This tutorial <ul><li>Will: </li></ul><ul><ul><li>present a selection of the popular techniques and methods for software development </li></ul></ul><ul><ul><li>evaluate them from AI perspective </li></ul></ul><ul><ul><li>propose what could be used </li></ul></ul><ul><li>Will not: </li></ul><ul><ul><li>say what have to be used </li></ul></ul><ul><ul><li>be a guide ready to be applied step-by-step </li></ul></ul>
  11. 11. Software project management
  12. 12. AI & soft – PM nightmare <ul><li>In the project management two types of projects are the symbols of unpredictability: </li></ul><ul><ul><li>Research projects </li></ul></ul><ul><ul><li>… . software projects </li></ul></ul><ul><li>What could we do dealing with an AI-oriented software projects? Professionally manage them! </li></ul>
  13. 13. Software development schema
  14. 14. DM management <ul><li>Data mining management seems to be more organised than AI </li></ul><ul><li>There are different models of DM organisation: </li></ul><ul><li>CRISP-DM </li></ul><ul><li>SEMMA </li></ul><ul><li>DMAIC/DMADV </li></ul>
  15. 15. CRISP-DM
  16. 16. SEMMA
  17. 17. DMAIC&DMADV
  18. 18. Management model <ul><li>Can ’ t we use any DM model to properly manage the AI&software projects? Yes we could …. only if the software does not constitute any significant part of the project. Meanwhile … </li></ul><ul><li>AI projects require software to research </li></ul><ul><li>These projects require software to use AI </li></ul>
  19. 19. Common risk sources
  20. 20. Risk strategies <ul><li>Avoidance </li></ul><ul><li>Retention </li></ul><ul><li>Sharing </li></ul><ul><li>Reduction </li></ul>
  21. 21. Software quality <ul><li>There are many software quality factors, among them: </li></ul>
  22. 22. Software quality
  23. 23. Software quality <ul><li>If an application is a product users perceive only its „front ” parts: </li></ul><ul><li>GUI </li></ul><ul><li>Errors </li></ul><ul><li>Documentation </li></ul>
  24. 24. Software metrics <ul><li>Tom DeMarco said „You can ’ t control what you can ’ t measure ” </li></ul><ul><li>Software metrics measure some properties of a software or its specification e.g. complexity, quality, efficiency or size </li></ul>
  25. 25. Software estimation <ul><li>Estimation problem </li></ul>I think I ’ ve forgotten something, but what was it???
  26. 26. Methodology & Life cycle <ul><li>Software methodology defines the structure, plan and management of developed software </li></ul><ul><li>Methodology contains development philosophy and tools, methods and models supporting the process </li></ul><ul><li>Life cycle model defines the phases and activities </li></ul>
  27. 27. M&LC– staged delivery Requirements Design Implementation Verification Maintenance
  28. 28. M&LC - spiral <ul><li>Spiral model – Boehm 1988 </li></ul>
  29. 29. M&LC – staged delivery Conception Analysis Desing Stage 1 Stage 2 Stage n
  30. 30. M&LC – design to schedule Conception Analysis Desing Stage 1 Stage 2 Stage n Software release Time? Costs?
  31. 31. M&LC - Agile <ul><li>The Agile development is based on the iterative model </li></ul>Initial planning Planning Requirements Analysis and design Implementation Deployment Testing Evaluation
  32. 32. M&LC - XP <ul><li>Extreme programming is an Agile implementation: </li></ul><ul><li>Programming in pairs </li></ul><ul><li>Extensive code review </li></ul><ul><li>Avoids the programming required in the future </li></ul><ul><li>Automated tasks </li></ul><ul><li>Nothing is fixed i.e. everything could be redone </li></ul>
  33. 33. M&LC - SCRUM <ul><li>Project is being developed by Pigs & Chickens </li></ul><ul><li>Pig is committed to the project i.e. ScrumMaster, Team, ProductOwner </li></ul><ul><li>Chicken is involved i.e.: Stakeholder, Manager </li></ul>
  34. 34. M&LC - SCRUM
  35. 35. M&LC – Unified Process <ul><li>Is an iterative software development framework </li></ul>
  36. 36. M&LC – UP versions <ul><li>Rational Unifed Process </li></ul><ul><li>Agile Unified Process </li></ul><ul><li>Open Unified Process </li></ul><ul><li>Enterprise Unified Process </li></ul>
  37. 37. M&LC – selection <ul><li>The factors that influences life cycle selection are: </li></ul><ul><li>Size of project </li></ul><ul><li>Understood requirements </li></ul><ul><li>Desired reliability </li></ul><ul><li>Allowed overheads </li></ul><ul><li>Progress visibility </li></ul><ul><li>Sophisticated management </li></ul><ul><li>Allowed corrections </li></ul>
  38. 38. M&LC - summary <ul><li>Waterfall is still the most frequently used model by the biggest software companies </li></ul><ul><li>But they do it preparing „yet another version of X ” </li></ul><ul><li>AI projects are usually new for you as well as for everyone else, so do not expect it to be as easy as software mentioned above </li></ul>
  39. 39. Collaboration Homogeneous research team Heterogeneous software team
  40. 40. Project controlling
  41. 41. Software design
  42. 42. Architecture <ul><li>Architecture is a high level planning for the software that does not involve any functional decisions </li></ul>
  43. 43. Views <ul><li>The views are perspectives that are used to represent different aspect of the system: </li></ul><ul><li>Code/module view </li></ul><ul><li>Concurrency/process/thread view </li></ul><ul><li>Data view </li></ul><ul><li>Development/structural view </li></ul><ul><li>Functional/logic view </li></ul><ul><li>Physical/deployment view </li></ul><ul><li>User action/feedback view </li></ul>
  44. 44. Frameworks <ul><li>Software architecture is defined by various frameworks defining its necessary elements: </li></ul><ul><li>4+1 </li></ul><ul><li>RM-ODP </li></ul><ul><li>DODAF </li></ul><ul><li>SOMF </li></ul><ul><li>… </li></ul>
  45. 45. Frameworks - 4+1
  46. 46. Design concepts <ul><li>Abstraction & refinement – generalisation </li></ul><ul><li>Modularity </li></ul><ul><li>Hierarchy </li></ul><ul><li>Information & functionality enclosure </li></ul><ul><li>Structural partitioning – vertical & horizontal </li></ul>
  47. 47. UML <ul><li>Unified Modeling Language: </li></ul><ul><li>Object oriented </li></ul><ul><li>Unified Booch, OOSE, OMT modelling methods </li></ul><ul><li>Currently in 2.2 version – the most of software supports 2.0 </li></ul>
  48. 48. UML Diagrams
  49. 49. UML Advantages <ul><li>UML became an industry standard due to: </li></ul><ul><li>Visualisation </li></ul><ul><li>Documenting </li></ul><ul><li>Specifying </li></ul><ul><li>Constructing </li></ul>
  50. 50. UML Tools <ul><li>Papyrus – http://www.papyrusuml.org </li></ul><ul><li>Poseidon for UML - http://www.gentleware.com </li></ul><ul><li>Visual Paradigm for UML - http://www.visual-paradigm.com </li></ul><ul><li>Umbrello UML Modeller – http://uml.sourceforge.net </li></ul><ul><li>StarUML – http://staruml.sourceforge.net </li></ul>
  51. 51. Supporting tools <ul><li>Let ’ s take a look at the supporting tools </li></ul><ul><li>If something could be done simpler and at least with the same quality </li></ul><ul><li>Use them and forget the time-consuming repetive tasks and focus on the difficult ones </li></ul>
  52. 52. Version controlling <ul><li>How to avoid the mess dealing with the different versions of files in projects? </li></ul><ul><li>The source code is constantly changing … </li></ul><ul><li>The AI files too … </li></ul>
  53. 53. Version controlling <ul><li>Version controlling allows the development team to manage different versions of software. They keep track of work and allow the team to look at the project ’ s past. </li></ul><ul><li>There are 3 kinds of version controlling systems: </li></ul><ul><li>Local </li></ul><ul><li>Distributed </li></ul><ul><li>Client-server </li></ul>
  54. 54. Version controlling – local systems <ul><li>Revision Control System </li></ul><ul><li>Source Conde Control System </li></ul><ul><li>MKS Implementer </li></ul><ul><li>History Explorer </li></ul>
  55. 55. Version controlling - distributed <ul><li>DCVS (Distributed CVS) </li></ul><ul><li>Monotone </li></ul><ul><li>GNU arch </li></ul><ul><li>Plastic SCM </li></ul><ul><li>BitKeeper </li></ul><ul><li>TeamWare </li></ul>PC Rep PC Rep PC Rep
  56. 56. Version controlling – client/server <ul><li>CVS </li></ul><ul><li>SVN </li></ul><ul><li>Codendi </li></ul><ul><li>ClearCase </li></ul><ul><li>Visual SourceSafe </li></ul><ul><li>Autodesk Valut </li></ul>Client Client Client Server Rep
  57. 57. Supporting tools & technologies
  58. 58. Automated builds - advantages <ul><li>Efficiency increase </li></ul><ul><li>Development process simplification </li></ul><ul><li>Increased software quality </li></ul><ul><li>Reduced costs </li></ul><ul><li>False version removal </li></ul><ul><li>Reduction of the development team or task relocation </li></ul><ul><li>Project archiving </li></ul>
  59. 59. Automated builds <ul><li>The automated build tools include: </li></ul><ul><li>make </li></ul><ul><li>Maven </li></ul><ul><li>Ant </li></ul><ul><li>MSBuild </li></ul><ul><li>Cmake </li></ul><ul><li>and many others </li></ul>
  60. 60. Automated testing - make An example of makefile taken from QT library. PNGMAK=scripts/makefile.linux all: cd zlib; ./configure; make cd libpng; make -f $(PNGMAK) clean: -cd zlib; make clean -cd libpng; make -f $(PNGMAK) clean
  61. 61. Automated testing - Ant <project name=&quot;MyProject&quot; default=&quot;dist&quot; basedir=&quot;.&quot;> <description>simple example build file</description> <!-- set global properties for this build --> <property name=&quot;src&quot; location=&quot;src&quot;/> <property name=&quot;build&quot; location=&quot;build&quot;/> <property name=&quot;dist&quot; location=&quot;dist&quot;/> <target name=&quot;init&quot;> <!-- Create the time stamp --> <tstamp/> <!-- Create the build directory structure used by compile --> <mkdir dir=&quot;${build}&quot;/> </target> <target name=&quot;compile&quot; depends=&quot;init ” description=&quot;compile the source &quot; > <!-- Compile the java code from ${src} into ${build} --> <javac srcdir=&quot;${src}&quot; destdir=&quot;${build}&quot;/> </target> <target name=&quot;dist&quot; depends=&quot;compile ” description=&quot;generate the distribution&quot; > <!-- Create the distribution directory --> <mkdir dir=&quot;${dist}/lib&quot;/> <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file --> <jar jarfile=&quot;${dist}/lib/MyProject-${DSTAMP}.jar&quot; basedir=&quot;${build}&quot;/> </target> <target name=&quot;clean ” description=&quot;clean up&quot; > <!-- Delete the ${build} and ${dist} directory trees --> <delete dir=&quot;${build}&quot;/> <delete dir=&quot;${dist}&quot;/> </target> </project>
  62. 62. Automated testing - Maven <project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; mlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>Maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
  63. 63. Automated testing - unit The most popular unit testing tool is xUnit available in many versions for all popular languages Test A Test ABCD vs Test B Test C Test D Data Data Data Data Data
  64. 64. Automated testing - system <ul><li>Automated GUI tests perceive the application as a black-box and test it from the user ’ s perspective. </li></ul>
  65. 65. Code documenting <ul><li>Automatic API documentation tools: </li></ul><ul><li>JavaDoc </li></ul><ul><li>DoxyGen </li></ul><ul><li>RoboDoc </li></ul><ul><li>… </li></ul>Manual documentation Automatic documentation Code Doc Code Doc
  66. 66. Bug tracking <ul><li>Issue/Bug Tracking Systems usage leads to: </li></ul><ul><li>Better quality control </li></ul><ul><li>Gaining users ’ feedback </li></ul><ul><li>Better resource allocation </li></ul><ul><li>Increased users ’ comfort </li></ul><ul><li>Better information flow </li></ul><ul><li>Feature request available </li></ul>
  67. 67. Bug tracking – bug categories
  68. 68. Bug tracking <ul><li>Bugzilla </li></ul><ul><li>Flyspray </li></ul><ul><li>Mantis </li></ul><ul><li>Trac </li></ul><ul><li>Redmine </li></ul>
  69. 69. Bug tracking
  70. 70. AI implementation
  71. 71. Implementation <ul><li>Transforms the design (plan) into the code </li></ul><ul><li>Problems: </li></ul><ul><ul><li>Technology </li></ul></ul><ul><ul><li>Programming language </li></ul></ul>
  72. 72. Levels of programming languages
  73. 73. 1st generation <ul><li>The code lines are equal to the processor instructions – one to one </li></ul><ul><li>Machine code </li></ul>
  74. 74. 2nd generation <ul><li>Symbolic representation of processor ’ s instructions </li></ul><ul><li>Assembler language </li></ul>
  75. 75. 3rd generation <ul><li>Instructions represent the basic operations </li></ul><ul><li>Oriented on programmer </li></ul><ul><li>Most popular generation </li></ul>
  76. 76. 4th generation <ul><li>Specialised languages oriented on advanced operations </li></ul><ul><li>RAD tools are 4GL build over 3GL </li></ul>Matlab disp('Hello, world!') SAS data _null_; put 'Hello, world!'; run; Postscript (Hello, world!n) print
  77. 77. 5th generation <ul><li>Represent not algorithms but desired outcome </li></ul><ul><li>Logical programming </li></ul><ul><li>Programming for non-programmers </li></ul>Common Lisp (write-line &quot;Hello, world!&quot;) Prolog :- write('Hello, world!'),nl.
  78. 78. Hybrid programming – embedding <ul><li>Hybrid programming (embedding languages) could be synergic but: </li></ul><ul><li>Increases the technological risk </li></ul><ul><li>Increases the demand on skilled developers </li></ul><ul><li>Blurs the project </li></ul>
  79. 79. Programming paradigms <ul><li>Paradigm is a fundamental style of computer programming and defines the concept of programming language </li></ul><ul><li>The most of programming languages support various paradigms (different approaches to problem) </li></ul>
  80. 80. Programming paradigms <ul><li>The most popular paradigms are: </li></ul><ul><li>Agent-oriented </li></ul><ul><li>Declarative </li></ul><ul><li>Event-driven </li></ul><ul><li>Imperative </li></ul><ul><li>Metaprogramming </li></ul>
  81. 81. Desktop applications <ul><li>C/C++ </li></ul><ul><li>Java </li></ul><ul><li>C# </li></ul><ul><li>Python </li></ul>
  82. 82. Web services – server side <ul><li>Java EE </li></ul><ul><li>PHP </li></ul><ul><li>Python </li></ul><ul><li>Ruby </li></ul><ul><li>Perl </li></ul><ul><li>.NET </li></ul><ul><li>CGI (every language that could be run by server) </li></ul>
  83. 83. Web services - RIAs <ul><li>Flash </li></ul><ul><li>AJAX </li></ul><ul><li>Java SE </li></ul><ul><li>JavaFX </li></ul><ul><li>FLEX </li></ul><ul><li>OpenLaszlo </li></ul><ul><li>Silverlight </li></ul>
  84. 84. Mobile applications <ul><li>Java ME </li></ul><ul><li>C++ </li></ul><ul><li>Objective-C </li></ul>
  85. 85. Languages popularity http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
  86. 86. Characteristics - domain <ul><li>Specialised – good at something but below average on other things </li></ul><ul><li>General purpose – no specific domain and a compromise on all tasks </li></ul>
  87. 87. Characteristics - speed <ul><li>Compiled faster </li></ul><ul><li>Interpreted slower </li></ul><ul><li>But: </li></ul><ul><li>Compiled start-up slower </li></ul><ul><li>Interpreted start-up faster (write-run-test cycle) </li></ul><ul><li>JIT compilers for interpreted languages </li></ul>
  88. 88. Characteristics - portability <ul><li>Software could be portable on two levels: </li></ul><ul><li>Source code </li></ul><ul><li>Binary code </li></ul><ul><li>Portability does not relate only to the programming language but also to used libraries </li></ul>
  89. 89. Characteristics - prototyping <ul><li>Ability to verify the assumption: </li></ul><ul><li>Dynamic language </li></ul><ul><li>Simple syntax </li></ul><ul><li>Efficiency isn ’ t a main concern </li></ul><ul><li>Checks if the idea works </li></ul>
  90. 90. Characteristics – target platform <ul><li>Target platform: </li></ul><ul><li>PC </li></ul><ul><li>Mobile </li></ul><ul><li>Web </li></ul>
  91. 91. Computer languages Scientific perspective Programming perspective
  92. 92. Why use a specialised languages <ul><li>Popular in the research community </li></ul><ul><li>Specialized languages </li></ul><ul><li>Many libraries/toolkits and examples are available </li></ul>
  93. 93. Why not use them <ul><li>Specialised not universal </li></ul><ul><li>High price </li></ul><ul><li>Simple or no GUI </li></ul><ul><li>No networking </li></ul><ul><li>Research not production languges </li></ul>
  94. 94. Important programming features <ul><li>Dynamic languages: </li></ul><ul><li>Do not care about types of data </li></ul><ul><li>Focus on the algorithms </li></ul><ul><li>But reject a full data control </li></ul>
  95. 95. Important programming features <ul><li>Prototyping: </li></ul><ul><li>Checks algorithms </li></ul><ul><li>Easily visualise data or make GUI </li></ul><ul><li>Speed is measured as the time of coding not running </li></ul>
  96. 96. Important programming features <ul><li>Scientific libraries: </li></ul><ul><li>How often do we construct new algorithms (Charlie Eppes Syndrome – NUMB3RS)? </li></ul><ul><li>The application is more like a large panel building than brick building – applies to the AI problems as well as to the „ordinary ” soft </li></ul>
  97. 97. Important programming features <ul><li>Visual design (graphical programming): </li></ul><ul><li>GUI could be constructed using components </li></ul><ul><li>Link the components visually </li></ul><ul><li>Evaluate application faster </li></ul>
  98. 98. More important part of AI software Knowledge Models Rules Graphs
  99. 99. Hybrid software development Research Development Idea Product Replanning & redesign Technology X Technology X Technology Y ?? ??? ??
  100. 100. Programming libraries – C/C++ <ul><li>MLC++ http://www.sgi.com/tech/mlc/ </li></ul><ul><li>FANN http://leenissen.dk/fann/ </li></ul><ul><li>Waffles http://waffles.sourceforge.net/ </li></ul><ul><li>OpenCV ML http://opencv.willowgarage.com/documentation/cpp/ml._machine_learning.html </li></ul><ul><li>dlib C++ http://dlib.net/ </li></ul><ul><li>VFML http://www.cs.washington.edu/dm/vfml/ </li></ul>
  101. 101. Programming libraries – Java <ul><li>Java-ML http://java-ml.sourceforge.net/ </li></ul><ul><li>Weka Engine http://www.cs.waikato.ac.nz/ml/weka/ </li></ul><ul><li>MLJ http://sourceforge.net/projects/mldev/ </li></ul><ul><li>MALLET http://mallet.cs.umass.edu/ </li></ul><ul><li>LIBSVM http://www.csie.ntu.edu.tw/~cjlin/libsvm/ </li></ul>
  102. 102. Programming libraries – C# <ul><li>Infer.NET http://research.microsoft.com/en-us/um/cambridge/projects/infernet/ </li></ul><ul><li>AForge.NET http://code.google.com/p/aforge/ </li></ul><ul><li>C# Neural Network Library http://franck.fleurey.free.fr/NeuralNetwork/ </li></ul><ul><li>NeuronDotNet http://neurondotnet.freehostia.com/ </li></ul><ul><li>NeuroBox Neural Network Library http://www.cdrnet.net/projects/neuro/ </li></ul>
  103. 103. Programming libraries – Python <ul><li>Orange engine http://www.ailab.si/orange/ </li></ul><ul><li>PyML http://pyml.sourceforge.net/ </li></ul><ul><li>MDP http://mdp-toolkit.sourceforge.net/ </li></ul><ul><li>PyBrain http://www.pybrain.org/ </li></ul><ul><li>LIBSVM http://www.csie.ntu.edu.tw/~cjlin/libsvm/ </li></ul>
  104. 104. Programming libraries – PHP <ul><li>FANN PHP Extension http://fann.sourceforge.net/fann.html </li></ul><ul><li>Tremani Neural Network http://www.tremani.nl/open-source/neural-network/ </li></ul><ul><li>ANN http://ann.thwien.de/index.php/Main_Page </li></ul>
  105. 105. Example I – Java <ul><li>A simple data mining task </li></ul><ul><li>Uses Java-ML library </li></ul>
  106. 106. Example II – Python <ul><li>Adaptive filtering algorithm </li></ul><ul><li>Use as a web service (server part) </li></ul><ul><li>Use mod_python on Apache </li></ul>
  107. 107. Example III – Flex <ul><li>Particle Swarm Optimisation example </li></ul><ul><li>RIA application </li></ul><ul><li>Uses a standard Flex without any additional libraries </li></ul>
  108. 108. Thank you. Any questions? Get in touch: www.sdart.co.uk
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×