The 72nd Installment
Software Process Education
by Chuzo Akiguchi,
Professor, Master Program of Information Systems Architecture
The central operations of software development start with creating models, and then end with implementing and testing of them. The upstream stages of analysis and design are referred to as software modeling. Creating a good model that adequately and abstractly captures the true essence and structure of a particular problem is the starting point for all problem-solving. However, it is not easy to judge whether one is good or bad. Representing the model in computer code starts to give it life. Executable software gives it a distinct substance, and thus allows those who requested it to assess its merits and/or demerits.
In software development, we construct systems based on models. We create an architecture for an entire framework, break it up into parts, and then finally represent it in code. The creation of code is referred to as implementation. The quality of implemented program code is confirmed via testing before it is finally sent out as a finished product. This sequence of creating models, and then designing, implementing, and testing architectures amounts to adding actual substance to people’s ideas, or in other words, these creative activities take what is inside of their heads and make them a reality. Generally speaking, these project activities involve multiple people, mainly engineers, striving over a long period of time to produce something worthwhile.
Efficiently advancing all development activities aimed at producing quality finished products is the most important part of project activities. How to proceed with software development is referred to as the software process. Turning out finished products that satisfy the requirements of cost, quality, and delivery time to the fullest is the biggest reason that the software process is necessary. The essential thing is adopting a software process that best fits the unique characteristics of the target software, and best utilizes the skills and experience of the development team members. The software process defines (1) the team’s means of communication, (2) the modeling language and methodology, (3) the programming language and methodology, (4) the required development tools and environment, (5) how the development phases will be broken down, etc.
In its more than 60-year history, there have been many kinds of software processes implemented. Based on these, there have been many process models proposed. Most of these can be classified into the following three categories.
(1) Normative software processes that emphasize planning
(2) Agile development processes that emphasize compatibility with change
(3) Software processes that target individual and team process improvements
These days, software processes are usually divided up into waterfall and agile methodologies, however, I am uncomfortable with this.
There are still many cases in which waterfall methodologies are adopted in large-scale, planning-centered software development, however, methodologies whose effectiveness has been verified in agile development can and should be adopted accordingly. With advancements in modeling methodologies programming languages, and development tools, clarifying vague requirements via prototyping and implementing feasibility verifications during the initial stages has become the norm. Methodologies whose effectiveness has been proven, such as test-driven development, should also be adopted in planning-centered processes.
All processes, from proven, concretely defined individual activities to the actual software development, should be reconstructed taking into account the unique characteristics of the software to be developed and the skills and experience of the development team members. That is, process design is always required. I believe that software processes (3) that aim for ability improvements, such as personal software processes and team software processes (PSP/TSP), are effective methodologies for teaching processes that suit these kinds of software features and team characteristics.
You can enjoy the game of baseball by learning the rules, and practicing how to catch, throw, and swing the bat. Expanding the player population is essential for allowing top players to emerge. However, if a player aims to become a superstar, they must take their core skills and acquire the ability to apply self-improvement methodologies to these skills that will allow them to become the best player they can be. If you aim to become the best software developer you can be, I advise you to learn PSP/TSP and to implement self-improvement methodologies.