// archives

Software Engineering

This tag is associated with 21 posts

Software Testing Strategies

Software testing belongs to a wider topic, Verification and Validation, where testing procedures try to achieve these goals. Verification: Check whether we are building the product right Validation: Whether we are building the right product Some authors propose several strategies to improve software testing results: Quantify Requirements long before the testing begins: So testers can [...]

Introduction to the Personal Software Process

The book is written in a pretty informal way, the author seems to talk to his son or someone really close, which I don’t really mind but, from my point of view, adds extra literature not necessary at all to explain the PSP. The author focuses in two aspects along the book, measuring / planning and defects. [...]

Design Quality Guidelines

These guidelines are extracted and transformed from the Pressman’s “Software Engineering” book: A design must present an architecture built using known pattern designs, components with the right characteristics and that can be implemented in an incremental way. Must be modular, divided in subsystems Must lead to interfaces which reduce the complexity when connecting components Must be generated [...]

Cost of Quality (COQ)

To balance the quality of a product and the time spent looking for failures, we need some measurement to estimate how well we are doing. COQ takes into account the following costs: Failure costs: All costs of fixing a defect e.g. Patching a deployed product, using the debugger, reviewing code, etc Appraisal costs: Work done [...]

Attributes of a Software Product

Adaptability: The system satisfies user’s needs Maintainability: Easiness to change after the systems is running Usability: Small learning curve for end users. Reliability: Ability to run without errors in a period of time. MTBF (Mean Time Between Failures) & Availability (likelihood a system is working in a given time) Low density of bugs Efficiency: Complete [...]

Rules to Write Reusable Code

Cohesion in Methods: Do just one thing or a few but closely related Short Methods: Keep the right size so it can be easily understood and modifiable Method Coherency: Similar to others, similar size, error conditions, etc Split high-level from low-level methods: high-level are those which control, check status and low-level those which get the [...]

Product, Project, Task & Process for a Software Engineer

Some definitions taken from  “Introduction to PSP” by Watts S. Humphrey which may be worth having them handy Product: Something produced for a company or client Project: Used to produce a Product Task: Element of work Process: Way to do projects Phase: Steps proposed in a process (e.g. Planning, development, testing). Each phase is composed of tasks

Replication in Distributed Systems

System Model Assume synchronous system with crashing the only fail Replica Managers contain the replica in a computer and perform operations upon them Front-end issues request to one or more replica managers Coordination: Replica managers coordinate the requests FIFO, Casual, Total Replica manager pass back the first result for responsiveness or what majority has reply [...]

Coordination and Agreement in Distributed Systems

For the rest of the post we assume the following: Processes connected by reliable channels Only possible file is a crash Systems Asynchronous Distributed Mutual Exclusion If server involved allowing access to one process at a time Algorithms evaluated following: Bandwidth consumed Client delay Throughput of the system Central Server Algorithm: A process sends a [...]

Validation and Verification

Two terms I easily forget: Verification: Does it meet the requirements? Validation: Does it fit its purpose? And the corresponding entry in Wikipedia.