SlideShare une entreprise Scribd logo
1  sur  62
Ανάλυση Ποιότητας
 Λογισμικού με το
    Alitheia Core

       Γεώργιος Γούσιος
Οικονομικό Πανεπιστήμιο Αθηνών
           (atm: ΚΕΠΥΕΣ)
Τι είναι η
 Ποιοτητα
Λογισμικού?
Από την
πλευρά του
  χρήστη
Από την
πλευρά του
  χρήστη
Πολυπλοκότητα
Παραβιάσεις της αρχής DRY
Κακές οσμές
External quality characteristics are those parts of a product
that face its users, where internal quality characteristics are
those that do not
                                                   Steve Mc Connell




   a product's quality is a function of how much it changes
   the world for the better.
                                                    Tom DeMarco
Portability
Functionality


                                         Maintainability

Reliability         ISO
                    9126




        Usability                    Efficiency
Μηχανική Λογισμικού
 (software engineering)
Μπορούμε να
βελτιώσουμε μόνο ότι
    αξιολογούμε
Welcome, to the real world

 RCS
 CVS
 SVN
 Darcs                  Bugzilla
  Git                SF.net Tracker
  Hg                      Jira
               Postfix    Gnats
         MailMan
              Marc
Welcome, to the real world

     400



     300
GB




     200

           Others
     100


            KDE
       0
           700 projects   LSE (2003-2006)   GenBank
                             Dataset
Alitheia Core
http://demo.sqo-oss.org/web/proxy/metrics/by-id/28/

 {
     "metric":{
        "id":28,
        "metrictype":{
           "id":1,
           "type":"SOURCE_FILE"
        },
        "mnemonic":"HD",
        "description":"Halstead Difficulty Level"
     }
 }

                                                                                                                                                                                                      
                                                                                                                                                                       
                                                                                                                                                                                              
       
                                                                                                                                                                                                                  
                                                                                                                                                                                        
                                                                                                                                                                                                               
                                                                                                                                                                                                         
                                                                                                                                                                               
                                                                                                                                                                                                                         
                                                                                                                                                                                                                                             


                                                                                                                                                                                                                                                           
                                                                                                                                                                                  
                                                                                                                                                                                    
                                                                                                                                                                                                                                                           
                                                                                                                                                  
                                                                                                                                                         
                                                                                                                                                                                                                                                       
                                                                                                                                                       
                                                                                                                                                                                                                          
                                                                                                                                                                                 
                                                                                                                                                                                                                        
                                                                                                                                                                                          
                                                                                                                                                                                                                                    
                                                                                                                                                                                    
                                                                                                                                                                                                                                                         
                                                                                                                                                                                                 
                                                                                                                                                                         




           
                                                                                                                                                                                                      
                                                                                                                                                                                                                 
                                                                                                                   
                                                                                                                                                                                             
                                                                                                                            
                                                                                                                                                                         
                                                                                                                                                   
                                                                                                                                                                                     
                                                                                                                  
                                                                                                                                                                                   
                                                                                                                                                                                                         
                                                                                                                                                                                      
                                                                                                                                                                                                           
                                                                                                                                                                                     
                                                                                                                                                                                                                                            
                                                                                                                                                                                                               
                                                                                                                                                                                  
                                                                                 
                                                                                                                                                                                                      
                                                                                                                                                                                                     

        

                                                       
                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                
                                               
                                                                                                                                                                                                                                      
                
                                               
                                                                                                                                                                                                                                     
                                                                                                                                                                               
                                                                                                                                                                                                                                     
                                                
                                                                                                                                            
                                               
                                                                                                                                                                                                                          
                                                                                                                                                    
                                                                                                                                                                                                                         
                                                
                                                                                                                                                                                                                               
                                               
                                                                                                                                                                                                                                     
                                               
                                                                                                                                                                                                                                      
                                                                                                                                                                                                                    
                                                               



                                                                                                                                                                                                                
                                                                                                                                                                       
                                                                                                                                                                                       
Μεταδεδομένα
CPU

Stage 1: Raw data to metadata
CPU

Stage 2: Metadata Relationship Inference
Μετρικές
CPU
public interface AlitheiaPlugin {

    String getVersion();
    String getAuthor();
    Date getDateInstalled();
    String getName();
    String getDescription();
    String getUniqueKey();

    List<Result> getResultIfAlreadyCalculated(DAObject o, List<Metric> l)
    	   throws MetricMismatchException;
    List<Result> getResult(DAObject o, List<Metric> l)
        throws MetricMismatchException, AlreadyProcessingException, Exception;
    void run(DAObject o) throws MetricMismatchException,
        AlreadyProcessingException, Exception;

