Questions tagged «development-process»

有关软件开发过程的问题。

17
程序员责任法案[关闭]
因此,我们都听说过《程序员权利法案》,而XP也有类似的概念。 这些天来,我们经常听到人们对人们的权利有很多了解,但对他们的责任却知之甚少,所以程序员的责任清单上应该写些什么。那是他们应该做的事情,他们可能会觉得不愉快,但是那会使程序员在职业上和负责任的行为与不这样做的人分开。 我主要对难吃的食物和那些不太可能发生的食物感兴趣。那是程序员倾向于回避和避免的,而不是90%的程序员实际上想要做的(例如始终重构和使用源代码控制)。 那么,程序员责任法案应包含哪些内容?


5
当您面对从未完成的编程任务时该怎么办?
3个月前,我以.NET开发人员的身份开始了我的职业生涯,在针对各种技术,模式和概念进行了长期培训之后,负责监督我的开发人员决定我准备加入该公司处理的众多项目之一。 我很高兴终于能够开始编码。我加入的团队目前很小,因为正在开始一个新项目,这很棒,因为我参与了该项目的整个生命周期。它是一个基于Web的SPA项目,其支持使用ASP.NET MVC / ASP.NET Web API,并且在前端提供Durandal框架和相关库。 我的问题是,在与同事开会并确定下个月的任务和估计后,我发现自己处于一个不知道自己是否有能力承担任何任务的职位。 我从未完成任何已创建的任务,而且我不知道该如何进行。 例如,创建的任务之一就是为整个应用程序创建通用的错误处理机制。 当面对他从未完成的任务时,通常如何进行?

7
在很少的时间内如何做出重要的技术决策
我有2天的时间对公司要使用的工具和平台做出非常认真的决定,以便将其WPF应用程序移植到Linux / Android / iOS。 显然,我可以指出,我的前辈说,只有2天时间不足以阅读所有可能的选择,以及尝试,制作原型等内容。我可以说,这对我没有帮助,我有2天的时间,并且2天后将做出决定。期。 一方面,我感到沮丧,另一方面,我认为这种方法有一定道理,否则,我很容易陷入很多下载的SDK,框架,API,博客文章等之中,沉迷于做基准工作,运行示例并忘记了过程的全部目的。 仍然我担心,错误的决定将使公司付出沉重的代价。那么,您认为做出此类决定的“理想”过程是什么?

5
在代码审查中给予正面评价是适当的,还是仅用于建设性批评?
我最近一直在进行大量代码审查,但是我不确定在代码审查中添加正面和/或有趣的评论会带来正面和负面的影响以及专业性。 我们使用Github作为我们团队中的代码审查平台,因此任何人都可以查看注释。我通常会尝试使用该平台,因此从头到尾的整个过程都是可见的和历史性的。

6
如何测试难以模拟对象的系统?
我正在使用以下系统: Network Data Feed -> Third Party Nio Library -> My Objects via adapter pattern 最近,我们遇到了一个问题,即我更新了所使用的库的版本,这尤其导致时间戳(第三方库返回该时间戳long)从时期后的毫秒数更改为时期后的毫微秒。 问题: 如果编写模拟第三方库对象的测试,则如果我对第三方库的对象犯了错误,则我的测试将是错误的。例如,我没有意识到时间戳会改变精度,这导致需要更改单元测试,因为我的模拟返回了错误的数据。这不是库中的错误,它的发生是因为我错过了文档中的某些内容。 问题是,我无法确定这些数据结构中包含的数据,因为如果没有真实的数据馈送,我将无法生成真实的数据。这些对象又大又复杂,并且其中包含许多不同的数据。第三方库的文档很差。 问题: 如何设置测试以测试此行为?我不确定我可以在单元测试中解决此问题,因为测试本身很容易出错。另外,集成系统又大又复杂,容易遗漏一些东西。例如,在上述情况下,我已经在几个地方正确地调整了时间戳记处理,但是我错过了其中之一。在我的集成测试中,该系统似乎在做正确的事情,但是当我将其部署到生产环境(具有大量数据)时,问题变得很明显。 我目前没有集成测试过程。测试本质上是:尝试保持单元测试良好,在出现问题时添加更多测试,然后部署到我的测试服务器并确保一切正常,然后部署到生产中。这个时间戳问题通过了单元测试,因为模拟创建错误,然后通过了集成测试,因为它没有引起任何直接的,明显的问题。我没有质量检查部门。

