Good Software. Lecture 6 GSL Peru 2014

Similar documents
Content. Development Tools 2(63)

Build management & Continuous integration. with Maven & Hudson

Advanced Software Testing

Quality Assurance Plan

Java Software Quality Tools and techniques

Software Engineering Best Practices. Christian Hartshorne Field Engineer Daniel Thomas Internal Sales Engineer

Code Quality Assurance. Peter Kofler, Code Cop FH Technikum Wien, February 2010

Chapter 24 - Quality Management. Lecture 1. Chapter 24 Quality management

Agile Software Development Methodologies and Its Quality Assurance

Detecting Critical Defects on the Developer s Desktop

International Journal of Advance Research in Computer Science and Management Studies

Chap 1. Software Quality Management

Quality Management. Lecture 12 Software quality management

Software Engineering Principles The TriBITS Lifecycle Model. Mike Heroux Ross Bartlett (ORNL) Jim Willenbring (SNL)

Benefits of Test Automation for Agile Testing

Coding in Industry. David Berry Director of Engineering Qualcomm Cambridge Ltd

How To Write Software

Software Code Quality Checking (SCQC) No Clearance for This Secret: Information Assurance is MORE Than Security

Latest Research and Development on Software Testing Techniques and Tools

Software Engineering for LabVIEW Applications. Elijah Kerry LabVIEW Product Manager

TeamCity A Professional Solution for Delivering Quality Software, on Time

Java Programming (10155)

Learning outcomes. Systems Engineering. Software Quality Management. Product reflects Process. Lecture 5. Introduction to Software Quality Management

Meister Going Beyond Maven

Latest Trends in Testing. Ajay K Chhokra

Getting Things Done: Practical Web/e-Commerce Application Stress Testing

1.1 The Nature of Software... Object-Oriented Software Engineering Practical Software Development using UML and Java. The Nature of Software...

Chapter 13: Program Development and Programming Languages

9/11/15. What is Programming? CSCI 209: Software Development. Discussion: What Is Good Software? Characteristics of Good Software?

Contents. Introduction and System Engineering 1. Introduction 2. Software Process and Methodology 16. System Engineering 53

Agile Development and Testing Practices highlighted by the case studies as being particularly valuable from a software quality perspective

A Process for ATLAS Software Development

Software Engineering for LabVIEW Applications

Software Engineering Compiled By: Roshani Ghimire Page 1

Software Engineering: Analysis and Design - CSE3308

MarathonITE. GUI Testing for Java/Swing Applications

