软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

10
是单元测试开发还是测试?
我与测试经理讨论了单元测试和集成测试的作用。她要求开发人员报告他们已对单元和集成进行了什么测试以及如何进行测试。我的观点是,单元测试和集成测试是开发过程的一部分,而不是测试过程。除了语义之外,我的意思是,单元和集成测试不应包含在测试报告中,并且系统测试人员不应对此感到担忧。我的推理是基于两件事。 总是根据接口和合同计划和执行单元和集成测试。无论您是否使用正式合同,您都仍在测试应该执行的方法,例如合同。 在集成测试中,您将测试两个不同模块之间的接口。接口和合同确定测试何时通过。但是,您始终只能测试整个系统的有限部分。另一方面,系统测试是根据系统规范计划和执行的。规格确定测试何时通过。 在将单元测试和集成测试的广度和深度传达给(系统)测试器时,我看不到任何价值。假设我写了一份报告,列出了在特定业务层类上执行哪种单元测试。他/她应该从中学到什么? 从此判断应该测试和不应该测试的内容是一个错误的结论,因为即使所有单元测试和集成测试都通过了,系统仍可能无法按照规范要求的方式运行。 这看起来似乎是没有用的学术讨论,但是如果您像我一样在严格的正式环境中工作,那么对于确定我们的工作方式实际上很重要。无论如何,我完全错了吗?

3
实际上,什么是领域驱动开发?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 我从该地区的开发商那里听说了域驱动开发。他大声疾呼,就像改变需求的灵丹妙药。 我读了维基。还是不太清楚。实际上,“ 3D”是什么?现在UML类图表已过时真的令人惊讶吗?

3
在实践中在MySQL和PHP中使用Datetime vs Timestamp?
我不确定如何将数据类型指定为datetime或timestamp,我想我需要这两个数据,但是在不同的事件上。我的网站在全球范围内销售产品和服务,并且还具有一个供用户登录的帐户系统。请澄清以下内容: 客户从我的网站上购买产品的当前日期和时间:日期时间? 根据其位置和购买的日期/时间(根据我们的系统计算得出)的交货日期和时间:日期时间? 他们上次登录自己的帐户:时间戳记? PHP中存储购买日期(当前日期)然后存储在数据库中的代码是什么? 请详细说明如何使用它们,因为在互联网上阅读了大量解释后,我仍然不太了解。
24 php  mysql 

9
增加复杂性以删除重复的代码
我有几个类都从通用基类继承。基类包含一些类型为的对象的集合T。 每个子类都需要能够从对象集合中计算插值,但是由于子类使用不同的类型,因此每个类之间的计算差异很小。 到目前为止,我已经在每个类之间复制/粘贴了我的代码,并对每个代码进行了较小的修改。但是现在我试图删除重复的代码,并在我的基类中将其替换为一种通用插值方法。但是,事实证明这非常困难,而且我所想到的所有解决方案似乎都太复杂了。 我开始认为DRY原则在这种情况下不太适用,但这听起来像是亵渎神灵。尝试删除代码重复时有多少复杂性? 编辑: 我能想到的最好的解决方案是这样的: 基类: protected T GetInterpolated(int frame) { var index = SortedFrames.BinarySearch(frame); if (index >= 0) return Data[index]; index = ~index; if (index == 0) return Data[index]; if (index >= Data.Count) return Data[Data.Count - 1]; return GetInterpolatedItem(frame, Data[index - 1], Data[index]); } protected abstract T GetInterpolatedItem(int …

13
成为更好的错误修复程序
我喜欢成为一名程序员。在那里,我说了。但是,话虽如此,我最近才意识到我真的无法忍受错误修复。完全没有 实际上,在开发某些东西时,我的生产率非常高。即使编写单元测试和对开发进行自我测试,我通常还是非常有生产力的。我可以集中精力,并且可以完成任务。 但是,当质量检查时间到了并且我正在修复错误时,我的灵感得到了巨大的喘息。我必须采取非常极端的措施(例如,高BPM音乐,过量的咖啡因等)强迫自己完成所有工作。我的工作通常涉及到进入现有的大型项目并添加新功能或修复错误,因此我无法确切地告诉雇主我需要几个星期才能为他们的所有代码编写单元测试:)另外,我们经常使用的服务器技术对于单元测试和集成测试都是非常禁止的,因为它存在很多Java类加载器问题。我并不完全反对错误修复,有时它可能很有趣,但是一点也不有趣 当您必须进行细微更改并等待30秒到3分钟才能查看它们是否起作用时(由于系统的工作方式)。 修正错误时,如何提高工作效率和动力?这是大多数程序员处理的吗?