    boolean   update();
    boolean   install();
    boolean   remove();
    boolean   cleanup(DAObject sp);

    List<Metric> getAllSupportedMetrics();
    List<Metric> getSupportedMetrics(Class<? extends DAObject> activationType);
    Set<Class<? extends DAObject>> getActivationTypes();
    List<Class<? extends DAObject>> getMetricActivationTypes (Metric m);

    Set<PluginConfiguration> getConfigurationSchema();

    Set<String> getDependencies();

    Map<MetricType.Type, SortedSet<Long>> getObjectIdsToSync(StoredProject sp, Metric m)
    	 throws MetricActivationException;
}
public void run(ProjectFile pf) {
        // We do not support directories
        if (pf.getIsDirectory()) {
            return;
        }

        InputStream in = fds.getFileContents(pf);
        if (in == null) {
            return;
        }
        // Create an input stream from the project file's content
        try {
         // Measure the number of lines in the project file
            LineNumberReader lnr =
                new LineNumberReader(new InputStreamReader(in));
            int lines = 0;
            while (lnr.readLine() != null) {
                lines++;
            }
            lnr.close();

             // Store the results
             Metric metric = Metric.getMetricByMnemonic("LOC");
             ProjectFileMeasurement locm = new ProjectFileMeasurement();
             locm.setMetric(metric);
             locm.setProjectFile(pf);
             locm.setWhenRun(new Timestamp(System.currentTimeMillis()));
             locm.setResult(String.valueOf(lines));

              db.addRecord(locm);
            } catch (IOException e) {
              log.error(this.getClass().getName() + " IO Error <" + e
                      + "> while measuring: " + pf.getFileName());
        }
    }
public List<Result> getResult(ProjectFile a, Metric m) {
    return getResult(a, ProjectFileMeasurement.class, m,
          Result.ResultType.INTEGER);
}
@MetricDeclarations(metrics = {
	 @MetricDecl(mnemonic="TEST", descr="", activators={ProjectFile.class})
})
public class TestabilityImplementation extends AbstractMetric {

    private static final String MNEMONIC_NCASES   = "TEST";

    public TestabilityImplementation(BundleContext bc) {
        super(bc);

     }
}
Ενεργοποίηση
  μετρικών
Απόδοση
New cluster node connects
Χρήσεις
Custom tool integration
Research platform
Σας
    ευχαριστώ!

http://www.sqo-oss.org
   Georgios Gousios
   gousiosg@aueb.gr

Contenu connexe

Tendances

American english-file-1-student-book
American english-file-1-student-bookAmerican english-file-1-student-book
American english-file-1-student-bookNadia Agusto
 
Tafseer Ibn-e-Katheer Part 7 (urdu)
Tafseer Ibn-e-Katheer Part 7 (urdu)Tafseer Ibn-e-Katheer Part 7 (urdu)
Tafseer Ibn-e-Katheer Part 7 (urdu)World
 
Ontario ombudsman annualreport0910-en-web
Ontario ombudsman annualreport0910-en-webOntario ombudsman annualreport0910-en-web
Ontario ombudsman annualreport0910-en-webROSEMARY DECAIRES
 
Fkr Shoppersstopbandra
Fkr ShoppersstopbandraFkr Shoppersstopbandra
Fkr Shoppersstopbandrafkr12358
 
Finger knitting jp
Finger knitting jpFinger knitting jp
Finger knitting jppjmanley41
 
02 Cryptography History-v1.0
02 Cryptography History-v1.002 Cryptography History-v1.0
02 Cryptography History-v1.0Vahab Mahboubi
 
LANDSCAPE CONSTRUCTION STUDY PROJECT OF INTERNATIONAL OUTDOOR GARDEN ...
LANDSCAPE   CONSTRUCTION  STUDY  PROJECT  OF  INTERNATIONAL  OUTDOOR  GARDEN ...LANDSCAPE   CONSTRUCTION  STUDY  PROJECT  OF  INTERNATIONAL  OUTDOOR  GARDEN ...
LANDSCAPE CONSTRUCTION STUDY PROJECT OF INTERNATIONAL OUTDOOR GARDEN ...aekapon
 
Presentation 2
Presentation 2Presentation 2
Presentation 2kunmo
 
Artifacts and Symbols of everyday life from Kerala
Artifacts and Symbols of everyday life from KeralaArtifacts and Symbols of everyday life from Kerala
Artifacts and Symbols of everyday life from KeralaAnand Nair
 
