- ES Español

- EN English

5.50. Software Engineering III (Elective)
- Semester: 8th Sem. Credits: 3
- Hour of this course: Theory: 2 hours; Practice: 2 hours;
- Syllabus:
- htmlonly

Español

English - Prerrequisites:
- CS292 Software Engineering II (7th Sem) itemize
5.50.1. Justification ↑ Back to top
Software Engineering III focuses on advanced topics of the software lifecycle, emphasizing software quality, evolution, and deployment in modern architectures. This course prepares students to handle the complexities of maintaining systems, ensuring software quality through rigorous validation, and the application of professional tools and design practices for resilient and maintainable software products.
5.50.2. Generales Goals ↑ Back to top
- Implement advanced quality assurance and reliability metrics.
- Understand software evolution, refactoring, and technical debt management.
- Integrate development and operations tools in collaborative environments.
- Design cloud-native applications using advanced software architectures.
- Analyze and apply systematic testing and validation strategies.
5.50.3. Contribution to Outcomes ↑ Back to top
- AG-C09) Design and Development of Solutions: Designs, implements, and evaluates solutions for complex computing problems. (Usage)
- AG-C03) Individual and Team Work: Performs effectively as an individual and as a member or leader in diverse teams. (Usage)
5.50.4. Content ↑ Back to top
5.50.4.1. Verification and validation Concepts (12 hours) [Skills AG-C03,AG-C09] ↑ Back to top
Bibliography: (Sommerville, 2015; Pressman and Maxim, 2019)
Topics
- Verification and validation concepts
- Verification: Are we building the thing right?
- Validation: Did we build the right thing? enumerate
- Why testing matters: Does the component remain functional as the code evolves?
- Testing objectives
- Usability
- Reliability
- Conformance to specification
- Performance
- Security enumerate
Learning Outcomes
- Explain why testing is important [Explain]
- Distinguish between program validation and verification [Distinguish]
- Describe different objectives of testing [Describe]
5.50.4.2. Testing Tools and Analysis (3 hours) [Skills AG-C03,AG-C09] ↑ Back to top
Bibliography: (Pressman and Maxim, 2019)
Topics
- Verification and validation tooling and automation
- Static analysis
- Code coverage
- Fuzzing
- Dynamic analysis and fault containment (sanitizers, etc.)
- Fault logging and fault tracking enumerate
- Test planning and generation
- Fault estimation and testing termination including defect seeding
- Use of random and pseudo random numbers in testing enumerate
- Testing asynchronous, parallel, and concurrent systems
- Verification and validation of non-code artifacts (documentation, training materials)
Learning Outcomes
- Describe and compare different tools for verification and validation [Describe]
- Automate the use of different tools in a small software project [Design]
- Explain how and when random numbers should be used in testing [Explain]
- Describe approaches for fault estimation [Describe]
- Estimate the number of faults in a small software application based on fault density and fault seeding [Estimate]
- Describe techniques and issues with testing asynchronous, concurrent, and parallel software [Describe]
- Create a test plan for a medium-size code segment which contains asynchronous, concurrent, and/or parallel code, including a test matrix and generation of test data and inputs [Create]
- Describe techniques for the verification and validation of non-code artifacts [Describe]
5.50.4.3. Performance Testing and Benchmarking (3 hours) [Skills AG-C03,AG-C09] ↑ Back to top
Bibliography: (Bondi, 2015; Gregg, 2020)
Topics
- Performance testing and benchmarking
- Throughput and latency
- Degradation under load (stress testing, FIFO vs LIFO handling of requests)
- Speedup and scaling
- Amdahl's law
- Gustafson's law
- Soft and weak scaling enumerate
- Identifying and measuring figures of merits
- Common performance bottlenecks
- Compute-bound
- Memory-bandwidth bound
- Latency-bound enumerate
- Statistical methods and best practices for benchmarking
- Estimation of uncertainty
- Confidence intervals enumerate
- Analysis and presentation (graphs, etc.)
- Timing techniques enumerate
Learning Outcomes
- Describe throughput and latency and provide examples of each [Describe]
- Explain speedup and the different forms of scaling and how they are computed [Explain]
- Describe common performance bottlenecks [Describe]
- Describe statistical methods and best practices for benchmarking software [Describe]
- Explain techniques for and challenges with measuring time when constructing a benchmark [Explain]
- Identify the figures of merit, construct and run a benchmark, and statistically analyze and visualize the results for a small software project [Analyze]
5.50.4.4. API Compatibility and Versioning (12 hours) [Skills AG-C03,AG-C09] ↑ Back to top
Bibliography: (Sommerville, 2015)
Topics
- Hyrum's Law/The Law of Implicit Interfaces
- Backward compatibility
- Compatibility is not a property of a single entity, it's a property of a relationship.
- Backward compatibility needs to be evaluated in terms of provider + consumer(s) or with a well-specified model of what forms of compatibility a provider aspires to/promises. enumerate
- Versioning
- Semantic Versioning (SemVer)
- Trunk-based development enumerate
Learning Outcomes
- Identify both explicit and implicit behavior of an interface and identify potential risks from Hyrum's Law [Analyze]
- Identify changes that can be broadly considered "backward compatible,'' potentially with explicit statements about what usage is or is not supported [Analyze]
- Evaluate whether a proposed change is sufficiently safe given the versioning methodology in use for a given project [Evaluate]
5.50.4.5. Version Control and CI/CD (12 hours) [Skills AG-C03,AG-C09] ↑ Back to top
Bibliography: (Kim et al., 2016)
Topics
- Software configuration management and version control: Software Development Practices
- Configuration in version control, reproducible builds/configuration.
- Version control branching strategies. Development branches vs release branches. Trunk-based development.
- Merging/rebasing strategies, when relevant. enumerate
- Release management.
- Testing tools including static and dynamic analysis tools. Software Development Practices , Information Flow and Non-Interference , Injection and Input Validation , Memory Safety and Types , Malware Analysis and Advanced Security
- Software process automation:
- Build systems - the value of fast, hermetic, reproducible builds, compare/contrast approaches to building a project.
- Continuous Integration (CI) - the use of automation and automated tests to do preliminary validation that the current head/trunk revision builds and passes (basic) tests.
- Continuous Deployment (CD) - the use of automation to automatically release every change that passes the automated tests to the production environment, ensuring frequent and reliable deliveries.
- Dependency management - updating external/upstream dependencies, package management, SemVer. enumerate
Learning Outcomes
- Describe the difference between centralized and distributed software configuration management [Describe]
- Describe how version control can be used to help manage software release management [Describe]
- Identify configuration items and use a source code control tool in a small team-based project [Analyze]
- Describe how available static and dynamic test tools can be integrated into the software development environment [Describe]
- Understand the use of CI/CD systems as a ground-truth for the state of the team's shared code (build and test success) [Explain]
5.50.4.6. Principles and Software Architecture (12 hours) [Skills AG-C03,AG-C09] ↑ Back to top
Bibliography: (Fowler, 2017)
Topics
- System design principles. System Reliability
- Levels of abstraction (e.g., architectural design and detailed design)
- Separation of concerns
- Information hiding
- Coupling and cohesion enumerate
- Software architecture. System Reliability
- Design paradigms
- Top-down functional decomposition/layered design
- Data-oriented architecture
- Object-oriented analysis and design
- Event-driven design enumerate
- Standard architectures (e.g., client-server and microservice architectures including REST discussions, n-layer, pipes-and-filters, Model View Controller)
- Identifying component boundaries and dependencies enumerate
- Programming in the large vs programming in the small. System Reliability
- Code smells and other indications of code quality, distinct from correctness. Security Design and Controls Engineering , Threat Analysis and Security Engineering , Trusted Computing and Privacy Engineering
Learning Outcomes
- Identify the standard software architecture of a given high-level design [Analyze]
- Select and use an appropriate design paradigm to design a simple software system and explain how system design principles have been applied in this design [Evaluate]
- Adapt a flawed system design to better follow principles such as separation of concerns or information hiding [Create]
- Identify the dependencies among a set of software components in an architectural design [Analyze]
5.50.5. Bibliography ↑ Back to top
Sommerville, I. (2015). Software Engineering. Pearson, 10th edition.
Pressman, R. S. and Maxim, B. (2019). Software Engineering: A Practitioner's Approach. McGraw-Hill Education, 9th edition.
Bondi, A. B. (2015). Foundations of Software and System Performance Engineering: Process, Performance Modeling, Requirements, Testing, Scalability, and Practice. Addison-Wesley, Upper Saddle River, NJ.
Gregg, B. (2020). Systems Performance: Enterprise and the Cloud. Addison-Wesley Professional, Boston, MA, 2nd edition.
Kim, G., Humble, J., Debois, P., and Willis, J. (2016). The DevOps Handbook. IT Revolution Press.
Fowler, M. (2017). Refactoring: Improving the Design of Existing Code. Addison-Wesley, 2nd edition.