软件工程

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

8
学习makefile有多重要?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我主要是在业余爱好中从事C ++工作(我还在上学,因此没有一份真正的工作)。IDE为我生成了makefile,所以我想知道是否值得学习如何自己制作它们。我的意思是“值得学习”,我应该在继续学习c ++之前放弃所有东西并学习如何编写它们吗?学习它们真的很有必要吗?如果是这样,我应该了解它们(常规语法和理解它们的工作原理等)还是真正学习如何编写它们?
12 java  learning  c++  syntax  make 

4
面向对象的编程:getter / setter或逻辑名
我目前正在考虑要编写的类的接口。此类包含字符的样式,例如,字符是否为粗体,斜体,带下划线等。我已经辩论了两天,是否应该将getter / setter或逻辑名用于将值更改为这些样式。尽管我倾向于使用逻辑名称,但这确实意味着编写的代码效率不高,逻辑也不如逻辑。让我举一个例子。 我有一类CharacterStyles具有成员变量bold,italic,underline(和其他一些人,但我会留下来,以保持它的简单)。允许程序其他部分访问这些变量的最简单方法是编写getter / setter方法,以便您可以执行styles.setBold(true)和styles.setItalic(false)。 但是我不喜欢这样。不仅是因为很多人说吸气剂/装料剂破坏了封装(真的那么糟糕吗?),而且主要是因为它对我而言似乎不合逻辑。我希望通过一种方法styles.format("bold", true)或类似方法来设置角色的样式,但不能通过所有这些方法来设置样式。 不过有一个问题。由于您无法通过C ++中的字符串内容访问对象成员变量,因此我要么必须为所有样式编写一个大的if语句/开关容器,要么必须将样式存储在关联数组中(地图)。 我不知道什么是最好的方法。我想我应该写吸气剂/设定器,下一刻我倾向于另一种方式。我的问题是:你会怎么做?为什么要这么做?

3
什么是优秀的建筑师/经理/首席开发人员?
我是一家小型软件公司的首席开发人员。在过去的两年中,我的团队已经从一个开发人员(我)发展到大约9个人的团队。我们中的大多数人都是非常有能力的高级工程师(每人20多年的软件开发经验),因此通常很少需要手工操作。我们使用Scrum来管理我们的工作,通常我们会以最少的书面要求迅速完成很多工作。 随着团队的成长,我已经很难维持整个项目的技术监督,同时还要自己编写大量新代码,因此现在是时候调整我的角色了。当我不再将大部分时间花在开发上时,如何使自己对团队最有用? 我的目标是通过增加更多的开发人员来使我的团队进一步发展(即提高Scrum速度),因此我不想简单地成为将我的意志强加于团队的“架构警察”。换句话说,我想成为帮助工作更好/更顺畅的人,而不是成为通过增加不必要的官僚机构来减慢工作速度的人。但是,我们的主要风险之一是,如果我们增加人员,但又没有足够的结构使所有人保持同一页面,事情就会失控。 实现目标的最佳方法是什么?

3
是否有任何有关“一般”调试的理论或书籍?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 我阅读和学习了许多计算机科学和工程学,很少或从未见过有关调试的书或有关如何调试的理论(尽管我肯定开发了一些自己的调试理论)。 是否有任何调试理论和/或书籍?为什么/为什么不呢?我可以阅读如何使用gdb进行调试,以及通过阅读如何使用gdb获得的有关开发的一些最有用的信息。
12 debugging 

6
调试:了解有关某些修复程序为何起作用的详细信息?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 调试时,有时会发现我做了一些更改,但我不是100%知道为什么这些更改可以纠正程序中的某些错误。是否必须了解有关为什么会出现某些错误以及为什么某些更改会消除这些错误的每个细节?还是在开发人员中有时不真正知道有关修复程序为何起作用的细节而使程序正常工作,这是常见的吗?
12 skills  debugging  bug 