6
反对解析克苏鲁方式的论点是什么?
我的任务是为一种可能对公司非常重要的工具实现领域特定的语言。该语言很简单,但并非无关紧要,它已经允许嵌套循环,字符串连接等,并且实际上可以确定,随着项目的进行,还会添加其他构造。 我从经验中知道,除非语法很琐碎,否则手工编写词法分析器/解析器是一个耗时且容易出错的过程。因此,我有两个选择:解析器生成器y yacc或组合器库(如Parsec)。前者也很好,但是我出于各种原因选择了后者,并以功能语言实现了该解决方案。 结果在我看来非常壮观,代码非常简洁,优雅,可读/流利。我承认,如果您从未使用Java / c#以外的任何程序进行编程,它可能看起来有些怪异,但是对于未使用Java / c#编写的任何内容,这都是正确的。 但是在某个时候,我确实遭到了同事的攻击。快速浏览一下我的屏幕后,他宣布代码令人难以理解,并且我不应该重新发明解析方法,而应该像所有人一样使用堆栈和String.Split。他大声喧noise,我无法说服他,部分是因为我感到惊讶,没有明确的解释,部分是因为他的观点是不变的(没有双关语)。我什至提出要给他解释语言,但无济于事。 我很肯定讨论将再次出现在管理层面前,因此我正在准备一些扎实的论据。 这些是我想到避免基于String.Split的解决方案的前几个原因: 您需要大量的if来处理特殊情况,而事情很快就会失控 大量的硬编码数组索引使维护工作陷入困境 很难处理像函数调用那样的方法参数(例如add((add a,b),c) 如果出现语法错误,很难提供有意义的错误消息(极有可能发生) 我全都是为了简单,清楚和避免不必要的智能加密,但我也认为,精简代码库的每个部分以使汉堡包都可以理解它是一个错误。我听到的是相同的论点,即不使用接口,不采用关注点分离,在周围粘贴粘贴代码等。毕竟,在软件项目上需要最低的技术能力和学习意愿。(我不会使用这个论点,因为它可能听起来令人反感,发动战争不会帮助任何人) 您最喜欢反对解析克苏鲁方式的论点是什么?* *当然,如果您能说服我说他是对的,我也会很高兴

9
适用于C#开发人员的C ++
我非常了解C#(自学成才,可悲),并且需要为Windows应用程序进行一些C ++编程。对于能够学习C#的C ++开发人员,我已经找到了很多信息,但是当您已经了解C#时,就没有太多关于学习C ++的信息。有没有人遇到过一个很好的基础知识? MSDN可以进行比较,但是比较不深入。 我可以整理几个来源,但发现其中有些东西-我只是找不到。谢谢你的帮助。
24 c#  c++ 

9
学习机器语言编程方面的资源?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我是一名学生,从Java到C ++,再到C,都热衷于编程和热爱编程。我退回到了准系统,并认为可以进一步深入到Assembly。 但是,令我惊讶的是,很多人说它不如C快,而且没有用。他们建议学习如何编程内核或编写C编译器。我的梦想是学习以二进制方式(机器代码)编程,或者以裸机编程(以物理方式编程微控制器),或者编写BIOS或引导加载程序或类似性质的东西。 经过大量研究后,我听到的唯一可能是十六进制编辑器是我在这个时代和时代所能找到的最接近机器语言的东西。还有其他我不知道的事情吗?是否有任何资源可用于学习机器代码编程?最好在8位微控制器/微处理器上。 这个问题与我的相似,但是我首先对实践学习感兴趣,然后对理论有所了解。


