What is software engineering?
a systematic approach to the analysis, design, assessment, implementation, test, maintenance and reengineering of software
Architecture patterns
MVC
Layered
Microservices
Client-server
What is software testing?
the process of finding errors and fixing them before a product goes to market
Programming principles
Clean code principles
YAGNI
KISS
CRUD
Separation of Concerns
Single Responsibility
Document your code
What is version control?
a fundamental component of a successful software deployment strategy
What does a software engineer do?
What is UML and how is it used?
Unified Modeling Language
What: A standardized way to specify and visualize how different parts of a software system should work
How: used during the recording requirements and design phases to create blueprints that represent various pieces of the system
Verification vs. validation
Verification
Am I building the product right?
If the program accesses the wrong database, we are not building it correctly
Unit Test
Integration Test
Automated Testing
Validation
Am I building the right product?
If the program calculates car payments instead of house payments, we are not building the right system
Customer Acceptance Test
Usability Test
Building vs. buying software
Building
developing a custom solution internally to meet specific requirements
Buying
Involves purchasing a "commercial off-the-shelf" product from a third-party vendor.
Repository vs local repository
Repository
Area where software engineers check out code from a repository to begin their work and check in code once changes are finalized and reviewed
Local repository
Individual/Initial environment
Requirements
Design
Implementation
Verification
Maintenance
Structural vs. behavioral diagrams
Represent the static aspect of the system
Focus on the components that exist within the system and the relationships between them
Types of tests
Unit testing
Technical debt -- what is it?
Long-term consequences and implied costs of choosing an easy or "dirty" solution in the short term instead of using a better, more structured approach that would take longer to implement
Git commands
Push
Merge
Pull
Functional vs. non-functional requirements
Functional: Implementing requirements so that users can achieve their goals with the product
Non-functional: Place constraints on what goals should be met in the product
Static vs. dynamic diagrams
Represent the dynamic aspect of the system
How the system behaves and how its objects interact with one another over time
Acceptance testing
A form of testing performed by the customer or end-user to ensure the system meets business requirements and provides the desired user experience (UX)
It verifies the business requirements and whether the system solves the problems it was designed to solve
Refractoring
Involves reviewing and optimizing your existing code to make it more efficient and maintainable while ensuring the external behavior and results stay exactly the same
Definition of API
Application Programming Interface
a fundamental component of software architecture that serves as the interface through which different systems, services, and modules interact
What is “good” architecture design?
FRM
Faster development
Reduce overall idle time
Maintainable software
What is Kanban
a popular workflow management system used to apply lean thinking to software development
System testing
A level of testing that evaluates the software as a whole to ensure all integrated features work as expected in a typical environment
It tests the system's integrity, including how it interacts with subsystems and external applications
What do you consider when refactoring code?
Enhance code readability
Reduce complexity
Improve maintainability
Improve extensibility
Enhance performance
Facilitate faster program execution
Agile software development
a mindset focused on being flexible and adaptable, allowing teams to react and continuously learn