软件工程

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

3
Python-断言与if和return
我正在编写一个对文本文件执行某些操作的脚本(尽管这样做与我的问题无关)。因此,在对文件执行某些操作之前,我想检查文件是否存在。我可以做到,没问题,但是问题更多是美学问题。 这是我的代码,以两种不同的方式实现同​​一件事。 def modify_file(filename): assert os.path.isfile(filename), 'file does NOT exist.' Traceback (most recent call last): File "clean_files.py", line 15, in <module> print(clean_file('tes3t.txt')) File "clean_files.py", line 8, in clean_file assert os.path.isfile(filename), 'file does NOT exist.' AssertionError: file does NOT exist. 要么: def modify_file(filename): if not os.path.isfile(filename): return 'file does NOT exist.' …

4
有比一系列“ AssertEquals”更好的编写单元测试的方法吗?
这是使用qunit进行单元测试的基本示例: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> <link rel="stylesheet" href="qunit/qunit-1.13.0.css"> <script src = "qunit/qunit-1.13.0.js"></script> <script src = "../js/fuzzQuery.js"></script> <script> test("Fuzz Query Basics", function() { equal(fuzzQuery("name:(John Smith)"), "name:(John~ Smith~)"); equal(fuzzQuery("name:Jon~0.1"), "name:Jon~0.1"); equal(fuzzQuery("Jon"), "Jon~"); //etc } ); </script> </head> <body> <div …

3
如何在C和C ++程序中标记类型?
在我的这个答案中,我_t在类型的末尾使用了它,但这种情况最多是有争议的。这是我在当前项目中使用的做法。 typedef struct { int x; int y; } point_t; 旨在与来自stddef.hlike size_t或C的C类型一致ptrdiff_t。但是,根据我的问题中的某些评论,_t后缀似乎是为POSIX保留的。我应该用什么代替_t?还是应该继续使用_t? 这个问题是针对C和C ++的。如果这些语言有不同的约定,请随时回答。
12 c++  c  naming 

1
RESTful API应该有多离散?
我以前从未构建过RESTful API,并且想知道它应该有多离散? 例如,假设我有一个客户,该客户的姓名,地址,电话号码,电子邮件地址,语言等。 是否有一种方法可以更新每个单独的字段(更新地址,更新电子邮件地址等),还是应该为整个客户提供一个单独的更新,并且每个字段都是可选的?
12 api  rest 

3
是否有软件工程原理将生产系统上的重用和回归测试成本联系起来?
我曾为一家负责退休金和投资银行的大型金融交易系统工作。经过15年的功能更改,手动回归测试成本已攀升至每个版本20万美元。(1000万本金,每天交易1000万美元)。该系统还与公司周围的其他19个系统对接,可移动大量数据。该系统是用Java实现的。 但是,我们观察到的是,我们做的“重用”越多,回归测试的成本就越高。(原因是您需要“测试您触摸过的代码”-并且重用/共享的代码在触摸时会影响多个地方。因此尽管“干-不要重复自己”-即不要复制和粘贴代码-我们注意到复制和粘贴代码的经济动机。这是为了降低回归测试的成本,因为我们不想修改可以共享的代码,因为这会带来很大的回归测试影响。 我的问题是,是否存在描述重复使用和回归测试成本之间关系的软件工程原理? 我问这个问题的原因是,将系统分解成要测试的较小部分可以说具有成本优势。 假设: “回归测试”指的是“验收测试”,即另一个小组花时间代表企业针对系统编写新的测试和重用旧的测试,包括环境和数据设置。 我知道对大型回归测试成本的下意识反应是“更多自动化测试”。这是一个好原则。在这种环境下,存在两个挑战。 (a)自动化测试在系统边界上的用处不大,除非该系统也具有很高的自动化测试覆盖率。(势力范围挑战)。 (b)从文化上讲,当您的系统已经很大且很复杂时,很难在程序员的时间上获得动力,或者在高度自动化的测试覆盖率上进行资本投资。 (c)维护自动化测试的成本隐藏在项目中,因此很容易在项目级别将其丢弃。 (d)这只是在银行工作的文化现实。 (e)我正在以不同的方式(分解)解决此问题。


2
有人可以解释Haskell记忆化背后的概念吗?
(请注意,我将问题放在这里是因为它是关于它的概念机制,而不是编码问题) 我当时正在开发一个小型程序,该程序在其等式中使用了斐波那契数列,但是我注意到,如果超过一定数,它会变得非常缓慢,在谷歌上徘徊了一段时间,我偶然发现了Haskell中一种称为的技术Memoization,他们展示了这样的代码: -- Traditional implementation of fibonacci, hangs after about 30 slow_fib :: Int -> Integer slow_fib 0 = 0 slow_fib 1 = 1 slow_fib n = slow_fib (n-2) + slow_fib (n-1) -- Memorized variant is near instant even after 10000 memoized_fib :: Int -> Integer memoized_fib = (map fib …

2
鲁棒性和容错能力有什么区别?
系统/程序/分布式算法/ ...通常以谓词鲁棒或容错来描述。 有什么区别? 细节: 当我用Google搜索+健壮的+“容错”功能时,我只有两次点击,都无济于事。 当我用谷歌搜索术语时,我发现很多论文的标题中都有两个术语。不幸的是,它们并没有精确地定义术语:(但是由于它们同时使用了这两个术语,因此似乎没有一个暗示另一个。

8
如何应对“自动化容易”的心态?
标题说明了一切。我们公司的一些员工认为,自动化测试“容易”,编写COM和UI测试套件“需要一天”。有什么可以应对的呢? 注意:我不是在问如何促进自动化。那不是问题。一直以来,自动化的测试和流程都得到了推广和要求。问题是有些人不了解自动化不是“容易”或“快速”。

2
多次调用相同方法时的圈复杂度
多亏了Code Review的一个问题,我对以下代码的确切复杂度有一点分歧(这本质上是一个学习的机会)。 public static void main(String[] args) { try { thro(); thro(); thro(); thro(); thro(); thro(); thro(); } catch (NullPointerException e) { } } private static Random random = new Random(); public static void thro() throws NullPointerException { if (random.nextBoolean()) throw new NullPointerException(); System.out.println("No crash this time"); } 在Eclipse中使用Eclipse指标插件编写此代码时,它告诉我main方法的McCabe Cyclomatic …

8
快速原型如何适应敏捷方法?
我在一家大公司工作,这规定了敏捷过程的使用。例如,对于我们的项目,我们使用专门针对管理敏捷开发的基于云的服务。 我所服务的特定工程团队没有传统开发的软件(相反,我们从更鸟瞰的角度帮助推动项目),但是这种情况正在发生变化。我们有大量即将到来/计划中的软件项目,这些项目大多以数据为中心-例如,我们将进行数据监控,收集,汇总和一些报告。其他任务包括使用专用硬件和各种类型的客户端/服务器(多层)体系结构进行自动化。我将协助雇用多个人,并制定我们前进的许多计划。 我的问题是进行快速原型设计(一次性代码)是否适合敏捷哲学。例如,我喜欢Python及其广泛的软件包。我看到使用基于Python的工作流非常快地实现我们的许多想法的可能性。但是,我认为会有很多人认为Python不是“企业质量”的,并且许多工作都需要用Java或C ++重写。 但是,创建Python原型将使我们在快速实现真实结果方面付出巨大的努力。 您是否能够在企业环境中将快速原型制作(希望在Python中)整合到可靠的敏捷工作流程中?

5
是否有任何正式的/数学的软件测试理论?
谷歌搜索“软件测试理论”似乎只是给出了软词义的理论。我没有找到任何可以归类为数学,信息理论或其他科学领域意义上的理论的东西。 我正在寻找的东西可以形式化什么是测试,使用的概念,什么是测试用例,测试某物的可行性,测试某物的实用性,应该测试某物的程度,形式的定义/解释代码覆盖率等 更新:另外,从直觉上讲,我不确定形式验证与我所要求的内容之间是否存在联系,但是显然存在某种联系。

2
“做对了,违背了客户的意愿”-如何称呼它?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 我们知道与客户协商规范更正的最佳情况,使规范能够满足客户的要求,而不是客户的要求或想法。正在谈判,解释。 有时,我们无法说服客户。我们被迫按照设计生产破碎的产品。这被魔术师称为“恶魔学”,恶魔召唤恶魔并真正实现他们的愿望,导致魔术师消亡,这是另一种方法,一旦客户意识到自己的错误,他们就会非常不满意,当然还要设法锁定责怪开发商。 现在,我面对的是一个截然不同的方法:客户创建了简单的规范,这些规范不能解释一些关键的警告,并且完全不愿意修复它们,承认明显的错误并接受建议的更正。按照这些规格制造的产品将严重损坏,并可能导致人员伤亡。不过,现在完全放弃合同为时已晚。合同对此有惩罚性条款,我们真的不能接受。 老板的决定?我们会正确地完成工作,并根据规格向客户说谎。有问题的算法隐藏在表面之下足够深的位置,产品可以很好地完成工作,在出现警告的情况下不会失败,并且除非有人挖得太深,否则他们将永远不会发现我们没有按要求进行破解。 这种执行规范的策略有一些通用名称吗?

2
将令人反感的内容上传到GitHub是否可以接受?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我为我的网站开发了一个令人反感的内容检查器,并希望将其发布在GitHub上。但是,源代码包含许多令人反感,种族主义和其他令人讨厌的内容。 来源已被完全记录下来,但是我希望您对是否可以在GitHub上发布这样的作品还是是否让字符串的排列留给读者的想象力表示意见?
12 github  ethics 

4
处理模型和视图时切换与多态
我想不出更好的解决方案。我有一个显示元素列表的视图控制器。这些元素是可以作为B,C,D等的实例并从A继承的模型。因此,在该视图控制器中,每个项目都应转到应用程序的不同屏幕,并在用户选择其中的一个时传递一些数据。 。我想到的两个选择是(请忽略语法,它不是特定的语言) 1)开关(我知道那很烂) //inside the view controller void onClickItem(int index) { A a = items.get(index); switch(a.type) { case b: B b = (B)a; go to screen X; x.v1 = b.v1; // fill X with b data x.v2 = b.v2; case c: go to screen Y; etc... } } 2)多态 //inside …

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.