软件工程

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

3
在代码审查过程之后如何提供反馈
我目前正在审查刚刚加入我的团队的一些初级开发人员的代码,我想知道应该如何提供此审查的结果: 我应该自己修复代码吗? 我是否应该向他们提供有关审核过程的反馈,并让他们根据我的指示进行修复?如果是这样,我该如何提供反馈,是否填写某些模板文档并将其发送给他们,或者有一些软件可以帮助我在代码文件中标记出有问题的地方,以便以后进行检查?(我正在使用Visual Studio)。 在我完成对代码的审查并完成修复之后,过去的一段时间已经过去,我过去审查过的代码的某些部分也发生了变化,如何进行重新审查?我应该重新检查所有代码吗?还是只检查已更改的零件?如果是这样,我如何跟踪已更改的部分,从而避免重复检查代码?

4
确定是否可以使用递归解决问题的考虑因素是什么?
有时在面试中,我可能会使用递归来解决问题(例如,添加1到无限精度整数),或者当问题本身适合使用递归时。有时,可能是由于大量使用递归来解决问题,因此,不用考虑太多,就使用递归来解决问题。 但是,在决定使用递归解决问题之前,应考虑哪些因素? 我有一些想法: 如果我们对每次都减半的数据使用递归,那么使用递归似乎没有问题,因为所有可以容纳16GB RAM甚至8TB硬盘的数据都可以通过深度仅为42层的递归进行处理。(因此不会出现堆栈溢出(我认为在某些环境中,堆栈的深度可以达到4000层,远超过42级,但是同时,这还取决于您拥有多少局部变量,因为每个调用堆栈占用的内存更多)如果有很多局部变量,则是确定堆栈溢出的是内存大小而不是级别)。 如果您使用纯递归来计算斐波那契数,那么您真的要担心时间复杂性,除非您缓存中间结果。 以及如何添加1到无限精度整数?也许这是有争议的,例如,您将使用长度为3000位数或4000位数的数字,以至于它会导致堆栈溢出吗?我没想到,但是答案可能不是,我们不应该使用递归,而应该使用普通循环,因为如果在某些应用程序中,该数字确实需要4000位数长,以检查某些数字,该怎么办?数字的属性,例如数字是否为质数。 最终的问题是:在决定使用递归解决问题之前,有哪些注意事项?

7
如何将TDD应用于读/写功能?
好像是鸡和鸡蛋的问题。 您可以使写入功能写入某些数据存储,但是在没有经过测试的读取功能的情况下,永远不会知道您是否正确保存了它。 您可以使读取功能从数据存储中读取,但是如何在没有经过测试的写入功能的情况下将东西放入该数据存储中以进行读取呢? 编辑: 我正在连接到SQL数据库并与之进行事务,以保存和加载要使用的对象。测试数据库提供的访问功能毫无意义,但是我包装了这些数据库功能以对对象进行序列化/反序列化。我想确保我正在正确地从数据库中写入和读取正确的内容。 它不像@snowman提到的添加/删除。我想知道我写的内容是正确的,但这需要经过良好测试的读取功能。当我阅读时,我想确保我的阅读正确地创建了一个与所写内容相等的对象。但这需要经过良好测试的写入功能。
10 tdd  io 

6
最佳实践布尔分配
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我在另一个开发人员接手的程序中遇到以下条件: if (obj.Performance <= LOW_PERFORMANCE) { obj.NeedsChange = true; } else { obj.NeedsChange = false; } 我相信这段代码是多余的和丑陋的,因此我根据比较将其更改为我认为是简单的布尔分配: obj.NeedsChange = obj.Performance <= LOW_PERFORMANCE; 看到此消息后,查看我的代码的人评论说,尽管我的更改在功能上是正确的,但可能会使其他人困惑。他认为使用三元运算符可以使此分配更加清晰,而我不喜欢添加更多的冗余代码: obj.NeedsChange = (obj.Performance <= LOW_PERFORMANCE) ? true : false; 他的理由是,如果这样做会使另一个开发人员不得不停下来并确切地想出自己所做的事情,那么以最简洁的方式做某事是不值得的。 真正的问题是,这三种为布尔值赋值的方法中哪一种obj.NeedsChange最清晰,最可维护?

