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

DimensionSoftware EngineerSoftware Developer
Main focusSystems, architecture, and reliabilityFeatures, code, and functionality
ScopeBroad, end-to-end system designSpecific modules or components
ApproachApplies engineering principles across the software lifecycleFocuses on coding, testing, and implementation
Design roleDefines architecture and technical standardsImplements solutions within an existing design
Quality emphasisScalability, maintainability, security, and risk reductionFunctional correctness and usability
Lifecycle roleInvolved from requirements to deployment and maintenanceMainly involved in development and implementation
PerspectiveBig-picture, structural, and long-termTask-oriented, practical, and delivery-focused
Typical trainingEngineering-oriented: systems, design, lifecycle, trade-offsProgramming-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:


Roles
 
There are many different roles involved in a software engineering project. Some of them include:   
Development Team Structure

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.
The communication is very important and it a responsibility of the Scrum-master. You will need some people to talk about or consult. 
 
Documentation 
 
Software documentation covers the key artifacts needed to define, build, test, maintain, and use a system. It includes:
  • 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

Testing is very importan, and there are some diferenct testing types:
  • 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. 

Modern software development can be understood as a system made of four main layers (as in the illustration below): The back end handles the application’s logic, data, APIs, and security, while the front end manages what users see and interact with. The build, testing, and deployment process prepares, verifies, and releases the application, and development tools help teams collaborate, manage code, and maintain software quality.

I - Software development main layers
 

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.

 

Components and tools use in the back-end
 
ComponentPurposeExamples
Programming languagesBuild the logic of the systemPython, C++, R, JavaScript
Server environmentRun applications on the server sideNode.js
DatabasesStore and organize informationSQL, PostgreSQL, MySQL
SecurityControl access to the systemAuthentication, authorization
APIsAllow systems to communicateREST APIs
FrameworksSimplify application developmentExpress.js, Flask
Package managersInstall and manage dependenciesNPM
HTTP clientsSend and receive web requestsAxios

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  

Build, Testing, and Deployment

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.

 

 Package managers
In modern software development, applications depend on external libraries, utilities, and modules. These dependencies are installed and managed through package managers. 
Package managers simplify software administration by allowing users and developers to install, update, and remove applications through standardized commands. Different operating systems use different package managers:

   

 In cloud applications, libraries and utility code are managed with the cloud application package managers:
 
 
Stack
 
The set of technologies used to build and run the application go to be the software stack. It usually combines the used programming languages, frameworks, databases and package managers, development tools, and deployment infrastructure. 
 
 

  

 

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. 

 

 

Object-oriented programming is a programming paradigm based on the concept of objects, which contain data and behavior through attributes and methods.  

 

  • Identifierds (constant or variable)
  • Containers (arrays, vectores)
  • Functions (create, invoke, )
  • Objects (properties and method) 

 

Important considerations for software deployment

To close these blog I think that is important to consider and understand some important aspects that require certain decisions with a big impact in the development for deployment. 
 
T4 - 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.

 

Entradas populares

Lo mas consultado

Entradas populares