5
您应该在哪里放置常数,为什么?
在大多数大型应用程序中,通常只有几个“常量”位置: 一类用于GUI和内部内容的内容(制表页标题,组框标题,计算因子,枚举) 一类用于数据库表和列(此部分是生成的代码)以及它们的可读名称(手动分配) 一类应用程序消息(日志,消息框等) 在这些类中,常量通常分为不同的结构。在我们的C ++应用程序中,仅在.h文件中定义常量,而在.cpp文件中分配值。 优点之一是,所有琴弦等都放在一个中央位置,每个人都知道在必须更改某些内容时可以在哪里找到它们。 这尤其是项目经理在人们来来往往时喜欢的东西,这样每个人都可以更改这些琐碎的事情,而不必深入研究应用程序的结构。 另外,您可以轻松地一次更改相似的“组框” /“选项卡页”等的标题。另一个方面是,您可以仅打印该类并将其交给非程序员,该非程序员可以检查字幕是否直观,向用户发送的消息是否太详细或太混乱等。 但是,我看到了某些缺点: 每个类都与常量类紧密耦合 添加/删除/重命名/移动常量需要重新编译至少90%的应用程序(注意:至少在C ++中,不需要更改值)。在我们的一个带有1500个类的C ++项目中,这意味着大约7分钟的编译时间(使用预编译的标头;如果没有它们,则大约为50分钟),再加上大约10分钟的链接到某些静态库。 通过Visual Studio编译器构建速度优化的发行版最多需要3个小时。我不知道是否大量的类关系是源,但也有可能。 您会被迫将临时硬编码的字符串直接转化为代码,因为您想非常快速地测试某项内容,并且不想仅等待15分钟来进行该测试(并且可能以后每次测试)。每个人都知道“以后我会解决”的想法。 在另一个项目中重用一个类并不总是那么容易(主要是由于其他紧密的耦合,但是常量处理并没有使它更容易。) 您将在哪里存储这样的常量?为了使您的项目经理相信还有更好的概念也符合上面列出的优点,您还会提出什么论点? 随意给出特定于C ++或独立的答案。 PS:我知道这个问题是主观的,但是老实说,我不知道有比这个网站更好的地方。 有关此项目的更新 关于编译时间,我有个新闻: 在Caleb和gbjbaanb的帖子中,有空时,我将常量文件拆分为其他几个文件。我最终还将我的项目分成几个库,现在可以轻松得多。在发布模式下进行编译显示,包含数据库定义(表,列名等-超过8000个符号)并建立了某些哈希值的自动生成的文件在发布模式下造成了巨大的编译时间。 现在,通过停用包含DB常量的库的MSVC优化器,我们可以将发布模式下的项目(几个应用程序)的总编译时间从最多8小时减少到不到一小时! 我们还没有找到为什么MSVC很难优化这些文件,但是现在,由于我们不再只依赖夜间构建,因此此更改减轻了很多压力。 这个事实以及其他好处,例如紧密耦合少,可重用性更好等,也表明花时间拆分“常量”并不是一个坏主意;-) 更新2 由于这个问题仍然受到关注: 这是过去几年中我一直在做的事情: 将每个常量,变量等完全放在与其相关的范围内:如果仅在单个方法中使用常量,则可以在该方法中定义它。如果单个类对此感兴趣,请将其保留为该类的私有实现细节。这同样适用于名称空间,模块,项目,公司范围。我还将相同的模式用于助手功能等。(如果您开发一个公共框架,这可能不会100%适用。) 这样做可以提高可重用性,可测试性和可维护性,使您不仅花费更少的时间(至少在C ++中),而且花费在错误修复上的时间也更少,这使您有更多的时间实际开发新功能。同时,开发这些功能的速度会更快,因为您可以更轻松地重用更多代码。这在一定程度上胜过中央常量文件可能具有的任何优势。 如果您想了解更多,请特别看一下接口隔离原则和单一职责原则。 如果您同意,请支持Caleb的回答,因为此更新基本上是他所说的更一般的看法。

