The behavior of a communications network depends on the configuration of hundreds to thousands of switches, routers, firewalls, and other devices. For example, a campus network may have as many as 2,000 inter-operating network devices and about one million lines of configuration; whether the network operates correctly depends for the most part on the configuration of these devices. Human configuration errors are the single biggest contributor to network downtime. This project seeks to develop techniques to make networks easier to manage by improving both configuration testing and synthesis. Testing takes as input an existing network configuration and determines whether the configuration is operating correctly. Synthesis generates configurations automatically. The project draws on two testing techniques to make network configurations easier to test: differential testing and dynamic testing. Differential testing generates test cases to characterize the run-time behavior of two different programs; analyzing differences in network-wide configurations can help testing by allowing test cases to focus on the smaller subset of configurations that change more frequently. Differential analysis may make testing more tractable by reducing the amount of configuration to test. Dynamic testing checks the correctness of a program by executing it; this execution can be performed in a parallel "shadow" network, for example. The expected results from this project include tools for network operators to test and automatically generate network-wide configurations for both enterprise and ISP networks. The tools will also be useful in graduate-level courses.