软件工程

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

4
如何在关系数据库中表示枚举类型?
我正在开发一个关系数据库,该数据库跟踪我正在为公司工作的设备上发生的交易。设备上可能发生不同类型的事务,因此我们的一个主记录表中有一个“ trans_type”字段。我的小组决定将该字段的类型设置为整数,并将其视为枚举类型。我的直觉告诉我,将这个字段设置为字符串是一个更好的主意,以便我们的数据库数据更具可读性和可用性。我的同事们似乎担心这会造成更多的麻烦,而不是值得的。字符串比较的成本太高,而且错别字的可能性太大。 因此,您认为,当处理关系数据库中的字段本质上是枚举值时,将该字段设为整数或字符串是否是更好的设计决策?还是我忽略了其他选择? 注意:我们使用的数据库不支持显式枚举类型。我们正在开发的将与此数据库连接的软件是用C ++编写的。

4
“组合”的Getter / Setter VS个体方法的优点是什么?
这就是我所谓的“组合式” getter / setter方法(来自jQuery): var foo = $("<div>This is my HTML</div>"), myText; myText = foo.text(); // myHTML now equals "This is my HTML" (Getter) foo.text("This is a new value"); // The text now equals "This is a new value") 这与单独(理论)方法的逻辑相同: var foo = $("<div>This is my HTML</div>"), myText; myText = …