3
为实现未决但未计划抽象的方法引发NotImplementedError是常规的吗?
我喜欢为NotImplementedError我想实现的任何方法提出一个,但是我还没有去做。我可能已经有了部分实现,但是raise NotImplementedError()由于我还不喜欢它而在它前面加上了它。另一方面,我也喜欢遵守约定,因为这将使其他人更容易维护我的代码,并且约定可能存在是有充分理由的。 但是,NotImplementedError的Python文档指出: 此异常派生自RuntimeError。在用户定义的基类中,抽象方法要求派生类重写该方法时,应引发此异常。 这是比我描述的更为具体的正式用例。提出一个NotImplementedError简单的方法来简单地指出API的这一部分是否还在进行中,这是一种很好的传统样式吗?如果不是,是否有另一种标准化的方式表明这一点?

3
与纯文本标记语言(例如Microsoft Word)相对,使用开发过程遇到哪些障碍?[关闭]
我目前是政府承包商的实习生,并且(令人讨厌的不可避免)感觉到Word是软件开发过程中的实际标准。 它的二进制格式使我很难像以前在代码库上进行协作的方式在文档上进行协作。使用纯文本标记(使用LaTeX,Markdown,ReStructured Text 等语言))可以使diff友好的文档与开发人员的正常工作流程配合使用。对于不支持该语言的注释(例如Markdown),有许多现有的解决方案允许基于代码库的协作注释(例如GitHub,Bitbucket),可以轻松地将其应用于包含标记的其他纯文本文件。 我了解与技术不熟练的管理人员合作的必要性,需要对所有内容都使用某种图形界面,但是大多数这些格式都存在此类界面。例如,LaTeX有一种名为“ LyX”的“叉子”,可将图形前端放入纯文本形式的类似LaTeX的语法中。尽管该文件在编辑时主要是图形化的,但仍是差异友好的。(它甚至还具有Word样式的注释。)这些解决方案中的许多都可以代替Word使用,并且绝大多数是免费的或开源的。 但是,我们甚至将Word用于我们自己的内部文档,其他人看不到。我们在大部分职业中都使用文本进行工作-为什么文档如此特别?除了琐碎的“我们没有更好的东西,现在我们被困在这里”之外,还必须有支持这种决定的理由。在使用纯文本文档代替其他口语化(且功能上可能不够强大的文档)的方法来代替纯文本文档时,软件开发过程会面临哪些挑战? 由于原因会有所不同,因此应该分别针对这两个紧密相关的场景进行回答。 从一开始就使用纯文本文档 随着时间的推移迁移到纯文本文档

12
代码是否正在审查良好做法?
当我工作的公司雇用新的经理时,他们为我们提供了在每次会议上概述某人的代码的机会。我们每两周开会一次,因此每次开发人员要在投影机上展示他/她的代码时,其他人都将讨论它。 我认为这会很棒:每个开发人员在编写代码时都会更加小心,我们可以更好地分享我们的经验。但是不知何故,我们忘记了这一要约,而要约仍然是要约。 这有什么好处,有什么缺点吗?

15
程序员可以从建筑业中学到什么?[关闭]
在与同事讨论软件设计和开发原理时,我注意到类比的最常见来源之一是建筑行业。我们构建软件,并将设计和结构视为体系结构。 学习(或教导)的最佳方法之一是通过分析类比- 从构造中还能得出哪些其他类比? (是否已经在软件中普遍使用)。 请提供有关编程概念与构造概念的相似之处的描述或您的个人经验。 [ 取材于艺术和人文科学的编程概念学分]


