Software Engeneering - Key Notes and considerations
APPLIED COMPUTER SCIENCE
[WORK IN PROGRESS]
Index
- Software engineering
- Software Development Life Cycle (SDLC) and Software Engineering Process
- Software requirement specification
- Testing, Release and Software Version
- Software Development Components and Tools
- Front-End and Back-End
- Development Tools
- Build, develop and testing
- Programming Language
- Important considerations for software deployment
The first four topics are more related to management and administrative knowledge, while the remaining three focus more directly on the practical scope of software design.
Software engineering
Software engineering is the systematic application of engineering and scientific principles to the design, development, testing, deployment, and maintenance of software systems.
Its main goal is:
To develop software solutions that satisfy user, business, technical, and security requirements.
It is about building software that is useful, reliable, scalable, secure, and maintainable. In practice, there are some differences between a software developer (builds features) and a software engineer (designs and builds systems that work reliably over time). The main responsibilities of a software engineer include:
- Designing, building, and maintaining software systems
- Writing and testing code
- Consulting with stakeholders, third party vendors and security specialists
T1 - The main characteristics of a software engineer and a software developer
| Dimension | Software Engineer | Software Developer |
|---|---|---|
| Main focus | Systems, architecture, and reliability | Features, code, and functionality |
| Scope | Broad, end-to-end system design | Specific modules or components |
| Approach | Applies engineering principles across the software lifecycle | Focuses on coding, testing, and implementation |
| Design role | Defines architecture and technical standards | Implements solutions within an existing design |
| Quality emphasis | Scalability, maintainability, security, and risk reduction | Functional correctness and usability |
| Lifecycle role | Involved from requirements to deployment and maintenance | Mainly involved in development and implementation |
| Perspective | Big-picture, structural, and long-term | Task-oriented, practical, and delivery-focused |
| Typical training | Engineering-oriented: systems, design, lifecycle, trade-offs | Programming-oriented: languages, frameworks, tools |
Software Development Life Cycle (SDLC) and Engineering Process
To ensure that software systems meet specified requirements, quality standards, cost constraints, and timelines is convinent to use the Software Development Life Cycle (SDLC) framework. This defines the stages involved in planning, designing, developing, testing, deploying, and maintaining software systems.
The main advantages of the SDLC:
- Respond to changing requirements
- Solve problems early in the process
- Reduces overlapping resposabilities
The SDLC can help to improve efficiency and reduce risks by:
- letting team members know what they should be working on and when
- facilitating communication between the customer, other stakeholders, and the development team
- letting stakeholders know where they fit into that process and
- letting cross-domain teams know when they have completed their tasks so development can move to the next phase.
Implementation methodologies
Waterfall, V-shape model, and agile are all different methodologies for implementing the software development life cycle. You can see this more in detail in a previous publication.
The common software engineering processes consist of:
Software development is not only about programming. It also requires coordination, communication, planning, and teamwork.
Common organizational structure:
- Team or squad: a group of professionals working toward a shared product or project goal.
- Pair programming: a collaborative practice where two developers work together. One acts as the driver, writing the code, while the other acts as the navigator, reviewing the logic, suggesting improvements, and thinking strategically.
Some use elements:
- Project recap: a short review of progress, priorities, blockers, and next steps.
- Calendar management: coordination of meetings, deadlines, releases, and development cycles.
- Schedules and planning: organization of tasks, milestones, and delivery dates.
- Requirements documentation
- Design documentation
- Technical documentation
- Quality assurance documentation
- User documentation
Requirements
The requirement gathering process entails identifying stakeholders, establishing goals and objectives, eliciting requirements from the stakeholders, documenting the requirements, analyzing, prioritizing, and confirming the requirements. Some common documents are:
- Software requirement specifications (SRS): is a document that captures the functionalities that the software should perform and also establishes benchmarks or service levels for its performance.
- Software Requirements Specification (SRS): that is a subset of the SRS that details user specification requirements.
- Stakeholder Requirements Specification (StRS/StaRS): contains the same information as an SRS, but can also additionally include system capabilities, interfaces, and user characteristics, policy requirements, regulation requirements, personnel requirements, performance requirements, security requirements, and system acceptance criteria.
Testing, Release and Software Version
- Funcional testing, that verifies that the systema behaves according to the requirements.
- Usability
- Accesibility
- Non-Functional testing, this evaluates system quality attributes:
- Performance
- Scalability
- Security
- Reliability
- Regresional, ensures that changes do not break the application funcionality.
In practice functional testing is concerned with inputs and corresponding outputs of the system under test, non-functional testing tests for attributes such as performance, security, scalability, and availability. Meanwhile, regression testing confirms that a recent change to the application, such as a bug fix, does not adversely affect already existing functionality.
Testing levels:
- Unit (module): Tests individual modules or components.
- Integration: Tests interaction between modules.
- System testing: Tests the complete system against the Software Requirements Specification (SRS).
Software Release Stages
- Alpha – Early internal testing phase
- Beta – Limited external release for user feedback
- General Availability (GA) – Official public release
Software version
Software versioning is the practice of assigning unique version identifiers to software releases in order to track changes, improvements, bug fixes, and compatibility.
Some common versioning approaches are:
- Semantic Versioning (SemVer): MAJOR.MINOR.PATCH, as 2.4.1
- Calendar Versioning (CalVer): as 2026.01
- Build metadata: 2.02.2_beta.233154
Software Development Components and Tools
Modern software development relies on tools that improve organization, collaboration, automation, and reliability. Remember it is not only about writing code. It is about combining the right tools, workflows, and team practices to build applications that are secure, scalable, reliable, and easy to maintain.
Back-End
The back-end is the part of the application that users do not see directly. It manages the logic, data, security, and communication between systems.
| Component | Purpose | Examples |
|---|---|---|
| Programming languages | Build the logic of the system | Python, C++, R, JavaScript |
| Server environment | Run applications on the server side | Node.js |
| Databases | Store and organize information | SQL, PostgreSQL, MySQL |
| Security | Control access to the system | Authentication, authorization |
| APIs | Allow systems to communicate | REST APIs |
| Frameworks | Simplify application development | Express.js, Flask |
| Package managers | Install and manage dependencies | NPM |
| HTTP clients | Send and receive web requests | Axios |
Front-End
The front end is the part of the application that users interact with directly. It includes the interface, design, navigation, and user experience.
Common front-end technologies and frameworks include:
- HTML
- CSS
- JavaScript
- React.js
- Angular
Before software reaches users, it usually require passes through an automated workflow. In these process, some tools help reduce errors and improve consistency across environments.
Some common task in frequent workflows may include:
Downloading dependencies ensures that the project has the required packages, while compiling prepares the code for execution. Testing helps detect errors before release, packaging prepares the software for distribution, and deployment publishes the application for users. Together, these tasks can be automated through Continuous Integration and Continuous Deployment (CI/CD), which supports faster, more consistent, and more reliable software delivery.
Development tools
Development tools help developers collaborate, organize code, and maintain project quality.
MEAN
MEVN
Programming Language
Programming languages allow developers to write instructions that a computer can execute. They can be classified in different ways, but one common distinction is:
- Compiled (C, C++, Java), this create executable files that are grouped in programs on your computer or device. Take longer time but run faster
- Interpreted (Python, JavaScript, HTML)
High level programing language: Query languages, structured programming languages, and object-oriented programming languages are categorized as high-level programming languages. As Query (CRUED), consult the public article about SQL.
Low level (Asembly): Assembly languages are categorized as low-level programming languages.
Coding planning methods and organization
The two main methods of organizing and planning code are by developing flowcharts and by writing pseudocode. Flowcharts are pictorial representations of algorithms and pseudocode is an explanation of the function of each line of a program.
Programming Logit
To reference a program component, software developers use an identifier, which can either be a constant or a variable.
A function is a piece of structured, stand-alone, and reusable code that will perform a single specific action.
- Identifierds (constant or variable)
- Containers (arrays, vectores)
- Functions (create, invoke, )
- Objects (properties and method)
Important considerations for software deployment
In summary implied a life cycle, requirements and software stack that brings together the specifications, organization and technologies needed to build an application. Programming languages provide the instructions, databases store the information, frameworks organize development, and tools support collaboration and deployment. To write effective code, developers must understand language types, code planning methods, programming logic, functions, containers, and object-oriented structures. Together, these concepts provide the foundation for building reliable and scalable software systems.
