另外個人的工作流程我不覺得需要跑 Scrum , 可以試試 GTD 或 PDCA ,而且你會發現很多類似的觀念與原則。 Scrum 設計上是適合小型團隊的,業界說法是 3~9 人,不含 PO 與 SM 多人的公司也有很多別的方法論(EX: LeSS or SAFe),這裡我不多開戰線,敏捷無它「務實」而已。 方法沒有不好,只有適不適合。
Azure DevOps 的 BackLogs 放著許多 Feature , 依據不同的功能,再將每個 Sprint 的 User Story 放進去 這些 Feature 永遠不會被作完,隨著時間過去, 儘管完成了許多 User Story ,但是也會有新的 User Story 被加進去。 而作為文件,他的巢狀結構又不足以面對複雜的需求內容, 分散式存儲對於維護與修改上也是相同不便。
<!-- rules to map from logger name to target --> <rules> <!--All logs, including from Microsoft--> <loggername="*"minlevel="Trace"writeTo="allfile" /> <loggername="*"minlevel="Trace"writeTo="ElasticSearch" /> </rules> </nlog>
我的 Logger 代碼可能會類似這樣: 我想調整 Logger 代碼,不要與商務邏輯混在一起。
一般的 Logger 我會用 AOP 的方式作成 Audit Log 記錄
catch Exception 的 Logger 我會統一處理
1 2 3 4 5 6 7 8 9 10 11 12 13
privatereadonly ILogger logger;
public Result MyMethod(Context ctx) { this.logger.LogInformation("Hello Marsen"); try{ //// do some thing } catch { this.logger.LogError("What's a Wonderful World"); } }
[ServiceFilter(typeof(AuditLogAttribute))] public Result MyMethod(Context ctx) { try{ //// do some thing } catch { this.logger.LogError("What's a Wonderful World"); } }
-tp|--test-projects Specify what test projects should run on the project under test. -p|--project-file <projectFileName> Used for matching the project references when finding the project to mutate. Example: "ExampleProject.csproj" -dk|--dashboard-api-key <api-key> Api key for dashboard reporter. You can get your key here: https://dashboard.stryker-mutator.io
You are running CI analysis while Automatic Analysis is enabled. Please consider disabling one or the other.
另外目前支援的 CI 服務有 Circle CI 與 Travis CI , 一樣殘念的是沒有支援 Github Action 。 另外兩個選項目是 Other CI 與 Manually (手動) 。 我的前一篇文章就是使用手動的方式把檢查報告打到 SonarCloud。 雖然只隔一年,但 UI 介面上已經有些差距,我還是再作一次介紹。
這裡要注意的是, 首先每次你都需要安裝 Dotnet Sonarscanner , 其實我不清楚 Github Action 背後的機制,但是我猜測應該是用到容器化的技術, 每次 CI 執行時都會起一個實體(這個可設定,但是 Linux Like 的 OS 又快又便宜,就別考慮 Windows 了吧請參考) 所以每次都要重頭安裝相關的軟體,比如 : Dotnet Sonarscanner 。
var target = new PickupService(configService, storeSettingService, logger);
var actual = target.GetUpdateStatus(2, new List<string> {"TestWayBillNo"}); actual.Should().BeEquivalentTo(new List<ShippingOrderUpdateEntity> { new ShippingOrderUpdateEntity { AcceptTime = new DateTime(2020, 03, 03, 17, 51, 20), OuterCode = "TestWayBillNo", Status = StatusEnum.Finish } });
Legacy Code 相依 HttpClient
大部份的功能我都可以透過 DI 的手段隔離, 但是之前的 Test Driven Develop 的方法並沒有將 HttpClient 轉換成可以隔離的物件。 另外一部份代碼是透過 Copy Paste 手法產生的代碼,所以也有可能會有 Legacy Code。 這裡我優先處理 HttpClient 。