I use Trac with project-management also, and can recommend it as sufficient as I read your needs above.
Native Trac comes without project-management support. Look at the plugin recommendation site of Trac. IMO best is when you add the following plugins to a freshly installed Trac-1.0:
- SimpleMultiProjectPlugin
- TimingAndEstimationPlugin
- EstimationToolsPlugin
- TracJsGanttPlugin
- MasterTicketsPlugin
- SubticketsPlugin
- ChildTicketsPlugin
- FullBlogPlugin
- TracTicketStatsPlugin
This is a good combination of all you need for good project-management. They can all be found at trac-hacks.org and plugin installation is quite easy for Trac.
The basic idea is to plan everything based on tickets:
- There are different types of tickets: 'task', 'defect', 'enhancement' or you could define new own ones.
- Then you assign your tickets to projects, versions and milestones, there are ticket fields for that.
- You can also plan dependencies of tasks by using ticket fields 'parent', 'blocked by', 'blocking'. Gantt charts can display those relationships.
- You can query all tickets by those fields and display the results in tables.
The teams can completely work based on tickets, every work could be described and planned with tickets. Traditional defect tracking tickets, but also even tasks or task packages can be reflected in tickets. Plan the owner, start and end dates. Group them and watch them in the charts to compare plan and reality.
Managing versions
Trac comes with milestones displayed as dated progress bars on a time-sorted Roadmap page. SimpleMultiProjectPlugin adds versions to that Roadmap page, and allows to filter by projects. Your ticket tables are links behind each progress bar. For example look here.
Managing customer / technical demands
You probably mean Requirement Management. There is no direct support for it in Trac, but I would simply organize such things with tickets and maybe additional links to wiki pages or external documents.
Managing tasks (assignment + tracking)
Each ticket lives in the life cycle (workflow can be changed to your needs, see also AdvancedTicketWorkflowPlugin) of states. It's in your hand to organize how you live this workflow. One of the suggested is:
- 'new' - ticket without owner, just stored for later work, project may be set already
- 'assigned' - ticket with owner, now scheduled to a certain milestone or version
- 'accepted' - the owner starts to work on it
- 'testing' - work has finished, testing starts, the owner likely changed now
- 'closed' - everything finished
- 'needs_work', 'reopened' - states like 'new' and 'assigned' but used to make clear it already was 'testing' or 'closed'
You need to define rules in your organisation who can change the states in the workflow, e.g. project manager or worker or test department. It's up to you. Some things can be supported by Trac's permission system.
The tracking of the ticket progress is supported in many different ways:
- progress bars of milestones and versions
- workload, burndown and Gantt charts
- ticket statistics charts
- ticket queries as tables, lists, ...
- milestone charts (UpcomingMilestonesChartMacro)
- ... many more ...
Managing tests
TestManagerForTracPlugin could be your friend there. Although this feature is ways better supported with tools like HP Quality Center.
In the end there are many plugins for Trac, it's very flexible and scalable, and it's written in Python, means you can easily hack and fit it to your needs.