软件工程

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

4
当TDD测试显示需要进行测试的新功能时该怎么办?
当您编写测试并达到需要通过测试并意识到需要附加功能的时候,该怎么做?该新功能也需要进行测试,但是TDD周期表示“使测试失败,使其通过然后进行重构”。如果我要通过测试,那我就不应该继续进行另一个失败的测试来测试我需要实现的新功能。 例如,我正在编写一个具有函数WillCollideWith(LineSegment)的点类: public class Point { // Point data and constructor ... public bool CollidesWithLine(LineSegment lineSegment) { Vector PointEndOfMovement = new Vector(Position.X + Velocity.X, Position.Y + Velocity.Y); LineSegment pointPath = new LineSegment(Position, PointEndOfMovement); if (lineSegment.Intersects(pointPath)) return true; return false; } } 当我意识到我需要LineSegment.Intersects(LineSegment)函数时,我正在为CollidesWithLine编写测试。但是,我是否应该停止测试周期中的工作以创建此新功能?这似乎违反了“红色,绿色,重构”原则。 我是否应该只编写检测到lineSegments在CollidesWithLine函数内部相交并在工作后对其进行重构的代码?在这种情况下,这是可行的,因为我可以从LineSegment访问数据,但是如果这种数据是私有的,那该怎么办?
13 unit-testing  tdd 

7
大哦表示法没有提及常数值
我是一名程序员,刚刚开始阅读算法。我对Bog Oh,Big Omega和Big Theta等符号并不完全相信。原因是根据Big Oh的定义,它指出应该存在一个函数g(x),使其始终大于或等于f(x)。对于n> n0的所有值,f(x)<= cn。 为什么我们在定义中不提及常数值?例如,假设一个函数6n + 4,我们将其表示为O(n)。但是,定义对于所有常数值都适用并不合适。仅当c> = 10且n> = 1时,这才适用。对于小于6的c值,n0的值将增加。那么,为什么不将常量值作为定义的一部分呢?

6
记录规则和建议?
在我的组织中,我们整理了一些有关日志记录的规则/准则,我想知道您是否可以添加或评论。 我们使用Java,但您可能会对Loggin进行一般性评论-规则和建议 使用正确的日志记录级别 错误:出了点问题,需要立即修复 警告:此过程可以继续进行而不进行修复。应用程序应容忍此级别,但警告应始终得到调查。 INFO:重要过程完成的信息 调试。仅在开发期间使用 确保您知道要记录的内容。 避免日志记录影响应用程序的行为 日志记录的功能应该是在日志中写入消息。 日志消息应具有描述性,清晰,简短和简洁。 故障排除时,废话消息的使用很少。 将正确的属性放入log4j 输入正确的方法和类是自动编写的。 例: 日期文件-web log4j.rootLogger=ERROR, DATEDFILE log4j.logger.org.springframework=INFO log4j.logger.waffle=ERROR log4j.logger.se.prv=INFO log4j.logger.se.prv.common.mvc=INFO log4j.logger.se.prv.omklassning=DEBUG log4j.appender.DATEDFILE=biz.minaret.log4j.DatedFileAppender log4j.appender.DATEDFILE.layout=org.apache.log4j.PatternLayout log4j.appender.DATEDFILE.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%C{1}.%M] - %m%n log4j.appender.DATEDFILE.Prefix=omklassning. log4j.appender.DATEDFILE.Suffix=.log log4j.appender.DATEDFILE.Directory=//localhost/WebSphereLog/omklassning/ 日志值。 请记录应用程序中的值。 日志前缀。 声明日志记录是从应用程序的哪一部分写入的,最好带有项目约定前缀的内容,例如 PANDORA_DB 文字量。 注意不要有太多的日志文本。它会影响应用程序的性能。 登录格式: -有几种与log4j一起使用的变体和方法,但是当我们记录异常时,我们希望统一使用以下格式: logger.error("PANDORA_DB2: Fel vid hämtning av frist i TP210_RAPPORTFRIST", …
13 java  logging 

