So now we’re almost at week 6 in the course of Analysis and modelling of software systems. When I applied for the exchange semester at Tec I never expected that I would actually be writing a blog about software development. Before I joined this course my assignments at my home university usually consisted of typing long formal essays and reports or making PowerPoint presentations which no one in the class actually listen to. This way of learning has been very refreshing for me.
To be honest this course has not been as easy as easy as i though it would be at first. Typing a blog post each week i not that hard, but when you combine it with all the other course assignments and all the traveling each weekend it becomes a bit stressful. Although I think the course has so far been very interesting and by typing these blogpost I really feel that I understand the topics we have discussed each class. My hope is that this course will further increase my blog writing skills and help me and other people reading these post to get a better understand of the planning and design of software.
So what have i actually learned about the topics we have discussed so far?
So far in this course we have covered four topics: Software Development Life Cycles(SDLC), Unified Software Process, Use Cases, and Modeling languages. These topics suggest that creating complex software successfully requires the use of strategies and tools for all the phases of software development project, from planning and actually developing the software to the last phase of maintenance. When it comes to developing software systems with many stakeholders and developers involved there needs to be some sort of base structure and rules, and the goals need to be clear and communicated in a good way otherwise there could be problematic misunderstandings as in the picture below.
The Software Development Lifecycle
The Software Development Life Cycle (SDLC) is an important illustration that breaks down process of software development into phases thus making it easier to understand and evaluate. It’s a very general and basic concept that can be applied in many different ways. One of the most well-known lifecycles is the Waterfall model where the project moves through the phases in a sequential way where each phase requires that the previous one is fully completed.
After studying this topic I have learned the importance of the Planning and Analysis phase. Moving too fast through this phase will usually result in miscommunications between stakeholders and developers which in for exemple Waterfall development can result in expensive late stage changes or a final software that is insufficient. I think it’s important though to note that plans and goals can change during the development process. It’s not always possible to make a sufficient plan before the actual development phase. This is one reason to why I think that waterfall is problematic for software development. Agile development is a more flexible approach to the SDLC because the processes are done in iterations and increments which I believe is the more effective method for software development. As with all methodologies though there are pros and cons. Agile doesn’t work for every project, the same applies to waterfall and other methodologies.
Unified Software process (USP)
With the Unified software process (USP) or RUP developers can combine the sequential movement through the four phases (inceptions, elaboration, construction, transition) like in waterfall development with iterative processes and incremental software deliveries seen in agile development. One of the benefits with this framework is that you get testable parts of the software during each iterations, this means that problems and bugs are discovered and resolved earlier in the development process.
Another benefit of working with iterations and increments is that you can include goals for each iteration. In my experience of working in iterations in previous project I feel that this makes the goals feel more feasible. It would also say in my opinion that this way of working is usually more productive and effective than following vague goals and milestones made in the beginning of the project.
The purpose of use cases is to display how the different actors interacts with the a system. Normally the use cases are displayed in a UML diagram that is easy to comprehend. They should not be over-informative as this would ruin the purpose of the simplistic design. The point of use cases is to help stakeholders and developers efficiently communicate what functions need to be implemented. Keep in mind that this type of diagram is a high-level approach to planning and developing software.
Using modeling languages is usually an efficient and standardized way of planning, analyzing and designing a software system. Unified Modeling Language (UML) is one of the most recognized languages. It provide standardized way of visually displaying functions of a system in diagrams. However there are a variety UML diagrams out there. UML can be used as mentioned above for displaying use cases, but it can also be used for displaying classes in object-oriented programming languages like java and C++. Personally i have used this modelling language for many java projects and i think it’s effective tool that provides a good representation of the software components and how they are linked.
Whats comming next?
My guess is that we will continue to discuss topics surrounding planning and analysis tools for software development. We just started a group project where we will analyze and model a software system of our choice. I hope that with this project I will be able to apply in practice what i have learned so far during this course. I’m of course also looking forward to posting more interesting mastery post and other interesting stuff.
Thanks for reading, see you in the next post!