Continuous Integration with Jenkins. Coaching of Programming Teams (EDA270) J. Hembrink and P-G. Stenberg [dt08jh8

Automatic vs. Manual Code Analysis

GECKO Software. Introducing FACTORY SCHEMES. Adaptable software factory Patterns

Testing Rails. by Josh Steiner. thoughtbot

Smarter Balanced Assessment Consortium. Recommendation

We ( have extensive experience in enterprise and system architectures, system engineering, project management, and

Effective Software Verification for Medical Devices

How To Develop Software

Jenkins Continuous Build System. Jesse Bowes CSCI-5828 Spring 2012

WHITEPAPER. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. Principle #1, Agile Manifesto

Software Construction

Quality Management. Objectives

Quality Management. Ian Sommerville 2004 Software Engineering, 7th edition. Chapter 27 Slide 1

Software Continuous Integration & Delivery

Maintaining Quality in Agile Environment

Development Testing for Agile Environments

Software infrastructure for Java development projects

Security Certification of Third- Parties Applications

Quality Management. Managing the quality of the software process and products

Quality Management. Objectives. Topics covered. Process and product quality Quality assurance and standards Quality planning Quality control

Object-Oriented Test Automation

Upping the game. Improving your software development process

Verification and Validation of Software Components and Component Based Software Systems

Two-Way Data Binding with WinJS By Marcin Kawalerowicz and Craig Berntson, authors of Continuous Integration in.net

Mining Metrics to Predict Component Failures

A Proposed Model for Code Quality Maturity Model

The Complete.NET Developer Productivity Pack

Continuous Integration Using Cruise Control

Pattern Insight Clone Detection

Effective feedback from quality tools during development

How To Develop Software

Testing. Chapter. A Fresh Graduate s Guide to Software Development Tools and Technologies. CHAPTER AUTHORS Michael Atmadja Zhang Shuai Richard

Peter Mileff PhD SOFTWARE ENGINEERING. The Basics of Software Engineering. University of Miskolc Department of Information Technology

Continuous Integration Multi-Stage Builds for Quality Assurance

Fully Automated Static Analysis of Fedora Packages

ISTQB Certified Tester. Foundation Level. Sample Exam 1

Unit Testing webmethods Integrations using JUnit Practicing TDD for EAI projects

TESSY Automated dynamic module/unit and. CTE Classification Tree Editor. integration testing of embedded applications. for test case specifications

BEST WEB PROGRAMMING LANGUAGES TO LEARN ON YOUR OWN TIME

Continuous Delivery. Alejandro Ruiz

Chapter 12 Programming Concepts and Languages

Beginners guide to continuous integration. Gilles QUERRET Riverside Software

Automated Module Testing of Embedded Software Systems

TESTING FRAMEWORKS. Gayatri Ghanakota

Life Cycle Management for Oracle Data Integrator 11 & 12. At lower cost Get a 30% return on investment guaranteed and save 15% on development costs

Supporting FISMA and NIST SP with Secure Managed File Transfer

The red hat enterprise linux developer program

TRACE PERFORMANCE TESTING APPROACH. Overview. Approach. Flow. Attributes

Business Application Services Testing

SOFTWARE DEVELOPMENT BASICS SED

What is a life cycle model?

Software Code Quality Checking (SCQC) No Clearance for This Secret: Software Assurance is MORE Than Security

White Paper 6 Steps to Enhance Performance of Critical Systems

Source Code Review Using Static Analysis Tools

Maven or how to automate java builds, tests and version management with open source tools

Transcription:

Good Software Lecture 6 GSL Peru 2014

What is Good Software? Low cost Good performance Bug-free, efficient, meets its purpose Easy to code Easy to understand, modular Easy to use Clients are satisfied

Developer s Perspective

"High-quality software is not expensive. Highquality software is faster and cheaper to build and maintain than low-quality software, from initial development all the way through total cost of ownership." -Capers Jones

Developer Perspective CISQ (Consortium for IT Software Quality) Standards: Reliability Efficiency Security Maintainability

Developer Perspective: Reliability Measures the level of risk and likelihood of potential application failures Compliance with object-oriented and structured programming practices Avoid software patterns that lead to unexpected behaviors Avoid Dirty programming

Developer Perspective: Reliability OOP Clear data structure relations Modular Quality Control Functionality met, Bug-free, Easy to use Unit Tests Peer Reviews

Developer Perspective: Efficiency Measure of source code efficiency and scalability Memory, network, disk space management Data access performance and management Coding practices (efficient algorithms)

Developer Perspective: Efficiency Design Patterns General solution to a common, recurring problem Program organization, common data structures, algorithms, computation OOP: Shows the relations and interactions between unspecified classes and objects Optimization Execution time, memory usage, disk space, power consumption, bandwidth Design level - algorithm space/time efficiency Avoid poor coding

Developer Perspective: Efficiency Code profiling Memory Usage Monitoring Load testing Application Verifier (Windows)

Developer Prospective: Security Measure of potential security breaches due to poor coding and architectural practices Secure controls: access to system functions, access control to programs Programming practices: code-level errorexception handling Multi-layer design compliance

Developer Prospective: Security Static Code Analysis Tools Flawfinder Compiler warning - GCC, etc Lint Dynamic Code Analysis Tools valgrind fsnoop Application Verifier Penetration Testing

Developer Perspective: Maintainability Notion of adaptability, portability, and transferability of code within a business Modularity, Understandability, Reusability, and Testability Source code file organization Architecture, program, and code-level documentation

Developer Perspective: Maintainability Good, clean code Modular Balance of comments and whitespace Object Oriented Programming/Modular Programming, ADTs OOP/Modular allow code reuse Abstract Data Types are models for data structures with similar behaviors Using OOP/Modular and ADTs ease the understanding and evolution of code over time

Developer Perspective: Maintainability (contd.) Interfaces Do not contain the implementation for functions Contain functions that are common to different classes, but the classes define the implementation Relation between OOP, ADTs and Interfaces Objects/Data structures: provide specific implementation to ADTs by extending ADTs Abstract Data Types: provide specific behaviors but not full implementations by implementing interfaces Interfaces: Contain the documentation matching the specific behaviors of the ADTs

Software Development Process Requirements Design Testing Peer Review

The Process: Requirements Know the product requirements before starting to create/build the product. Purpose or goal from customer s point of view Objectives Features

The Process: Design Create a design for the product before building. Using interfaces leads to clean, maintainable code. Understand the overall system architecture and potential bottlenecks.

The Process: Testing Create Unit Tests before writing the code. Create tests for individual modules (method, class, interface) based on requirements Use systematic approach: partition input space Regression testing: Update tests and code as bugs are found Automation: run and check test results without manual effort

The Process: Peer Review More eyes on your code, better the code! Buddy Checking - simple peer review Walkthrough - group review of a component Software Inspection - Inspect code for defects

Software Development Tools Source Control Continuous Integration Peer Review Developer Productivity Tools

Tools: Source Control Maintain revisions of source code Easy to revert mistakes and keep an audit trail Examples GIT, Subversion, Perforce, Starteam, etc.

Tools: Continous Integration Automated builds and unit testing Part of XP and TDD Examples Cruise Control, TeamCity, etc

Tools: Peer Review Maintain Code Quality Examples Code Collaborator, github, Crucible, etc

Tools: Developer Productivity Tools Increase Coding Efficiencies Refactoring Tools ReSharper, IntelliJ IDEA, Eclipse,PyCharm, etc Increase Code Quality Code Coverage Analysis dotcover, JaCoCo, Emma, etc Profilers dottrace, Netbeans, etc Memory Leak Detectors ANTS, Purify, JProfiler

Coding Standards Set of guideline to write code to Create maintainable code through standardized style Does not work if everyone does not adhere to it Hungarian notation, CamelCase

Examples OpenStack - https://wiki.openstack. org/wiki/cppcodingstandards http://www.possibility. com/cpp/cppcodingstandard.html http://www.cs.northwestern. edu/academics/courses/311/html/coding-std. html Java - Sun s Java Coding Standards

Coding Standard Enforcement Continuous Integration Plus C/C++ - lint - static code analysis C# - StyleCop, FxCop Java - CheckStyle Python - pylint, pyflake, pychecker

Don t Repeat Yourself (DRY) vegetables = ['asparagus', 'broccoli', 'cabbage'] print vegetables[0], 'is a vegetable' print vegetables[2], 'is a vegetable' def print_veg(index): print vegetables[index], 'is a vegetable' print_veg(0) print_veg(2)