Lecture outline
- Introduction to software development
- Software development methodologies: historical retrospective
- Project organization: best practices
- Tasks automation
- Versioning: CVS, Subversion, VSS
- Incremental updates: nightly builds, milestone builds, production system
- Environment separation
- Software accompanying documentation
- Project organization: the technology
- Organization of files
- Build tools: Apache Ant vs. Make
- Builds cycle: Cron vs. CruiseControl
- Tasks
Introduction to software development
Software development methodologies: historical retrospective
- Formal methodics (Jackson's method, etc)
- Bottom-up/Top-down programming
- Waterfall
- OOP
- RUP
- Methodology shift: Agile methodologies
- CMMI
Project organization: best practices
Versioning: CVS, , Subversion, VSS
Incremental updates: nightly builds, milestone builds, production system
eXtreme Programming: small releases practice
Software accompanying documentation
- Project initialization documentation
project goals
- System design document
- Software accompaning documentation
user guides, ...
- Test plan/Test protocol
What and how was tested
- Deployment guide
Project organization: the technology
This section will cover the most widespread patterns (technical aspects) of project organization in software development in industry.
Organization of files
Generally speaking in all project there are several rules:
- source and final compiled files should be separated;
- documentation should be up-to-date with sources;
Typical project tree organization:
api <-- Automatically generated documentation
dist <-- Build ready for distribution
doc <-- Supplied documentation
lib <-- Libraries
out <-- Compilation results (temporal folder)
projects <-- All subprojects of the project
src <-- All sources before compilation step (optional)
Build tools: Apache Ant vs. Make
- all tasks that should be repeated more than once should be automated;
Two approaches: shell-scripting and XML-based configuration.
Project template: template.zip
Builds cycle: cron vs. CruiseControl
To make project's results more traceable there shaped out an idea of
automated project re-build. It allows seing the actual state of the project as it
is on one hand and eliminates unnecessary manual project build from the other hand.
Another plus is that the project team will always have a "fresh" build.
This is a religious issue, but actually the whole idea of CruiseControl can
be summarized with the following command:
javac ... 2>&1 > | mail -s "Build results" me@mydomain.com
Adding this command to cron adds possibility to achieve periodical execution of the specified task.
Tasks
Utilizing given templates organize all tasks from Lecture 1 into sub-projects
that can be build using Ant. Adjust template to fit your needs if necessary.
Notes:
Recommended readings
- Project organization: Methodology
- Frederick P. Brooks, Jr., The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition, Addison-Wesley Professional, 1995
- Grady Booch, Object Solutions: Managing the Object-Oriented Project, Pearson Education, 1995
We appriciate any comments on the course structure and content.
Thank you,
The Zaval CE Group.
|