12 chapter
12 chapter12 chapter
12 chaptermadhuvel
 
God"s Plan Of Salvation
God"s Plan Of SalvationGod"s Plan Of Salvation
God"s Plan Of Salvationgracego2
 
Metro Lagos: No Man's Land
Metro Lagos: No Man's LandMetro Lagos: No Man's Land
Metro Lagos: No Man's LandMojisola Adigun
 
MONSTER IN SUMMER
MONSTER IN SUMMERMONSTER IN SUMMER
MONSTER IN SUMMERsansourcing
 
Mon of presentation ctl project mongolia
Mon of presentation ctl project mongoliaMon of presentation ctl project mongolia
Mon of presentation ctl project mongoliaNomio ND
 

Tendances (19)

American english-file-1-student-book
American english-file-1-student-bookAmerican english-file-1-student-book
American english-file-1-student-book
 
Tafseer Ibn-e-Katheer Part 7 (urdu)
Tafseer Ibn-e-Katheer Part 7 (urdu)Tafseer Ibn-e-Katheer Part 7 (urdu)
Tafseer Ibn-e-Katheer Part 7 (urdu)
 
K S - ZG - SDEX 71
K S - ZG - SDEX 71K S - ZG - SDEX 71
K S - ZG - SDEX 71
 
Bs 8118-1
Bs 8118-1Bs 8118-1
Bs 8118-1
 
Ontario ombudsman annualreport0910-en-web
Ontario ombudsman annualreport0910-en-webOntario ombudsman annualreport0910-en-web
Ontario ombudsman annualreport0910-en-web
 
Fkr Shoppersstopbandra
Fkr ShoppersstopbandraFkr Shoppersstopbandra
Fkr Shoppersstopbandra
 
Finger knitting jp
Finger knitting jpFinger knitting jp
Finger knitting jp
 
02 Cryptography History-v1.0
02 Cryptography History-v1.002 Cryptography History-v1.0
02 Cryptography History-v1.0
 
LANDSCAPE CONSTRUCTION STUDY PROJECT OF INTERNATIONAL OUTDOOR GARDEN ...
LANDSCAPE   CONSTRUCTION  STUDY  PROJECT  OF  INTERNATIONAL  OUTDOOR  GARDEN ...LANDSCAPE   CONSTRUCTION  STUDY  PROJECT  OF  INTERNATIONAL  OUTDOOR  GARDEN ...
LANDSCAPE CONSTRUCTION STUDY PROJECT OF INTERNATIONAL OUTDOOR GARDEN ...
 
New Deck
New DeckNew Deck
New Deck
 
Presentation 2
Presentation 2Presentation 2
Presentation 2
 
Artifacts and Symbols of everyday life from Kerala
Artifacts and Symbols of everyday life from KeralaArtifacts and Symbols of everyday life from Kerala
Artifacts and Symbols of everyday life from Kerala
 
12 chapter
12 chapter12 chapter
12 chapter
 
God"s Plan Of Salvation
God"s Plan Of SalvationGod"s Plan Of Salvation
God"s Plan Of Salvation
 
Metro Lagos: No Man's Land
Metro Lagos: No Man's LandMetro Lagos: No Man's Land
Metro Lagos: No Man's Land
 
Do you know?
Do you know? Do you know?
Do you know?
 
Sol Hotels by Meliá Cuba
Sol Hotels by Meliá CubaSol Hotels by Meliá Cuba
Sol Hotels by Meliá Cuba
 
MONSTER IN SUMMER
MONSTER IN SUMMERMONSTER IN SUMMER
MONSTER IN SUMMER
 
Mon of presentation ctl project mongolia
Mon of presentation ctl project mongoliaMon of presentation ctl project mongolia
Mon of presentation ctl project mongolia
 

En vedette

Performing Large Scale Repeatable Software Engineering Studies
Performing Large Scale Repeatable Software Engineering StudiesPerforming Large Scale Repeatable Software Engineering Studies
Performing Large Scale Repeatable Software Engineering StudiesGeorgios Gousios
 
Software architectures for the cloud
Software architectures for the cloudSoftware architectures for the cloud
Software architectures for the cloudGeorgios Gousios
 
Practical introduction to the actor model
Practical introduction to the actor modelPractical introduction to the actor model
Practical introduction to the actor modelGeorgios Gousios
 
Software Quality Days 2016 - Tool Challenge - LivingDoc
Software Quality Days 2016 - Tool Challenge - LivingDocSoftware Quality Days 2016 - Tool Challenge - LivingDoc
Software Quality Days 2016 - Tool Challenge - LivingDocAnis Ben Hamidene
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 

