Why does software development, as a subject, struggle to attract a large number of student enrolments?
Part of the reason is the perception that software development is all about programming, is solitary and very mechanical. This could not be further from the truth. Software development is an art. It is a highly-creative field in which programmers strive for innovative solutions to problems that range in complexity, scope and application. It is a rare project that is undertaken by a single software developer and many projects are large enough in scale to require teams of programmers working on aspects that need to be integrated at a later stage. There are, of course, a number of stakeholders involved in the software development process – the key one being the client. A good software developer needs to have communication skills that will enable them to marry the client’s needs to the product and a mechanism by which the solution can be refined.
The software development industry is an exciting and challenging one. Software developers regularly deal with complex issues such as code optimisation and effective user-interface design while working with the myriad of programmable devices on the market and ensuring that the products of their efforts are error-free and work to specification.
The current Victoria Certificate of Education (VCE) Software Development course attempts to model an industry-like experience for students and give them an insight into the terms, techniques and processes that they will likely encounter. The entire course is couched in a Problem Solving Methodology (PSM) that describes the four phases through which a person or organisation can progress in producing a solution to a problem. Analysis, design, development and evaluation. Let’s examine each in turn.
In the analysis phase, information systems are examined to determine what problems exist or how new elements can be added. There are a number of tools that can be used to analyse a system, but it is important to remember that an information problem involves users, processes, equipment and data and all of these must be considered. Analysis is often about asking targeted questions. Together, the answers help to build a picture of what is required. Analysis involves three main activities in preparing a solution: Determining the requirements, identifying the constraints and determining the scope, all of which are influenced by the needs of the stakeholders (any parties that have a valid link or interest in the system or information problem). These are often documented in the form of a Software Requirements Specification (SRS) which is a type of report that is used by software developers to document the analysis of an information problem and to enable the design stage to begin.
In determining the solution requirements, the key question that needs to be asked is: What does the solution need to provide?
Any given information problem will contain aspects that will be well understood and others that will not. So what is the best way to gain a thorough understanding of the problem in order to work out what is required of the solution?
A number of tools can be used to represent the information problem, and come to a better understanding of its particular aspects. Tools such as context diagrams, data flow diagrams (DFDs) and use-case diagrams can all be used, often together, to build a complete picture of what is occurring. Collectively, these tools clearly identify the data that is currently being gathered, how it is being used and by whom, and what information is being produced. By examining the information problem in this way, it can be easier to find out what additional data will be needed to produce the software solution that is required and what functions the solution needs to provide.
The requirements of a software solution can be classified as either functional or non-functional. Functional requirements are directly related to what the software solution is required to do. Non-functional requirements are related to the attributes of the software solution, such as user-friendliness, response rates, reliability, portability, robustness and maintainability.
Key to the success of any software solution, will be an understanding of the constraints placed upon it. Probably the most obvious constraint is cost and this will vary widely, based on the size of the organization and the scale of the project. Other constraints that need to be taken into account are.
- The speed of processing required (or available)
- The requirements that users have of the solution; legal requirements. Security required (or imposed)
- Compatibility with existing hardware and software within the system
- The level of expertise of the users, technical support staff and the software developers themselves
- The capacity of the existing system and the availability of equipment. This is by no means an exhaustive list and sometimes the constraints that are placed on a proposed software solution are hard to predict and particular to the organization or environment.
Similar to constraints is the topic of scope. The scope defines what the boundaries of the software solution will be. It also identifies what the solution will do, what it won’t do and what particular benefits there will be to users. Benefits are often stated in terms of efficiency and effectiveness.
Once the analysis is complete, the design of the software solution can begin. Often, if a software developer is new to a project at this stage in the PSM, they will be provided with an SRS which outlines all of the important aspects from the stage above.
The design stage consists of two main activities: planning how the solution will function given the requirements (and be presented), and determining the criteria that will be used to evaluate the solution.
Designing how the solution will function is a complex activity for a software developer. It involves working out how the required data will be named, structured, validated, manipulated and stored. A number of tools can help to accomplish this task. Data dictionaries, data structure diagrams, input-process-output (IPO) charts, pseudo-code and object descriptions can all be used to do this. This activity also involves showing how the various components of the solution relate to one another. Tools that can help to accomplish this are: Data flow diagrams, context diagrams and use-case diagrams. Lastly, it is important to be able to design how information will be presented in the software solution. This can be represented by using tools such as annotated diagrams/mock-ups and storyboards.
The next aspect to consider is how the software solution will be evaluated.
The development stage of the PSM is the stage during which the software solution is built. It consists of four main activities: Coding, validation, testing and documenting. These activities do not necessarily occur in this order, as will be explained.
Coding a software solution is probably seen as the largest activity from the perspective of a software developer. In a sense, this is true but it is a task that is made much easier if due diligence has been given to the analysis and design stages. While coding a software solution, it is important that a software developer follows good coding conventions for the naming and structure of the code and includes ample internal documentation. While following these sorts of conventions may not affect the final product (and will be invisible to all but those involved in the development now and in the future), not doing these things leads to sloppy and hard-to-read code (and is seen as quite unprofessional). The coder writes code in an appropriate programming language in accordance with the plan, then tests, debugs and modifies the code as required.
Validating data is the process of determining the reasonableness of the data. The amount of validation that is included and the way in which it operates, can have a profound impact on the effectiveness of the entire software solution. As well as preventing errors from occurring, the process of ‘trapping errors’ can also be used to determine if data is reasonable.
Validation really begins in the design stage. It is in the design stage that important decisions about how data will be collected, processed and output will be made. Validation is also strongly influenced by user-interface design. The actual validation coding takes place in the development stage.
Testing is often an ongoing activity during the development of a software solution and, as a programmer adds elements to the program, he will test them to see that they are working and modify or fix them as needed. However, the formal activity of testing a software solution is usually conducted at the conclusion of the development of the software using an exhaustive grid which covers both the valid and invalid possibilities of the software’s use.
When undertaking this task, the first step is to list all of the tests that will be undertaken. This list can be quite long as it will be designed to cover all of the combinations of valid and invalid input as well as use of the software. Test data will be constructed to perform each of these tests and often the expected behaviour or output from each will be documented. The tests will then be carried out, and the behaviour of the software solution compared to the expected result in each case.
There is some argument that the best time to compile a list of tests is during the design stage. Doing so, gives those coding the solution a valuable insight into the exact parameters of both the input and output.
The final step of the testing process is correcting those errors that have been detected, after which, the test data that initially triggered the incorrect result is tested again to ensure that the software solution has been fixed.
Documentation is then written to support the variety of users of the software solution. Documentation can take a number of forms. Internal documentation is placed inside the program code and assists future programmers who wish to modify the software solution. System-support documentation can be in electronic or hard-copy form. Different types of system-support documentation can be produced for different groups, from those using the system, to those maintaining it.
The evaluation of a software solution is an important activity that will usually take place after the solution has been in full operation for a while. This time period varies, but it needs to be long enough so that users of the system are comfortable with it and hopefully not resentful of it (as can happen when new software solutions are introduced). An evaluation can (and should) contain many different elements. There are two key activities involved in evaluating a software solution: Determining a strategy that will be used to find out the extent to which the solution meets the required needs, and reporting on the success of the solution.
What are the best ways to find out if the software solution has met the required needs? A strategy to determine this will include a timeline for the evaluation, what data will be collected and by what methods, and how the data relates to the evaluation criteria set out in the design stage. Note that this activity is more complex than simply asking a series of questions of the users.
Adrian Janson is the Head of eLearning at Melbourne High School and has published several text books on VCE IT and programming. He has served as the President of the Victorian IT Teachers Association and has presented at many national and international conferences. Recently, Adrian has featured in the media for his work teaching students to write games for the XBOX360. Adrian’s text, “Software Development: Core Techniques and Principles”, is the only text currently available for the VCE Software Development course.
Latest posts by Education Technology Solutions (see all)
- A Strategic Implementation of Contemporary Digital Technologies - July 11, 2023
- Why Australian universities need to innovate, invest and transform to remain globally competitive - December 9, 2022
- BenQ Launches World’s First Windows*-Based Smart Projector with Intel Inside for Enterprise - October 14, 2022