3
运送我的一流图书馆。我需要知道的任何陷阱吗?
我是一名Web开发人员,打算在自己的职业生涯中获得“出版的一流图书馆”成就,而且我还在发汗(我整夜都在紧张地工作)。我很乐意利用社区的经验,看看是否有人有任何建议或建议,以确保尽可能顺利进行。有什么我需要注意的细节或陷阱吗?关于构建过程有什么特别之处可以让我难忘吗? 我在这里: 库已经过单元测试,代码覆盖率约为97% API有充分的文档说明,并且已经创建了用于智能感知的xml文档 我确保公共/私有类访问器是正确和正确的。所有获取者/设定者也是如此 错误处理并不像我希望的那样优雅,但是我已经到了最后期限,并且已经接受了它的“现在的样子” 没有友好的日志记录。Debug.Writeline被广泛使用...我最近了解到这反映了我的经验不足:( 非常感谢您的建议! 该库将用于生成报告。标准帽子-连接到只读数据库,执行计算,格式化并将数据输出到响应流。 我被当作一种边缘资源来填补一位辞职的程序员,而这项任务是作为“割牙”项目而交给我的。该类库将发布给公司中的其他程序员,以供他们编写生产代码时使用。

4
没有真实的开发环境就能充满信心地进行开发
我最近受雇于一个涉及与多个第三方“企业”系统一起工作的项目。由于我想这是建立忠实的生产环境副本所需要的天文成本和精力,因此拥有真正的开发环境的前景似乎越来越渺茫。 这当然不是理想的。从好的方面来说,我认为必须有一些人安全地将软件测试和部署到像这样不可复制的环境中,我很可能会跟随他们的脚步。 那些有效处理此类情况的人是如何做到的?


2
使用起点,距离和角度查找新坐标
好吧,说我有一个点坐标。 var coordinate = { x: 10, y: 20 }; 现在我也有距离和角度。 var distance = 20; var angle = 72; 我要解决的问题是,如果我想从起始坐标沿角度方向移动20个点,如何找到新坐标? 我知道答案涉及正弦/余弦之类的东西,因为我以前知道如何做到这一点,但此后我就忘记了公式。有人可以帮忙吗?

3
如何阅读RFC和类似文档?[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 4年前关闭。 RFC: 征求意见书(RFC)是Internet工程任务组(IETF)发布的备忘录,描述了适用于Internet和Internet连接系统的工作方法,行为,研究或创新。 在结束这个介绍给REST视频,RFC2616和RFC3986被提及作为进一步阅读。观看视频后,我用谷歌搜索了这些文档,正如标题所示,我不确定如何使用它们。我会完整阅读它们并做笔记吗?还是在我不懂或有问题时更多地使用它们作为参考?

5
指导尴尬的领域特定对象的命名?
我正在为化学系统建模,但是在枚举中命名元素/项目时遇到了问题。 我不确定是否应该使用: 原子公式 化学名称 化学名称的缩写。 例如,硫酸是H2SO4,盐酸是HCl。 对于这两个,我可能会只使用原子公式,因为它们相当普遍。 但是,我还有其他类似Na2SiF6的六氟硅酸钠。 在该示例中,原子式(对我而言)不那么明显,但化学名称长得令人毛骨悚然: myEnum.SodiumHexaFluoroSilicate。我不确定如何才能安全地提出一个具有一致命名模式的缩写化学名称。 我正在尝试通过命名枚举元素来解决一些问题。 首先是可读性,较长的名称会带来问题。 第二个问题是为新的维护者挑选代码很容易,在这里较短的名字带来了问题。 下一个问题是企业主通常使用完整的化学名称,但并非总是如此。“鲜味”化学物质由其化学式表示。 最后要考虑的是确保其一致性。我不需要混合的命名约定,因为将无法记住要使用的命名约定。 从维护的角度来看,您希望查看上述哪个命名选项,为什么? 注意:该行下面的所有内容都是补充| 澄清材料。请不要陷入其中。主要问题涉及命名尴尬的对象。 原子选项 公共myEnum.ChemTypes { 硫酸 盐酸 Na2SiF6 } 化学名称选项 公共myEnum.ChemTypes { 硫酸 盐酸, 六氟硅酸钠 } 以下是有关此问题的评论中的一些其他详细信息: 代码的受众只是程序员,而不是化学家。 我正在使用C#,但是我认为在忽略实现语言时,这个问题会更有趣。 我从10-20种化合物开始,最多可以有100种化合物,因此我不必担心每种可能的化合物。幸运的是,这是一个固定域。 枚举用作查找的关键字,以方便进行常规/通用化学计算-这意味着所有化合物的方程式均相同,但您插入化合物的属性即可完成方程式。 例如,当从化合物的质量(以克为单位)计算摩尔数时,使用摩尔质量(以g / mol为单位)。FWIW,摩尔质量==摩尔重量。 常见计算的另一个示例是理想气体定律及其对特定气体常数的使用 示例函数可能类似于: 公共double GetMolesFromMass(double mass_grams,myEnum.ChemTypes chem) { double moleWeight = …

2
这些关于Java并发性的高级/不公平面试问题吗?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 这是我最近问过的受访者的一些问题,这些受访者说他们知道Java并发性: 解释“内存可见性”的危害-JVM可以对不受监视器保护且未声明的变量重新排序某些操作的方式volatile,以使一个线程可能看不到另一个线程所做的更改。通常,我通过显示存在此危害的代码来问这个问题(例如NoVisibility,Goetz等人的“ Java Concurrency in Practice”中的清单3.1中的示例),并询问出了什么问题。 说明不仅volatile影响声明的实际变量volatile,而且还影响线程在更改volatile变量之前对变量所做的任何更改。 为什么用volatile代替synchronized? 使用wait()和实现条件变量notifyAll()。说明为什么要使用notifyAll()。说明为什么要使用while循环测试条件变量。 我的问题是-这些是适当的还是太高级了,无法问一个知道Java并发的人? 而当我们讨论它时,您是否认为应该期望从事Java并发工作的人员对Java垃圾回收的了解高于平均水平?

4
在对数据库建模时,何时应使用弱实体?
这基本上是一个关于弱实体是什么的问题?我们什么时候应该使用它们?应该如何建模? 普通实体和弱实体之间的主要区别是什么?在进行域驱动设计时,弱实体是否对应于值对象? 为了使问题始终保持话题,这里是一个来自维基百科的示例,人们可以用来回答以下问题: 在此示例中OrderItem,我们将其建模为弱实体,但我不明白为什么不能将其建模为普通实体。 另一个问题是,如果我想跟踪订单历史记录(即订单状态的变化),那将是正常实体还是弱实体?

4
如何使用TDD获得正确的初始API?
这可能是一个很愚蠢的问题,因为我是第一次尝试TDD。我喜欢它带来的信心以及代码的总体上更好的结构,但是当我开始将其应用于比一类玩具示例更大的东西时,我遇到了困难。 假设您正在编写各种各样的库。您知道它必须要做的事情,您知道应该如何实现它的一般方法(从体系结构角度来说),但是您不断“发现”需要在编写代码时对公共API进行更改。也许您需要将此私有方法转换为策略模式(现在需要在测试中通过模拟的策略),也许您错失了职责,并拆分了一个现有的类。 当您在现有代码上进行改进时,TDD似乎非常合适,但是当您从头开始编写所有内容时,除非您进行了较大的设计,否则编写测试的API有点“模糊”。当您已经对该签名进行了30次测试的方法(对于该部分而言,其行为)更改时,该怎么办?一旦合并起来,有很多测试需要更改。
12 tdd 

6
OO设计,如何为音调和声建模?
我已经开始用C ++ 11编写一个程序来分析和弦,音阶和和声。我在设计阶段遇到的最大问题是,音符“ C”是音符,和弦类型(Cmaj,Cmin,C7等)和键类型(Cmajor,Cminor的键)。间隔也会出现相同的问题(小三,大三)。 我使用的是基类Token,它是程序中所有“符号”的基类。因此,例如: class Token { public: typedef shared_ptr<Token> pointer_type; Token() {} virtual ~Token() {} }; class Command : public Token { public: Command() {} pointer_type execute(); } class Note : public Token; class Triad : public Token; class MajorTriad : public Triad; // CMajorTriad, etc class Key …

1
最佳方法:重组现有的Team Foundation Server(TFS)解决方案
在我的部门中,我们正在为某些统一通信服务器开发几个较小的插件。对于版本控制和分布式开发,我们使用Team Foundation Server 2012。 但是:对于我们所有的应用程序和库,只有一个大型TFS解决方案: 主要解决方案 应用领域 应用程式1 应用程式2 应用程式3 外在 图书馆 库1 库2 工具类 “应用程序”路径包含所有主要应用程序。它们并不相互依赖,但是取决于库和外部项目。 “外部”路径包含一些在我们的应用程序和库中引用的外部DLL。 库路径包含常用的库(UI模板,Helper类等)。它们彼此不依赖,并且在“库”和“工具”项目中被引用。 工具路径包含一些帮助程序,例如设置帮助程序,更新Web服务等。 现在,有一些要点为什么我想更改这种结构: 我们不能使用服务器版本。 用这样的解决方案结构来管理带有冲刺,障碍等的TFS Scrum管理是不舒服的。 每个开发人员始终可以访问解决方案中的所有项目。 如果在Visual Studio中意外击中[F6],则完整的构建会持续太长时间。 您将在此解决方案中进行哪些更改?您如何将这些项目分解为较小的解决方案,应如何构建这些解决方案。 我的第一种方法是为每个应用程序,库和工具创建一个TFS项目。但是,如何确保例如App 2始终包含Lib 1的最新版本?我需要监视库1的更改并在库更改后立即手动更新App 2吗?还是可以以某种方式强制Visual Studio始终以某种方式使用外部项目的最新版本? 编辑:在TFS上,只有一个TFS团队项目集合,其中包含一个TFS团队项目。团队项目包含一个大型的Visual Studio解决方案,其中包含几个包含(请参见上面的结构)的文件夹,每个文件夹都包含多个VS项目。 我的问题是,现在您将如何重组: TFS团队项目 VS项目

5
唯一的逻辑是警卫的单元测试方法是否有用?
说我有一个这样的方法: public void OrderNewWidget(Widget widget) { if ((widget.PartNumber > 0) && (widget.PartAvailable)) { WigdetOrderingService.OrderNewWidgetAsync(widget.PartNumber); } } 我的代码中有几种这样的方法(异步Web服务调用的前半部分)。 我正在辩论将它们包含在单元测试中是否有用。是的,这里有逻辑,但这只是保护逻辑。(这意味着在允许进行Web服务调用之前,请确保已拥有所需的东西。) 我有一部分说“确保可以对它们进行单元测试,但这不值得花时间”(我在一个已经落后于进度的项目中)。 但是我的另一面说,如果您不对它们进行单元测试,并且有人更换了Guards,那么可能会有问题。 但是我的第一部分说,如果有人更换了警卫,那么您将为他们做更多的工作(因为现在他们必须更换警卫和警卫的单元测试)。 例如,如果我的服务承担检查Widget可用性的责任,那么我可能不再想要那个守护者。如果正在单元测试中,我现在必须更改两个位置。 我在两种方式上都有利弊。所以我想问一下别人做了什么。
12 c#  unit-testing 

5
让开发人员执行项目管理的软件经理
我是一家嵌入式系统公司的软件开发人员。我们有一个项目经理,他负责整个项目进度表(包括电气,质量,软件和制造),因此他的软件进度表非常简短。 我们还有一个软件经理,我的老板。他让我编写和维护软件进度表,设计文档(高低级设计),SRS,变更管理,验证计划和报告,发布管理,审阅,当然还有软件。 我们整个软件团队只有一名测试工程师(十名成员),并且在任何给定时间,都有几个项目正在进行。 我花了80%的时间制作这些文档。我的老板来自流程方面,并且认为我们需要更好的文档来改进软件: 他认为设计是最重要的,编码是“只是将设计写下来”,时间不要太长,并且“所有代码都应在硬件准备好之前编写”。 即使我们告诉他与分布式模型的协作更轻松,也不了解中央版本控制和分布式版本控制之间的区别。 不懂代码,想了解每个错误及其建议的解决方案。 认为验证应由开发人员完成,测试人员应进行验证。事实是,我们的验证仅检查实现是否正确(我们不编写单元测试,在计划中从未考虑过),而验证是黑盒测试,因此缺少单元测试。 我真的很困惑 我负责维护所有这些文件吗?本质上,这让我感到自己正在执行软件项目管理。我可以接受技术文档,但我相信开发人员不应该进行计划/计划。 我不太喜欢创建文档,我想解决问题并编写代码。以我的经验,创建设计文档只会在一定程度上有所帮助,而对于更好或更快速的代码来说却无济于事。 我觉得老板并不真的在乎制造更好的产品,而只是在管理层眼中成为一名好经理。 我能做什么?整整一年,我已经完成了3个月的实际编码,其余时间仅用于制作文档和等待来自客户的错误报告。

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.