1
关于Floyd-Warshall,Dijkstra和Bellman-Ford算法之间的区别,我是否正确?
我一直在研究这三个,并在下面说明了他们的推论。有人可以告诉我我是否足够正确地理解它们?谢谢。 Dijkstra的算法仅在您只有一个来源并且想知道从一个节点到另一个节点的最小路径时使用,但是在这种情况下会失败 当所有节点中的任何一个都可以作为源时,将使用Floyd-Warshall算法,因此您希望从任何源节点到任何目标节点的距离最短。仅在出现负循环时失败 (这是最重要的一个。我的意思是,这是我最不确定的一个:) 3,贝尔曼·福特(Bellman-Ford)和迪杰斯特拉(Dijkstra)一样,只有一个来源。它可以处理负数权重,其工作方式与Floyd-Warshall相同,只是有一个来源,对吗? 如果需要看一下,相应的算法是(由维基百科提供): 贝尔曼福特: procedure BellmanFord(list vertices, list edges, vertex source) // This implementation takes in a graph, represented as lists of vertices // and edges, and modifies the vertices so that their distance and // predecessor attributes store the shortest paths. // Step 1: initialize graph …


3
如果不是一个经验丰富的程序员,那么启动一个开源项目有什么弊端?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我对要生产的产品有很多想法。问题是我不到一年的专业工作经验,而且我担心将来会基于我现在生产的产品而受到负面评价。我不知道我的代码是否有用。 我不熟悉任何编码模式。我所知道的是制造出行之有效的产品。我想在github上为我的未来项目提供一个公开的个人资料,我将尽力确保它得到很好的评论,被优化和干净。 这些是我担心会公开曝光的事情: 我的代码可能没有高度优化。 某些库或函数的错误使用会同时完成工作。 不知道或不遵循任何编码模式。 许多错误/不考虑边缘情况 根本缺乏对某些概念(例如线程安全性,多线程编程中的并发问题)的理解和应用。 我应该继续前进还是继续坚持在本地和私下建造东西,直到获得更多经验。从长远来看,我不想在这里犯下的错误困扰着我的职业前景。

7
文档降级-如何处理?
重要提示:我们有没有问题,有任何的源代码文件。这属于常规代码审核,并且是最新的。我们的问题是开发人员文档(如果愿意,也可以是“外部”),从程序员到程序员的类似博客的小技巧,这些技巧往往一经编写,经常被抛在后面。 我们使用类似Wiki的系统来生成程序员文档 - 程序员为程序员编写的文章,详细描述了特定代码的工作方式。这些维基页面通常包括: API部分设计决策背后的动机(例如;我们做这件丑陋的事是因为这个特定的第三方库希望以这种方式完成工作,因为另一个库...是因为...) 解释我们如何处理特定的常见任务(例如,显示琐碎的弹出窗口,该弹出窗口需要引用适当的应用程序样式,在注册表组件中注册自己,并实现一些接口以便被其他组件自动“扫描”) 良好做法(实际上是主观的,我们确实将这些内容记下来了) 环境配置,所需的工具及其设置 通常,主要与编写代码有关的内容由于其大小和博客文章/类文章的性质而与常规代码文档不符。 问题 就几个月前引入这个系统而言,似乎是个好主意,如今,我觉得它引起的问题比解决的问题多。例如: 人们确实写文章...但是一旦代码更改,Wiki更新就很少跟进 很多草稿文章,是某人匆忙写的,像这样离开 即使文章请求通常来自项目负责人,也几乎从未对其正确性/组成进行过验证-有时会导致质量不佳 通常降解。代码已更改,Wiki保持不变。下次有人寻找信息时,他通常会发现一堆过时,质量低下的东西-并且想知道正在发生什么,他发现的东西是准确的还是(甚至更糟)其中的哪些部分。而本该提供帮助的结果却相反。 目前看来,人们已经意识到了这个问题,包括项目负责人,但是显然没有人愿意为此做任何事情(或者要做更多有趣的事情)。 我最初的想法是将其全部遗忘(在我连续几次被过时的“小费”咬伤之后),但是我想那可能太极端了。一些信息值得注意,有时会读得很好,但是问题仍然存在:如何处理其“最新信息”?它是否以某种方式链接到源代码(因此,当检入文件的更新版本时,文章作者会收到通知,他可能需要修改代码/文章)?有指定人员在日常基础上“监视”它吗?定期清理吗?


