// archives

Software Engineering

This category contains 31 posts

Papers of the Month: Detecting RF Devices & Embedded Multi-Core

Airshark: Detecting Non-WiFi RF Devices using Commodity WiFi Hardware [PDF version] The paper presents a series of techniques which goal is to detect the presence of RF signal from different devices such as bluetooth, Zigbee, etc. They main contributions is the use of commodity WiFi adapters which allows anyone to use the solution proposed. The [...]

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 [...]

Requirements Engineering

These are the steps the Requirements Engineering is composed of: Gathering: Engineer asks stake holders to retrieve information. Not easy due to unnecessary information, misunderstood information and volatility Elaboration: First UML diagrams, some iterations to polish the model Negotiation: Discriminate between conflicting requirements and delimit user’s needs Specification: Documentation, may vary in details and contents [...]

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

Product and Period Plans

Product Plan: Time you spend on each task to complete an activity Period Plan: How you distribute the previous time over a interval of time Definitions from “Introduction to PSP” by Watts S. Humphrey