En vedette (7)

Performing Large Scale Repeatable Software Engineering Studies
Performing Large Scale Repeatable Software Engineering StudiesPerforming Large Scale Repeatable Software Engineering Studies
Performing Large Scale Repeatable Software Engineering Studies
 
Software architectures for the cloud
Software architectures for the cloudSoftware architectures for the cloud
Software architectures for the cloud
 
Practical introduction to the actor model
Practical introduction to the actor modelPractical introduction to the actor model
Practical introduction to the actor model
 
Software quality
Software qualitySoftware quality
Software quality
 
Software Quality Days 2016 - Tool Challenge - LivingDoc
Software Quality Days 2016 - Tool Challenge - LivingDocSoftware Quality Days 2016 - Tool Challenge - LivingDoc
Software Quality Days 2016 - Tool Challenge - LivingDoc
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 

Similaire à Software Quality Analysis with Alitheia Core

Zipcar (HBR Case Study)
Zipcar (HBR Case Study)Zipcar (HBR Case Study)
Zipcar (HBR Case Study)Daniel Zhao
 
Workforce Needs of the California Solar Industry
Workforce Needs of the California Solar IndustryWorkforce Needs of the California Solar Industry
Workforce Needs of the California Solar IndustryJoel West
 
Compensation power point
Compensation power pointCompensation power point
Compensation power pointDan Emerton
 
Form Based Code presentation
Form Based Code presentationForm Based Code presentation
Form Based Code presentationPaul Dreher
 
ECOsine™ Active: el compensador de armónicos en tiempo real
ECOsine™ Active: el compensador de armónicos en tiempo realECOsine™ Active: el compensador de armónicos en tiempo real
ECOsine™ Active: el compensador de armónicos en tiempo realcydesa
 
스토리텔링 프리젠테이션 Prezi
스토리텔링 프리젠테이션 Prezi 스토리텔링 프리젠테이션 Prezi
스토리텔링 프리젠테이션 Prezi Jinho Jung
 
Fact Sheet 3Q07
Fact Sheet 3Q07Fact Sheet 3Q07
Fact Sheet 3Q07CPFL RI
 
구름타고 쉽게 하늘을 날자 도안구
구름타고 쉽게 하늘을 날자  도안구구름타고 쉽게 하늘을 날자  도안구
구름타고 쉽게 하늘을 날자 도안구Jinho Jung
 
Tips for running for office
Tips for running for officeTips for running for office
Tips for running for officebrittanyspeaks
 
Visual Merchandising Portfolio
Visual Merchandising PortfolioVisual Merchandising Portfolio
Visual Merchandising PortfolioAdrianneMarieMoll
 
마인드맵과정 요약
마인드맵과정 요약마인드맵과정 요약
마인드맵과정 요약Jinho Jung
 
Airtop Vw T5
Airtop Vw T5Airtop Vw T5
Airtop Vw T5mildu
 
소셜미디어 시대, 쉽고 스마트하게 소통하기 양윤직
소셜미디어 시대, 쉽고 스마트하게 소통하기   양윤직소셜미디어 시대, 쉽고 스마트하게 소통하기   양윤직
소셜미디어 시대, 쉽고 스마트하게 소통하기 양윤직Jinho Jung
 
Informe semanal de mercados - 22 de agosto
Informe semanal de mercados - 22 de agostoInforme semanal de mercados - 22 de agosto
Informe semanal de mercados - 22 de agostoInversis Banco
 
Informe de estrategia 26 de marzo
Informe de estrategia 26 de marzoInforme de estrategia 26 de marzo
Informe de estrategia 26 de marzoInversis Banco
 
Informe semanal de mercados - 8 de agosto
Informe semanal de mercados - 8 de agostoInforme semanal de mercados - 8 de agosto
Informe semanal de mercados - 8 de agostoInversis Banco
 

Similaire à Software Quality Analysis with Alitheia Core (20)

GOVERNMENT
GOVERNMENTGOVERNMENT
GOVERNMENT
 
Zipcar (HBR Case Study)
Zipcar (HBR Case Study)Zipcar (HBR Case Study)
Zipcar (HBR Case Study)
 
Workforce Needs of the California Solar Industry
Workforce Needs of the California Solar IndustryWorkforce Needs of the California Solar Industry
Workforce Needs of the California Solar Industry
 
Compensation power point
Compensation power pointCompensation power point
Compensation power point
 
Form Based Code presentation
Form Based Code presentationForm Based Code presentation
Form Based Code presentation
 
