Summary
9.1 Software Engineering Fundamentals
- Software engineering is concerned with how to effectively develop software.
- Software engineering is about solving practical issues that arise in software development, while computer science is more about theoretical principles used in software.
- A good software engineer should have a solid background in computer science and must have good practical skills in areas such as computer programming.
- Software is usually developed in a team in which people have different roles and responsibilities.
- Developing software involves addressing both the described desired functional and nonfunctional features.
- There are a number of categories of software, including application, system, and embedded.
- Software engineers should understand software engineering processes, specific activities such as testing, and software tools.
- Soft skills such as communication and problem-solving skills are important to being successful in the role of a software engineer.
9.2 Software Engineering Process
- A software engineering process framework is used to define the software process model or SDLC model that will be used to create a software solution.
- Most SDLC models use phases or standard framework activities. The four common phases are inception, elaboration, construction, and deployment.
- SDLC models differ in terms of the rigidity and number of software engineering actions they specify need to be completed as part of the software development process.
- One major category of process models is the traditional process models, which are usually prescriptive, sequential, and may not be suitable for projects with rapidly changing requirements.
- A second major category of process models is the Agile process models, which are less rigid, allowing for activities to skipped or accelerated to deliver a project solution faster and integrating user input early in the process.
- In software development, developers use software architecture to view and evaluate the system as a whole before moving to component design.
- In addition to the generic framework activities, there are other activities that crosscut the entire software development process but aren’t part of the main building steps themselves, such as communication and training, risk management and planning, software configuration and content management, software quality management (SQM), architecture management, and software security engineering.
- Software engineers should understand the various models and how they differ. Some of the popular software process models include the waterfall model, V-model, incremental model, prototyping model, spiral model, Unified Process model, and Agile Process models (such as Scrum and DevOps, among others).
9.3 Special Topics
- Testing is a critical part of building successful software solutions.
- To ensure quality, software goes through various levels of testing, such as unit testing, integration testing, and system testing, and it is subject to different testing approaches, such as acceptance testing, usability testing, stress testing, performance testing, and security testing. Each test serves an important function.
- Test-driven development in a process in which developers write unit tests before they write code. While counterintuitive, this can help clarify requirements, facilitate early bug detection, and even improve design and code quality.
- Whereas unit testing focuses on the various units or pieces within a software solution, system testing focuses on the complete and fully integrated software product. Systems can be manual or automated.
- Acceptance testing is used to determine that the software system works as was specified in the requirements. Taking place after system testing, this is typically done by the customer, client, or other end user of the software.
- Usability testing tests the user interface by gaining feedback from a small group of users who are representative of the target audience.
- When developing software, developers use tools such as compilers, debuggers, profilers, integrated development environment (IDEs), version control systems, and bug tracking systems.
- To resolve problems that commonly occur in the development of a software system, developers use reusable solutions called architectural patterns and design patterns.
- Refactoring is a technique for restructuring an existing piece of code without changing its functionality.
- Open-source software is provided with source code. Examples of open-source projects are Linux, Android, NetBeans IDE, Eclipse IDE, and the C# programming language.
- Whether you simply use software or create software, it is important to understand licensing so that you know what you can or cannot do with the software.
- Software engineers should abide by a code of ethics that guides the work that they do and the solutions that they produce.
- The ACM/IEEE-CS Joint Task Force produced a Software Engineering Code of Ethics and Professional Practices that states that software engineers shall commit themselves to making the analysis, specification, design, development, testing, and maintenance of software a beneficial and respected profession.
- Software engineering and the development of software solutions is evolving. As technology changes, so do some of the ways software is coded.