Another crashed spacecraft. Another software problem
TL;DR: Design and test the software. It is cheaper than the hardware
Problems
Bijection Fault
Unexpected Defects
Solutions
Create accurate simulations
Make fault-tolerant software
Context
Luna-25 crashed on the moon's surface on August 19, 2023.
4 days before India’s Chandrayaan-3 soft landed on Moon's south pole.
A forensic analysis revealed that the instructions shared a bus and were not prioritized correctly.
Spacecrafts have a long history of software faults.
Sample Code
Wrong
class TaskManager:
def __init__(self):
self.tasks = []
def add_task(self, task, priority):
self.tasks.append((task, priority))
def execute_tasks(self):
# No sorting
for task, _ in self.tasks:
task.execute()
class Task:
def __init__(self, name):
self.name = name
def execute(self):
print(f"Executing task: {self.name}")
task_manager = TaskManager()
highPriorityTask = Task("Slow down")
mediumPriorityTask = Task("Take Photos")
reviveKlaatu = Task("Klaatu barada nikto")
# unsorted
task_manager.add_task(mediumPriorityTask, 2)
task_manager.add_task(highPriorityTask, 1)
task_manager.add_task(reviveKlaatu, 3)
task_manager.execute_tasks()
Right
class TaskManager:
def __init__(self):
self.tasks = []
def add_task(self, task, priority):
self.tasks.append((task, priority))
def execute_tasks(self):
# Sort tasks by priority (high to low)
self.tasks.sort(key=lambda x: x[1], reverse=True)
for task, _ in self.tasks:
task.execute()
class Task:
def __init__(self, name):
self.name = name
def execute(self):
print(f"Executing task: {self.name}")
task_manager = TaskManager()
highPriorityTask = Task("Slow down")
mediumPriorityTask = Task("Take Photos")
reviveKlaatu = Task("Klaatu barada nikto")
# unsorted
task_manager.add_task(mediumPriorityTask, 2)
task_manager.add_task(highPriorityTask, 1)
task_manager.add_task(reviveKlaatu, 3)
task_manager.execute_tasks()
Detection
[X] Manual
This is a design smell
Tags
- Reliability
Conclusion
Create software components and simulate real and not real conditions
Relations
More Info
Disclaimer
Code Smells are my opinion.
The Analytical Engine has no pretensions whatever to originate anything. It can do whatever we know how to order it to perform… But it is likely to exert an indirect and reciprocal influence on science itself.
Ada Lovelace
Software Engineering Great Quotes
Maxi Contieri ・ Dec 28 '20
This article is part of the CodeSmell Series.