ECOsine™ Active: el compensador de armónicos en tiempo real
ECOsine™ Active: el compensador de armónicos en tiempo realECOsine™ Active: el compensador de armónicos en tiempo real
ECOsine™ Active: el compensador de armónicos en tiempo real
 
스토리텔링 프리젠테이션 Prezi
스토리텔링 프리젠테이션 Prezi 스토리텔링 프리젠테이션 Prezi
스토리텔링 프리젠테이션 Prezi
 
Fact Sheet 3Q07
Fact Sheet 3Q07Fact Sheet 3Q07
Fact Sheet 3Q07
 
구름타고 쉽게 하늘을 날자 도안구
구름타고 쉽게 하늘을 날자  도안구구름타고 쉽게 하늘을 날자  도안구
구름타고 쉽게 하늘을 날자 도안구
 
DiTT VISION
DiTT VISIONDiTT VISION
DiTT VISION
 
DiTT_VISION
DiTT_VISIONDiTT_VISION
DiTT_VISION
 
Tips for running for office
Tips for running for officeTips for running for office
Tips for running for office
 
Visual Merchandising Portfolio
Visual Merchandising PortfolioVisual Merchandising Portfolio
Visual Merchandising Portfolio
 
Fb graph
Fb graphFb graph
Fb graph
 
마인드맵과정 요약
마인드맵과정 요약마인드맵과정 요약
마인드맵과정 요약
 
Airtop Vw T5
Airtop Vw T5Airtop Vw T5
Airtop Vw T5
 
소셜미디어 시대, 쉽고 스마트하게 소통하기 양윤직
소셜미디어 시대, 쉽고 스마트하게 소통하기   양윤직소셜미디어 시대, 쉽고 스마트하게 소통하기   양윤직
소셜미디어 시대, 쉽고 스마트하게 소통하기 양윤직
 
Informe semanal de mercados - 22 de agosto
Informe semanal de mercados - 22 de agostoInforme semanal de mercados - 22 de agosto
Informe semanal de mercados - 22 de agosto
 
Informe de estrategia 26 de marzo
Informe de estrategia 26 de marzoInforme de estrategia 26 de marzo
Informe de estrategia 26 de marzo
 
Informe semanal de mercados - 8 de agosto
Informe semanal de mercados - 8 de agostoInforme semanal de mercados - 8 de agosto
Informe semanal de mercados - 8 de agosto
 