8
测试驱动开发(通常是敏捷)的这种局限性在实际上是否相关?
在测试驱动开发(TDD)中,您从次优解决方案开始,然后通过添加测试用例和重构来迭代地产生更好的解决方案。该步骤应该很小,这意味着每个新解决方案都将以某种方式位于前一个解决方案的附近。 这类似于数学上的局部优化方法,例如梯度下降或局部搜索。这种方法的一个众所周知的局限性是它们不能保证找到全局最优值,甚至不能保证找到可接受的局部最优值。如果您的起点与所有可接受的解决方案之间有很大范围的不良解决方案,则无法到达此目标,该方法将失败。 更具体地说:我正在考虑一个场景,在该场景中,您已经实现了多个测试用例,然后发现下一个测试用例将需要一种完全不同的方法。您将不得不放弃以前的工作,然后重新开始。 这种想法实际上可以应用于所有以小步骤进行的敏捷方法,而不仅仅是TDD。TDD与局部优化之间的拟议类比是否存在严重缺陷?

9
TDD仅在理论上
一年多以前,我很幸运能够休息9个月。我决定在那段时间里磨练自己的C#技能。我开始从事许多项目,并强迫自己遵循TDD。 这是一个相当启发的过程。 刚开始时很难,但是随着时间的流逝,我学会了如何编写更多可测试的代码(事实证明,这往往是更多的SOLID代码),并且在此过程中,我还提高了OO设计技巧。 现在,我回到了工作岗位,并且注意到了一些奇怪的事情。 我宁愿不遵循TDD。 我发现TDD会使我慢下来,实际上使设计干净的应用程序更加困难。 相反,我采用了一种(完全)不同的方法: 挑选垂直的作品 开发功能正常的原型 重构直到一切都变得整洁 请欣赏一下我编写的精美的SOLID和可测试的代码。 您可能已经注意到,第1步不是“定义我的测试目标的公开表面”,而第2步不是“在所述公开表面上测试耶稣”。您可能还注意到,所有步骤都不涉及测试。我正在编写可测试的代码,但是我尚未对其进行测试。 现在,我想说明一下,我实际上并没有进行任何类型的测试。我正在编写的代码有效。它有效,因为我正在手动测试它。 我还想明确指出,我也没有提到所有自动化测试。这是我的过程与众不同的地方。这就是为什么我问这个问题。 TDD理论上。不在实践中。 我的过程有所发展,我在TDD和没有发现我认为非常有效且也相当安全的测试之间取得了平衡。内容如下: 在考虑到测试的情况下实现工作的垂直工作,但是不要编写任何测试。 如果在路上(例如,一个月后),该切片需要修改 编写单元测试,集成测试,行为测试等,以确保工作片段正确无误 修改代码 如果该切片不需要修改, 没做什么 通过简单地将编写测试的负担从编写代码之前转移到修改代码之前,我已经能够生产出更多的工作代码。而且,当我确实着手编写测试时,我编写的测试数量要少得多,但是覆盖的范围却差不多(投资回报率更高)。 我喜欢这个过程,但是我担心它可能无法很好地扩展。它的成功取决于开发人员在更改测试之前勤于编写测试。这似乎是一个很大的风险。但是,TDD具有相同的风险。 那么,我该死[BT] DD,还是这是一种实用的编码和测试的常见形式? 我想继续这样工作。从长远来看,我该怎么做才能使该过程正常运行? 注意: 我是项目的唯一开发人员,我负责所有工作:需求收集,设计,架构,测试,部署等。我怀疑这就是我的流程正常运行的原因。

4
如何制止镀金并满足于发布工作进展
我所属的开发团队最近适应了敏捷实践的工作。这个人突出地表明了一个事实,就是我无法停止自己的镀金代码(和文档),因此,当我可以更早地交付满足要求的解决方案时,我就超出了最初的估计。 我认为我的道德观念与强迫症接壤,因为我过于依赖自己的代码,在重构和完善到第n级之前,很少满足于发布。我很高兴自己意识到了这一点,但是我如何才能改变自己的态度/心态来满足自己的进步并按时发布呢?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.