2
摊销分析?(最坏情况下的性能保证)
什么是摊销分析?以及它如何帮助我在程序中实现最坏情况的性能保证? 我正在阅读以下技术可以帮助程序员获得最坏情况的性能保证(即,用我自己的话说:保证程序的运行时间不会超过最差转换的运行时间): 随机算法(例如,在最坏的情况下,快速排序算法是二次方的,但是对输入进行随机排序可以保证其运行时间是线性的概率) 操作顺序(我们的分析必须同时考虑数据和客户端执行的操作顺序) 摊销分析(提供绩效保证的另一种方法是通过跟踪所有工序的总成本除以工序数来摊销成本。在这种情况下,我们可以允许一些昂贵的工序,同时保持平均成本换句话讲,通过将一部分费用分配给大量廉价操作中的每一项,我们分散了一些昂贵操作的成本) 作者提到将调整数组数据结构的大小用于Stack作为如何实现摊销分析的一个示例,但我仍然不明白什么是摊销分析,以及如何实际实现(摊分分析?铸造性能保证

5
在您的服务器上安装Mercurial并进行hg pull部署是个好主意吗?
过去一个月,我刚刚开始一份新工作,看起来他们没有代码的源代码控制。他们依靠其托管服务提供商为其提供的备份。 经过一番交谈后,我说服了老板我们绝对应该使用源代码控制,并且在我进行了简短的研讨会之后,整个团队都加入了。他们喜欢水星。 所以现在这就是我们的工作方式: º----------BitBucket º---------/ º--------/ 我自己和hg pullBitBucket的其他三个开发人员进行了更改,然后更改hg push为BitBucket。 现在进行部署时,需要有人将最新文件通过FTP传输到生产服务器。 我当时正在考虑在我们的服务器上安装Mercurial,并使用hg clone(随后使用hg pull)使版本保持最新状态。 º---push->-----BitBucket----<-pull-----º (production server) º---push->----/ º---push->---/ 这是一个好主意吗?我可能没有看到任何潜在的陷阱?这里有人做过类似的事情吗?您如何部署大型PHP框架应用程序(我们正在使用Moodle)?

1
我什么时候应该使用AtomPub?
我一直在进行有关RESTful Web服务设计的研究,我已经达到了我认为是关键的决策点,因此我想将其提供给社区以获取一些建议。 为了遵循RESTful架构的原则,我想提供一个可发现的API,因此我将尽可能全面地支持各种HTTP动词。我的困难在于选择这些资源的表示形式。您会发现,我很容易想出自己的API,该API涵盖了如何显示搜索结果以及如何提供与其他资源的链接,但这对我的应用程序来说是唯一的。 我已经阅读了有关Atom发布协议(RFC 5023)的信息,以及OData如何促进其使用,但它似乎为(当前)一个相当简单的API增加了额外的抽象层次。 所以我的问题是,开发人员何时应该选择AtomPub作为表示形式的选择-如果有的话?如果不是,当前推荐的方法是什么?

7
设计:回调到父类
在使用子对象对对象进行建模时,通常通过合成将子对象包括在内,作为父类的成员。但是有时候孩子需要告诉父母一些事情,他们需要调用父母的函数。使用C ++如何做到这一点?一些选项是: 使父类成为全局类,因此子对象将能够调用父对象的成员函数。 将父对象作为指针或引用注入到每个子对象中。然后,当子项需要告诉父对象某些内容时,它总是可以这样做,因为它具有可以使用的成员变量。 还有什么其他方法可以做到这一点?这种事情是否有通用的设计模式或名称? 请注意,我对C ++中的想法和解决方案感兴趣,因为在其他面向对象的语言中,细节将有所不同。例如,上面的第2点提到了“指针或引用”,并且两者都只能在C ++中使用。C ++具有其他语言没有的语言功能,因此解决该问题的方法的实现可能会合并这些语言功能,从而使该解决方案与某人使用另一种语言可能提出的解决方案有所不同。

8
有什么实用的技巧可以记住大端和小端之间的区别吗?
我不是每天都处理大端和小端问题,因此我很难记住哪个是什么。 最近,我接受了采访,询问两者之间的区别。因为我不记得我决定“猜测”(毕竟有50%的机会),但我失败了。 那么,有没有广为人知的实用技巧可以记住大字节序和小字节序之间的区别?
13 endianness 

9
数组还是Malloc?
我在应用程序中使用以下代码,并且工作正常。但是我想知道使用malloc还是将其保留为更好? function (int len) { char result [len] = some chars; send result over network }
13 c 

6
什么是最简单的人类可读配置文件格式?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 当前配置文件如下: mainwindow.title = 'test' mainwindow.position.x = 100 mainwindow.position.y = 200 mainwindow.button.label = 'apply' mainwindow.button.size.x = 100 mainwindow.button.size.y = 30 logger.datarate = 100 logger.enable = True logger.filename = './test.log' 使用python将其读取到嵌套字典中: { 'mainwindow':{ 'button':{ 'label': {'value':'apply'}, ... }, 'logger':{ datarate: {'value': 100}, enable: {'value': True}, filename: {'value': './test.log'} }, …

8
仅调用其他功能的功能。这是一个好习惯吗?
我目前正在处理一组报告,这些报告包含许多不同的部分(均需要不同的格式),并且我正在尝试找出构造代码的最佳方法。我们过去完成的类似报告最终都具有非常大的功能(超过200行),这些功能可以对报告进行所有数据处理和格式化,从而使工作流看起来像这样: DataTable reportTable = new DataTable(); void RunReport() { reportTable = DataClass.getReportData(); largeReportProcessingFunction(); outputReportToUser(); } 我希望能够将这些大功能分解为较小的块,但恐怕最终我将拥有数十个不可重用的功能,而类似的“在这里做所有事情”功能的唯一作用是调用所有这些较小的函数,如下所示: void largeReportProcessingFunction() { processSection1HeaderData(); calculateSection1HeaderAverages(); formatSection1HeaderDisplay(); processSection1SummaryTableData(); calculateSection1SummaryTableTotalRow(); formatSection1SummaryTableDisplay(); processSection1FooterData(); getSection1FooterSummaryTotals(); formatSection1FooterDisplay(); processSection2HeaderData(); calculateSection1HeaderAverages(); formatSection1HeaderDisplay(); calculateSection1HeaderAverages(); ... } 或者,如果我们更进一步: void largeReportProcessingFunction() { callAllSection1Functions(); callAllSection2Functions(); callAllSection3Functions(); ... } 这真的是更好的解决方案吗?从组织的角度来看,我认为是这样(即,一切都比可能的组织得要好得多),但是就代码的可读性而言,我不确定(可能只调用其他函数的功能链很大)。 有什么想法吗?

5
什么时候不使用ORM而更喜欢存储过程?
我正在使用PetaPoco微型ORM。使用ORM工具处理数据库确实非常容易且安全,但是我唯一讨厌的是额外的代码。我曾经将大多数代码放在数据库本身中,并使用了所有RDBMS功能(如存储过程,触发器等),这些功能旨在更好地处理。 我想知道何时不对存储过程/触发器使用ORM,反之亦然。


5
我应该负责多少代码?
通过同事和离开面试,我听说在我的小公司中,我“负责”的代码比我在另一份工作中要多3到10倍。我正在尝试寻找某种模糊指标,可以用来比较我的工作量与该领域的其他人。 所谓“代码责任”,并不是说“我是唯一知道代码库X区域的人”(尽管可悲的是,在启动环境中通常是这样),而是指的是“ code_base_size”这样的数字。 / number_of_developers”。 除了计数代码行之外,还有什么资源可以用来帮助我更准确地衡量工作量?
13 metrics 

2
为什么PHP变量需要以美元符号开头?
我知道所有PHP变量都必须以美元符号开头(例如$someValue = 1),但是为什么会这样呢?为什么要做出这种设计选择? 我问的原因是我的女朋友问为什么当我提到PHP变量需要以美元符号开头时,我意识到我不知道为什么要选择这种语法。 有任何想法吗?
13 php  syntax 

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.