有关遗产代码库的工作 @(_or a contractor@'s life)
一. 导言导言 导言 导言 导言
作为自由职业开发者, 您需要快速学习的技能之一 @-set 是如何在现有的代码库中有效工作@. IQ' 幸运地从--scratch systems}{;这是作为有经验的开发者的JOY 但是它不是总能成功做到的.}
挑战
特别是当关键的开发商 “/”建筑师“(” (如果你们够幸运,能让这些设计商“MSSK4”(MSSK5)移动时,
文件文件文件文件文档文件文件的文件文件文件会议文件文件文件,文件文件文献文件文件/文件文件资料文件文件文文件文件归档文件文件:文件文件记录文件文件、文件文件提供文件文件文号文件文件(文件文件 Do文件文件存档文件文件 文件文件文件和文件文件证件文件文件文件中文件文件Do文件文件档案文件文件
在小公司中,这经常被忽略 . @在一般情况下您需要\4}关键文档类型=:}
- 新建开发者指南 您如何管理项目 ? 本地 @ (_ more on this in a minute @ I),}(比如说, 您需要不同于当前#(%) 的框架, 尤其是对于诺德来说非常真实的@ MS K4 @
- 部署文件 当这些天, CI/CD被视为金色的部署标准 它MS K2}通常忽略了您需要知道如何手动配置这个系统。 这尤其是如果您在“'R”上运行一个系统, 这个系统已经存在一段时间并且有很多手工步骤 “.”
- 解决问题程序“;”当系统下沉时你做什么?“? ” 你叫谁做“MS K2 ” 什么是检查‘?’的关键东西?这经常被忽略,但在生产系统中是 CUCIAL = @.
- 设计文档.} 它提供了一个高端的“ MSKO5” 操作系统, 特别是在更大的“ I,” 分布式系统中如何运行 “ MS K6” 。 这应该包括使用哪个源代码存储库@ ,}这些源代码储存器正在被使用 k10\QCD 哪些 CISMK11 这些数据库用于应用程序中的每个元素 ="." 这可以包含从一个简单的图表到一个完整的“ MSSK13” UML 配置系统中各个组件的完整图的任何东西 例如在一次重现应用中它通常会包含各组成部分的图表以及它们彼此互动的方式和任何后端服务@.} 在“.NET”核心应用程序中,其中将包含一个服务图以及它们如何相互互动的图表。 “(”和前端的“MS K2其他后端系统”),还可能包括 ASP}.Net 视图及他们可以使用哪些服务?‘.’
文档是我们作为开发者经常讨厌做的东西之一: “(it'}不是代码@),但是它“'}关键 @.你可以看到我爱Markdown,和美人鱼与普林特美人马的相似之处。 您可以创建一些非常漂亮的图表和流程图, 可以包含在您的文档中 ‘.’
它需要成为 CURRENT;}开发商经常谈论 Bit-rotMS K2 这个项目的依附关系在其中变得过时
其中'*}文件水平不同,但一般而言 修改文档中提及的代码时,您应随时更新该文档.
本地操作系统
这往往是一个挑战 ;,特别是如果这个系统已经存在了一段时间... ...你需要知道什么版本的节点是什么?
I' @% 曾经常看到开发商说这在云层系统和大型分布式应用程序的当今时代是相关的@,}但是我不同意你必须能够在当地运行这个系统,
- 分析“MSKO}”这似乎已经变成一个 “' advanced developmenter ” “MS K2 skK3 ” 但关键在于它能描述您的代码以查看瓶颈位置@' 。 这在遗留系统中尤为如此,因为您可能没有奢侈的机会从零开始重写系统@. 像工具一样 多跟踪 和 dot 记忆@,#连接泄漏等 .}但您的应用程序似乎会稍微运行 FNE 您突然发现它“'%s crashing {/}在服务器上消耗了所有存储器@.}*
- 在调试器中查找问题@- @ 喜欢或不喜欢
Response.Write在经典的 ASP 中,对于一个相当复杂的应用程序“(”来说是超过@.}(尤其是那些您曾经写过"'\t write)... it'}关键人物 - 正在登录 @-+} 再次经常忽略@(#对不起,但是没有 ASP.NET 核心例外过滤器在堆叠顶端是'Qt\ t%). reing back to my 上一个职位, 伐木是使用 LOCLEY. 代码的关键部分。 请记住您可以使用客户类型@(}例如使用 伐木源发电机)在 ASP @.NET Core.中, 您可以指定哪些事件类型应该登录, 而哪个事件类型应当被登入( MSSK3t.) 。 在遗留系统中, 您可能没有奢侈条件从零开始重写系统@.
对于应用程序 Insight , 您可能想要用户 Journeys 和其他特性@; @ 1 但是要知道 这么快就变得贵了 如果使用
LogInformation您可能想要使用一个自定义的遥测处理器来过滤您don'}不想登录@ .} - 我经常看到开发商在预 preprod'}或认为单位测试后进行检查就足够充分了。 它的 RARELY IS @,}这里'}使用Resharper &/+NCrunch等工具来自动运行单元测试 ;}但记住单数测试只是他们测试代码{'Unize_'}编码 您需要保持系统与其他组件同步运行时的可见度*.}这是集成测试如何运行到 <;> 分光花 以人文@- @可读格式 @.Again_;}撰写这些测试。 在遗留系统中, 您可能没有奢侈条件能够从零开始重写此系统 =.}
在每一个项目中,我工作的第一个步骤就是 获得系统“(”或者它的大部分部分 “)”在本地运行“MS K2” 通过看到代码“MSSK3”运行代码“,”来调试代码 您可以感觉到这个系统是如何运作的吗?
代码库
在每一个系统中,这是你的 真相来源@,}不管醫生怎麼說 其他人怎麼告訴你它應該如何運作 這就是它是如何運作的 ∮DOSS如何工作∮
导航遗产代码库
这常常具有挑战性 就像在没有路线图的新城市找到路一样 幸运的是您的应用程序中有一个切入点 “(”页面加载了“/” 前端API呼叫等前端 .)选择一个点并开始在那里.}
使用任何您需要与它互动的@, @% 1 @s PostManQ,Rider @'}HttpClient 或甚至网页“ . Hook in your debugger,}在调试时通过+.Rinse进行拨打并跟踪,并在系统每个部分重复“.” 。
重构
通常离开这个直到你了解系统 它总是诱使它重新运行... ...不管它是如何抵制这种诱惑... 它的工作 重建“/”甚至重构一个系统是 HUGE 风险. 是 (Y) it'}FUN 但对于每一行代码,你都会改变 你可能会引入新的刺激性错误@.}
@(#@ 特别是当您签约时, 您需要证明在系统上完成的工作是正当的吗? @ ._ 要么这个理由应该集中在以下之一: @ I:}
- 业绩表现 实绩 “-”这个系统很慢, 需要加快速度“(”再小心一点。 “,”你发现它是如何设计的? “).”一个部分快速吸烟可能会在系统中引入更多问题吗?“MS K4”你会否?“'” kill'?数据库服务器=, 如果你提出太多的请求 您是否拥有一种机制来赢得了“MSKO8”的解码例外?
- 安全安保安全 @-_#这个系统不安全, 需要保障安全@.}(这是一个棘手的问题) 尤其是一个遗留的系统..."."和BitZ-rot你可能会发现 这个系统正在使用旧版图书馆
- 可维持性 “-”这个系统很难维护, 且需要更容易维持“.” 。 一般说来, 这成了许多工作 ‘;’ ......如果您花更多时间做这些修改以提高可调控性的话, 如果您使用的时间比您的<'> 为客户节省了更多的时间, 那么它就等于'$不值得这样做 @(}和再次修改的代码 {,}
- 用户经验 我一般优先考虑这些问题... ... . 用户 如果您的代码是“1%” 或“更好的” 他们就是那些为您最终完成的工作支付款项的人 如果你们能让他们的经验比它更好的话 “'”一般值得吗?“但是,你应该知道这可以是“MS K7”和“Slippery clippey clip ' obs”中的修改“;” 你可能会发现 您正在改变一个系统LOT来对用户做小改动‘.’
遗产制度工作业务
这是经常被忽略的 @;, 特别是开发商@.。 您需要能够证明您在系统上所做的工作是正当的吗? . 在订约环境下尤其如此: 你按小时支付='
I'@ve 工作了十多年的承包商, 现在超过10年了 @, @ it_'}不是EASY;}作为订约人你的时间里每个小时都会是客户$'cost{'}您需要增加系统的价值。 如果您不这样做的话, 您会很快寻找新的合同.}
作为开发商,我们通常都是些讨厌的商人... ...我们总是把注意力集中在...''perfection '"上 在现实中...
在更长期的接触方面,本《公约》确保 新建新 在遗留系统中,这是MUCH HARDER.}你常常不得不通过沼泽 , 来走动 当你学习到系统时 你无法提供很多价值.} I'm not making any changes 您认为 I'm just learning the system.
这是一个谬误@ ; @ 你'}你正在学习这个系统, 以便让它更高效地建立这个系统... ... MS K4 - 您'\ 正在学习那个系统来使它更便于维护.... 如果客户不能接受这个步骤...; 那么您需要非常小心的如何传递这个“(”或者寻找新的合同
人民人民
经常被忽略的@, @% 很多时候你作为承包商被带进来 因为某个关键人物离开了#(çdon @'}参与此项目的政治活动 在一份合约中,您一般都会有您的约定条款 在我目前的合同里写明 “( ” 如果您不知道这意味着什么 那么ASK.“
记住你的直接联络人是谁... ...;...
记住:, 这个人会批准您的发票@; 在发票时间不应该有任何意外 一旦你开始定期检查代码... 他们需要知道你做了什么 为什么要付你钱
可靠性
再说一遍,回到遗留代码@; 如果你需要改变常规,你就需要部署它 @. 即使我们中最好的人会不时搞砸这件事 {\fn方正黑体简体\fs18\b1\bord1\shad1\3cH2F1F2F 当您部署 @ .} 这将返回到日志@ -} 如果您有一个中转服务器, 它将记录一个 LOT @ I(} but 短期保留 *\ )}当您部署到这里时 您可以收集更多关于失败内容的更多信息\ MS K4 {
无论你有多优秀 ,+多少本地测试都完成 我们都是人类.+ 这是在周五部署的'+Don @'+T的关键部分
特别是对于生产系统 您的中继系统可能不是 @ 1:1 @ @ I(} @ 特别是在与载荷有关的情况下@ MS K2# 像工具一样的工具 k6 能够帮助您模拟本地装载 @( better local where you can do correct profile accessment 前面提到的“).”
部署
在 CIC 的 fervour 中,经常被忽略的是这些“.” 简单; 的原因。 如果有一个非常快速和高效的方式来部署一个系统的话,那么当您打破它时, 您也可以更快地修复它。 如果您的 CIS 代码审查系统意味着需要5天的时间才能将公关合并, 那么, “'” 你就能最快地找到一个系统吗? “MS K7” 如果你的CD系统意味着你拿下运行中的系统, “;” 你会习惯Long nights
高效的代码修复和部署机制对于有效开发管道来说是不可或缺的.... 如果需要比在代码中找到和实施该修正所需的时间更长的时间来配置一个解决方案,那么您更不可能修补东西."
' 固定遗留物程序{'
我引用了这一点,因为这是一个遗留应用问题 =;(}特别是当大规模重整工作出局时
- 正在运行的补丁
这是简单的修正 code@;}再次确保您进行彻底测试的程序, 并设置程序来恢复\ /}快速调用任何修补{. 我成功'T 谎称这种类型的发展很少是FUN, 因为你仍然有可能在现有的代码库的沼泽中溜走... .......
和往常一样,你应该确保您有某种测试形式来解析当前的代码@;最好它也应该检测失败。 您在做出修正之前试图解决的问题 . 他们用IDYLL 来进行单位测试,该测试将接近您需要修正的代码领域,但对于大“,”分布式系统来说,这通常不在工作范围之内。
I'd通常使用按优先顺序排列的测试系统@:
- 单位测试 @ -} 再次选择这些选项, 因为您可以针对它们只练习您正在处理的代码@ MS K1 但是在遗留系统中 这些通常没有出现 *& 非常困难
- 集成测试@-}这是一个超载的术语, 它能覆盖单位测试中通过多层代码 {(这些是最好避免的\ )使用优异的类似名称。 核查校验 使用校验通常可以成为遗留系统的一个很好的方法, 因为至少您可以“'”+#verify@'}你无法打破系统的API表面 @.}
- 手动测试 @ - @ 每个开发者都应该尝试并运行任何代码检查的手工测试@ MS K1} 这只能确保您所期望的 & ' @ user @ MPK3 @ @ @ I(}这可以是一个实际用户或系统中另一个与您的编码{)}互动的部分, 来查看他们实际上看到什么 .} 这将像本地操作此系统一样简单, 可以检查页面输出或者复杂到在中继服务器上运行全套测试@.}
- 洋葱皮 在研究遗留系统时,您通常会获得 '+T 的奢侈品 完全重整工作@.}这就是我在这里使用的“'Qonion skinning”_'QQ 方法 @.+#
为使您能够提升系统部件的升级, 您可以确定可以从现有单体中分离出来的元件 {(} 变成微服务@'} micro').这可以成为在没有全面重整风险的情况下开始使一个系统现代化的一个好方法_.}* 通常的例子可能是将API端点分为使用更新元素的新项目@.DRY的恐怖性可以在这里发挥作用。 然而,一个结构不完善的解决办法往往有许多“'Helper @'}或“MS K4serviceQ'’%BZMK4{Services”的组成部分,这些组成部分应该真正属于不同的项目 ‘(>或者甚至用于全球再利用的纳吉特套件中的Nuget包).}
I' 将在未来的一篇文章中进一步涵盖这一方法,因为它是我如何在遗留系统上工作的一个关键要素 @& 许多开发商并不明显@.
领薪
现在,我们有了这一切 一路走过来的棘手支付问题... ...我有一个通则...
任何付款问题 I'#m 希望继续
如果他们延迟付款 '@MSNickle @-QQ和-Dimeing+)考虑公司是否有能力持续支付您的服务费用
如果你完成了你的工作,你需要及时得到报酬... .... ...不管你有多喜欢它...
诚实点;只收你实际工作时间的收费 ; 确保它能澄清你的所作所为和为何这么做.>
I' @ve 领导开发团队和I've 曾是一位开发商\ ;}IQ'}一直是一个承包商,而I'}已经是一位客戶IZMK6}我可以告訴您:如果你沒有按时得到付款的話,你必須在Flip_.}(如果您有一個未交付的承包商)(}或一個 FTE})}你需要快速解決這項問題 □.}每個人都有個人掙扎 但是特别是在合同环境下...
至于你的工作率 ;,你会发现你的级别 我个人会为那些我更负责的项目收费更多... ...( 或者那些看起来像有趣的...
在结论中的结论
明日和今天都下班去参加我奶奶的葬礼 坦率地说,我很惊慌 我有一个HUGE遗留系统来学习,Q 所以我觉得I'吐了出来 关于这些系统中运作方式的想法 就像&挑战