18 March Implementation
Dec 29, 2015
18 March
Implementation
Tools
Do you need them? When do you need them? What can they do better then you?
Tools
Version Management Build Systems Integrated Development
Environments Documentation Extraction
Version Management
Both during and after development Both code and documentation Uses
Multi-developer change control Releases Support for different environments
Computers Operating systems
Top Reasons for Using Version Management
Bugs which were fixed reappear
Latest versions of code overwritten by old versions
Which version is the right one? I have so many
I have lost my latest changes
Questions Addressed Development Issues
How do we integrate parallel work? How do I know which changes were in the code
that was being tested? Who changed this module? When? Why?
Multi-version Issues What versions have been made available to
people? How do I assure that all versions get the changes
that they need? What versions need to be re-released to support
changes made?
Documentation that Needs Version Control
Manuals: need to reflect the variations of the different releases
Test data: what tests have been run and what was the result
Bug reports Planned changes Any document being edited by
multiple people
Basic Functions
Ability to add and remove changes Ability to identify differences Record of changes made Storage of different versions Ability to get access to one or more
versions Identification of all the components
needed to build any version
Need a Baseline
Agreed upon document or code level in large project, formally reviewed and
agreed upon in your project, requires consensus
agreement Basis for further development
in large project, changed only through formal change control procedure
In your project, changed when the developer is “comfortable”
When To Start Using Version Control
Should you use it during unit testing? What is unit testing? How much structure does your unit
testing require? If unit testing requires significant
infrastructure or scaffolding, it makes sense to start using it very early
No Special Tools Needed
Identify procedures and data needed to add and remove changes identify differences record changes made store different versions get access to one or more versions build any version
But there are tools …
CVS: Concurrent Version System Subversion (SVN) SourceForge
Actually uses CVS and SVN, but a different model
Concurrent Versioning System
Developed in the mid 80s Predecessor RCS (Revision Control
System) Vrije University, Amsterdam
Now open source Until recently, the most commonly
used tool ximbiot.com/cvs/wiki
What CVS Does Supports hierarchical directories
manages changes on a per file basis Remote repository access
import locally for use Supports parallel development
merges changes identifies, does not resolve, conflicts
Basic tasks getting a working copy committing changes reverting to prior level adding or removing a file synchronizing to the latest code tagging versions of files
Subversion http://subversion.tigris.org/ improved version of CVS
consistent interfaces except for “compelling reasons”
key changes everything is versioned: directories and file
meta-data as well as files atomic commits
guarantee that all aspects are completed or none are
better performance
SourceForge Open source development
environment Free web-based facility Purchasable software as well
SourceForge.net supports CVS and SVN Compile farm Trackers Web site
Lots of Others
Google code TRAC
Tools
Version Management Build Systems Integrated Development
Environments Document Extraction
Build System Functions
System configuration Executing
preprocessors compilers linkers
Manage paths and libraries Create executables and libraries
Types of Build Systems
Platform specific independent
Part of version management systems integrated development
environments nothing (standalone)
Platform Specific System: Unix make
Uses a makefile Can build full systems or parts Defines dependencies
Simplest example: object file depends on its source file
Executes commands for any (and only) pieces that need to be rebuilt
Open Source Systems:Lots of Them GNU make
Been around for a while Cons
Built in Perl SCons
Python scripts CMake
cross-platform used in conjunction with the native build
environment Jam
C and C++ See also FT Jam (additional platforms)
Apache Ant: build +++
http://ant.apache.org Introduction Workflow elements XML-based configuration files Java based
contains features specifically for J2EE
Ant Control Commands (sample)
Ant: Runs Ant on a supplied buildfile AntCall: Runs another target within the
same buildfile Exec: Executes a system command (can
be OS specific) Java: Executes a Java class Parallel: Forks a new thread for another
Ant tasks Sequential: Grouping of commands Waitfor: Blocks execution until a set of
specified conditions become true
Tools
Version Management Build Systems Integrated Development
Environments Document Extraction
Integrated Development Environment What is an IDE?
A programming environment integrated into a software application
Normally includes Source code editor Compiler and or interpreter GUI development tools Build system
May also include Graphical tools (e.g., class hierarchy diagram) Debugger Class browser Version management system
History
Early programming was not done with IDEs Coding sheets and keypunches Line command make files
Hardware enhancements typewriter-like terminals computer screens
Which of these enabled IDEs? Why?
Dartmouth Time Sharing System (1964)
Command line system Supported Basic, Algol and FORTRAN DTSS commands:
NEW, OLD, LIST, SAVE, RUN Line starting with number replaced that
line in the current program All other commands implied execution
Considered by most people the first IDE
Today’s IDEs Menu-driven Proprietary
Microsoft Visual Studio (C#, C++, Visual BASIC) Borland JBuilder (Java) Apple XCode (Mac OS X)
Open Source SharpDevelop (.NET) GNU Emacs (Unix) – major modes for languages
Eclipse www.eclipse.org Both an IDE and an architecture IDEs
Java, C++, C, C#, Python, PHP, Perl, Smalltalk, CMFL (Coldfusion), Cobol, Fortran, Prolog, Erlang
(you get the idea) IDE built using architecture
Enhancements through plug-ins
Tools
Version Management Build Systems Integrated Development
Environments Documentation Extraction
What can be extracted?
Documentation Signatures Building interfaces first
Initial documentation Tools avoid update issues
Are there drawbacks?
Tools
Doxygen – open source Javadoc – from Sun
Software Engineering Elaborated Steps
Concept Requirements Architecture Design Implementation Unit test Integration System test Maintenance
Models of Software Development
Process or people oriented Early Watts Humphrey work: people,
later process Different balances from each model
Number of iterations Waterfall Spiral Agile
Software Craftmanship
Software craftsmanship (McBreen 2001) Craft of writing software Craft of using software
Distinguish from software engineering Scope Rigor
Relevant distinction?