Software Engeneering - Key Notes
APPLIED COMPUTER SCIENCE
Index
- Software engineering
- Software Development Life Cycle (SDLC) and Software Engineering Process
- Software requirement specification
- Testing
- Software Development Components and Tools
- Programming Language
- Important considerations for software deployment
[WORK IN PROGRESS]
Software engineering
Software engineering is the systematic approach or application of scientific principles to the design and development software.
The main goal in software engineering is to develop solutions that satisfy requirements. Always keep this in mind.
In practice, there are some differences between a software engineer and a software developer. The main characteristics in this regard are:
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
Software Development Life Cycle (SDLC) and Software 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
The common software engineering processes consist of:
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.
Software requirement specifications (SRS)
A URS is a subset of the SRS that details user specification requirements.
The SysRS 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
- 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.
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
- 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 Development Components and Tools
Back-End
- JavaScript***
- Python
- Data Bases
- Secure and autorizations
- Node.js
- Read JS
- Flash
- Express JS
- Axion
- NPM
Front-End
Structure for Developers
- Recap
- Team
- Squad
- Calendar time
- Schedules
- Pair programing (navigator/Driver)
Development tools
- Version control systems (Git/Github)
- Libraries
- Frameworks (skeleton, standards)
- AngularJS
- Django
- Components
- CI/CD
- Build tools (utilities/servers)
- Dowloading dependencies
- Compiling
- Packaging
- Running test
- Deployment
- Packages
Stack
Comunication in software development key points
- This is very important
- You will need some people to talk about
Programming Language
Interpreted programming languages create source code that runs through an interpreter and is built into your operating system (OS) on your computer or on your web browser.
The programming languages will be:
- 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.
Data and data base structure
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
