如果让你设计一个Python程序，用于检测两个字符串是否为变位词（即：一个字符串的字符重新排列后能形成另一个字符串），你会怎样设计？请详细说明思路。注意，助手的回答需要包括五个部分：1. 问题描述；2. 思路分析；3. 算法设计；4. 代码实现；5. 测试用例。请以Markdown格式输出。
user
```markdown
# 变位词检测程序设计

## 1. 问题描述
给定两个字符串，编写一个程序来判断这两个字符串是否为变位词（Anagrams）。变位词是指通过重新排列另一个字符串的所有字符可以形成的字符串。例如："listen" 和 "silent" 就是一对变位词。

## 2. 思路分析
变位词的特点是两个字符串中每个字符的出现次数完全相同。因此，可以通过比较两个字符串中每个字符出现的频率来判断它们是否为变位词。具体步骤如下：
- 首先检查两个字符串长度是否相同，不同则直接返回 `False`。
- 然后统计每个字符串中字符出现的次数。
- 最后比较两个字符串中字符出现的频率，如果完全一致，则说明两个字符串是变位词。

## 3. 算法设计
1. **预处理**：如果两个字符串长度不同，直接返回 `False`。
2. **字符频率统计**：使用字典来统计每个字符串中各字符出现的次数。
3. **频率比较**：比较两个字典是否相等，如果相等则返回 `True`，否则返回 `False`。

## 4. 代码实现
```python
def are_anagrams(s1, s2):
    if len(s1) != len(s2):
        return False
    # 使用字典统计字符出现次数
    count_s1, count_s2 = {}, {}
    for char in s1:
        count_s1[char] = count_s1.get(char, 0) + 1
    for char in s2:
        count_s2[char] = count_s2.get(char, 0) + 1
    # 比较两个字典
    return count_s1 == count_s2
```

## 5. 测试用例
```python
# 测试用例
print(are_anagrams("silent", "listen"))  # 应输出：True
print(are_anagrams("hello", "elloh"))    # 应输出：True
print(are_anagrams("python", "python3")) # 应输出：False
print(are_anagrams("aaa", "aab"))        # 应输出：False
print(are_anagrams("", ""))              # 应输出：True
```
以上测试用例覆盖了包括大小写相同、不同以及空字符串等情况，可以有效地验证程序的正确性。
```
```
assistant