继续观念:有没有可证明的现实世界语言?
我不了解你,但我厌倦了编写我无法保证的代码.
在询问了上述问题并得到了非凡的回应之后(谢谢大家!)我决定缩小我对Haskell的可证明,实用的方法的搜索范围.我选择哈斯克尔,因为它是真正有用的(也有许多 网页 框架为它写在纸上,这似乎是一个很好的基准)和我认为这是不够严格,在功能上,它可证明的,或者至少允许不变量的测试.
这就是我想要的(并且一直无法找到)
我想要一个可以查看Haskell函数的框架,添加,用psudocode编写:
add(a, b):
return a + b
Run Code Online (Sandbox Code Playgroud)
- 并检查某些常量是否保持每个执行状态.我更喜欢一些正式的证据,但是我会满足于像模特检查员这样的东西.
在此示例中,不变量将是给定值a和b,返回值始终是总和a + b.
这是一个简单的例子,但我不认为这样的框架不可能存在.对于可以测试的函数的复杂性肯定会有一个上限(函数的10个字符串输入肯定会花费很长时间!)但这会鼓励更仔细地设计函数,并且与使用其他正式函数没有什么不同方法.想象一下,使用Z或B,当您定义变量/集时,您可以确保为变量提供尽可能小的范围.如果您的INT永远不会超过100,请确保将其初始化为!像这样的技术和正确的问题分解应该 - 我认为 - 允许对像Haskell这样的纯函数语言进行令人满意的检查.
我还没有 - 使用正式方法或Haskell非常有经验.让我知道我的想法是否合理,或者你认为haskell不合适?如果您建议使用其他语言,请确保通过"has-a-web-framework"测试,并阅读原始问题 :-)
testing haskell formal-verification formal-methods functional-programming
我在大学里接受过有关正式系统的教学,但我很失望,他们似乎并没有在真正的单词中使用它们.
我喜欢能够知道某些代码(对象,函数,等等)可以工作的想法,而不是通过测试,而是通过证明.
我确信我们都熟悉物理工程和软件工程之间不存在的相似之处(钢铁行为可预测,软件可以做任何事情 - 谁知道!),我很想知道是否有任何语言可以在真实的单词中使用(要求Web框架太多要问?)
我听说过像scala这样的函数式语言的可测试性.
作为软件工程师我们有什么选择?
java testing formal-verification functional-programming scala
使用Greenplum而不是PostgreSQL在webapp(django)环境中使用和反对的论据是什么?
我的直觉反应是更喜欢PostgreSQL的开源方法和庞大的知识库.
我的配置(虽然我很想听听任何其他配置)是一个中型企业,有2个Web服务器和(目前)2个数据库服务器.
要比较的领域是二进制data crunching,replication我个人最喜欢的节点数量:communitiy support以及熟练的工程师支持.
使用Greenplum而不是PostgreSQL有什么优缺点?
所以我有一个带有日期戳和两个字段的表,我想确保它们在上个月是唯一的.
table.id
table.datestamp
table.field1
table.field2
Run Code Online (Sandbox Code Playgroud)
上个月应该没有相同的field1 + 2复合值的重复记录.
我脑子里的步骤是:
我已经走到了这一步,但我认为这不起作用:
result = session.query(table).group_by(\
table.field1,
table.field2,
func.month(table.timestamp))
Run Code Online (Sandbox Code Playgroud)
但我不确定如何在sqlalchemy中这样做.有人可以告诉我吗?
非常感谢!
所以我从install表中得到了一些结果,如下所示:
install = metadata.tables['install']
results = session.query(install) #<sqlalchemy.orm.query.Query object>
Run Code Online (Sandbox Code Playgroud)
我想将这些相同的结果插入install_archive表中.
我不完全确定如何做到这一点,因为我不想通过定义一个install-archive对象然后将结果解析为该对象来复制模式.我相信我没有使用ORM,因为我只是反映(这是正确的术语吗?)表格并查询它们.
我能看到的所有教程都使用ORM.
在psudocode中,一个缓慢的方法是:
for id in result.all():
install_archive.insert(install(id))
Run Code Online (Sandbox Code Playgroud)
提前致谢!
Cabal 不断有依赖性问题.这真的很累人.到目前为止,我已经尝试了很多工作,这是我尝试安装snap:
$ sudo cabal install snap-server Resolving dependencies... cabal: cannot configure ListLike-1.1.0. It requires mtl >=1.1.0 && 1.2 For the dependency on mtl >=1.1.0 && 1.2 there are these packages: mtl-1.1.0.0, mtl-1.1.0.1, mtl-1.1.0.2 and mtl-1.1.1.0. However none of them are available. mtl-1.1.0.0 was excluded because mtl-2.0.0.0 was selected instead mtl-1.1.0.0 was excluded because monads-fd-0.1.0.3 requires mtl ==2.* mtl-1.1.0.1 was excluded because mtl-2.0.0.0 was selected instead mtl-1.1.0.1 was excluded because monads-fd-0.1.0.3 requires mtl ==2.* mtl-1.1.0.2 was excluded because mtl-2.0.0.0 …
我的Django测试运行得非常慢,但这不是测试的错.
目前,整个过程需要14秒,但只有0.1秒正在运行测试.前几秒是创建表和索引,其余的是应用项目的很多fixtures.
处理这个问题的最佳方法是什么?我认为有一种方法可以指定fixtures在每个测试中加载哪个,但我需要大部分测试来进行大多数测试......
我认为可行的解决方案是,如果测试在每次运行后没有删除表,那么就不需要在每次运行测试时创建和填充数据库.大多数测试甚至都没有写入数据库.
优化fixtureDjango测试的加载部分的最佳方法是什么?谢谢!
(我正在使用nose,但除此之外只是简单的Django和sqlite)
编辑:我应该提到我正在使用内存中的sqlite数据库.我正在寻找的 - 特别是 - 是对测试的夹具加载部分的优化.
希望是一个简单的python/django nose测试问题,虽然我在nose文档中找不到答案.
在运行测试后,如何停止显示的覆盖率报告./manage.py test?
我有一个覆盖报告逼着我回滚动几十行让我的失败测试的追踪一个巨大的问题,它确实打断了我的工作流程!我喜欢使用nose,但如果我无法弄清楚如何摆脱这一点,我将不得不回到vanilla django测试.
提前感谢您的想法!
这是我必须回滚以获得回溯的内容:
./manage.py test
[...]
======================================================================
FAIL: testFreightAveragesContainer ([...].tests.test_average_container.AveragesContainerTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "[...]/tests/test_average_container.py", line 32, in testAveragesContainer
121
AssertionError: 12 != 121
Name Stmts Miss Cover Missing
-------------------------------------------------------------------------------------
abc.advertising 0 0 100%
abc.advertising.management 0 0 100%
abc.advertising.models 73 73 0% 1-91
abc.client 0 0 100%
abc.client.admin 200 200 0% 1-430
abc.client.forms 57 57 0% 1-99
abc.client.management 0 0 100%
abc.client.models 434 434 0% …Run Code Online (Sandbox Code Playgroud) 我已成功安装了hstore扩展,一切都可以正常工作syncdb.(我正在使用djorm-ext-hstore)
但是,nose会创建一个新的临时数据库来运行测试,并且没有安装hstore.
我需要CREATE EXTENSION HSTORE;在鼻子同步数据库之前运行测试数据库,但我找不到有关如何执行此操作的任何信息.
有任何想法吗?
我正在关注docker-compose教程,试图找出如何部署django应用程序:http://docs.docker.com/compose/django/
一切顺利(应用程序甚至可以工作!)但是django项目文件夹composeexample不是在我的本地项目目录中创建的.
我留下了一个工作"It Works!" 运行后的页面:
$ docker-compose run web django-admin.py startproject composeexample .
但我无法继续编辑composeexample/settings.py,正如教程所暗示的那样:我的机器上不存在该文件夹(它确实存在于容器中,但对我来说没有好处!)
教程错了吗?我不遵循它吗?
谢谢!
更新:
这是问题,我使用docker-machine通过远程docker实例运行整个过程.使用远程docker机器时,有关本地文件夹共享的规则是否不同?