- Software engineering, craft or an engineering discipline?
Software development and design is part art and part science, it can be understood as a systematic approach to the analysis, design, assessment, implementation, test, maintenance and reengineerig of software, that is, the application of engineering to software. In the Software engineering approach, several models for the software life cycle are defined, and many methodologies for the definition and assessment of the different phases of a life-cycle model
- History of Software Engineering
The term Software Engineering became known after a conference in 1968, when the difficulties and pitfalls of designing complex systems were frankly discussed. A search for solutions began. It concentrated on better methodologies and tools. The most prominent were programming languages reflecting the procedural, modular, and then object-oriented styles. Software engineering is intimately tied to their emergence and improvement. Also of significance were efforts of systematizing, even automating program documentation and testing. Ultimately, analytic verification and correctness proofs were supposed to replace testing. More recently, the rapid growth of computing power made it possible to apply computing to ever more complicated tasks. This trend dramatically increased the demands on software engineers. Programs and systems became complex and almost impossible to fully understand. The sinking cost and the abundance of computing resources inevitably reduced the care for good design (Wirth, N, 2008).
- Ethics in software engineering
Software engineers shall commit themselves to making the analysis, specification, design, development, testing and maintenance of software a beneficial and respected profession. In accordance with their commitment to the health, safety and welfare of the public, software engineers shall adhere to the following Eight Principles:
- Software lifecycle
SDLC is a process followed for a software project, within a software organization. It consists of a detailed plan describing how to develop, maintain, replace and or enhance specific software. The life cycle defines a methodology for improving the quality of software and the overall development process.
- Software Development Processes
A software development process or life cycle is a structure imposed on the development of a software product. There are several models for such processes, each describing approaches to a variety of tasks or activities that take place during the process (SBS, n.d.).
- Agile software development
Agile describes a set of principles for software development under which requirements and solutions evolve through the collaborative effort of self-organizing cross-functional teams. It advocates adaptive planning, evolutionary development, early delivery, and continuous improvement, and it encourages rapid and flexible response to change. These principles support the definition and continuing evolution of many software development methods. The term agile was first coined for this in 2001, in the Manifesto for Agile Software Development (Agile Manifesto), and although originally written as Agile (with a capital A) this is progressively becoming deprecated (Wikipedia, n.d.).
- Waterfall method
The waterfall model is a sequential design process, often used in software development processes, where progress is seen as flowing steadily downwards. The advantage of waterfall development is that it allows for departmentalization and managerial control. The disadvantage of waterfall development is that it does not allow for much reflection or revision. Once an application is in the testing stage, it is very difficult to go back and change something that was not well-thought out in the concept stage (Rouse, 2007).
- Functional and non functional requirements
The software requirements are description of features and functionalities of the target system. Requirements convey the expectations of users from the software product. The requirements can be obvious or hidden, known or unknown, expected or unexpected from client’s point of view (Tutorialspoint, n.d.).
(Deepak Dua, http://bit.ly/2gieF69)
- Unified Modeling Language
UML is a modeling language used in software engineering that helps by providing a standard and organized way to visualize the design of a system. It was created with the intention of standardizing the diverse notational systems of software design.
Class diagrams represent the static structures of a system, including its classes, attributes, operations, and objects. A class diagram can display computational data or organizational data in the form of implementation classes and logical classes, respectively (Lucid Software, n.d.).
- What is software design?
Software design is a process of defining the architecture, components, interfaces, and other characteristics of a system or component and planning for a software solution. After the purpose and specifications of software is determined, software developers will design or employ designers to develop a plan for a solution (archive.cnx.org, n.d).
- What is software architecture?
Software application architecture is the process of defining a structured solution that meets all of the technical and operational requirements, while optimizing common quality attributes such as performance, security, and manageability. It involves a series of decisions based on a wide range of factors, and each of these decisions can have considerable impact on the quality, performance, maintainability, and overall success of the application (Microsoft, 2009).
- Software design patterns
- Software testing
- Software implementation
- Open source software
- Software maintenance
- User interface design
- Software verification and validation
Lucid Software. (n.d.) Unified Modeling Language (UML) Basics. Lucidchart. Retrieved from: https://www.lucidchart.com/pages/what-is-UML-unified-modeling-language
Rouse, M. (febraury 2007). Waterfall Model. TechTarget. Retrieved from: http://searchsoftwarequality.techtarget.com/definition/waterfall-model
SBS. (n.d.). What is a Software Development Process? Select Business Solutions. Retrieved from: http://www.selectbs.com/analysis-and-design/what-is-a-software-development-process
Tutorialspoint.(n.d.). Software Requirements. Retrieved from: https://www.tutorialspoint.com/software_engineering
Wirth, N. (25 febraury 2008). A Brief History of Software Engineering. Retrieved from: http://people.inf.ethz.ch/wirth/Miscellaneous/IEEE-Annals.pdf