Most software is deterministic and thus, given a starting state and a fixed set of inputs, it will produce the same output every time those inputs are applied. This allows many functional software tests to be specified in a procedural way with usually few reasoning involved in their execution. As a result, automation becomes desirable and important in this context. However, many times product evolution enforces changes to automated tests in order for them to continue working properly. This highlights the importance of automated test maintainability. This paper presents a component based approach in use at Sakonnet Technology for developing automated functional software tests that focuses on the relationship between the tests and its target product to address maintainability issues.