3
了解桥梁设计模式
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 我完全不了解“桥梁”设计模式。我浏览了各种网站,但没有帮助。 有人可以帮助我理解这一点吗?

13
里面带有“ break”的“ while(true)”循环的术语是什么?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 假设我在C ++或C#中有一个循环,如下所示: while( true ) { doSomething(); if( condition() ) { break; } doSomethingElse(); } 这通常称为“无限循环”。但是从技术上讲,它不是无限的-一旦控制流过,它将停止break。 这种循环的术语是什么-内部具有“永远循环”循环控制语句和“ break”?

3
Softpedia发布了一些我的开源项目-如何做出反应?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 (仅供参考:我刚刚根据建议将这个问题从Stackoverflow中移了出来。) 我刚收到几封电子邮件,通知我softpedia.com已将我的某些“产品”添加到其“脚本,代码段和Web应用程序的数据库”中。在这种情况下,我的产品是一些较小的开源项目,这些项目由我托管并发布在github上。 现在我想知道如何对此做出反应。在实际下载之前,该网站通过三页广告间接赚取了我的免费工作的收入。他们似乎也“发明”了版本号,但我找不到它们是托管我项目的最新版本还是所有版本。—我知道这将来会导致什么问题,因为我无法控制所有地方的“最新”情况。 另一方面,我不介意进行其他宣传。我希望有尽可能多的人了解这些项目,使用它们,分叉它们并希望对其进行改进。 问题中的项目确实很小,但是对于我和/或其他阅读此问题的人来说,将来可能不是这样。 我敢肯定,周围的其他人肯定已经发生了这种情况。你怎么看?我应该尝试删除下载内容吗? 更新1 我已要求将其删除,并提到我不认为Softpedia可以为此类项目提供合适的环境。 他们的团队立即通过一封友好的电子邮件回复我,他们将立即删除链接: 如果您担心您的项目不会被更新,那么我必须告诉您,我已经在我的RSS阅读器中为它们添加了书签,因此所有版本更改都将在需要时转发给我。因此,我保证一旦看到存储库中的更新,我就会使您的脚本保持最新。 我不得不说,我非常感谢这种反应,因此我给他们发送了另一封电子邮件,详细描述了我担心的问题以及困扰我的事情。我还说过,我知道我的许可证显然允许他们在任何情况下托管项目,但是只要他们可以说服我一些细节,也许我会很高兴他们托管项目。对项目的表示方式进行一些小的更改。—让我们看看它的去向。 更新2 在与他们的联系人讨论并要求对版本显示(他们有这样做的可能性)和作者身份进行一些更改之后,他们将项目放回到了自己的网站上。 总而言之,这是一次积极而绝对有趣的经历。

11
如果我的雇主要求我写不安全的代码,我应该接受吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我的雇主要求我实现一项功能,该功能要求将密码以明文形式存储在数据库中(或使用存储在二进制文件中的晦涩的加密/解密功能,这会更好,但也不安全)。 我回答说,我愿意实施这样的功能,前提是客户在使用该功能时已意识到其安全隐患。 在与同事讨论此问题时,有人告诉我,作为软件工程师,我们对产品中引入的安全问题负有法律责任(从法律角度而言)。我查看了我的合同,但没有发现与类似案件有关的任何内容。 从法律的角度来看,我应该拒绝实施这种功能吗?如果客户由于此功能而遭受损害,即使他也意识到安全问题,我的雇主是否可以将我告上法庭? 编辑:我知道这个问题只能由律师可靠地回答。许可问题也是如此:这里的人们有时会在咨询律师后给出他们的理解和经验,但不能保证它也适用于其他司法管辖区。但是,此处明确同意许可为主题,请参阅我在这里可以问什么样的问题?。我相信其他程序员可能也会遇到同样的问题,而其他程序员以前可能也遇到过这种情况,因此可能已经咨询了律师。
24 security  legal 

5
学习每种编程语言
我多次听说,每个程序员都应该学习每种语言中的一种。现在,这不一定是正确的,但我认为这是一个好主意。 我学到了程序语言(Perl的),但什么是其他类型的? 它们之间有什么区别,每个都有哪些示例?


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.