The word software engineering originated in 1960 at NATO conference
Software Engineering is not so much about code but about the methodologies taken to deliver a well developed product.
What are some methodologies use in SE?
Waterfall – Introduced by Winston Royce in 1970. First one to introduce the 5 Software Development Life Cycle (SDLC) method which are:
Specification: Written executive summary with a final proposal plan.
Design: Includes UML diagrams, classes and methods, no code!
Implementation: Where coding takes place.
Testing: Verification and validation phase, alpha and beta testing.
Component Based Software Engineering (CBSE) – No need to reinvent the wheel, components are already available to start building or enhance the product (i.e. HelpScout, open source).
Clean Room Engineering (CRE) – An IBM software methodology which promises “zero defect software”, but is software ever bug free? There are a few requirements for CRE which are:
Mathematical proofs of correctness for every line of code: before starting a project, the lead of the project must prove his approach mathematically.
Programming in groups: IBM believes that programmers should work in groups not individually. This is because problems can be solved quicker in groups and there is a better learning opportunity.
Statistical linguistic tool for testing: stress test the system to make sure everything is to specifications.
Spiral / Agile – encourages interaction between teams (product team with development team), engage discussion with funding agencies to enforce more communication. https://agilemanifesto.org/
Kanban – Originated in 1980s by Japanese car manufactories . Kanban promotes continuous collaboration and encourages active, ongoing learning and improving by defining the best possible team workflow. It is based on three key principles:
Visualize what you do today (workflow): seeing all the items in context of each other can be very informative
Limit the amount of work in progress (WIP): this helps balance the flow-based approach so teams dont start and commit to too much work at once
Enhance flow: when something is finished, the next highest thing from the backlog is pulled into play