Software Quality Analysis with Alitheia Core

  • 1. Ανάλυση Ποιότητας Λογισμικού με το Alitheia Core Γεώργιος Γούσιος Οικονομικό Πανεπιστήμιο Αθηνών (atm: ΚΕΠΥΕΣ)
  • 2. Τι είναι η Ποιοτητα Λογισμικού?
  • 8.
  • 9. External quality characteristics are those parts of a product that face its users, where internal quality characteristics are those that do not Steve Mc Connell a product's quality is a function of how much it changes the world for the better. Tom DeMarco
  • 10. Portability Functionality Maintainability Reliability ISO 9126 Usability Efficiency
  • 13.
  • 14.
  • 15.
  • 16. Welcome, to the real world RCS CVS SVN Darcs Bugzilla Git SF.net Tracker Hg Jira Postfix Gnats MailMan Marc
  • 17. Welcome, to the real world 400 300 GB 200 Others 100 KDE 0 700 projects LSE (2003-2006) GenBank Dataset
  • 18.
  • 20.
  • 21.
  • 22. http://demo.sqo-oss.org/web/proxy/metrics/by-id/28/ { "metric":{ "id":28, "metrictype":{ "id":1, "type":"SOURCE_FILE" }, "mnemonic":"HD", "description":"Halstead Difficulty Level" } }
  • 23.
  • 24.
  • 25.
  • 26.                                                                                                                                                                                                                                                
  • 28. CPU Stage 1: Raw data to metadata
  • 29. CPU Stage 2: Metadata Relationship Inference
  • 31. CPU
  • 32. public interface AlitheiaPlugin { String getVersion(); String getAuthor(); Date getDateInstalled(); String getName(); String getDescription(); String getUniqueKey(); List<Result> getResultIfAlreadyCalculated(DAObject o, List<Metric> l) throws MetricMismatchException; List<Result> getResult(DAObject o, List<Metric> l) throws MetricMismatchException, AlreadyProcessingException, Exception; void run(DAObject o) throws MetricMismatchException, AlreadyProcessingException, Exception; boolean update(); boolean install(); boolean remove(); boolean cleanup(DAObject sp); List<Metric> getAllSupportedMetrics(); List<Metric> getSupportedMetrics(Class<? extends DAObject> activationType); Set<Class<? extends DAObject>> getActivationTypes(); List<Class<? extends DAObject>> getMetricActivationTypes (Metric m); Set<PluginConfiguration> getConfigurationSchema(); Set<String> getDependencies(); Map<MetricType.Type, SortedSet<Long>> getObjectIdsToSync(StoredProject sp, Metric m) throws MetricActivationException; }
  • 33. public void run(ProjectFile pf) { // We do not support directories if (pf.getIsDirectory()) { return; } InputStream in = fds.getFileContents(pf); if (in == null) { return; } // Create an input stream from the project file's content try { // Measure the number of lines in the project file LineNumberReader lnr = new LineNumberReader(new InputStreamReader(in)); int lines = 0; while (lnr.readLine() != null) { lines++; } lnr.close(); // Store the results Metric metric = Metric.getMetricByMnemonic("LOC"); ProjectFileMeasurement locm = new ProjectFileMeasurement(); locm.setMetric(metric); locm.setProjectFile(pf); locm.setWhenRun(new Timestamp(System.currentTimeMillis())); locm.setResult(String.valueOf(lines)); db.addRecord(locm); } catch (IOException e) { log.error(this.getClass().getName() + " IO Error <" + e + "> while measuring: " + pf.getFileName()); } }
  • 34. public List<Result> getResult(ProjectFile a, Metric m) { return getResult(a, ProjectFileMeasurement.class, m, Result.ResultType.INTEGER); }
  • 35. @MetricDeclarations(metrics = { @MetricDecl(mnemonic="TEST", descr="", activators={ProjectFile.class}) }) public class TestabilityImplementation extends AbstractMetric { private static final String MNEMONIC_NCASES = "TEST"; public TestabilityImplementation(BundleContext bc) { super(bc); } }
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55. New cluster node connects
  • 57.
  • 58.
  • 59.
  • 62. Σας ευχαριστώ! http://www.sqo-oss.org Georgios Gousios gousiosg@aueb.gr

Notes de l'éditeur

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. In large organisations, software quality evaluations are performed by dedicated teams that assess a project&amp;#x2019;s conformance to the specifications\n
  14. &amp;#x395;&amp;#x3BD;&amp;#x3CE; &amp;#x3C3;&amp;#x3B5; &amp;#x3AC;&amp;#x3BB;&amp;#x3BB;&amp;#x3B5;&amp;#x3C2; &amp;#x3B5;&amp;#x3BC;&amp;#x3C0;&amp;#x3B5;&amp;#x3B9;&amp;#x3C1;&amp;#x3B9;&amp;#x3BA;&amp;#x3AD;&amp;#x3C2; &amp;#x3B5;&amp;#x3C0;&amp;#x3B9;&amp;#x3C3;&amp;#x3C4;&amp;#x3AE;&amp;#x3BC;&amp;#x3B5;&amp;#x3C2; &amp;#x3C4;&amp;#x3BF; &amp;#x3BD;&amp;#x3B1; &amp;#x3B2;&amp;#x3C1;&amp;#x3BF;&amp;#x3CD;&amp;#x3BC;&amp;#x3B5; &amp;#x3B4;&amp;#x3B5;&amp;#x3B4;&amp;#x3BF;&amp;#x3BC;&amp;#x3AD;&amp;#x3BD;&amp;#x3B1; &amp;#x3B5;&amp;#x3AF;&amp;#x3BD;&amp;#x3B1;&amp;#x3B9; &amp;#x3B1;&amp;#x3BA;&amp;#x3C1;&amp;#x3B9;&amp;#x3B2;&amp;#x3AE; &amp;#x3B4;&amp;#x3B9;&amp;#x3B1;&amp;#x3B4;&amp;#x3B9;&amp;#x3BA;&amp;#x3B1;&amp;#x3C3;&amp;#x3AF;&amp;#x3B1; \n&amp;#x3C0;&amp;#x3C7; &amp;#x3C3;&amp;#x3C4;&amp;#x3B7;&amp;#x3BD; &amp;#x399;&amp;#x3B1;&amp;#x3C4;&amp;#x3C1;&amp;#x3B9;&amp;#x3BA;&amp;#x3AE; ...., &amp;#x3C3;&amp;#x3C4;&amp;#x3B7; &amp;#x3C6;&amp;#x3C5;&amp;#x3C3;&amp;#x3B9;&amp;#x3BA;&amp;#x3AE; CERN...\n&amp;#x3A3;&amp;#x3C4;&amp;#x3BF;&amp;#x3BD; &amp;#x3BA;&amp;#x3BB;&amp;#x3AC;&amp;#x3B4;&amp;#x3BF; &amp;#x3BC;&amp;#x3B1;&amp;#x3C2; &amp;#x3AD;&amp;#x3C7;&amp;#x3BF;&amp;#x3C5;&amp;#x3BC;&amp;#x3B5; &amp;#x3C0;&amp;#x3BF;&amp;#x3BB;&amp;#x3BB;&amp;#x3AC; &amp;#x3C5;&amp;#x3C8;&amp;#x3B7;&amp;#x3BB;&amp;#x3AE;&amp;#x3C2; &amp;#x3C0;&amp;#x3BF;&amp;#x3B9;&amp;#x3CC;&amp;#x3C4;&amp;#x3B7;&amp;#x3C4;&amp;#x3B1;&amp;#x3C2; &amp;#x3B5;&amp;#x3BC;&amp;#x3C0;&amp;#x3B5;&amp;#x3B9;&amp;#x3C1;&amp;#x3B9;&amp;#x3BA;&amp;#x3AC; &amp;#x3B4;&amp;#x3B5;&amp;#x3B4;&amp;#x3BF;&amp;#x3BC;&amp;#x3AD;&amp;#x3BD;&amp;#x3B1; OSS. &amp;#x3A3;&amp;#x3B5; &amp;#x3C3;&amp;#x3CD;&amp;#x3BD;&amp;#x3BF;&amp;#x3BB;&amp;#x3BF; &amp;#x3BF; Mockus &amp;#x3C3;&amp;#x3B5; &amp;#x3C0;&amp;#x3BF;&amp;#x3BB;&amp;#x3CD; &amp;#x3C0;&amp;#x3C1;&amp;#x3CC;&amp;#x3C3;&amp;#x3C6;&amp;#x3B1;&amp;#x3C4;&amp;#x3B7; &amp;#x3B4;&amp;#x3B7;&amp;#x3BC;&amp;#x3BF;&amp;#x3C3;&amp;#x3AF;&amp;#x3B5;&amp;#x3C5;&amp;#x3C3;&amp;#x3B7; &amp;#x3B1;&amp;#x3BD;&amp;#x3B1;&amp;#x3C6;&amp;#x3AD;&amp;#x3C1;&amp;#x3B5;&amp;#x3B9; &amp;#x3C4;&amp;#x3BF;&amp;#x3BD; &amp;#x3CC;&amp;#x3B3;&amp;#x3BA;&amp;#x3BF; &amp;#x3C4;&amp;#x3BF;&amp;#x3C5;&amp;#x3C2; &gt;&amp;#x3A4;&amp;#x392; &amp;#x3BA;&amp;#x3B1;&amp;#x3B9; &amp;#x3C4;&amp;#x3BF; &amp;#x3C3;&amp;#x3CD;&amp;#x3BD;&amp;#x3BF;&amp;#x3BB;&amp;#x3BF; &amp;#x3C4;&amp;#x3C9;&amp;#x3BD; &amp;#x3AD;&amp;#x3C1;&amp;#x3B3;&amp;#x3C9;&amp;#x3BD; &amp;#x3C3;&amp;#x3B5; &gt;250&amp;#x3BA;\n
  15. This may sound like a rhetorical question, but it is not. \n
  16. Then there is the problem of format disparity. Most research so far was done with CVS and Bugzilla. In reality, there are a lot of tools that store process data \n
  17. Data sizes for large experiments are very large\n
  18. All those reasons led our research group to the SQO-OSS project, which produced the Alitheia Core tool. The project&amp;#x2019;s aim was to produce software quality analysis tools, but the original targets strayed towards creating infrastructures rather than the tools themselves\n
  19. All those reasons led our research group to the SQO-OSS project, which produced the Alitheia Core tool. The project&amp;#x2019;s aim was to produce software quality analysis tools, but the original targets strayed towards creating infrastructures rather than the tools themselves\n
  20. Alitheia Core is a resear metric plugin-based architecture and a corresponding engine\n
  21. new product and process software metrics that take advantage of this infrastructure\n
  22. \n
  23. \n
  24. as you can see &amp;#x2026;\n\nthin brings concrete objects\nfat combines multiple elements (metadata with data, and from multiple data sources)\n
  25. Here is how the most important parts work together. The project data is maintained on a project mirror, which is managed externally though a set of perl scripts. The metadata updater component uses this data to extract metadata and put it in the DB. Metrics use higher level services that combine raw data and metadata to get their input and store directly in the DB\n
  26. What alitheia core tries to do is to maintain a database of metadata and metric results. \nThe schema is hierarchical and everything is bound to a project. \n \n
  27. The metadata update process is a two stage process\n
  28. In the first stage the system gets raw data (source code logs, mail messages, and bug reports) and extracts just enough meta data to create abstract representations in the database. No real data goes in the database, just metadata.\n
  29. In the second stage, the metadata are used to extract semantic relationships among metadata entities. For example, to extract bug numbers from commit messages and create links between the to or to recover developer identities or to reconstruct mailing list threads\n
  30. \n
  31. A metric defines an activation type which is an entity in the metadata schema I have presented earlier and also declares depencencies to other metrics. After that the system will automatically invoke the metric when it finds new instances of the activation type after an update. Let&amp;#x2019;s see an example\n
  32. \n
  33. This is the implementation of the line counting plug-in I &amp;#x2018;ve presented you earlier on, minus some bureaucracy (constructors, imports etc). Just about 20 Locs to retrieve a file from a revision, read its lines and store results in a database. This is comparable to a shell or python script, but it is way much faster. The abstractions Alitheia Core are very high level and cross platform and this is why the overhead it adds in algorithm implementation is minimal\n
  34. \n
  35. \n
  36. \n
  37. Let us first walk through the life-cycle of a metric plugin\n
  38. Specifically, let&amp;#x2019;s now see how we can calculate a metric (wc in this case) for a simple file\n
  39. Updater sees that a file has changed for a given method and calls the run method for the LoC metric\n
  40. and later on the scheduler runs the job\n
  41. The job obtains the details about the object (file, mailing list, bug) it has to calculate \n
  42. and updates the database with the result\n
  43. and now let us take a walkthrough of the corresponding client\n
  44. Client asks a metric for a given file version\n
  45. Web service calls the plugin administrator to obtain a reference for the specific plugin\n
  46. Given the reference in can then call the metric\n
  47. The metric accesses the database to obtain the results in a metric-native format\n
  48. and the web service returns the results to the client\n
  49. SQO-OSS is designed to handle hundreds of projects, tens of thousands of files, hundreds thousands of revisions, messages, and bug reports.\nThis means it is architected for performance.\nLet me give you an example\n
  50. A very crude example is the retrieval of metadata for the live files in a particular version. In Alitheia Core this a database query which executes in about 2 secs, even under load\n
  51. The corresponding time for checking out XBMC. This small example shows how the metadata storage in the database pays off\n
  52. The workloads we are processing are embarrassingly parallel due to the fact that projects are independent from each other.\n The execution path from the mirror to the metadata database is lock free. Only plug-ins that process data across projects need to be careful when updating a shared field in the DB. This allow us to scale almost for free.\nWe implemented a very simple clustering system that binds a project to the node it was registered from and does not allow any other type of processing to take place on other nodes. \n
  53. This is our cluster: Left a 3 thread processing node + project server, middle a 6 thread processing core, bottom mirroring and storage of raw data, file server, database and 8 processing threads to keep the CPUs busy while I/O, right web server + 16 slow processing threads. To scale, we just need more processing nodes.\n
  54. Given enough data to process, this simple setup can drive all machines involved to their knees. For example this screenshot displays info from the db server while all 3 machines (node, web server, db server) run metrics. 2.35k queries per second, 46 open transactions, 32 active jobs on the web server. All three machines combined can eat up more than 500 wc jobs per second or 50 contribution plugin jobs per second.\n
  55. Another example of the cluster on its knees - Linear scalability display: The screen of the database server running just the database while other nodes start connecting: Queries Per Second increase is almost linear and load equals to processor cores -&gt; the machine is saturated. \n
  56. \n
  57. The SQO-OSS web site or the Eclipse plug-in display metrics on various quality metrics immediately after each commit! For example, imagine you are writting some code and when you commit you immediately see its effects on various metrics (e.g. Coupling, dependencies) on the whole system! Or when you do a montly code inspection to be able to immediately recognise bad code smells....\n
  58. .... And be automatically notified when bad code smells start to build up or on the other hand when the system is doing well and is probably ready for release\n
  59. Other possibilities include: test case integration, finding classes with no test cases, integration of various custom-developed tools for monitoring progress. \n\n
  60. SQO-OSS is platform not just a web site. It was build to allow easy integration of tools, already have C++ and Python based interfaces. One can write plug-ins in either Java or C++ or Python. In fact we have wc in 3 languages :-) A text output parser plug-in is possible by executing the program in C++ or Java.\n
  61. Convenient access to data, Data preprocessed in relational format. DB dumps will be made available from our web site. \n
  62. \n