静态分析有很多选项,这是一个热门话题,所以: 什么是静态分析? 什么时候应该使用它,什么时候不应该使用它? 什么是静态分析正确和不适当的使用/应用的潜在问题? 任何语言都没有一个好的静态分析工具,当你没有自动分析的选项时,你会做什么? -亚当
我希望能够使用Subversion进行同行代码审查,但是在没有安装服务器应用程序或支付在线服务的情况下,最简单的方法是什么? PS:这是Visual Studio中的.Net项目。
我正在一个项目,我发现我在许多地方检查以下内容: if(item.Rate == 0 || item.Rate == null) { } 更像一个好奇的东西,什么是检查这两种情况的最好方法? 我已经添加了一个辅助方法,它是: public static bool nz(object obj) { var parsedInt = 0; var parsed = int.TryParse(obj.ToString(), out parsedInt); return IsNull(obj) || (parsed && parsedInt == 0); } 有没有更好的办法?
有一个iterator对象,是否有比列表理解更快,更好或更正确的获取迭代器返回的对象的列表? user_list = [user for user in user_iterator]
我一直是我公司旗舰产品中唯一的开发者和事实上的“高级开发者”(一个.NET WinForms应用程序,但并不相关)。 就在最近,他们带来了一位具有新的计算机科学学位的“新手”开发人员。 没有源代码控制,unit testing,软件维护等方面的经验 我最近为他分配了一小部分工作,使自己得到了充分的帮助,只是在速度和质量方面都发现他的产出缺乏很大的帮助。 我尽量不要过于苛刻,所以我给他的唯一预先指导是描述我更新(但他没有)的任务的wiki文章,关于新技术(比如IPC)的几个代码示例,并且我分解了把这些任务分成几个FogBugz案例(他没有提供原始的估计,实际的时间或评论,直到我告诉他我会放什么)。 他很less提出问题,当他提出这个问题的时候,他似乎像是要求一样遵循我的build议,常常没有理解,甚至是错误的。 所以……我完全同情你不知道该怎么做的情况,不敢提问。 我知道这是我的责任,要做得更好,但没有人给我任何指导,所以我没有什么经验来看待更好的工作。 幸运的是,他正在休假一个星期,所以我有一些时间来思考如何改进这个过程。 以下是我想到的一些项目,但我愿意接受build议和批评: 问最后一次迭代的哪一部分是最困难的。 问什么部分花费比预期更多的时间。 做一些配对编程。 我已经提出了这个build议,他似乎对这个想法持开放态度,但是每次开始时,我都倾向于接pipe,因为他打字速度不够快。 我必须努力工作。 在检查工作之前先进行一次代码审查。(我们这次不是因为他的假期。)代码审查将突出显示以下项目。 要求所有公众成员评论。 (他的代码没有被评论。) 要求他删除所有未使用的代码。 (粗略的回顾显示他没有。) 要求他在完成每一个FogBugz案例时提交代码,并且/或者修改与编码时发现的不同的案例。 要求他将原始估计值input到FogBugz中,并切换“正在工作”的标记以使他保持任务。 虽然代码审查的内容是具体的和技术性的,但我更关心的是他能够成为一名自我启动者,并在需要时提出要求/得到指导。 我不认为FogBugz的要求(6和7)是严格的规定,但似乎他需要跟随这些要求才能使他走上正轨。 此外,我知道我需要提高自己的辅导/培训技能,尽可能提高自己的编码技能。 当“高级开发人员”没有参加正式的代码审查,或者没有接手通过一对编程会议时,有什么build议可以开始? 我的冲动是更新他已经检查的东西,但我知道我应该保存这个代码审查。 我希望他检查工作,所以我可以开始编码使用他所检查的部分。所以,即使我认为它不令人满意,我应该使用他检查的内容吗?
大多数情况下,我将使用一个exception检查代码中的条件,我想知道什么时候使用断言是合适的。 例如, Group group=null; try{ group = service().getGroup("abc"); }catch(Exception e){ //I dont log error because I know whenever error occur mean group not found } if(group !=null) { //do something } 你能指出一个断言是如何适应的吗? 我应该使用断言吗? 看起来我从来没有在生产代码中使用断言,只能在unit testing中看到断言。 我知道在大多数情况下,我可以只使用exception来进行上面的检查,但我想知道适当的方式来“专业”。
我大致有以下代码。 这可以做得更好或更有效率? 也许使用std::remove_if ? 你能移走地图中的物品吗? 我们可以避免使用临时地图吗? typedef std::map<Action, What> Actions; static Actions _actions; bool expired(const Actions::value_type &action) { return <something>; } void bar(const Actions::value_type &action) { // do some stuff } void foo() { // loop the actions finding expired items Actions actions; BOOST_FOREACH(Actions::value_type &action, _actions) { if (expired(action)) bar(action); else actions[action.first]=action.second; } } actions.swap(_actions); […]
这就是我在许多其他类继承的类上提出的方法。 这个想法是,它允许简单地比较相同类型的对象的属性。 现在,这是行得通的 – 但为了提高我的代码质量,我想我会抛出审查。 如何更好/更有效率等? /// <summary> /// Compare property values (as strings) /// </summary> /// <param name="obj"></param> /// <returns></returns> public bool PropertiesEqual(object comparisonObject) { Type sourceType = this.GetType(); Type destinationType = comparisonObject.GetType(); if (sourceType == destinationType) { PropertyInfo[] sourceProperties = sourceType.GetProperties(); foreach (PropertyInfo pi in sourceProperties) { if ((sourceType.GetProperty(pi.Name).GetValue(this, null) == null && […]