gì bạn đang làm là chuyển từ "tất cả mọi người làm việc với nhau trong một môi trường" thành "tất cả mọi người có môi trường phát triển riêng của họ". Lợi ích chính là mọi người sẽ không bước chân vào nhau.
lợi ích khác bao gồm một môi trường phát triển không đồng nhất, có nghĩa là nếu tất cả mọi người được phát triển trên cùng một máy phần mềm sẽ trở nên phụ thuộc vào đó một thiết lập bởi vì các nhà phát triển là lười biếng. Nếu mọi người phát triển trong các môi trường khác nhau, thậm chí chỉ với các phiên bản hơi khác nhau của cùng một công cụ, họ sẽ buộc phải viết mã mạnh mẽ hơn để đối phó với điều đó.
Hạn chế chính, như bạn đã nhận thấy, việc thiết lập môi trường khó hơn. Đặc biệt, đảm bảo cơ sở dữ liệu hoạt động.
Trước tiên, mỗi nhà phát triển phải có cơ sở dữ liệu riêng. Điều này không có nghĩa là tất cả chúng phải có cơ sở dữ liệu riêng của mình server (mặc dù nó tốt cho các mục đích không đồng nhất) nhưng chúng phải có cá thể cơ sở dữ liệu riêng mà chúng kiểm soát.
Thứ hai, bạn nên có lược đồ và không chỉ bất kỳ thứ gì trong cơ sở dữ liệu. Nó phải nằm trong một tệp được kiểm soát phiên bản.
Thứ ba, thiết lập cơ sở dữ liệu mới sẽ tự động. Điều này cho phép các nhà phát triển thiết lập một cơ sở dữ liệu sạch sẽ mà không gặp rắc rối nào.
Thứ tư, bạn sẽ cần nhận dữ liệu thử nghiệm thú vị vào cơ sở dữ liệu đó. Đây là nơi mọi thứ trở nên thú vị ...
Bạn có một số tuyến đường để thực hiện điều đó.
Đầu tiên là làm cho một bãi chứa của một cơ sở dữ liệu hiện có, trong đó có dữ liệu thực tế, vệ sinh của khóa học. Điều này rất dễ dàng, và cung cấp dữ liệu thực tế, nhưng nó rất dễ vỡ. Các nhà phát triển sẽ phải săn lùng xung quanh để tìm dữ liệu thú vị để thực hiện thử nghiệm của họ. Dữ liệu đó có thể thay đổi trong bãi chứa tiếp theo, phá vỡ các thử nghiệm của họ. Hoặc nó chỉ có thể không tồn tại chút nào.
Thứ hai là viết "đồ đạc thử nghiệm". Về cơ bản, mỗi thử nghiệm điền vào cơ sở dữ liệu với dữ liệu thử nghiệm mà nó cần. Điều này có lợi cho phép nhà phát triển lấy chính xác dữ liệu họ muốn và biết chính xác trạng thái của cơ sở dữ liệu. Những hạn chế là nó có thể tốn rất nhiều thời gian, và thường dữ liệu là quá sạch. Dữ liệu sẽ không chứa tất cả các dữ liệu thực sự có thể gây ra lỗi thực.
Thứ ba là không truy cập vào cơ sở dữ liệu ở tất cả và thay vào đó "giả" tất cả các cuộc gọi cơ sở dữ liệu. Bạn lừa tất cả các phương thức thường truy vấn cơ sở dữ liệu vào thay vì trả về dữ liệu thử nghiệm. Điều này giống như viết đồ đạc thử nghiệm, và có hầu hết các nhược điểm và lợi ích tương tự, nhưng nó FAR xâm lấn hơn. Sẽ rất khó để làm trừ khi hệ thống của bạn được thiết kế để thực hiện nó. Nó cũng không bao giờ thực sự kiểm tra nếu các cuộc gọi cơ sở dữ liệu của bạn hoạt động.
Cuối cùng, bạn có thể xây dựng một tập hợp các thư viện mà tạo dữ liệu bán ngẫu nhiên cho bạn. Tôi gọi đây là "Kỹ thuật Sims" sau trò chơi điện tử nơi bạn tạo ra những gia đình giả mạo, tra tấn họ và sau đó vứt chúng đi. Ví dụ: giả sử bạn có đối tượng Người dùng cần tên, tuổi, đối tượng Thanh toán và đối tượng Phiên. Để kiểm tra Người dùng, bạn có thể muốn người dùng có tên, tuổi, khả năng thanh toán và trạng thái đăng nhập khác nhau. Để kiểm soát tất cả những gì bạn cần để tạo dữ liệu thử nghiệm cho tên, độ tuổi, Thanh toán và Phiên. Vì vậy, bạn viết một hàm để tạo tên và một để tạo ra các độ tuổi. Đây có thể là đơn giản như chọn ngẫu nhiên từ một danh sách. Sau đó, bạn viết một để làm cho bạn một đối tượng thanh toán và một đối tượng Session. Theo mặc định, tất cả các thuộc tính sẽ là ngẫu nhiên, nhưng hợp lệ ... trừ khi bạn chỉ định khác. Ví dụ...
# Generate a random login session, but guarantee that it's logged in.
session = Session.sim(logged_in = true)
Sau đó, bạn có thể sử dụng điều này để kết hợp một Người dùng thú vị.
# A user who is logged in but has an invalid Visa card
# Their name and age will be random but valid
user = User.sim(
session = Session.sim(logged_in = true),
payment = Payment.sim(invalid = true, type = "Visa"),
);
Điều này có tất cả các ưu điểm của thiết bị thử nghiệm, nhưng vì một số dữ liệu không thể đoán trước nên có một số lợi thế của dữ liệu thực. Thêm dữ liệu "thú vị" vào các chức năng rand và rand mặc định của bạn sẽ có tác động khác nhau. Ví dụ: thêm tên Unicode vào random_name
có thể sẽ phát hiện tất cả các loại lỗi thú vị! Thật không may là tốn kém và tốn thời gian để xây dựng.
Có bạn có nó. Thật không may là không có câu trả lời dễ dàng cho vấn đề cơ sở dữ liệu, nhưng tôi yêu cầu bạn không chỉ đơn giản là sao chép cơ sở dữ liệu sản xuất vì nó là một đề xuất mất đi trong thời gian dài. Bạn sẽ có khả năng làm một lai của tất cả các lựa chọn: sao chép, đồ đạc, chế giễu, dữ liệu bán ngẫu nhiên.
có bạn coi là có sao chép một chiều từ sản xuất đến cơ sở dữ liệu dev? Hai bản sao, một trong số đó ghi đè lên một bản sao khác một cách thường xuyên? Sau đó, bạn kết nối với bản sao dev, và không có gì bạn làm ở đó sẽ "dính" lâu. – Borealid
Chỉ cần làm rõ, điều này dường như không liên quan gì đến git, nhưng với việc thay đổi phong cách phát triển của bạn từ "mọi người làm việc trên một môi trường thử nghiệm" để "mọi người đều có môi trường thử nghiệm riêng". Câu hỏi cụ thể của bạn là về việc phải làm gì với cơ sở dữ liệu thử nghiệm. Tôi có đúng không? – Schwern
@Borealid Tôi tự hỏi nếu nó có thể làm một chiều * sao chép một phần *, loại giống như làm một tuyên bố chọn với một giới hạn 50 hoặc một cái gì đó. Bằng cách đó chúng tôi có thể giữ cho cơ sở dữ liệu cục bộ đủ nhỏ và cũng có thể thêm dữ liệu ngẫu nhiên tùy chỉnh của riêng mình. – hobbes3