4
如何将依赖注入与Factory模式结合使用
考虑一个负责解析任何给定类型文件的模块。我已经在这里进行了解释,我正在考虑使用策略模式来解决此问题。在继续此问题之前,请参阅链接的帖子。 考虑需要product.xml文件内容的类B。此类将需要实例化Parser接口的适当具体实现程序以解析XML文件。我可以将适当的具体实现者的实例委派给Factory,以使B类“拥有” Factory。但是,类B随后将“依赖”于工厂以实例化具体的实现者。这意味着将需要将类B中的构造函数或setter方法传递给Factory。 因此,需要解析文件的Factory和B类将紧密地结合在一起。我了解到目前为止,我所解释的内容可能完全错误。我想知道是否可以在要注入的依赖项是Factory的情况下使用依赖项注入,以及实现此目标的正确方法是什么,以便在单元测试中利用诸如模拟Factory的优势。


1
开源许可证兼容性检查器
有没有可用的工具来检查各种开源许可证组合是否相互兼容? 我正在计划构建使用Apache许可证进行分发的各种工具,因为Apache的许可证似乎在允许和可强制执行之间取得了很好的平衡。但是,我想将其他开源项目中的组件包括在我的代码库中,或者使适配器可用以允许最终用户将此类组件集成到我的代码库中。 例如,我想在程序包中包含丰富的HTML编辑器(例如CKEditor或TinyMCE),但这会违反任何一个项目的许可证吗?我非常确定,如果我使用GPL代码,这将迫使我也将我的项目也设为GPL,而我真的不想这样做。但是MPL,LGPL等呢? 我宁愿纯粹基于技术理由做出此类决策,但是如果您正在进行开源,那么忽略其他开源项目的愿望将是愚蠢的。 我尝试过寻找工具来确定许可证X是否与许可证Y兼容,如果可以,它们在哪个方向兼容(X可以包括Y而不会出现问题,但是如果Y包括X则可能会有问题,等等),以及如果您在替代许可条款中包含代码,则对许可条款的后果是什么。到目前为止,我设法找到的只是列表和图表,它们倾向于将其他许可证与GPL进行比较。如果有可用的工具来解决许可问题,我将为您指出正确的方向。



6
功能需求不足是否敏捷?
如今,每个人都希望变得敏捷。在与我合作的每个团队中,敏捷的形式都不同。有些事情很常见-例如日常站立或计划,但其他部分则有很大差异。 在我目前的团队中,有一个细节令我感到困扰。缺乏功能要求。不仅没有书面形式的期望,而且在任务中模糊地定义了需要完成的工作。 该项目的目标是使用新技术重写旧系统。旧系统也没有任何合理的文档。当然,最新的不存在。企业主对需求的描述是-让我们在新实现中以与旧实现相同的方式进行。似乎合理,但事实并非如此。旧系统是一种意大利面条式代码,从中提取业务需求非常昂贵。看来情况对计划产生了负面影响。当然,在新的实现中容易出错和出错(省略一些细节)。 因此,我在想-在重写旧系统的情况下,没有业务需求真的很敏捷吗?



4
在确定所有需求之前确定发布日期是否敏捷?
我刚刚开始阅读Craig Larman的《 Applying UML and Patterns》。我觉得这很有趣,因为它挑战了我在工作中遇到的许多问题。我读到,并不是一次就可以完全收集需求,并且需要很多次迭代才能完成需求收集。如果是这样,考虑到明天可能会有一些新的突破性要求(或伪装成要求的变更请求),我是否必须设定一个硬性规定的截止日期,这是我在工作中必须做的,非常敏捷。

4
这种调用函数的方式不好吗?
我有以下代码: public void moveCameraTo(Location location){ moveCameraTo(location.getLatitude(), location.getLongitude()); } public void moveCameraTo(double latitude, double longitude){ LatLng latLng = new LatLng(latitude, longitude); moveCameraTo(latLng); } public void moveCameraTo(LatLng latLng){ GoogleMap googleMap = getGoogleMap(); cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, INITIAL_MAP_ZOOM_LEVEL); googleMap.moveCamera(cameraUpdate); } 我认为通过这种方式,例如,我消除了了解LatLng另一门课中的内容的责任。 而且,您无需在调用函数之前准备数据。 你怎么看? 这种方法有名称吗?真的是不好的做法吗?

5
我们可以使用策略模式和依赖注入完全取代继承吗?
例如: var duckBehaviors = new Duckbehavior(); duckBehaviors.quackBehavior = new Quack(); duckBehaviors.flyBehavior = new FlyWithWings(); Duck mallardDuck = new Duck(DuckTypes.MallardDuck, duckBehaviors) 由于Duck类包含所有行为(抽象),因此似乎不需要创建新类MallardDuck(扩展了Duck)。 参考:Head First设计模式,第1章。

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.