1
为iOS应用开发组织代码
我一直在为iOS平台开发应用程序,并且一直在进行中,我注意到我在整理文件(.h,.m,.mm)方面做得很糟糕。在为iOS项目组织文件时,是否有任何行业标准或最佳实践? 我的文件包括自定义类(在视图控制器旁边),自定义的视图控制器,第三方内容,仅适用于iOS 5.0+的代码以及适用于早期版本的代码。我正在寻找一种解决方案,以一种使其他人(或我自己在未来几年)可以查看并理解应用程序基本结构的方式来组织事物,而不会迷失在其中找到的多个文件中。

2
持久性无关对象能够实现延迟加载吗?
持久性无知是单责任原则的应用,这实际上意味着域对象(DO)不应该包含与持久性相关的代码,而应该只包含域逻辑。 a)我认为这意味着联系较低层(即持久层)的代码位于业务逻辑层的其他类(OC)中的域模型之外? B)如果我的假设下一个)是正确的,那么DO,说Customer,从来没有包含的方法如GetCustomers或GetCustomerByID? c)如果我在a)和b)下的假设是正确的,并且假设Customer域对象对其属性的某些属性使用了延迟加载,则在某个时候Customer,内部逻辑必须联系OC,而OC则会检索延迟的数据。但是,如果Customer需要联系OC来接收延迟的数据,那么我们真的不能说域对象不包含与持久性相关的逻辑吗? 谢谢 回复jkohlhepp 1)我假设OrderProvider并且CustomerProvider类包含在业务逻辑层中? 2)我从您的答复中得知,b)下的假设是正确的? 3) ...我将检查是否填充了一些私人订单字段或该字段是否为空。如果为空... 但是据我所知,只要域代码需要检查是否order填充了私有字段,如果没有,请联系OrderProvider,我们已经违反了PI原则?

1
最佳异常处理做法或建议?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 我认为程序的两个主要问题是代码结构/组织和错误处理。我正在阅读Code Complete 2,但是我需要阅读一些有关潜在问题的书籍。 例如,在一个网站上,如果仅当用户通过javascript篡改数据时才有可能发生某些事情,您是否为此写信?另外,什么时候不捕获错误?当您编写一个期望一个字符串和一个int作为输入的类,而它们不是一个字符串和int时,您是否进行检查,还是让它冒泡到传递了错误参数的调用方法? 我知道这是一个广泛的主题,在这里不能一口气回答,所以我要寻找的是一本通常被教为教授适当的异常处理实践的书或资源。

3
IValidaableObject与单一责任
我喜欢MVC的可扩展性,它允许视图模型实现IValidatableObject,并添加自定义验证。 我尝试使我的控制器保持精简,使此代码成为唯一的验证逻辑: if (!ModelState.IsValid) return View(loginViewModel); 例如,登录视图模型实现IValidatableObject,通过构造函数注入获取ILoginValidator对象: public interface ILoginValidator { bool UserExists(string email); bool IsLoginValid(string userName, string password); } 似乎在视图模型中注入实例的Ninject并不是真正的惯例,甚至可能是反模式? 这是一个好方法吗?有更好的吗?

2
所有单元测试都在一个可执行文件中,还是将它们拆分?
在为一个软件(例如一个库)编写测试时,您是希望将所有单元测试编译为一个,还是将它们分为几个可执行文件? 我问的原因是因为我当前正在使用CUnit来测试正在使用的库。这些测试被分为独立的套件,这些套件被编译成一个可执行文件,并带有打印输出以表示失败。现在,该库的构建系统是CMake(尽管它的名称不多,但与CUnit无关),它带有自己的测试框架CTest。CTest允许我注册用作测试的可执行文件列表。 我正在考虑是否使用CTest进行自动化测试。但是,这将需要我将到目前为止编写的测试分成单独的编译目标。否则,我不能真正利用CTests的某些高级功能,例如有选择地运行测试。 我意识到这更多是关于使用哪种工具以及它们的处理方式和约定的问题,但是除此之外,还有其他原因更倾向于使用单个测试可执行文件而不是单独的测试可执行文件吗?或相反亦然?

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.