What is Software Engineering?
-
The discipline of Software Engineering provides techniques for organising the production & management of software components, or....
"the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software." - IEEE Standard Glossary of Software Engineering Terminology. -
Often used to describe the development of applications consisting of several thousands of lines of programming and requiring several members of a programming team.
-
The techniques are just as appropriate for single programmer products.
-
Object-oriented programming is a discipline in the field of Software Engineering - is considered by many to be beneficial as a code management technique, as well as more intuitive way of structuring a problem solution.
-
However Software Engineering differs from traditional forms of engineering because the techniques and design activities employed cannot be 100% assured by scientific analysis, i.e. it is still a work of art! Software developers depend on testing and debugging activities to prove their product whereas civil engineers are able to use the laws of mechanics to predict the reliability and robustness of their designs.
-
The object of Software Engineering is to produce software which is both reliable and maintainable.
Some techniques
- code should be highly modularised and grouped logically in relatively small files
- programs should have adequate & accurate external documentation (including program logic, test plan & results, and listings )
In listings:
- internal documentation: program comments should be used to describe the purpose of a module and elsewhere only if the code is obscure. Sometimes referencing declarations should be commented.
- white space should be used liberally in programs to give clarity.
- program identifiers should be meaningful (by convention most programmers
use UPPERCASE for macros or constant values, Captialised words for class
names and lowercase for variables and function or method names).
- variables should be declared at the appropriate level.
- code should be portable.
Software Testing
- the process of demonstrating that the system or program does what it is
supposed to.
- "Programs are wrong until proven correct"
- normal cases (valid)
Types of Testing
- Unit testing (class testing)
- Integration testing (combined classes)
- Usability testing (usually GUI testing with an emphasis on ease of use and suitability to users)
- User acceptance testing
- System testing (stress loading, disaster recovery, integration with platforms etc.)
User acceptance testing, i.e. does it do what the user specified? is the focus of your test plan in assignment work. Some aspects of usability, integration and system testing are appropriate.
Check list for Testing
- use minimum number of test cases - make each test count
- test widely - exhaustive testing impossible
- develop test plan after your algorithm design (and before coding!)
- desk test first - know what result is expected
- retest after every program change
Other Methods of Testing:
- test data generator
- structured walkthroughs
- top-down testing
- bottom-up testing
- professional idiots
Testing (O O style)
During development test each component (class) separately test application progressively as components are added final test plan shows complete testing of all application functions in terms of:Logic testing of Graphical Interface Behaviour
- Menus: Do they work correctly? Are they disabled and enabled at appropriate times?
- Windows and Dialog Boxes: Do they have the right parts (close box, scroll bars etc) ? Are they working correctly (zooming in and out, closing, updating)?
- Buttons and other controls: Do they get events? Do they respond correctly? Do they dim (disable) or enable when appropriate?
Input and output - each specific test will test input or output functions to prove what happens with
- valid data
- extreme data
- exceptional data
- invalid data