Weekly thoughts: Basic Tasks That All Software Engineering Projects Must Handle
Hey I am back! I know that I disappear for three weeks. That’s because my school starts and also I am getting busier at my work. But from this week on, I will still post every week (hopefully!).
However, the content might change because sometimes I will write down my programming experience just like before, while other times I might write down some thoughts/notes from my software engineering master program courses. The reason that I want to share here is first, it is my way to reflect and digest new knowledge! And second, just in case I am wrong, I hope to see your different opinions!
Topic this week: Basic Tasks That All Software Engineering Projects Must Handle
According to my personal experience, I think they would be:
- Collect requirements
- Design structure
- Testing(Verification and Validation)
However, I like what Gomaa(2011) raises up in his book that I think is very valuable:
“In this phase, the user’s requirements are identified and analyzed. The requirements of the system to be developed are specified in a Software Requirements Specification (SRS). ”
Here, he mentions that after the collection and analysis of requirements, there should be a specification that “provide(s) a complete description of what the system’s external behavior is without describing how the system works internally”. I like this idea because it gives you a chance to externalize the requirements so that the application idea is more understandable to other engineers, which would lead to more successful cooperation among teammates.
As for the “design” part, Sommerville(2015) inspires me by pointing out four kinds of design: Architectural design, Database design, Interface design and Component selection and design. It is not just about the basic structure, but also how we can implement components in a way that is reusable so that codes cleaner. With those, I think the development process will be smoother!
Therefore, now my answers are:
Gather requirements by analyzing the current problem and discussing with potential users, write requirements specification according to the gathered information.(Gomaa)
Implement the architectural design, database design, interface design and component selection and design.(Sommerville)
The actual coding process according to the design.
Testing(Verification and Validation)
Testing to make sure “that a system both conforms to its specification and meets the expectations of the system customer”.(Sommerville)
Deploy the application in production and present it to the users.
According to user feedback, improve the system by fixing any bugs or adding new features.
Gomaa, H.(2011). Software Modeling and Design: UML, Use Cases, Patterns, and Software Architectures. New York, NY: Cambridge University Press.
Sommerville, I(2015).Software Engineering. Tenth Edition. England: Pearson Education.